[전문가를 위한 C++] 6장 : 재사용을 고려한 설계
2026. 2. 23. 23:55
6.1 재사용 철학
- 작성은 한 번, 사용은 여러 번
- 무슨 수를 쓰더라도 코드 중복은 피한다
- 같은 일을 반복하지 않는다.
6.2 코드를 재사용할 수 있도록 설계하는 방법
- 첫째, 용도나 분야가 약간 달라도 출ㅇ분히 사용할 수 있는 범용성
- 둘째, 쉽게만들어야 한다.
6.2.1 추상화 방법
- 인터페이스와 구현을 분리
- 게터와 세터를 통해서 접근
- handle : 한 인터페이스에서 리턴한 정보를 다른 곳에 전달하기 위해 클라이언트 코드에서 보관
- 불투명 클래스 : 내부 데이터 멤버를 직접 접근하지 못하게 하거나 게터나 세터로 간접적으로 접근하게 만든 클래스
c++은 public 인터페이스와 비 public 데이터 멤버나 메서들르 모두 한 클래스 정의에서 작성할 수 밖에 없어서 클래스 내부 구현 사항이 노출될 수 밖에는 없다.
6.2.2 재사용에 최적화된 코드 구조화
- 컴포넌트
1 서로 관련 없거나 논리적으로 구분되는 개념을 합치지 않기
- 응집도(cohesion)을 높이는데 주력해야 한다.
- 단일 책임 원칙(SRP)
2 범용 데이터 구조와 알고리즘 템플릿으로 구현하기
템플릿이 다른 제네릭 프로그래밍 테크닉보다 나은 이유
- 템플릿 대신 void * 사용 가능
- 하지만 type-safe 하지 않다
- std::any 클래스를 사용할 수 있다
- 데이터 구조를 특정한 클래스에 맞게 정의
- 하지만 템플릿은 제대로 사용하면 타입 안정성 보장.
- 템플릿을 이용하면 컴파일러가 각 템플릿 인스턴스에 맞게 고도로 최적화된 코드를 생성
- std::any와 void *를 이용한 데이터 구조와 달리 템플릿은 저장 공간에 할당하는 작업이 필요 없다
템플릿의 단점
- 동형 데이터 구조만을 지원
- c++ 17부터는 이러한 동형성의 제약을 정식으로 우회하는 방법을 제공
- std::variant나 std::any 객체로 저장하도록 정의하면 된다
- 최종 바이너리 코드의 크기가 커지는 코드 비대 현상 발생
템플릿과 상속
- 동일한 기능을 다양한 타입에 지공할 때는 템플릿 사용
- 특정 타입마다 동작을 다르게 제공할 때는 상속
3 적절한 검사 기능과 안전장치 제공하기
4 확장성을 고려한 설계
- 개방/폐쇄 원칙 (OCP)
6.2.3 사용성 높은 인터페이스 설계
1 사용자 고려하기
2 용도 고려하기
3 인터페이스를 사용하기 쉽게 설계하기
- 연산자 오버로딩4 범용 인터페이스 설계
- 의존성 관계를 역전시키는데 인터페이스를 사용
- 의존성 역전 원칙
- 이 원칙의 구현 방법 중 하나로 의존성 주입이 있다
5 범용성과 사용성의 조화
- 인터페이스 분리의 원칙
6.2.4 바람직한 추상화 설계
- 핌플 패턴(9장)
- 추상화가 잘된 인터페이스는 public 메서드로만 구성된다.
6.2.5 솔리드 원칙
'C++' 카테고리의 다른 글
| [전문가를 위한 C++] 7장 : 메모리 관리 (0) | 2026.02.23 |
|---|---|
| [전문가를 위한 C++] 5장 : 객체지향 설계 (0) | 2026.02.23 |
| [전문가를 위한 C++] 4장 : 전문가답게 C++ 프로그램 설계하기 (0) | 2026.02.23 |
| [전문가를 위한 C++] 3장 : 코딩 스타일 (0) | 2026.02.23 |
| [전문가를 위한 C++] 2장 : 스트링과 스트링 뷰 다루기 (0) | 2026.02.23 |



