본문 바로가기

C++ Language/Tip / Information

클래스에서의 초기화(initialization)와 대입(assignment)

프로그래밍을 처음 짜기 시작할 때 "초기화를 꼭 해야 된다." "초기화는 중요한 것이다." 등의 말을

많이 들어 보셨을 것입니다. 

근데 프로그래밍을 하면서 프로그래머는 분명 초기화를 했다고 하지만 그 초기화가

초기화를 하는 것이 아닌 대입이 될 수도 있기 때문에 이번에 초기화와 대입에 대해서 보다 확실히

알아 보기 위해 간단히 글을 적어 봅니다.

일단

밑의 소스를 보겠습니다.

A.
int value = 10;



B.
int value;
value = 10;


A 소스와 B소스를 보게 되면 쉽게 알 수 있을 것입니다.
A 소스는 초기화를 시킨 것이고 , B 소스는 대입을 시킨 것이라는 것을 쉽게 알 수 있는데,

그럼 C++언어에서의 클래스를 예로 설명을 들어 보겠습니다.
class Test
{
    private:
        int value;
    public:
        Test()
        {
            this->value =0;
        }
};

위 소스에서 생성자함수 안에서 value 값을 0으로 주었습니다.
그럼 value 값이 초기화가 된 것일까요!?

결론 부터 말하자면 초기화가 아닌 대입이 되었다는 것입니다.

못 믿으시겠다면, 변수에 const 키워드를 붙여 보세요.

상수는 초기화 될때만 값을 지정 할 수 있으니,

생성자 함수 안에서 0으로 주어졌는 것이 초기화라면, 값이 들어 가겠죠!?

그럼 클래스에서의 초기화는 어떻게 시키는 것일까요!?

바로 콜론 키워드를 사용하면 됩니다. 

소스를 보면,
class Test
{
    private:
        int value;
        const int value2;
    public:
        Test() : value(1), value2(2)
        { }
};


위 소스를 보면, 생성자 함수 옆에 콜론(:)으로 해서 값을 입력 시키는 것을 볼 수 있을 것입니다.

이런 식으로 작성을 하게 되면,

대입이 아닌 초기화가 일어 나게 됩니다.

그리고 소스를 보면 const 키워드로 작성된 상수에서도

값이 들어가도록 한 것을 볼 수 있습니다.

이 동작이 에러 없이 잘 입력이 된다면,

초기화가 된다는 것을 알 수 있겠죠!?

직접 작성하셔서 보시면 값이 입력 된다는 것을 알 수 있습니다.

이렇게 클래스에서 초기화는 생성자 함수 안에서 이루어 지는 것이 아니라

콜론(:) 키워드를 사용하여 이루어 진다는 것을 알 수 있습니다.

그래서 보통 변수에서는 생성자 함수 안에서 대입으로 값을 넣더라도

상수변수는 꼭 콜론(:) 키워드를 사용해야 됩니다.

'C++ Language > Tip / Information' 카테고리의 다른 글

auto_ptr 키워드  (0) 2010.02.18
8진수 / 10진수 / 16진수 출력하기  (0) 2010.02.16
const_cast 키워드  (0) 2010.02.12
mutable 키워드  (0) 2010.02.12
상수함수란?!  (0) 2010.02.12