: c++를 안전하게 동작하기 위한 키워드이다.
: const 키워드를 무시하는 키워드
-> mutable키워드가 추가된 변수는 const가 붙은 함수에서도 마음대로 변경이 가능하다.
=> 가급적 사용하지 말자.
: implicit 변환 (암시변환)을 방지하기 위해서이다.
-> 컴파일러가 알아서 생성시킨다.
하지만 객체 생성 측면에서는 올바르지 못하다.
-> 암시적으로 생성하는 것을 방지할 수 있따.
: oop의 컨셉을 무너뜨리므로 가급적 사용을 하지말자.
-> 보통 이런식으로 set-, get- 함수를 사용하지만,
set의 경우 복사가 발생할 수 있으므로, 레퍼런스 타입으로 반환시키자.
아래와 같이 사용하는 것이 훨씬 효율적이다.
-> const를 붙인 이유는 레퍼런스 타입반환값이 변경되는 것을 방지하기 위해서이다.
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
class Cat
{
private :
int mAge;
string mName;
public :
Cat(string name)
: mName{ name } {};
void setAge(int age)
{
mAge = age;
}
int getAge() const
{
return mAge;
}
void setName(string name)
{
mName = name;
}
string getName() const
{
return mName;
}
};
int main()
{
const Cat kitty{"kitty"};
string name = kitty.getName(); //deep copy
const string &nameRef = kitty.getName(); // no deep copy
return 0;
}
=> 결론 : 캡슐화변수를 반환할때 작은 크기의 데이터 int는 바로 리턴해도 상관없지만,
string과 같은 큰데이터는 복사를 방지할 수 있는 const ref 타입으로 반환하도록 하자.