포스팅 계기
최근에 내가 가고자 하였던 여러 회사에 이직을 실패한 후 많은 생각이 들었다. 나의 부족한 점이 무엇일까? 나의 포트폴리오일까? 아니면 나의 잦은 이직일까? 여러 생각이 들었다. 그래도 포기하지 말고 내가 가고자 하는 회사에 가기 위해 더 노력하자!라는 굳은 의지를 다짐하였다. 즉 바뀌지 않는 나의 태도에서 Const를 떠올려 Const 예약어에 관한 포스팅을 하게 되었다.
포스팅 계기 const(상수)란?
우리가 흔히 상수라고 하면 변하지 않는 값을 뜻한다. 변수랑 상수의 차이는 무엇일까? 변수는 한 번 선언하면 값을 계속 바꿀 수 있지만, 상수는 처음 선언할 때만 값을 할당할 수 있으며 그다음부터는 값을 바꿀 수 없다. 쉽게 코드로 설명하면 아래를 참고하면 될 것 같다.
int n = 4; // 변수 n 선언
n = 3; // 변수 n은 바뀔 수 있는 값
n = 2;
const int m = 3; // 상수 m 선언
m = 2; // m은 선언시 3으로 지정되었기에 추후 값 변경 불가능
const 예시
Const는 함수에도 사용할 수 있고 매개/지역/멤버 변수에도 사용할 수 있다. 하지만 그 Const가 어디에 위치하느냐에 따라 의미가 전혀 달라진다. 우리는 아래 예시를 통해 Const 위치에 따른 의미를 파악하고자 한다.
아래는 const를 Type앞에 사용하는 경우이다. Type앞에 선언되면 그 값을 못 바꾼다고 이해하면 된다.
int n = 3; // 변수 n 선언
int m = 4; // 변수 m 선언
const int* p = &n; // const를 int 앞에 선언
n = 4; // n의 값은 변경 가능
*p = 4; // p의 값은 변경 불가능
p = &m; // p의 주소값은 변경 가능
만약 Const를 변수 앞에 사용하게 된다면, 값은 변경이 가능하나 주소값 변경이 불가능하다고 이해하면 된다.
int n = 3; // 변수 n 선언
int m = 4; // 변수 m 선언
int const *p = &n; // *p 앞에 const 사용
n = 4; // n 값은 변경 가능
*p = 4; // p 값 변경 가능
p = &m; // p의 주소값은 변경 불가능
만약 둘 다 선언하게 되면 주소값과 값 모두 불가능하다고 이해하면 된다.
int n = 3; // 변수 n 선언
int m = 4; // 변수 m 선언
const int const *p = &n; // *p 앞에 const 사용
n = 4; // n 값은 변경 가능
*p = 4; // p 값 변경 불가능
p = &m; // p의 주소값은 변경 불가능
함수에서 사용되는 const는 조금 이해관계가 변수와는 다르다. 아래 예시를 통해 확인해 보자.
class TestA {
public:
TestA() {};
TestA(TestA& copy) {};
TestA& operator=(const TestA & rhs){};
const int* GetArrayList(); // 반환되는 int* 값을 변경할 수 없다는 것을 의미
int* GetArrayList()const; // GetArrayList 해당 클래스의 멤버 변수를 변경하지 않는 것을 의미
~TestA() {};
private:
};
위에서 이해한 내용을 바탕으로 const를 언제 써야 할지에 관해서는 스스로 고민해 보는 것을 추천한다. 이와 같은 고민의 습관이 나중에 더 좋은 프로그램을 개발하는 데 있어 큰 도움이 된다고 믿어 의심치 않는다.
'C++ 개발이야기 > C++ 지식' 카테고리의 다른 글
포인터(Pointer)? - C++ (1) | 2024.12.11 |
---|