디자인패턴
-
5. 데커레이터 패턴(Decorator Pattern)디자인패턴 2021. 12. 30. 16:47
데커레이터 패턴이란? 데커레이터 패턴은 기본 기능에 추가할 수 있는 기능의 종류가 많은 경우에 각 추가 기능을 Decorator 클래스로 정의한 후 필요한 Decorator 객체를 조합함으로써 추가 기능의 조합을 설계하는 방식이다. 프로그램을 실행하는 중에도 Decorator 객체의 조합이 가능하므로 필요한 추가 기능의 조합을 동적으로 생성하는 것도 가능하다. 아래 예시는 데커레이터 패턴을 적용하기 전 예시이다. 네비게이션 SW에서 도로를 표시하는 기능을 생각해보자. 1. 기본 도록 표시 기능 2. 차선 표시 기능 //기본 도로 표시 클래스 public class RoadDisplay{ public void draw(){ System.out.println("기본 도로 표시"); } } //기본 도로 표시..
-
4. 옵서버 패턴(Observer Pattern)디자인패턴 2021. 12. 22. 20:01
옵서버 패턴이란? 옵서버 패턴은 데이터의 변경이 발생했을 경우 상대 클래스나 객체에 의존하지 않으면서 데이터 변경을 통보하고자 할 때 유용하다. 통보 대상 클래스나 대상 객체의 변경에도 데이터 변경을 통보하는 클래스를 수정 없이 그대로 사용할 수 있도록 한다. 다음 예제를 보며 이해해보자 성적을 출력하는 예시 코드가 있다. //점수 클래스 public class ScoreRecord { private List scores = new Arraylist(); private DataSheetView dataSheetView; //목록 형태로 점수를 출력하는 클래스 public void setDataSheetView(DataSheetView dataSheetView){ this.dataSheetView = da..
-
3. 커맨드 패턴(Command Pattern)디자인패턴 2021. 12. 20. 17:42
커맨드 패턴이란? 이벤트가 발생했을 때 실행될 기능이 다양하면서도 변경이 필요한 경우에 이벤트를 발생시키는 클래스를 변경하지 않고 재사용하고자 할 때 유용하다. 커맨드 패턴은 실행될 기능을 캡슐화 함으로써 기능의 실행을 요구하는 호출자 클래스와 실제 기능을 실행하는 수신자 클래스 사이의 의존성을 제거한다. 따라서 실행될 기능의 변경에도 호출자 클래스를 수정 없이 그대로 사용할 수 있도록 해준다. 아래 예제를 보면서 이해해보자 버튼을 누르는 동작에 따라 다른 기능을 실행하는 예제 //램프 클래스 public class Lamp { public void turnOn() { System.out.println("Lamp On"); } } //알람 클래스 public class Alarm { public void..
-
2. 싱글톤 패턴(Singleton Pattern)디자인패턴 2021. 11. 16. 19:59
싱글톤 패턴이란? 싱글톤 패턴은 인스턴스가 오직 하나만 생성되는 것을 보장하고 어디에서든 이 인스턴스에 접근할 수 있도록 하는 디자인 패턴이다. 가장 직관적인 방법은 생성자를 private 으로 설정하여 외부에서 호출할 수 없도록 하는 것이다. public class Printer { //인스턴스 객체 정적 변수로 선언 private static Printer printer = null; //기본 생성자 private Printer() {} //인스턴스 생성 메소드 public static Printer getPrinter() { if(printer == null) printer = new Printer(); return printer; } //그 외 메소드 public void print(Resourc..
-
1. 스트래티지 패턴(Stragety Pattern)디자인패턴 2021. 11. 8. 23:39
스트래티지 패턴이란? 스트래티지 패턴(Stragety Pattern)은 전략을 쉽게 바꿀 수 있도록 해주는 디자인 패턴이다. 여기에서 전략이란 어떤 목적을 달성하기 위해 일을 수행하는 방식, 비즈니스 규칙, 문제를 해결하는 알고리즘 등으로 이해할 수 있다. 특히 게임 프로그래밍에서 게임 캐릭터가 자신이 처한 상황에 따라 공격이나 행동하는 방식을 바꾸고 싶을 때 스트래티지 패턴은 매우 유용하다. 아래의 예시의 문제점과 해결책을 보며 정리해보자. //로봇 클래스 public abstract class Robot{ private String name; public Robot(String name){ this.name = name; } public String getName(){ return name; } pu..