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)객체 내의 데이터를 보호한다.