designpattern(5)
-
[Design Pattern] GoF's Builder vs. Joshua Bloch's Builder
빌더패턴은 오브젝트 생성과 관련된 패턴이다. ( Createtional design pattern ) 빌더 패턴과 관련해서 GoF가 소개한것과 Joshua Bloch가 소개한 빌더패턴이 약간 다른데 오늘은 두가지 코드를 모두 작성해보려고 한다. GoF's Builder Pattern 큰 맥락은 비슷하지만 GoF 빌더패턴을 구현하는 방법에 따라 인터페이스가 좀더 추가되는 경우가 있다. 개인적으로 아래의 예시가 제일 코드가 심플하고 이해가능한(?)수준인것 같다. GeeksForGeeks에 있는 예제코드는 개인적으로 너무 장황한 느낌이다. Builder Say you have a constructor with ten optional parameters. Calling such a beast is very in..
2021.12.26 -
[디자인패턴] 커맨드 패턴(Command Pattern)
Head First Design Patterns를 읽고 학습한 내용을 기록합니다. 0. 커맨드 패턴 정의 아래는 책에 쓰여있는 커맨드 패턴의 정의. 커맨드 패턴을 이용하면 요구 사항을 객체로 캡슐화 할 수 있으며, 매개변수를 써서 여러 가지 다른 요구 사항을 집어넣을 수도 있습니다. 또한 요청 내역을 큐에 저장하거나 로그로 기록할 수도 있으며, 작업취소 기능도 지원 가능합니다. 커맨드 패턴은 결과를 위한 계산과정의 각 부분들을 캡슐화 시킬 수 있다. 계산의 결과를 원하는 클라이언트는 사실 과정은 궁금하지 않고 결과만 올바르게 출력되면 된다. 이런 Needs에 의해 커맨드 패턴은 계산과정을 캡슐화하고, 클라이언트는 단순히 계산을 해달라는 명령만 수행함으로써 원하는 결과를 얻어낼 수 있다. 실습을 하면서 조..
2021.03.07 -
[Design Pattern] 싱글턴 패턴(Singleton Pattern)
Head First Design Patterns를 읽고 학습한 내용을 작성합니다. 0. 싱글턴 패턴의 정의와 필요성 싱글턴 패턴은 해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴입니다. 사실 얼핏보기에는 이게 패턴까지 될필요가 있나싶다. 전역변수 하나면 쉽게 해결될 문제인것같다. 하지만 인스턴스를 전역변수로 셋팅하면 하면 해당 파일이나 화면이 로딩 될때 항상 생성된다. 전혀 사용되지 않는 경우에도 말이다. 거기다 해당 인스턴스가 상당히 많은 양의 리소스를 소모한다면 사용하지도 않는데 성능까지 저하시킬수도 있다. 또한, 소스코드 어딘가에 인스턴스를 추가로 생성하는 코드가 있다면 이를 방지할 방법이 없다. 1. 고전적인 싱글턴 패턴 1 2 3 4 5 6..
2021.03.05 -
[Design Pattern] 팩토리 패턴(Factory Pattern)
Head First Design Patterns를 읽고 학습한 내용을 기록합니다. 0.개요 (손이 좀더 가더라도)조건문을 클래스로 뽑아내서 관리할때가 더 좋은 경우가 있다. 조건문의 내용이 객체 인스턴스를 만드는 작업이라면 더욱더 그렇다. 객체의 인스턴스를 만드는 작업이 항상 공개되어 있어야하는것은 아니며, 오히려 공개를 했다간 클래스간 결합에 관련된 문제가 발생할 수 있기 때문이다. 이전 패턴을 학습할때 Duck이라는 인터페이스를 써서 각종 오리 인스턴스 생성에 유연하게 대처했다. 1 Duck duck = new MallardDuck(); cs 하지만 아래처럼 일련의 구상 클래스(각종 오리)들이 있을때는 부득이하게 조건문을 통해 인스턴스화를 수행할 수 밖에 없다. [ 이 코드만 보면 크게 문제 될건 없..
2021.03.02 -
[Design Pattern] 데코레이터 패턴(Decorator Pattern)
Head First Design Patterns를 읽고 학습한 내용을 기록합니다. 정의 데코레이터 패턴에서는 객체에 추가적인 요건을 동적으로 첨가한다. 데코레이터는 서브클래스를 만드는것을 통해서 기능을 유연하게 확장할 수 있는 방법을 제공한다. 예제 커피 주문 프로그램을 만든다고 생각해보자. 당연히 커피의 종류가 정의 되어야 할것이다. 일반적으로 아래처럼 만들수 있을것이다. Beverage는 추상클래스이며 Espresso , DarkRoast등 서브클래스가 확장해서 사용하게 된다. 위 구조에서 커피에 두유와 모카 토핑을 하려면 어떻게 해야할까? 첫번째 방법으로는 아래처럼 커피와 토핑이 조합가능한 모든 경우를 서브 클래스로 정의하는것이다. 디카페인 커피(Decaf)에 두유,모카를 토핑하는 경우를 정의했는데..
2021.02.05