본문으로 바로가기

const

category C++ 2018. 9. 20. 14:29

const


1. 상수화의 의미를 가지는 키워드이다.

*상수란 변수의 반대되는 의미로서, 변하지 않는 수를 말한다.


2. 캡슐화를 위해 사용한다. 따라서 const라는 키워드는 많이 쓰면 쓸수록 좋다.


3. 종류

1. const field

1) 필드를 상수화한다.

*상수화란 선언시 딱 한 번만 초기화 할 수 있고, 그 이후엔 초기화를 불가능하게 하는 것.

2) const field를 선언시 쓰레기 값이 잡히는데, 그 이후로 초기화가 불가능하다.

따라서 반드시 콜론 초기화를 해야한다.

*통상 클래스내의 필드 즉, 멤버변수는 선언만 하고 초기화는 생성자에서 담당하는 것이 원칙.




콜론 초기화?

 

콜론 초기화는 생성자가 동작하기 전에 값을 넣을 수 있도록 제공하는 기능이다.

 

객체 생성시, 생성자를 호출하면 클래스 내의 멤버들의 메모리를 확보하며 객체를 등록한다.

 

그런데 const field는 메모리를 확보 시 쓰레기값을 저장하게 되는데, 이후에는 값을 변경 할 수 가없다.

 

따라서 객체가 생성되며 const field의 메모리를 확보하기 전에 콜론 초기화 기능을 이용하여 const field를 초기화 해줘야한다.




class A{

const int a;

 

public:

A(int value) : a(value), b(value) {

}

 

};



2. const method ( = const member function)


1) 메소드 내에서 필드(멤버변수)값의 보호를 위해 사용된다. (읽기만 하겠다...)

*함수내의 지역변수x ex) 반복문을 위한 I

=> const멤버함수의 주 목적 : 읽기전용으로 사용하겠다.


2) 성자에는 사용하지 않는다.

*생성자도 함수이고 const는 쓰면 쓸수록 좋다고 했는데 const method로 쓰지않는 이유는?

=> 생성자의 기능이 객체의 필드 초기화인데 const는 그것을 못하게 하는 것이다. (역설적인..)


3. const object

1)객체 내의 데이터를 보호한다.

 

 

 

 

'C++' 카테고리의 다른 글

연산자 함수  (1) 2018.10.01
friend 키워드  (0) 2018.10.01
상수란?  (0) 2018.09.20
정적 바인딩과 동적 바인딩에 따른 객체 메모리(틀렸음)  (1) 2018.09.12
접근 지정자  (0) 2018.09.12