CS/C++

C++ 공부 섹션6 : 홍정모의 따배씨쁠쁠

샤아이인 2022. 1. 16.

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 하고 생각하고 써갈 예정입니다. 모든 내용을 이곳에 올릴수는 없으며, 그중 기억남은 몇가지 내용 위주만 올리겠다.

1) 섹션6

 초중반부 까지의 포인터와 배열은 어렵지 않았는대 뒤에 for_each문 나오는 부분부터 조금 이해가 안갔다. 생소해서 사용법이 익숙하지 않은 것 같다. 내일은 진도를 빼지말고 섹션6의 후반부를 조금더 복습해야 겠다.

◆ enum을 배열에서 활용하는 방식이 독특하여 캡쳐해 두었다.

출처 - 홍정모의 따배씨쁠쁠 강의

enum 마지막 element로 NUM_STUDENTS가 있는대 이를 전체 학생수로 활용할 수 있었다.

main에서 배열을 이를 활용하여 선언하는 것 을 볼수 있었다.

 

 뭐 당연한거기는 한대 array(배열)의 경우 compile할때 그 배열의 길이가 정해져 있어야한다.

출처 - 홍정모의 따배씨쁠쁠 강의

이로인해 프로그램이 실행중인 run time때 배열의 길이를 받을 수 없으며 이러한 기능은 이후 동정할당을 이용하여 사용한다.

 

 이거 C언어를 공부할때 배운적이 었던 내용이라 받아들이기 수월하였다.

출처 - 홍정모의 따배씨쁠쁠 강의

포인터 name과 name2가 같은 문자열을 가리키고 있는 상황이다.

이런경우 동일한 문자열을 가리키는 포인터를 하나로 정하여 같은 주소지를 사용한다.

정확히 메모리공간에서 어디에 저장되는지 까진 기억이 나또한 안난다...

 

 cout의 경우 주소값을 전달하면 주소를 출력하는 것 이 아니라, 해당 주소의 문자열을 출력한다.

이때 해당 주소지부터 null값이 나올때까지 출력하기에 잘못된 방식으로 사용될 수도 있다.

출처 - 홍정모의 따배씨쁠쁠 강의

 C언어 에서는 malloc과 free를 사용했는대 C++ 에서는 new와 delete를 사용하였다.

출처 - 홍정모의 따배씨쁠쁠 강의

length변수는 사용자에 의해서 run-time에 결정되는 변수이다. 이런 경우 동적할당을 이용하여 배열을 정한다.

이렇게 사용한 후에는 꼭 메모리를 반환해주어야 하는대 delete를 사용한다.

 

예를 들어 int형 하나를 할당받았다면 delete 로 반환이 가능하고,

int형 배열을 할당받았다면 delete [] 으로 반환이 가능하다.

 

 const에 대해서도 배웠다. const로 메모리 상에 고정시키면 아래 ptr이 역참조 하여 그 값을 바꿀수는 없다.

하지만 포인터변수 ptr에 담겨있는 주소 자체는 바꿀수가 있다.

출처 - 홍정모의 따배씨쁠쁠 강의

 

 참조형은 진짜 처음보는 내용 이였다. 참조형이란 기존에 존제하고있던 변수의 별명을 만들어 주는 것 이다.

출처 - 홍정모의 따배씨쁠쁠 강의

참조형을 선언할때 꼭 초기화를 해주어야 한다. 무엇의 이름에 대한 별명을 만들지 그 이름은 알려줘야 하지 않겠는가?

 

 몇가지 참조형이 편한이유를 배웠는대. 우선 함수의 parameter로 선언하기 좋다.

이렇게 parameter로 참조형을 두면 변수가 메모리에 복사되서 사용하는 것 이 아니라, 직접 원본을 control한다는 장점이 있다.

또한 복사를 안하기에 효율성이 좋다.

 

또한 중첩된 구조체 상에서도 변수를 쉽게 사용하도록 별명을 만들어 줄 수 있다.

출처 - 홍정모의 따배씨쁠쁠 강의

 

 for_each문은 기존에 for반복문을 사용해 배열의 원소를 하나씩 다 출력하려면 총원소의 갯수를 알았어야 하는 점을 보완해 준다.

출처 - 홍정모의 따배씨쁠쁠 강의

진짜 말 그대로 원소 하나씩 전부다 출력해주는 장점이 있다. 또한 for_each문 안에서 참조형으로 변경시 값을 변경해 줄수 있었다.

위의 왼쪽 사진을 보면 처음에 fibonacci배열을 하나 선언하고 출력하는 것을 볼수있다.

하지만 오른쪽을 보면 중간에 for_each문 에서 참조형을 사용하고 있으며 number = 10이라 해주면서 배열의 값이 전부 10으로 변경된 것을 볼수 있다.

 

 Array는 정적인 배열대신 사용하며 효율적이다. 정적이기에 array 선언시 길이를 알아야 한다.

출처 - 홍정모의 따배씨쁠쁠 강의

 

 Vector는 동적배열 대신 사용하며 효율적이다. vector는 동적할당 되기에 자유롭게 크기의 변경이 가능하며, 다 사용한 후에는 자동으로 delete하여 메모리를 반납까지 해준다는 장점이 있다. 또한 다양한 멤버함수를 사용할수 있기에 더욱 효율적이다.

출처 - 홍정모의 따배씨쁠쁠 강의

arr.size()같이 함수를 사용할 수 있다.

 

2) 나의 현황

● 오늘 강좌가 22강까지라 길어서 거의 하루종일 들은것 같다. 한 10강 까지는 기존에 알던 포인터와 배열 내용이라 쉬웠는대 중후반 부터 새로운 개념들이 나와 명확히 흡수를 다못한것 같다. 내일은 진도가 아니라 https://www.learncpp.com/cpp-tutorial/references-and-const/ 를 읽고 명품 C++로 필요한 부분도 충분히 복습하고 다음으로 진도를 나가야 겠다.

 

아참 내가 블로그에 글쓰는건 하루동안 공부한거 간단하고 빠르게 뇌에 재흡수 시키는 용도로 쓰는것이다.

다른 누군가에게 설명하거나 정보를 전달하기 위한 용도는 아니다 보니 생략한 부분도 많다. 아마 강의를 나처럼 본후 빠른 복습용도 정도로만 사용 가능할 것 이다.

 

이글의 모든 사진과 내용의 출처는 홍정모 교수님께 있습니다.

홍정모 교수님 블로그:

 

홍정모 연구소 : 네이버 블로그

안녕하세요! 홍정모 블로그에 오신 것을 환영합니다. 주로 프로그래밍 관련 메모 용도로 사용합니다. 강의 수강하시는 분들은 홍정모 연구소 카페로 오세요.

blog.naver.com

 

댓글