typedef
이 키워드를 사용해서 기존에 있던 타입이나 새로 정의한 타입의 이름을 바꿔서 사용할 수 있습니다.
위의 이미지들처럼 타입의 이름을 새로 정의해서 사용할 수 있다는 것을 알아두면 됩니다.
다양한 형
코딩을 하면서 다루는 타입은 다양합니다.
대표적으로 아래와 같이 나눌 수 있습니다.
지금부터 설명할 내용은 C와 굉장히 유사하므로 읽고 넘어가려고 했으나, 복습하는 차원에서 간단하게 설명하고 넘어가겠습니다.
구조체형
구조체형은 사용자 정의형입니다.
다른 타입들을 묶어서 표현할 수 있는 특징이 있습니다.
구조체에 여러 타입들을 묶는 것을 "구조체형 선언"이라고 합니다.
멤버
구조체 안에 선언된 변수입니다.
도트 연산자
멤버들을 읽어오거나 값을 대입하기 위해서는 도트 연산자(.)를 사용합니다.
위의 이미지처럼 "구조체형 변수.멤버"와 같은 방법으로 값을 대입하고 출력되는 것을 볼 수 있습니다.
아래와 같이 구조체 타입 변수끼리는 대입도 가능합니다.
이때, 대입되는 값들은 멤버의 값이 복사되어 대응되는 멤버의 값으로 대입됩니다.
각 구조체 변수는 독립적이므로 이후 값을 바꿔도 복사한 변수의 멤버값에는 영향을 미치지 않습니다.
구조체 초기화
구조체 변수는 선언할 때 위와 같이 초기화할 수 있습니다.
구조체를 인수로 사용
구조체는 구조체 변수를 함수의 인수로 전달할 수 있습니다. 이때, 전달되는 값은 복사되어 전달되기 때문에, 멤버의 양이 많고, 호출되는 빈도가 높다면, 포인터로 전달해서 주소값에서 값을 참조하는 것이 복사를 하는 과정이 없기 때문에 속도가 빠릅니다.
함수를 선언할 때는 구조체형을 인수로 받기 때문에 구조체 선언보다 아래 있어야 오류가 나지 않습니다.
구조체 포인터를 인수로 사용
구조체의 멤버를 복사해서 전달하는 함수의 특성상 구조체 포인터를 인수로 받으면 복사되는 시간이 줄어 코드의 실행시간과 메모리를 절약할 수 있습니다.
인수를 전달할 때는 구조체 변수의 주소값을 전달하고 함수에서 포인터 변수로 받습니다.
※위에서의 멤버 접근법과 다른점은 도트 연산자 대신 화살표 연산자(->)를 사용한다는 것입니다.
구조체 레퍼런스를 인수로 사용
실인수를 직접 복사하지 않고 직접 전달하는 또 다른 방법으로는 레퍼런스가 있습니다.
레퍼런스를 인수로 받기 위해 &를 사용해 인수를 선언해 주고, 실인수는 변수이름 그대로 전달합니다. 이 방법 또한 포인터와 같이 직접 전달하기 때문에 속도가 빠르고, 상대적으로 메모리를 적게 소모합니다.
또 화살표 연산자 대신 도트 연산자를 사용해 값에 접근한다는 차이가 있습니다.
공용체
구조체와 같은 사용자 정의형이며, struct 대신 union을 사용합니다.
공용체도 구조체처럼 멤버를 여러개 선언할 수 있지만, 저장되는 값은 하나이며, 모든 멤버의 값은 같습니다.
따라서, 하나의 멤버를 바꾸면 나머지 멤버의 값도 모두 바뀝니다.
공용체의 저장방식 덕분에 메모리를 절약할 수 있습니다.
공용체
공용체 형(union) 구조체 형 선언과 같지만 struct대신에 union을 사용합니다. 공용체 멤버의 주소 struct의 멤버가 각각 메모리를 차지하는 것과 다르게 공용체는 모든 멤버가 합쳐져 하나의 메모릴
code-myself.tistory.com
'C++' 카테고리의 다른 글
[16] 접근 제한 (0) | 2021.05.02 |
---|---|
[15] 클래스 (0) | 2021.05.02 |
[13] 파일 분할 (0) | 2021.05.01 |
[12] 동적 메모리 확보 (0) | 2021.05.01 |
[11] 스코프와 기억수명 (0) | 2021.04.30 |