[열혈C++] "const"에 대하여

Yoons·2023년 8월 4일
0
post-thumbnail

❗️Notice❗️

저의 velog에 작성된 글은 모두 저의 주관적인 생각 및 이해를 바탕으로 작성된 글이므로 
정확하지 않은 내용을 있을 수 있음을 알립니다.

[교재] 윤성우 열혈 C++ 프로그래밍

Intro

const, 처음 접한다면 이걸 왜 쓰는지 의문이 드는 keyword다.. 오늘은 const 키워드를 왜 사용하고 어떻게 사용하는 것인지에 대해 간단히 작성해보려고 한다


1. const의 개념

const는 constant의 약어로 '상수'라는 의미를 갖는다. 상수란 𝛑 = 3.141592...라고 말하는 것처럼 "변하지 않는 값"을 의미한다.

먼저, Q1 질문에 답해보자

Q1. 다음 코드는 정상적으로 실행이 되는가?

int num = 5;
num = 3;

정답은 '그렇다'이다.

그렇다면 또 Q2 질문에 답해보자

Q. 다음 코드는 정상적으로 실행이 되는가?

const int num = 5;
num = 3;

정답은 '그렇지 않다'이다. 그 이유는 위에서 언급한 const 때문이다.

이야기했듯 const는 "변하지 않는 값"을 의미한다. Q1에서의 예시는 num 변수가 일반적인 int 변수로 선언되어 초기화와 값 할당이 자유롭지만, Q2에서처럼 변수가 const 변수로 선언된 경우 초기화 이후 값을 변경할 수 없다.(컴파일 에러가 난다)

const의 개념에 대해 알았으니 const를 사용하는 방법에 대해 알아보자!


2. const의 사용

const도 어쨌든 변수이기 때문에 "그냥 일반 변수처럼 선언하고 초기화하면 되는거 아니야?"라고 질문할 수 있다. 하지만 일반 변수와 다르게 const를 사용할 때는 조금 유의해야할 사항이 있다.

const 변수는 선언과 동시에 초기화 해야한다!

그 이유는 조금 생각해보면 금방 알아차릴 수 있을텐데, const 변수는 선언 이후에 값을 변경할 수 없기 때문이다.

const int a;
a = 10;

바로 위의 상황 처럼말이다..! const 변수 a가 선언되면 이제 더이상 a에는 값을 할당할 수 없는데 'a = 10'을 하게 되면 컴파일 에러가 발생한다. 그럼 위의 경우에 a에는 어떤 값이 들어가게 될까..? 바로 garbage value (쓰레기 값)..

그러므로 반드시 아래와 같이 선언과 동시에 초기화 해야한다!

const int a = 10;

3. const int* vs int* const

필자도 이걸 처음봤을 때, 이게 뭔가..했다

const는 사용하는 위치에 따라 의미가 조금씩 달라진다. 의미가 달라진다는 의미는 const(상수화)되는 주체가 달라진다는 의미이다.

Q3. 1, 2번 중 컴파일 에러가 발생하는 부분은?

int a = 5;
int b = 3;
const int* num = &a;

*num = 6; // 1번
num = &b; // 2번

정답은 1번이다. 이유는 뒤에 설명하기로 하고 다음 예제를 살펴보자

Q4. 1, 2번 중 컴파일 에러가 발생하는 부분은?

int a = 5;
int b = 3;
int* const num = &a;

*num = 6; // 1번
num = &b; // 2번

이번 정답은 2번이다. 두 예제를 비교해보며 왜 그런지 살펴보자

Q3에서..
const int* num = &a;

Q4에서..
int* const num = &a;

위의 코드를 한글로 해석해보자! 여기서 상수화되는 주체가 누구인지에 집중하자

Q3에서..
"a의 주소를 가르키는 int* num"을 상수화

Q4에서..
"a의 주소를 담고있는 num"을 상수화한 int* 형 변수

즉, Q3에서는 *num을 상수화한 것이고, Q4에서는 num을 상수화하고 int* 자료형으로 만든 것이다!

따라서 Q3에서는 *num을 상수화 하였으므로 *num에 새로운 값을 할당하지는 못하지만, num에는 새로운 값을 할당할 수 있다.(num은 상수화되지 않았기 때문)

하지만 Q4에서는 num을 상수화 하였으므로 num에 새로운 값을 할당하지는 못하지만, *num에는 새로운 값을 할당할 수 있는 것이다!


Outro

오늘 const의 개념과 사용, 더불어 다소 헷갈릴 수 있는 const의 위치에 따른 의미를 해석해보았다. 글을 읽으며 궁금증이 해소되었기를 바란다.

profile
모든 글은 저의 눈물을 머금으며 작성한 글이니..재밌게 봐주세요 :) 깃헙 맞팔@

0개의 댓글