본문 바로가기
Topos Uranos

요약

자료형은 데이터가 몇 바이트를 차지하는지만 정하는 것이 아니라, 그 비트를 어떻게 읽는지도 정한다. 같은 바이트가 char 타입에게는 글자 「A」이고 int 타입에게는 수 65이다. 이 수업은 기본 자료형을 문자와 불리언으로 채우고, 한 자료형에서 다른 자료형으로 넘어가는 일을 공부한다. 컴파일러가 요청받지 않고도 수행하며 정보를 잃을 수 있는 암시적 형 변환, static_cast 연산자를 쓴 명시적 형 변환, 그리고 손실을 거부하는 중괄호 초기화가 그것이다. 마지막으로, 의도(「이 값은 바뀌지 않는다」)를 컴파일러가 확인하는 보장으로 바꾸는 상수 const 키워드와 constexpr 키워드, 그리고 소스 코드에 쓴 값의 자료형을 정하는 리터럴과 auto 키워드를 다룬다.

학습 목표

  1. 문자의 수 코드를 써서 계산한다. 예를 들어 문자로 읽은 숫자의 값을 구한다.
  2. 정수, 실수, 불리언 사이의 암시적 형 변환의 결과를 예측하고, static_cast 연산자로 명시적 형 변환을 쓴다.
  3. 중괄호 초기화가 정보를 잃는 형 변환을 거부하는 이유와, 각 경우에 GCC가 무엇을 하는지 설명한다.
  4. 바뀌어서는 안 되는 모든 값을 const 키워드나 constexpr 키워드로 선언하고, 두 키워드를 구별한다.
  5. 리터럴(5, 5u, 5.0, 5.0f, '5', "5")의 자료형과, auto 키워드가 그 리터럴에 부여하는 자료형을 추론한다.

해석으로서의 자료형

변수와 메모리 수업은 변수를 이름, 자료형, 값을 가진 메모리 칸으로 소개했고, 정수와 그 표현 수업과 부동소수점 수 수업은 칸 안에 있는 것이 수가 아니라 비트이며, 그것을 어떻게 읽을지 알려 주는 것이 자료형임을 보였다. 이 수업은 이 생각을 그 귀결까지 밀고 간다. 자료형이 읽기의 규칙이라면, 같은 비트도 어떤 자료형으로 읽느냐에 따라 다른 것을 뜻하며, 값을 한 자료형에서 다른 자료형으로 옮기는 일, 곧 C++에서 형 변환이라 부르는 일은 규칙을 바꾸는 것이다. 어떤 형 변환은 값을 보존하고(정수 7은 아무것도 잃지 않고 실수 7.0이 된다), 어떤 형 변환은 값을 바꾼다(실수 2.7은 정수 2가 된다). 여기서 이 수업 전체를 관통하는 물음이 나온다. 각 형 변환에서 값은 보존되는가, 그리고 그것을 누가 확인하는가?