더북(TheBook)

5.6 이름 있는 상수

조그만 프로그램이라도 특정한 값을 반복적으로 사용할 때가 많다. 이때 실수로 어느 한 곳의 값이 바뀌면 프로그램에 문제가 발생한다. 예를 들어 스트링 배열에 대해 어떤 연산을 수행할 때 일어나는 가상의 상황을 살펴보자.7

여기서 볼 예제는 상수 3을 여러 군데에서 사용하는데, 그 중 세 곳은 서로 관련도 없고 의미도 다르다. 예를 들어 까마귀 집합에 원소를 추가하려면 코드에서 두 군데를 고쳐야 한다. 실전에서는 이런 값에 의존하는 코드가 훨씬 많아서 고쳐야 할 부분도 많을 수 있다. 코드 베이스가 크다면 유지 보수가 상당히 번거로워진다.

TAKEAWAY 5.38 특별한 의미가 있는 상수는 반드시 이름을 붙인다.

상수의 값이 서로 같더라도 의미가 다르면 반드시 구분해야 한다.

TAKEAWAY 5.39 의미가 다른 상수는 반드시 구분한다.

C 언어는 의외로 상수에 이름을 붙이는 기능이 빈약하다. 게다가 어느 구문이 컴파일 시간 상수로 만드는 것인지 헷갈리게 표현되어 있다. 따라서 먼저 용어부터 정리한 후(5.6.1절), C에서 유일하게 공식적으로 지원하는 이름 있는 상수(named constant)인 열거형 상수(enumeration constant)를 소개한다(5.6.2절). 열거형 상수를 활용하면 우리가 살펴볼 예제에서 다양한 용도로 사용하는 3 대신, 좀 더 구체적인 정보를 담은 표현으로 바꿀 수 있다. 5.6.3절에서는 단순 텍스트 교체 기능을 이용하는 매크로(macro) 기능을 이용하여 열거형 상수를 보완하는 방법을 소개한다. 앞에서 봤듯이 매크로를 기본 타입 리터럴로만 구성하면 컴파일 시간 상수로 쓸 수 있다. 복잡한 데이터 타입에 상수와 같은 개념을 적용하고 싶다면 임시 오브젝트를 제공해야 한다(5.6.4절).

 

 


  7 스트링 배열은 char const*const 타입 포인터로 스트링을 표현한다. 구체적인 사항은 뒤에서 자세히 소개한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.