구조 패턴

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

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

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

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

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

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

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

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

    [디자인 패턴] 브릿지(Bridge) 패턴이란

    오늘 공부할 디자인 패턴은 브릿지 패턴입니다. 너무나 행복하면서 부끄러워지는 날인데요. 지금까지 브릿지 패턴을 컴퍼짓 패턴으로 알고 있었더라구요. 잘못된 지식을 올바르게 고칠 수 있어서 기쁘지만 주변에 말하고 다녔던 것을 생각하면 한없이 부끄러워지네요. 1. 브릿지 패턴이란 브릿지 패턴을 추상 클래스와 구현 클래스를 분리함으로써 의존성 문제를 해결하고 구현의 유연성을 가져가는 것이 목표입니다. 아주 아주 간단하게 설명드리면 클래스 내부에서 다른 클래스를 활용하여 기능을 구현하는 방법입니다. 이렇게 클래스가 직접적으로 기능을 구현하지 않고 다른 클래스를 활용하면 얻는 장점이 무엇일까요? 추상화 부분은 소프트웨어의 전체적인 구조에 알맞게 추상화를 제공하면서, 구현부는 구현부에 적합한 인터페이스를 유지할 수 ..

    [디자인 패턴] 어답터(Adapter) 패턴이란

    오늘 공부할 디자인 패턴은 어답터 패턴입니다. 1. 어답터 패턴이란 어답터 패턴은 한 단어로 "Wrapper"입니다. "API로 제공되는 데이터와 우리 데이터 모델이 다른 부분이 많아. Wrapper 함수(Wrapper 서비스)를 구현해야겠어." 서드파티 라이브러리나 서비스를 이용하면 흔히 들을 수 있는 말입니다. 이렇게 일치하지 않는 인터페이스를 맞추기 위해서 내가 만든 컴퍼넌트로 한단계 감싸주는 접근 방식을 어답터 패턴이라고 합니다. 메소드, 클래스, 서비스 등 다양한 적용 방식이 있겠지만 이번 포스팅에서는 간단하게 클래스에 어답터 패턴을 적용하는 예시를 들어보겠습니다. 2. 활용하기 좋은 순간 기존 클래스를 재사용하고 싶은데 인터페이스가 맞지 않을 때(특히, 인터페이스를 맞추기 위한 개발 비용이 너..