Chapter 4: 전문가다운 C++ 프로그램 디자인
이 장에서 배울 내용
- C++에 적합한 디자인 고려사항
- 효과적인 C++ 디자인을 위한 두가지 핵심 개념: 추상화와 재사용성
- 코드 재사용의 장단점
삼성 Pro 시험을 몇 번 보면서 깨달은 점이 하나 있다면, 구체적인 디자인 없이 무작정 키보드에 손을 올리고 코드를 작성하면서 디자인하게 되면 망할 가능성이 훨씬 더 높다는 것 입니다.
코드를 작성하기 전 디자인 과정을 거침으로서 발생할 수 있는 문제들에 대해 파악하고 코드 구조를 만들어 두는 것이 발생할 수 있는 문제들을 미연에 방지하고 궁극적으로 코드 작성에 필요한 시간을 줄일 수 있습니다.
구현에 앞서 디자인에 시간을 쏟는 것이 중요하다! 외에 정리할 말이 없네요.
추상화(Abstraction)
내부 구현과 외부 인터페이스를 분리하여 사용자가 내부 구현사항을 몰라도 쉽게 사용할 수 있게 구성해야합니다.
체스보드를 구현하는 예를 보자면,
ChessPiece* chessBoard[8][8];
/* ... */
chessBoard[0][0] = new Rook();
위의 예는 추상화 원칙에 어긋납니다. 체스보드를 사용하는 프로그래머는 항상 체스보드가 2차원 배열로 구현했다는 사실을 알아야하고, 구현이 변경된다면(벡터로 바꾼다던지…) 코드 전체에서 체스보드가 사용되는 부분은 모두 변경되어야합니다.
아래 예제와 같이 변경한다면 구현에 대한 세부사항을 숨긴채 인터페이스를 공개할 수 있습니다.
class ChessBoard {
public:
void setPieceAt(size_t x, size_t y, ChessPiece* piece);
ChessPiece* getPieceAt(size_t x, size_t y);
bool isEmpty(size_t x, size_t y) const;
private:
/* ... */
}
재사용(Reuse)
프로그램은 클래스, 알고리즘, 데이터 구조를 재사용할 수 있도록 디자인해야 합니다. 보통 이렇게 디자인할 경우 직면한 문제를 해결하는데 최적화 하기 힘든 경우가 있어 꺼려지는 경우가 많은데, 저자는 ‘당장 주어진 문제에만 적용될 수 있돌고 너무 특화된 형태로 디자인하지 않는 것이 좋다’ 라고 말하고 있습니다.
코드 재사용의 장점
- 재사용한 코드로 구현한 컴포넌트는 디자인이 필요 없기 때문에 디자인 과정이 간결해집니다.
- 제공되는 라이브러리는 많은 프로그래머들에 의해 검증되었기 때문에 안정적입니다.
- 라이브러리는 대체로 잘못된 입력 값에 적절히 대처하도록 작성된 경우가 많습니다.
- 직접 작성한 코드보다 해당 분야의 전문가가 작성한 코드를 사용하는 것이 안전합니다.
- 라이브러리는 지속적으로 개선됩니다.
코드 재사용의 단점
- 다른 사람이 작성한 라이브러리를 사용하면 먼저 그 라이브러리에서 제공하는 인터페이스를 파악하고 올바른 사용법을 익히는데 시간이 걸립니다.
- 코드를 직접 작성하면 원하는 동작에 딱 맞게 구현할 수 있지만, 라이브러리에서 제공하는 기능은 원하는 바와 정확히 일치하지 않을 수 있습니다.
- 라이브러리 코드를 사용하면 유지 보수에 문제가 발생할 수 있습니다.
- 사용하는 라이브러리의 라이센스에 대해 잘 파악하고 있어야합니다.