디자인 패턴

    [디자인 패턴] 커맨드(Command) 패턴

    오늘 공부할 패턴은 커맨드 패턴입니다. 1. 커맨드 패턴이란 커맨드 패턴은 요청(메소드 실행)을 캡슐화 하여 1)요청 받은 기능이 무엇인지, 2) 이를 처리하는 객체가 누구인지를 은닉합니다. 예를 들어, Menu 클래스는 각 선택 항목인 MenuItem 객체의 집합입니다. 각 MenuItem을 클릭하면 특정 동작을 수행해야 하는데 Menu 클래스가 이들을 전부 알고 있어야 할까요? 그러면 Menu 클래스가 매우 복잡해지고, 결합도도 너무 강해집니다. 이런 순간에 커맨드 패턴을 활용하면 문제들을 해결할 수 있습니다. 2. 활용하기 좋은 순간 요청(메소드 실행) 자체를 객체로 매개변수화 하고 싶을 때 요청을 저장, 실행 등의 데이터화 하고 싶을 때 실행 취소, 재실행, 로깅 등을 지원하고 싶을 때 3. 예시..

    [디자인 패턴] 책임 연쇄(Chain of Responsibility) 패턴이란

    오늘 공부할 디자인 패턴은 책임 연쇄 패턴입니다. 1. 책임 연쇄 패턴이란 책임 연쇄 패턴은 기능을 요청하는 부분과 이를 처리하는 부분의 의존성을 제거하기 위한 패턴입니다. 예를 들어, 어떤 객체의 메소드가 호출되었더라도 기능을 수행하지 않아도 됩니다. 객체가 상속한 클래스들을 순회하면서 해당 메소드를 처리할 수 있는 클래스를 찾으면 처리되고, 찾지 못하면 아무런 동작도 하지 않습니다. 책임 연쇄 패턴이 어떻게 동작하는지는 알겠는데 실제로 적용된 사례에는 뭐가 있을까요? 그래픽 편집기, 이벤트 처리기에서 책임 연쇄 패턴을 사용하고는 합니다. 그룹화된 도형을 클릭하고 글자 크기를 변경하면 내부의 글자들만 크키가 변경됩니다. 도형에는 아무런 영향을 주지 않는 것이죠. 앞에서 '그룹화'된 도형 부분에서 눈치채..

    [디자인 패턴] 플라이웨이트(flyweight) 패턴이란

    오늘 공부할 디자인 패턴은 플라이웨이트 패턴입니다. 1. 플라이웨이트 패턴이란 플라이웨이트 패턴은 이미 생성되어 있는 객체를 재활용하여 자원을 효율적으로 사용하는 패턴입니다. 싱글톤 패턴과 유사해보입니다만 플라이웨이트 패턴의 경우에는 객체의 세부 상태에 따라서 여러 개의 객체가 생성될 수 있습니다. 2. 활용하기 좋은 순간 소프트웨어에서 너무 많은 객체가 생성될 때 많은 수의 객체들을 생성하는 대신에 공유하는 것으로 대체할 수 있을 때 3. 예시 플라이웨이트 패턴을 공부하면서 CarInterface로 적절한 예시를 찾기가 어렵더라구요. 이번에는 Piano 클래스라는 새로운 예시를 준비해봤습니다. 우리는 3d 게임을 만들고 있고, 마침 피아노 오브젝트가 즐비한 맵을 만들고 있습니다. 피아노 오브젝트의 건반..

    [디자인 패턴] 퍼사드(Facade) 패턴이란

    오늘 공부할 디자인 패턴은 퍼사드 패턴입니다. 퍼사드 패턴은 제품화라는 측면에서 매우 중요한 패턴이라고 생각됩니다. 특정 클래스들을 같이 사용하는 유즈케이스가 많다면 해당 클래스들을 하나의 인터페이스로 통합하는 것이 더욱 높은 사용성을 제공하는 경우가 많습니다. 퍼사드 패턴을 적절히 구사하여 사용성을 높이는 것도 아주 중요한 작업 중 하나라고 생각합니다. 1. 퍼사드 패턴이란 퍼사드 패턴은 서브클래스들의 인터페이스를 통합하여 새로운 인터페이스를 생성하는 것으로 불필요한 기능을 은닉하고, 사용자에게 더 높은 사용성을 제공하는 패턴입니다. 많은 경우의 라이브러리, 프레임워크 혹은 어플리케이션이 퍼사드 패턴을 적용하고 있습니다. 혹시 gcc, g++, javac 같은 컴파일러를 CLI 환경에서 사용해보신 적이..

    [디자인 패턴] 데코레이터(Decorater) 패턴이란

    오늘 공부할 패턴은 디자인 패턴은 데코레이터 패턴입니다. 1. 데코레이터 패턴이란 데코레이터 패턴은 서브 클래스를 추가하는 것보다 간단하게 기능을 추가할 수 있어서 한번씩 활용하는 패턴입니다. 브릿지 패턴과 어답터 패턴을 활용한 느낌이라고 이해하시면 될 것 같습니다. 그래서 Wrapper 함수 혹은 클래스를 구현하면서 알게 모르게 데코레이터 패턴을 적용하셨을지도 모릅니다. 한번 예시를 살펴볼까요? 2. 활용하기 좋은 순간 추상화 시키기 애매한 기능을 추가적으로 개발해야 할 때 기능 추가를 위해서 수정해야 하는 서브클래스가 너무 많아지고 있을 때 3. 예시 이번에도 CarInterface를 활용해볼게요! 원래는 차에 기능이 추가되면 모든 구현체 클래스에 해당 메소드를 추가했는데 이번에는 데코레이터 패턴을 ..

    [디자인 패턴] 컴퍼짓(Composite) 패턴이란

    오늘 공부할 디자인 패턴은 컴퍼짓 패턴입니다. 브릿지 패턴 포스트에서 말씀드렸다시피 컴퍼짓 패턴을 잘못 알고 있었기에 이번 공부도 정말 뿌듯합니다. 충분히 그리고 열심히 공부하고 있다고 생각했었는데 이렇게 부족함을 느끼게 되어서 정말 다행인 것 같습니다. 그만큼 내용을 정리하면서 얻는 게 많은 것 같습니다. 이제 본격적으로 공부해볼까요! 1. 컴퍼짓 패턴이란 컴퍼짓 패턴은 동일한 추상화가 여러 계층에 걸쳐서 적용될 수 있을 때 사용합니다. 많이 예로 드는 경우가, 파워포인트의 도형, 게임 속 오브젝트들인데요. 파워포인트를 이용해서 도형들을 그린 다음에 이들을 다시 그룹화 시킬 수 있다는 것 아시나요? 중요한 점은 그룹화한 도형도 일반 도형과 똑같이 제어할 수 있습니다. 컴퍼짓 패턴을 이용하면 사용자에게 ..