•
이 장은 기본 데이터형, 원시 데이터형을 사용할 때 발생할 가능성이 있는 기초적인 문제들의 해결 방법을 서술한다.
1. 숫자 일반
•
매직 넘버를 피한다.
◦
필요하다면 0과 1은 그냥 사용한다.
•
0으로 나눔 오류를 미리 방지한다.
•
형 변환을 명시적으로 처리한다.
•
서로 다른 형을 비교하지 않는다.
2. 정수
•
정수 나눗셈을 검사한다.
•
정수 오버플로우를 염두에 둔다.
•
중간 결과에서의 오버플로우를 검사한다.
3. 부동 소수점 수
•
부동 소수점 수를 사용해야 할때, 많은 분수 값이 이진수로 표현될 수 없다는 한계를 이해해야 한다.
•
서로 크기가 매우 다른 수를 더하거나 빼지 않는다.
•
동치 비교를 권장한다.
•
라운딩 오류를 예측한다.
•
특정한 데이터형을 지원하는 언어와 라이브러리가 있는지 확인한다.
4. 문자와 문자열
•
매직 문자와 문자열을 사용하지 않는다.
•
자신이 사용하고 있는 언어와 환경에서 유니코드를 어떻게 사용하고 이?ㅆ는지 알아둔다.
•
국제화/지역화 전략을 초기에 결정한다.
•
다중 언어를 지원해야 한다면 유니코드를 사용한다.
•
문자열 형 사이에 일관된 변환 전략을 사용한다.
◦
다중 문자열 형을 사용하는 경우, 문자열 형을 구분하기 위한 한 가지 일반적인 방법은 프로그램 내의 모든 문자열을 단일 형식으로 유지하고 입, 출력 연산에서 다른 형식으로 변환하는 것이다.
5. 불린
•
프로그램을 문서화하기 위해서 불린 변수를 사용한다.
◦
불린 표현식을 사용하는 것보다 변수명으로 어떤 검사를 수행하는지 의미를 부여한다면 더 이해하기 쉽다.
•
복잡한 테스트를 단순화하기 위해 불린 변수를 사용한다.
•
필요하다면 사용자 정의 불린 형을 만든다.
6. 열거형
•
가독성 향상을 위해 열거형을 사용하라.
•
안정성을 위해 열거형을 사용하라.
•
변경하기 쉽게 열거형을 사용하라.
•
불린 변수에 대한 대안으로 열거형을 사용하라.
•
반복문의 범위를 지정하기 위하여 열거의 처음과 마지막 항목을 정의하라.
•
열거형의 첫 항목을 유효하지 않은 값으로 남겨라.
•
열거형의 요소에 명시적인 값을 할당할 때 발생할 수 있는 위험 요소를 고려하라.
7. 이름 상수
•
배열의 크기 등 데이터 선언에 이름 상수를 사용하라.
•
범위가 적절하게 지정된 변수나 클래스를 사용하여 이름 상수를 흉내내라.
•
이름 상수를 일관성있게 사용하라.
8. 배열
•
배열의 모든 인덱스가 배열의 경계 내에 존재할 것인지 확인하라.
•
배열 대신 래핑 객체 사용을 고려하거나 배열을 순차적인 구조체로 생각하라.
•
배열의 마지막 위치를 확인하라.
•
다차원 배열에서는 인덱스가 순서대로 잘 사용되는지 확인하라.
•
인덱스가 혼선되지 않도록 주의하라.
9. 새로운 타입
•
새로운 형을 만들기 위한 지침
◦
기능 지향적인 이름으로 타입을 생성하라.
◦
미리 정의된 타입을 가리키는 타입 이름을 조심하라.
◦
미리 정의된 타입을 피하라.
◦
미리 정의된 타입을 재정의하지 마라.
◦
다른 플랫폼으로 이식하기 쉽게 대체 타입을 정의하라.
◦
미리 정의된 타입으로 쉽게 오인할 수 있는 타입은 선언하지 마라.
요점 정리
•
특정한 타입을 다룬다는 것은 각 타입에 대해 많은 개별적인 규칙을 기억해야한다는 것을 의미한다.
◦
체크리스트를 확인하고 일반적인 문제점들을 고려하자.
•
사용하는 언어가 지원한다면 사용자 정의 타입을 생성하여 프로그램을 변경하기 쉽고 더 많은 것을 스스로 문서화하게 만들 수 있다.
•
typedef나 이와 비슷한 기능을 사용하여 간단한 형을 생성할 때 새로운 클래스를 생성할 필요가 있는지 검토하라.