본문 바로가기

전체 글

(142)
[디자인 패턴] 9. 반복자 패턴, 컴포지트 패턴 반복자 패턴(Iterator Pattern)컬렉션의 구현 방법을 노출하지 않으면서 객체 내의 모든 항목에 접근하는 방법을 제공합니다.컴포지트 패턴(Composite Pattern)객체를 트리구조로 구성해서 계층구조를 구현합니다. 이 패턴을 사용하면 단일 객체와 트리로 구성된 복합 객체를 똑같은 방법으로 다룰 수 있습니다. ❗ 속보! 객체마을 식당과 팬케이크 하우스 합병오랜 줄다리기 끝에 두 식당이 합병하기로 결정했습니다! ⚖️🤝그런데 합병하고 보니, 두 식당은 각자 메뉴를 다루는 방법이 달라서 종업원이 주문을 어떻게 처리해야 고민을 하고 있네요. 🤔 🎯 문제 포인트객체마을 식당에서는 메뉴들을 배열로 다룬다.팬케이크 하우스에선 메뉴들을 ArrayList로 다룬다.두 식당의 메뉴 구조를 똑같이 맞추려면..
[디자인 패턴] 8. 템플릿 메소드 패턴 템플릿 메소드 패턴(Template Method Pattern)알고리즘의 틀을 정의하는 패턴입니다. 이 패턴을 사용하면 알고리즘의 일부 단계를 서브 클래스에서 구현하거나 재정의해서 사용할 수 있습니다. ☕ 커피와 홍차에는 모두 카페인이 들어있다 스타버즈 커피 전문점에는 영업 비밀이 담긴 커피와 홍차를 제조하는 방법이 있는데, 이를 코드로 구현해보려고 합니다.스타버즈 커피의 커피와 홍차 제조법은 아래와 같습니다. 커피 만드는 법1. 물을 끓인다.2. 끓는 물에 커피를 우려낸다.3. 커피를 컵에 따른다.4. 설탕과 우유를 추가한다.홍차 만드는 법1. 물을 끓인다.2. 끓는 물에 찻잎을 우려낸다.3. 홍차를 컵에 따른다.4. 레몬을 추가한다.  위 제조법을 코드로 구현해보면 아래처럼 만들 수 있겠네요. pu..
[디자인 패턴] 7. 어댑터 패턴, 퍼사드 패턴 어댑터 패턴(Adapter Pattern)특정 클래스의 인터페이스를 다른 인터페이스로 변환해주는 패턴입니다. 두 인터페이스가 서로 호환되지 않을 때 유용합니다.퍼사드 패턴(Facade Pattern)서브 시스템에 있는 각 인터페이스를 통합 인터페이스로 묶어줌으로써, 일련의 과정을 단순화시키는 패턴입니다.  🦆 점점 커지는 오리 시뮬레이션 게임 당신은 1인 개발자로서 오리 시뮬레이션 게임을 만들어서 운영하고 있습니다. 그런데 이 게임이 게이머들 사이에서 입소문을 타게 되면서 점점 인기가 많아지게 됐고, 게임의 규모를 더 키우기 위해 경쟁사 게임이었던 칠면조 시뮬레이션 게임과 병합하기로 결정합니다. 그런데 두 게임이 합쳐져서 동작하려면 두 클래스가 서로 호환이 되어야 하겠네요.우선 기존의 오리 클래스와 호..
[디자인 패턴] 6. 커맨드 패턴(Command Pattern) 커맨드 패턴(Command Pattern)어떠한 동작을 요청하는 객체와 그 요청을 처리하는 객체를 분리하는 패턴입니다. 이러한 요청을 큐에 저장하거나 로그로 기록하거나 작업 취소 기능을 사용할 수 있습니다. 이러한 요청을 관리하고 추적할 필요가 있을 때 유용합니다. 📱 리모컨 API 제작을 수주하다 어느 날 당신은 홈 오토메이션이라는 리모 전문 업체로부터 리모컨 API를 제작하는 일을 수주하게 되며, 홈 오토메이션으로부터 전달받은 장비와 주요 요구 사항은 아래와 같습니다.  리모컨에 장착된 7개의 각 슬롯에 여러 협력 업체로부터 받은 클래스의 동작을 저장해야 함각 슬롯에는 ON/OFF 버튼이 있고, 작업을 취소할 수 있는 버튼이 있음향후 다른 협력 업체들로부터 공급받게 될 장비도 제어할 수 있어야 ..
[디자인 패턴] 5. 싱글턴 패턴(Singleton Pattern) 싱글턴 패턴(Singleton Pattern)클래스의 인스턴스를 하나만 만들고, 그 인스턴스로의 전역 접근을 제공합니다. 코드 전역적으로 클래스의 상태가 동기화되어야 할 때 유용합니다. 🍫  초콜릿 공장, 초코홀릭   요즘 대다수의 초콜릿 공장에서는 초콜릿을 끓이는 장치를 컴퓨터로 제어합니다. 아래는 주식회사 초코홀릭의 초콜릿 보일러를 제어하는 클래스입니다. public class ChocolateBoiler { private boolean empty; private boolean boiled; public ChocolateBoiler() { empty = true; boiled = false; } // 초콜릿 채우기 public void fil..
[디자인 패턴] 4. 팩토리 패턴(Factory Pattern) 간단 팩토리(Simple Factory)오직 객체 생성을 목적으로 하는 클래스를 만들어서 객체를 생성하는 부분을 캡슐화하는 기술이며 패턴이라고 불리진 않는다. 인터페이스로 상위 팩토리 객체를 만들고 이를 서브 클래스가 구현하는 방식이 일반적으로 사용된다.팩토리 메소드 패턴(Factory Method Pattern)객체를 생성하는 부분을 메소드로 캡슐화하고, 이 메소드를 서브 클래스에서 구현하도록 해서 객체 생성을 서브 클래스가 결정하도록 캡슐화하는 패턴이다. 간단 팩토리보다 코드 변경에 대한 유연성이 좋다.추상 팩토리 패턴(Abstract Factory Pattern)구상 클래스에 의존하지 않고도 서로 연관된 객체로 이루어진 제품군을 생성하는 인터페이스를 사용해서 객체 생성을 추상화 하는 패턴이다. 🍕..
[디자인 패턴] 3. 데코레이터 패턴(Decorator Pattern) 데코레이터 패턴(Decorator Pattern)실행 중에 객체를 직접 수정하지 않고 동적으로 기능을 확장시킬 수 있는 패턴이다.  커피 전문점인 스타버즈 커피는 주문 시스템을 가지고 있었는데, 주문 시스템의 클래스는 아래와 같이 구성되어 있었습니다.   그런데 점점 사업이 확장되면서 수많은 커피 종류와 더불어 휘핑 크림, 우유 등의 첨가물을 추가한 커피를 출시하게 되니, 같은 커피여도 첨가물 종류나 갯수마다 다른 가격을 책정해야 했고, 결국 커피마다, 첨가물에 따라 다르게 완성된 커피 클래스들을 별도로 만들게 되어 수많은 클래스들이 생겨나게 되어 클래스 관리가 너무 어렵게 되었습니다. 그래서 스타버즈는 상속을 사용해서 이 문제를 해결해보려 합니다.   이제 각 서브 클래스(HouseBlend, ...)..
[디자인 패턴] 2. 옵저버 패턴(Observer Pattern) 옵저버 패턴(Observer Pattern)한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고 자동으로 내용을 갱신해주는 패턴으로써, 일대다 의존성을 정의하는 패턴이다. 어느 한 객체가 다른 객체의 상태를 구독해야 하는 경우 효과적이다. 기상 스테이션 시스템 구축 프로젝트 Weather-O-Rama라는 업체로부터 날씨 정보를 표시하는 디스플레이 애플리케이션을 일을 수주하게 되었다.Weather-O-Rama에서 요구하는 기능은 아래와 같다. 실시간으로 변화하는 날씨 정보(상태, 온도, 습도, 기압 등)를 표시하는 기능이 있어야 함추후 이러한 디스플레이 기능을 다른 개발자들도 추가할 수 있어야 함 기본적으로 Weather-O-Rama는 WeatherData라는 클래스를 제공해주고 있으며,..