728x90 전체 글 썸네일형 리스트형 [디자인패턴][행위패턴] 메멘토 Memento - C++ [모던 C++ 디자인 패턴] 책을 바탕으로 공부하는 내용을 정리한 내용이다. Memento Pattern 커맨드 디자인 패턴에서 시스템의 모든 변경 이력을 기록한다면, 이론적으로 과거의 어떤 지점으로든 상태를 되돌릴 수 있다는 것을 이미 살펴봤다. 여기서 임의의 과거가 아니라 필요할 때 특정 시점으로 되돌릴 수만 있으면 충분한 경우가 있다. 그것이 메멘토 패턴이 필요한 경우다. 메멘토는 특정 시점의 상태를 전용 객체로 저장해 리턴한다. 이 객체는 읽기 전용 속성을 가지며 그 자체적으로는 어떤 동작도 하지 않는다. 이러한 "토큰"의 객체는 필요할 때 시스템에 주입되어 저장된 상태로 되돌린다. 은행 계좌 앞서 매개자 패턴에서 살펴보았던 은행 계좌 예를 이어서 볼 것이다. BankAccount 클래스의 정의에.. 더보기 [디자인패턴][행위패턴] 매개자 Meditator - C++ [모던 C++ 디자인 패턴] 책을 바탕으로 공부하는 내용을 정리한 내용이다. Meditator Pattern 우리가 작성하는 코드의 상당 부분은 서로 다른 컴포넌트(클래스) 간 포인터나 직접적 참조를 통해 커뮤니케이션한다. 어떤 경우 컴포넌트 간 명시적으로 상대방 객체의 존재를 알아야 하는 상황이 불편할 수 있다. 또는 상대방 객체를 알더라도 객체 생성/소멸 시점에 대한 관리 때문에 포인터나 참조로 접근되는 것이 싫을 수 있다. 매개자는 컴포넌트 간 커뮤니케이션을 돕기 위한 메커니즘이다. 매개자 자체는 커뮤니케이션에 동반되는 모든 컴포넌트로부터 접근 가능해야 한다. 즉, 전역 정적 변수이거나 모든 컴포넌트에 참조가 노출되어야 한다. 채팅 룸 채팅 룸은 매개자 디자인 패턴이 적용될 수 있는 가장 전형적인 .. 더보기 [디자인패턴][행위패턴] 반복자 Iterator - C++ [모던 C++ 디자인 패턴] 책을 바탕으로 공부하는 내용을 정리한 내용이다. Iterator Pattern 복잡한 데이터 구조를 다뤄야 할 때 데이터 순회(traversal) 문제에 부딪힌다. 여러 방법이 있지만 vector 형태의 데이터에서는 반복자(iterator)라고 불리는 방법이 흔히 사용된다. 반복자는 단순히 어떤 컬렉션의 항목 하나에 접근하는 방법과 그 항목의 다음 항목으로 이동하는 방법을 알고 있는 것이다. 따라서 ++ 연산자와 != 연산자만 구현하면 된다. C++ 표준 라이브러리에서도 반복자를 광범위하게 사용하고 있다. 먼저 C++ 표준 라이브러리가 반복자를 어떻게 사용하고 있는지 알아볼 것이다. 그다음 직접 반복자를 만들고 반복자가 가진 제약들을 살펴본다. 표준 라이브러리 반복자 vect.. 더보기 [디자인패턴][행위패턴] 인터프리터 Interpreter - C++ [모던 C++ 디자인 패턴] 책을 바탕으로 공부하는 내용을 정리한 내용이다. Interpreter Pattern Interpreter 디자인 패턴의 목적은 입력 데이터를 해석하는 것이다. 꼭 텍스트에 한정되지는 않는다. 인터프리터의 작업을 수행하는 몇 가지 단순한 예를 보여줄 것이다. 일반적인 예는 다음과 같다. 42나 1.234e12와 같은 숫자 리터럴은 바이너리로 저장하면 효율적이다. C++에서는 Boost.LexicalCast와 같은 고급 라이브러리를 사용할 수 있다. C의 API인 atof()를 이용할 수도 있다. 텍스트에서 어떤 패턴을 찾을 때 정규 표현식을 사용하면 편하다. 정규 표현식은 특정 목적을 위한 완전 별개의 언어다. 정규 표현식도 적절히 해석되어야만 한다. CSV, XML, JSON.. 더보기 [디자인패턴][행위패턴] 커맨드 Command - C++ [모던 C++ 디자인 패턴] 책을 바탕으로 공부하는 내용을 정리한 내용이다. Command Pattern 커맨드 패턴은 어떤 객체를 활용할 때 직접 그 객체의 API를 호출해 조작하는 대신, 작업을 어떻게 하라고 명령을 보내는 방식을 제안한다. 여기서 명령은 무엇을 어떻게 하라는 지시가 담긴 클래스 그 이상도 이하도 아니다. 시나리오 은행의 마이너스 통장을 생각해 보자. 마이너스 통장은 잔고와 인출 한도가 있다. 입금과 출금 동작을 수행해야 한다. 이때 모든 입출금 내역을 기록해야 한다고 하자. 또한, 입출금 클래스는 이미 기존에 만들어져 검증되었고 동작 중이어서 수정할 수 없는 상황이다. struct BankAccount { int balance = 0; int overdraft_limit = -500.. 더보기 [IT/리뷰] 테스트 주도 개발 테스트 주도 개발 : 네이버 도서 (naver.com) 테스트 주도 개발 : 네이버 도서 네이버 도서 상세정보를 제공합니다. search.shopping.naver.com 회사에서 스터디로 TDD를 해보기로 했다. 그때 정한 책이 이 책이다. 사실 TDD를 처음 할 때 스탭바이스탭으로 시작하기에는 이전에 읽었던 가 더 유용했다. 를 읽고 당시 관심이 있던 TDD에 호기심이 정립됐다. 정석대로 하는 방법에 대해 배울 수 있었다. 은 이전에 알던 개념에서 이어서 읽어서 더 좋았던 것 같다. XP의 창시자이자 애자일의 선구자인 켄트 벡의 TDD 이야기를 들으니 확실히 알게 되었던 점은 내가 이 책을 읽기 전까지 TDD를 어렵게 생각하고 있었다는 것이다. 물론, 실제로 TDD를 적용해 그것이 설계와 상호 도움을.. 더보기 [IT/리뷰] 클린 아키텍처 클린 아키텍처: 소프트웨어 구조와 설계의 원칙 : 네이버 도서 (naver.com) 클린 아키텍처: 소프트웨어 구조와 설계의 원칙 : 네이버 도서 네이버 도서 상세정보를 제공합니다. search.shopping.naver.com 내가 생각했던 것보다 더 큰 차원에서 얘기를 해줬다. 나는 하나의 시스템 안에서 모듈 간의 구조 혹은 하나의 모듈 안에서의 구조 정도로 생각했다. 그런데 여기서 말하는 아키텍처는 시스템 간의 아키텍처를 포함하는 큰 구조를 말했다. 범위만 다를 뿐, 소스 코드 단위에서의 구조와 시스템 단위에서의 구조에서 중요한 점은 동일하다고 생각하기 때문에 적절히 받아들였다. 그리고 내가 여태 잘못 생각했던 부분들에 대해서도 짚어 주었다. 예전에 아키텍트를 꿈꾸기도 했다. 지금은 내 실력이 아직.. 더보기 [영화리뷰] 더블 크라임 (1999) 또다시 오랜만에 영화리뷰다. 사실 영화관에서 보는 영화나 넷플리스로 보는 외국 드라마 같은 것들은 따로 작성을 하지 않아서 그러지 꾸준히 많이 보고 있었다. 넷플릭스나 네이버로 본 영화가 오랜만인 거여서 이번엔 이렇게 작성해 본다. 우선 오늘 내용이 많지는 않을 거다. 왜냐하면 개인적으로 영화가 별로였다. 네이버 평점 8점이고 러닝 타임도 그렇게 길지는 않아서 가볍게 시간이 남아서 봤다. 그런데 정말 평범한 스토리에 서스펜스도 별로였다. 유일하게 빛난 건 여주 애슐리 쥬드의 외모밖에 없었다. 개인적으로 다들 남주만 쓰레기라 생각하는데 여주도 뭐 그다지 좋다고는 생각 안 한다. 엄마이기에 아들을 되찾으려고 하는 것처럼 보는 후기가 꽤 있는 것 같던데 여주의 행동들이 아들을 위한 행동은 아니라 생각한다. 그.. 더보기 이전 1 2 3 4 5 6 7 8 ··· 50 다음