Study

const와 static

슈라。 2010. 1. 20. 20:27

1. const
    일반적으로 const는 변수를 상수화할 때 사용한다. 변수를 상수화 함으로써 얻는 이득은?
    대형 프로젝트를 진행하다 보면 컴파일도 잘 되고 링크도 잘 되지만 실행해 보면 예상하지 못한 버그가 발생 될 수 있다. 변수나 함수를 const로 상수화시키면 변경하지 말아야 할 변수를 변경함으로써 발생되는 버그의 발생 을 방지할 수 있다. 

- const를 사용할 때 헷갈리기 쉬운 부분
    int iNum1 = 20;
    int iNum2 = 30;
    const int* pNum1 = &iNum1;  // 포인터가 가리키는 주소 안의 값을 상수화
    int* const pNum2 = &iNum1;  // 포인터가 가리키는 주소를 상수화

    pNum1 = &iNum2;      //  OK
    pNum2 = &iNum2;      //  상수인 주소를 변경하려 했으므로 오류 발생
    *pNum1 = iNum2;    //  상수인 값을 변경하려 했으므로 오류 발생
    *pNUm2 = iNum2;    //  OK

- class의 const 멤버 변수는 생성자에 의해 초기화 할 수 없지만 member initialization list를 이용하면 class의 const 멤버 변수를 초기화 할 수 있다.

2. static
    static으로 변수 또는 함수를 선언하면 공용으로 사용하는 메모리(static 또는 전역 공간)에 생성된다. 이는 같은 파일 범위내의 어떤 위치에서든 접근이 가능하다는 것을 의미한다.
    함수가 끝나도 변수를 보존하고 싶을 때 사용하기도 하고 객체들 사이의 공유가 필요할 때 사용한다. 클래스에서 멤버 변수를 static으로 선언하면 객체가 아무리 많이 생성되어도 static변수는 하나만 생성되고 모든 객체가 공유하게 된다. static 변수와 함수 모두 객체가 생성되기 이전에 메모리에 생성되며 static 함수는 static 변수에만 접근 가능하고 일반 변수에는 접근 불가능하다. 하지만 일반 함수는 static변수와 일반변수 모두 접근 가능하다.