[C++] #define vs const

스윗포테이토·2022년 10월 25일
3

C++에서 상수를 정의할 때 크게 두가지 방법이 있다.
#defineconst인데, 둘의 차이를 한번 정리해보려고 한다.

#define vs const

  1. 선언 방법

    #define VAR_NAME 10
    
    const int VAR_NAME = 10;
  2. 컴파일 과정
    컴파일 과정을 간략하게 요약하면
    pre-processor -> Compiler -> Assembler -> Linker
    를 거치게 되는데, #define은 전처리어로 전처리 단계에서 처리되고, const는 컴파일러가 처리한다.

  3. 처리 방식
    #define은 매크로 형식이다. 즉, 전처리기가 단순히 코드 상에 있는 모든 #define으로 정의된 것을 찾아서 실제 값으로 치환한다는 뜻이다. 반면 const는 리터럴이라고도 불린다. 변수처럼 취급되지만, 처음 정의된 이후로는 값이 바뀌지 않는 것이 보장된다.

  4. 장단점
    const의 경우, 타입을 지정할 수 있기 때문에 컴파일 과정에서 타입체크가 일어난다. 또한 디버거에도 변수 이름이 나오기 때문에 디버깅을 하기 쉽다.
    반면 #define의 경우, 메모리 영역에 올라가지 않아 메모리를 절약할 수 있다. 또한 파라미터를 받아 간단한 함수를 만들 수도 있다.

  5. 정리
    사실 #define의 경우, 대부분의 프로그램에서는 권장하지 않는다. 요즘은 메모리가 아쉬운 세대가 아니기 때문에 코드 유지&보수 측면에서 const를 쓰는 것이 좋다. 그러나, 임베디드와 같이 작은 메모리를 가지고 동작시켜야 하는 경우에는 당연히 #define이 좋다. 예를 들어 아두이노 우노 보드의 경우 2kb의 SRAM을 가지고 있는데, 이럴 경우에는 메모리 절약에 신경을 써줘야 하므로 #define을 쓰는 것이 좋겠다.

한줄 정리: 임베디드가 아니면 const를 쓰자.

reference

#define vs const

profile
나의 삽질이 미래의 누군가를 구할 수 있다면...

0개의 댓글