본문 바로가기

design pattern5

[5] 팩토리 메소드 패턴 팩토리 메서드 패턴을 이용하여 불필요한 의존성을 없애는 방법에 대해 알아봅시다. 디자인 원칙중 하나가, 구현이 아닌 인터페이스를 바탕으로 개발하라는 것이였는데요 new를 이용해서 객체를 생성하는 것을 돌아보면 결국 특정 구현을 바탕으로 프로그래밍 하는 것이 됩니다. 어떤 객체를 생성할 때 조건이 붙게 되는 경우가 있을 것입니다. if(picnic){ duck = new MallardDuck(); } else if(hunting){ duck = new DecoyDuck(); } 위와 같이 특정 조건에 대해 서로 다른 구현체를 인터페이스에 대입하려면 저런 식의 조건문이 필요한데요 이런 코드가 있다는 건 결국 변경 혹은 확장할 때 동일한 코드를 다시 확인하고 추가/제거 해야한다는 뜻이 됩니다. 코드에서 구상 .. 2020. 10. 29.
[4] Decorator Pattern 오늘은 데코레이터 패턴에 대해서 간략하게 알아보고 예시를 통해 적용 방식에 대해서 확실히 이해해보는 시간을 가져보겠습니다. 데코레이터 패턴이란, 상속을 피하고 프로그램의 실행중에 동적으로 클래스를 "꾸며" 서로 다른 기능을 만들어내는 패턴입니다. 이 패턴을 알고 나면, 원래 클래스의 코드를 전혀 바꾸지 않아도 해당 객체에 새로운 임무를 부여할 수 있습니다. 문제 상황에 대한 이해 예시 문제 상황은 이렇습니다. 스타벅스 내부 시스템을 만든다고 가정을 하고, 판매하는 음료의 가격을 매기는 시스템을 구성해 봅시다. 음료에 대해 표현하기 위해서, Beverage 라는 클래스를 만들고 Beverage에 들어가는 요소들을 반영하기 위해 Beverage 클래스의 Property로 그 재료를 넣었습니다. 그리고 나서,.. 2020. 10. 28.
[3] Strategy Pattern Strategy Pattern은 "변화하는 로직"을 분리하여 구성하는 방식 중 하나입니다. 이 패턴의 핵심은 달라지는 부분을 찾아내고, 달라지지 않는 부분으로부터 분리시킵니다. 대표적으로 다음과 같은 상황에 Strategy Pattern을 적용합니다. 1. 진짜 변한다 - 비즈니스 로직이 요구사항에 대해 변하는 경우, 이를 유연하게 대응하기 위함 2. 개별 클래스에 대해 달라야 한다 - 동일한 메소드가 개별 클래스에 대해 그 동작이 달라지고, 재사용해야 하는 경우 개별 행위를 클래스로 캡슐화하여, 동적으로 행위를 변경할 수 있게 구성하는 것이 Strategy Pattern입니다. 메소드를 담고 있는 인터페이스를 정의하고 생성자를 통해 그 구현체를 주입하거나, Setter 메소드를 이용해서 동적으로 변경할.. 2020. 10. 25.
[2] Observer Pattern 옵저버 패턴이란 "자신의 상태"가 변했을 때 다른 Observer (Listener) 들에게 notify 할 수 있는 객체(주제)를 정의합니다. 한 객체의 상태가 바뀌면, 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 "일대다" 의존성을 정의합니다. 제가 처음에 이 옵저버 패턴을 공부했을 때 어려웠던 점이 옵저버 라는 이름에 너무 집착해서 어떤 대상이 다른 대상을 Observe, 즉 관찰하고 있어야 하는 것 아닌가? 라는 생각에 구독 주제가 되는 대상이 실제로 다른 대상들에게 알리는 메소드를 가지고 있는 것이 잘 이해가 되지 않았습니다. 각 객체간 소통을 할 때 객체에 정의되어 있는 메소드를 이용하는데, 옵저버 패턴에서는 "알리는 객체" 가 "구독하는 객체"의 메소드 하나만 알.. 2020. 10. 22.