목록프로그래밍👩🏻💻/디자인 패턴 (12)
suyeonme
헤드 퍼스트 디자인 패턴을 읽고 정리한 내용입니다. 1. 간단한 팩토리(Simple Factory) 디자인 패턴이라기 보다는 프로그래밍에서 자주 쓰이는 관용구이다. 객체 생성 작업을 팩토리 클래스로 캡슐화해놓으면 구현을 변경할 때 팩토리 클래스 하나만 고치면 된다. 즉 코드에서 중복되는 내용을 제거할 수 있고, 관리할 때도 한군데만 관리하면 된다. 객체 인스턴스를 만들 때 인터페이스만 있으면 된다. 인터페이스를 바탕으로 하여 유연성과 확장성이 뛰어난 코드를 작성할 수 있다. 팩토리(factory): 객체 생성을 처리하는 클래스 1.1 문제 상황 당신은 피자가게를 운영한다. 따라서 아래의 코드를 작성하였다. 하지만 코드는 몇 가지 문제점이 있다. 피자 종류가 추가, 제거, 변경등이 일어날 때마다 코드를 계..
헤드 퍼스트 디자인 패턴을 읽고 정리한 내용입니다. 1. 문제 상황 1. 유명 커피 전문점은 주문 시스템을 개선하려고 한다. 2. 고객은 커피를 주문할 때 우유, 두유, 모카등을 추가할 수 있다. 각각을 추가할 때 마다 커피의 가격은 변한다. 3. 첨가물은 추가되거나 제거되는등 변경될 수 있다. 2. 데코레이터 패턴으로 문제 해결 2.1 데코레이터 패턴(Decorator Pattern)이란? 객체에 추가 요소를 동적으로 더할 수 있는 디자인 패턴이다. 데코레이터를 사용하면 서브 클래스를 만들 때보다 훨씬 유연하게 기능을 확장할 수 있다. 데코레이터를 적용하는 방법은 아래와 같다. (고객이 Dark Roast에 모카와 휘핑크림을 주문했다고 가정) 1. DarkRoast 객체를 생성한다. 2. Mocha 객..
헤드 퍼스트 디자인 패턴을 읽고 정리한 내용입니다. 1. 문제 상황 1. WeatherData 객체는 물리 기상 스테이션과 통신해서 갱신된 기상 데이터를 가져온다. 2. 복수개의 디스플레이는 WeatherData 객체의 기상데이터를 사용한다. 3. 따라서 WeatherData 객체의 기상 데이터가 업데이트될 때마다 디스플레이 장비의 데이터 또한 업데이트해야한다. 2. 문제 해결 시도 가장 간단한 방법으로 아래와 같이 구현할 수 있다. 이 때 각각의 display에서 update()를 호출하는 부분은 구체적인 구현에 맞춰서 코드가 작성되었으므로 프로그램을 고치지 않고서는 다른 디스플레이 항목을 추가하거나 제거할 수 없다. 따라서 해당 부분은 캡슐화가 필요하다. public class WeatherData ..
헤드 퍼스트 디자인 패턴을 읽고 정리한 내용입니다. 1. 문제 상황 1. Duck이라는 슈퍼 클래스가 있고 이 클래스를 확장하여 서로 다른 종류의 오리를 만들었다. 2. 오리가 날 수 있는 기능을 추가해달라는 요건이 들어왔다. 3. Duck 슈퍼 클래스에 fly() 메소드를 추가했다. --> fly 기능을 가지면 안되는 서브 클래스들이 fly()를 상속받았다. 4. fly 기능이 필요없는 서브 클래스에서는 fly()가 아무것도 하지 않도록 오버라이드한다. 5. 추가 요건이 계속 들어온다. (quack, eat, sleep등) --> 일일히 오버라이드할 수 없다. 2. 전략 패턴을 사용하여 해결 3.1 전략 패턴(Strategy Pattern)이란? 알고리즘군을 정의하고 캡슐화해서 각각의 알고리즘을 수정해..