디자인패턴
-
헤드 퍼스트 디자인 패턴 - 3장 객체 꾸미기 - 데코레이터 패턴도서 2023. 7. 27. 21:26
3. 객체 꾸미기 - 데코레이터 패턴 커피 가격 시스템으로 알아보자 추상 클래스 Beverage 를 만들고 모든 음료가 이를 상속하도록 구현했다 하지만 이는 고객의 커스텀 주문으로 인해 레시피가 바뀌고 그에 따라 가격이 변동되는 부분을 개별 클래스로 만들어 처리해야 하기 때문에 각 사례에 맞는 수 많은 클래스들이 필요했다 만약 인스턴스 변수를 추가한 상속으로 관리해보려고 한다면? 이렇게 5개의 클래스로 끝낼 수 있다고 생각했다 과연 성공적인 구현 방법일까? OCP Open-Closed Principle 클래스는 확장에서는 열려 있어야 하지만 변경에는 닫혀 있어야 한다 기존 코드를 건드리지 않고 확장으로 새로운 행동을 추가하는 것을 목표로 한다 새로운 기능을 추가할 때 유연하고 잘 적응하는 디자인을 만들 ..
-
헤드 퍼스트 디자인 패턴 - 2장 객체들에게 연락 돌리기 - 옵저버 패턴도서 2023. 7. 18. 23:15
가상 모니터링 애플리케이션으로 알아보기 기상 스테이션(기상 정보 수집 물리 장비) WeatherData 객체 디스플레이 장비 3가지 요소로 구성 기상 스테이션과 WeatherData 객체는 제공받는 상황에서 객체와 디스플레이 통합, 디스플레이 표시를 어떻게 구현해야할까? WeatherData 클래스 가상 모니터링 애플리케이션으로 알아보기 기상 스테이션(기상 정보 수집 물리 장비) WeatherData 객체 디스플레이 장비 3가지 요소로 구성 기상 스테이션과 WeatherData 객체는 제공받는 상황에서 객체와 디스플레이 통합, 디스플레이 표시를 어떻게 구현해야할까? WeatherData 클래스 온도, 습도, 기압 값을 리턴하는 메소드를 가짐 이런 기상 관측 값이 생신될 때마다 measurementsCha..
-
헤드 퍼스트 디자인 패턴 - 1장 디자인 패턴의 세계로 떠나기도서 2023. 7. 16. 21:54
디자인 패턴의 세계로 떠나기 Duck 을 상속하여 여러 종류의 오리를 만들었다 날기 기능을 추가하고 싶어서 Duck 클래스에 fly() 메소드를 추가한다면? 날지 않는 오리(장난감 오리)도 날게 되어 버린다. 상속을 활용한다면 규격이 바뀔 때마다 서브 클래스의 메소드를 상황에 따라 오버라이드해야 한다. 상속대신 인터페이스를 구현하는 것으로 바꾼다면 이런 문제는 해결할 수 있다(Flyable, Quackable) 하지만 코드 재사용이 안된다는 점에서 코드 관리에 문제가 발생할 수 있다 디자인 원칙 1 애플리케이션에서 달라지는 부분을 찾아 달라지지 않는 부분과 분리한다 즉 바뀌는 부분은 따로 뽑아 캡슐화를 하여 바뀌지 않는 부분에 영향을 미치지 않고 고치거나 확장할 수 있게 한다 오리의 경우 나는 행동 꽥꽥..