Language/Java Design Pattern
-
Java Design Pattern - 추상 팩토리 패턴(Abstract Factory Pattern)Language/Java Design Pattern 2022. 11. 22. 14:31
추상 팩토리 패턴(Abstract Factory Pattern) 추상 팩토리 패턴이란? 추상 팩토리 패턴이라는 이름만 봐서는 팩토리 메서드 패턴과 비슷해 보이지만, 명확한 차이점이 있다. 1. 팩토리 메서드 패턴 : 조건에 따른 객체 생성을 팩토리 클래스로 위임하여, 팩토리 클래스에서 객체를 생성하는 패턴 2. 추상 팩토리 패턴 : 서로 관련이 있는 객체들을 통째로 묶어서 팩토리 클래스로 만들고, 이들 팩토리를 조건에 따라 생성하도록 다시 팩토리를 만들어서 객체를 생성하는 패턴 추상 팩토리 패턴은 어떻게 보면, 팩토리 메서드 패턴을 좀 더 캡슐화한 방식이라고 할 수 있다. 예를 들어, 컴퓨터를 생산하는 공장이 있을 때 마우스, 키보드, 모니터의 제조사로 Samsung과 LG가 있다고 가정해 보겠다. 컴퓨..
-
Java Design Pattern - 팩토리 메서드 패턴(Factory Method Pattern)Language/Java Design Pattern 2022. 11. 22. 11:27
팩토리 메서드 패턴(Factory Method Pattern) 팩토리 메서드 패턴이란? 어떠한 상황에서 조건에 따라 객체를 다르게 생성해야 할 경우가 있다. 예를 들면, 사용자의 입력값에 따라 하는 일이 달라질 경우, 분기를 통해 특정 객체를 생성해야 한다. 객체마다 하는 일이 다르기 때문에 조건문에 따라 객체를 다르게 생성하는 것은 이상한 일이 아니다. 팩토리 메서드 패턴은 이렇게 분기에 따른 객체의 생성을 직접 하지 않고, 팩토리라는 클래스에 위임하여 팩토리 클래스가 객체를 생성하도록 하는 방식을 말한다. 팩토리는 말 그대로 객체를 찍어내는 공장을 의미한다. 팩토리 메서드 패턴의 사용 이유 public class Type { } public class TypeA extends Type { public..
-
Java Design Pattern - 템플릿 메서드 패턴(Template Method Pattern)Language/Java Design Pattern 2022. 11. 22. 10:07
템플릿 메서드 패턴(Template Method Pattern) 템플릿 메서드 패턴이란? 템플릿 메서드 패턴은 여러 클래스에서 공통으로 사용하는 메서드를 상위 클래스에서 정의하고, 다르게 구현해야 하는 세부적인 사항을 하위 클래스에서 구현하는 패턴을 말한다. 코드의 중복을 제거하기 위해 흔히 사용되는 리팩터링 기법이다. 상위 클래스에서 정의하는 부분을 템플릿 메서드라 하고, 템플릿 메서드에서 하위 클래스마다 다르게 구현되어야 하는 부분을 훅이라고 한다. 템플릿 메서드의 구현 public abstract class Parent { /** 자식에서 공통적으로 사용하는 부분(템플릿 메서드) */ public void someMethod() { System.out.println("Parent에서 실행되는 부분 ..
-
Java Design Pattern - 데커레이터 패턴(Decorator Pattern)Language/Java Design Pattern 2022. 11. 21. 17:22
데커레이터 패턴(Decorator Pattern) 데커레이터 패턴이란? 데커레이터 패턴은 어떤 기능에 추가적으로 기능을 덧붙이고 싶은 경우, 그 기능들을 Decorator로 만들어서 덧붙이는 방식이다. 예를 들어, 서브웨이 샌드위치를 생각해 보겠다. 서브웨이를 주문하면 고객의 기호에 따라 채소를 선택할 수 있다. 즉, 기본 빵 위에 채소와 토핑을 추가하여 샌드위치가 완성되는 것이다. 여기서 채소와 토핑(양상추, 피클, 양파, 치즈 등)들 각각이 데커레이터가 된다. 데커레이터 패턴을 사용하면 기능이 딱 정해져 있는 객체가 아닌, 동적으로 기능을 조합하여 객체를 만드는 것이 가능해진다. 데커레이터 패턴의 사용 이유 샌드위치를 만들기 위해서는 기본적으로 빵(Bread)이 필요하다. 그리고 토핑으로 양상추(Le..
-
Java Design Pattern - 옵저버 패턴(Observer Pattern)Language/Java Design Pattern 2022. 11. 21. 14:27
옵저버 패턴(Observer pattern) 옵저버 패턴이란? 옵저버 패턴은 어떤 객체에 이벤트가 발생했을 때, 이 객체와 관련된 객체(옵저버)들에게 통지하도록 하는 디자인 패턴을 말한다. 즉, 객체의 상태가 변경되었을 때, 특정 객체에 의존하지 않으면서 상태의 변경을 관련된 객체들에게 통지하는 것이 가능해진다. 이 패턴은 Pub/Sub(발행/구독) 모델로 불리기도 한다. 예를 들어, 유튜브를 생각해 보겠다. Pub/Sub 모델에 따르면, 유튜브 채널은 발행자가 되고 구독자들은 구독자(옵저버)가 되는 구조이다. 즉, 유튜버가 영상을 올리면 구독자들은 영상이 올라왔다는 알림을 받을 수 있다. 이렇게 각각의 유저들은 유튜브 채널을 구독하고 있는 옵저버가 된다. 옵저버 패턴의 사용 이유 예를 들어, 어떤 유저..
-
Java Design Pattern - 커맨드 패턴(Command Pattern)Language/Java Design Pattern 2022. 11. 20. 20:43
커맨드 패턴(Cammand Pattern) 커맨드 패턴이란? 커맨드 패턴은 객체의 행위(메서드)를 클래스로 만들어 캡슐화하는 패턴이다. 즉, 어떤 객체(A)에서 다른 객체(B)의 메서드를 실행하기 위해서는 그 객체(B)를 참조하고 있어야 하는 의존성이 발생한다. 하지만, 커맨드 패턴을 적용하면 이러한 의존성을 제거할 수 있다. 또한, 기능이 수정되거나 변경이 일어날 때, A 클래스 코드 수정할 필요 없이 기능에 대한 클래스를 정의하면 되기 때문에, 시스템이 확장성이 있으면서 유연해진다. 커맨드 패턴의 사용 이유 구글 홈이라고 "OK Google 히터 틀어줘"라고 하면, 히터를 틀어주는 실제 구글 서비스가 존재한다. 구글 홈을 사용하는 사용자를 Client, 구글 홈을 OKGoogle, 히터를 Heater..