본문 바로가기

728x90

전체 글

[IT/리뷰] 소프트웨어 장인 소프트웨어 장인 : 네이버 도서 (naver.com) 소프트웨어 장인 : 네이버 도서 네이버 도서 상세정보를 제공합니다. search.shopping.naver.com 무슨 책을 읽을까 찾아보다가 '로버트 C. 마틴'을 보고 바로 집었다. 이 책은 다른 책에서도 나왔던 '소프트웨어 장인정신'에 대해서 다룬다. 책의 부제는 '프로페셔널리즘/실용주의/자부심'이다. 책의 내용과 정확히 부합하는 부제라 생각한다. 저자가 그동안 개발자로서 일을 하면서 경험한 장인 정신에 대해 다룬다. 일반적인 개발자가 아닌 장인으로서의 태도를 가질 것을 강조한다. 장인 정신이 무엇인지, 장인으로서의 태도는 어떤 것인지, 직장에서는 어떻게 해야 하는지, 프로젝트에서는 어떻게 해야 하는지, 직장에 문화를 어떻게 바꿔야 하는지 등에 .. 더보기
[IT/리뷰] 모던 C++ 디자인 패턴 모던 C++ 디자인 패턴 : 네이버 도서 (naver.com) 모던 C++ 디자인 패턴 : 네이버 도서 네이버 도서 상세정보를 제공합니다. search.shopping.naver.com 디자인 패턴도 공부하면서 모던 C++도 공부할 수 있을 것 같다고 생각해서 책을 선택했었다. 하지만 둘 다 만족스럽지는 못했다. 먼저, 모던 C++은 설명을 해주는 게 아니라 사용만 하고 있기 때문에 직접 찾아서 확인해야 한다. 찾는 것은 좋았지만 회사에서는 예전 C++을 사용하기 때문에 익숙해질 수가 없었다. 찾아본 모던 C++ 기능들도 회사에 적용할 수 없는 것들이 많았다. 물론 내가 따로 모던 C++로 무언가를 하고 있었으면 도움이 될 수 있었을텐데 그러지 않았기 때문에 책만으로는 익숙해지지 않은 것이다. 그래도 기.. 더보기
[디자인패턴][행위패턴] 방문자 Visitor - C++ [모던 C++ 디자인 패턴] 책을 바탕으로 공부하는 내용을 정리한 내용이다. Visitor Pattern 계층을 이루는 클래스들을 사용해야 할 때, 소스 코드를 수정할 수 없다면 각 계층마다 멤버 함수를 추가하는 것이 불가능하다. 이 문제를 해결하기 위한 방문자 패턴은, 사용하기 위해서는 선제적으로 어떤 준비가 되어야 있어야만 한다. 침습적 방문자 가장 직접적인 접근 방법부터 시도해 보자. 이 방법은 OCP에 위배된다. 수학 수식을 파싱해야 할 때, Expression 인터페이스를 직접적으로 수정하는 방법이다. 상속 관계에 따라 모든 하위 클래스도 수정된다. struct Expression { virtual void print(ostringstream &oss) = 0; }; OCP 원칙을 위배하는 것과.. 더보기
[디자인패턴][행위패턴] 템플릿 메서드 - C++ [모던 C++ 디자인 패턴] 책을 바탕으로 공부하는 내용을 정리한 내용이다. Template Method 전략 패턴과 매우 유사하다. 차이점은 전략 패턴이 컴포지션을 이용하는 데 반해 템플릿 메서드 패턴은 상속을 이용한다는 것이다. 하지만 핵심 원리는 어떤 알고리즘의 골격을 한 곳에 정의해 두고 상세 구현을 다른 곳에 둔다는 점에서 동일하다. 이 부분은 시스템 확정 측면에서 OCP 원칙을 준수하는 것이다. 게임 시뮬레이션 보드 게임을 예로 들어 아래와 같이 알고리즘을 정의해보자. 게임 실행 시에는 run() 메서드는 다른 메서드를 호출할 뿐이다. 그 메서드들은 퓨어 버추얼이면서 protected이기 땜누에 다른 쪽에서 호출할 수는 없다. class Game { private: void run() { st.. 더보기
[디자인패턴][행위패턴] 전략 Strategy - C++ [모던 C++ 디자인 패턴] 책을 바탕으로 공부하는 내용을 정리한 내용이다. Strategy Pattern 배열에 문자열 여러 개를 목록 정리해서 출력하려고 한다고 해보자. HTML이나 LaTeX의 경우 목록을 표현하기 위해서는 그 렌더링 언어만의 열림/닫힘 태그가 필요하다. 목록을 출력하는 일은 여러 경우마다 비슷한 부분이 있기도 하고 다른 부분도 있기도 하다. 이때 각 경우들 하나하나를 별개의 "전략"으로 취급할 수 있다. 목록을 출력하는 작업은 다음과 같은 전략으로 공식화할 수 있다. 이때 서로 다른 포맷마다 서로 다른 전략을 공식화하고 각 전략은 일반화되어 불변하는 상위 수준 텍스트 출력 알고리즘에 입력돼 세부 동작에 가변성을 부여할 수 있다. 목록의 열림 태그와 항목을 출력한다. 목록의 각 항목.. 더보기
[디자인패턴][행위패턴] 상태 State - C++ [모던 C++ 디자인 패턴] 책을 바탕으로 공부하는 내용을 정리한 내용이다. State Pattern 상태에 의해 행동이 결정된다. 상태는 바뀔 수 있고, 상태를 전환시켜 주는 것을 트리거라 한다. 상태 디자인 패턴은 "상태가 동작을 제어하고, 상태는 바뀔 수 있다"는 단순한 아이디어다. 상태 변경 주체가 누구인지 규정하지 않는다. 상태 디자인 패턴은 보통 두 가지 방법이 있다. 실제로는 두 번째 방법이 더 흔히 사용된다. 첫 번째 방법은 일반적인 사고방식과 색다른 면이 있다. 동작을 가지는 실제 클래스로 상태를 정의한다. 상태가 이전될 때 클래스의 변화에 따라 변경된다. 상태와 상태 전이를 단순히 enum 타입처럼 식별자의 나열로 정의한다. 실제 상태 변화는 상태 머신이라는 특별한 컴포넌트를 두어 수행.. 더보기
[디자인패턴][행위패턴] 관찰자 Observer - C++ [모던 C++ 디자인 패턴] 책을 바탕으로 공부하는 내용을 정리한 내용이다. Observer Pattern 관찰자 패턴은 널리 사용되는 패턴이다. 다른 언어들에서는 언어 자체적으로 또는 표준 라이브러리에서 관찰자 패턴을 지원한다. C++을 제공되지 않는다. 제대로 된 관찰자 패턴은 기술적으로 매우 정교한 구현을 요구한다. 속성 관찰자 생일잔치를 챙겨주도록 해보자. 사람의 나이가 바뀌는 것을 어떻게 알 수 있을까? 변경을 알아채는 방법에는 폴링(polling)을 사용할 수도 있다. 이러한 방법은 효과는 있지만 비효율적이다. 사람의 나이가 변경될 때 정보를 받는 것이 가장 효과적이다. 그러기 위해서는 set 멤버 함수가 필요하다. 이제 set 멤버 함수가 호출될 때 알림을 보낼 수 있으면 된다. Observ.. 더보기
[디자인패턴][행위패턴] Null 객체 - C++ [모던 C++ 디자인 패턴] 책을 바탕으로 공부하는 내용을 정리한 내용이다. Null 객체 인터페이스를 마음대로 선택할 수 있는 경우는 사실 그렇게 많지 않다. 어떤 모듈의 특정 기능을 원하지 않지만 인터페이스에 이미 내장되어 있을 수 있다. 이때 Null 객체를 이용한다. 시나리오 우선 아래와 같은 인터페이스를 갖는 Logger 라이브러리를 사용한다고 가정하자. struct Logger { virtual ~Logger() = default; virtual void info(const string &s) = 0; virtual void warn(const string &s) = 0; }; 이 라이브러리를 이용해 다음과 같이 은행 계좌 동작들에 로깅 기능을 구현해 보자. void BankAccount::d.. 더보기

728x90