목록JAVA객체지향디자인패턴 (13)
JUINTINATION
커맨드 패턴이란? 실행될 기능을 캡슐화하여 기능의 실행을 요구하는 호출자 클래스(Invoker)와 실제 기능을 실행하는 수신자 클래스(Receiver) 사이의 의존성을 제거하여 이벤트가 발생했을 때 실행될 기능이 다양하면서 변경이 필요한 경우 실행될 기능의 변경에도 호출자 클래스의 수정없이 그대로 사용할 수 있도록 해주는 패턴이다. 다음과 같은 램프를 켜는 버튼이 있다고 하자. class Lamp { public void turnOn() { System.out.println("Lamp.turnOn"); } } class Button { private Lamp lamp; public Button(Lamp lamp) { this.lamp = lamp; } public void pressed() { lamp...
스테이트 패턴이란? 시스템의 각 상태를 클래스로 분리하고 각 클래스에서 수행하는 행위들을 메서드로 구현하여 어떤 행위를 수행할 때 상태에 행위를 수행하도록 위임하는 패턴이다. 스테이트 패턴과 스트래티지 패턴 공통점 행위를 클래스로 캡슐화 연관 관계를 이용해 행위를 구현한 클래스에 실제 작업을 위임 실행 중 행위 변경 가능 차이점 스트래티지 패턴 기능 수행 전략을 캡슐화 Client가 Context에 사용할 Strategy 지정 스테이트 패턴 객체의 상태를 캡슐화 Client가 Context의 State를 지정해주지 않음 위와 같은 상태 머신 다이어그램을 갖는 형광등이 있다고 하자. 해석해보면 다음과 같다. 형광등은 기본적으로 OFF 상태에서 시작한다. OFF 상태에서 사용자가 on 버튼을 누르면 ON 상..
스트래티지 패턴이란? 어떤 목적을 달성하기 위해 일을 수행하는 방식, 비즈니스 규칙, 문제를 해결하는 알고리즘 등을 의미하는 전략을 쉽게 바꿀 수 있도록 해주는 패턴이다. 프로그램에서 전략을 실행할 때는 쉽게 전략을 바꿔야 할 필요가 있는 경우가 많이 발생하는데 특히 게임 프로그래밍에서 게임 캐릭터가 자신이 처한 상황에 따라 공격이나 행동하는 방식을 바꾸고 싶을 때 스트래티지 패턴은 매우 유용하게 쓰인다. 다음과 같이 로봇을 만드는 클래스가 있다고 가정해보자. public class Main { public static void main(String[] args) { Robot taekwonV = new TaekwonV("TaekwonV"); Robot atom = new Atom("Ateom"); Sy..
싱글턴 패턴이란? '단 하나의 원소만을 가진 집합'이라는 수학 이론에서 유래된 인스턴스가 딱 하나만 생성되고 어디에서든 이 인스턴스에 접근할 수 있도록 보장하는 패턴이다. 클래스에 싱글턴 패턴을 적용하는 방법은 다음과 같다. 생성자를 private 메서드로 변경한다. class Singleton { private Singleton() {} } 접근할 하나의 인스턴스를 static 인스턴스로 만들어준다. class Singleton { private static Singleton instance = null; private Singleton() {} } 하나의 static 인스턴스에 접근하기 위한 static 메서드를 만든다. class Singleton { private static Singleton i..
디자인패턴이란? 소프트웨어를 설계할 때 특정 맥락에서 자주 발생하는 고질적인 문제들이 또 발생했을 때 재사용할 수 있는 해결책 패턴이란? 비슷하거나 동일한 양식 또는 유형들이 반복되어 나타나는 것 문제와 해결책도 동일한 유형이나 양식을 통해 쉽게 찾을 수 있다. 디자인 패턴에 적절한 격언 바퀴를 다시 발명하지 마라 (Dont reinvent the wheel) 이미 잘 굴러가는 바퀴는 처음부터 다시 만들 필요가 없다. 디자인패턴 구조 콘텍스트 : 문제가 발생하는 여러 상황을 기술 문제가 발생하는 여러 상황을 기술한다. 즉, 패턴이 적용될 수 있는 상황을 나타낸다. 경우에 따라서는 패턴이 유용하지 못하는 상황을 나타내기도 한다. 문제 : 패턴이 적용되어 해결될 필요가 있는 디자인 이슈 패턴이 적용되어 해결..
SRP: 단일 책임 원칙(Single Responsibility Principle) 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. 클 수 있고, 작을 수 있다. 문맥과 상황에 따라 다르다. 객체 지향 설계 관점에서 책임의 기본 단위는 객체이다. 책임 = 해야하는 것, 할 수 있는 것, 변경 이유 중요한 기준은 변경이다. 요구 사항의 변경이 있을 때 가능한 영향을 받는 부분을 줄여야 한다. 변경 사유가 될 수 있는 것을 하나로 만들어야 한다. ex) DB 스키마 변경, UI 변경, 객체의 생성과 사용을 분리 OCP: 개방-폐쇄 원칙 (Open/Closed Principle) 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다 기존의 코드는 변경하지 않으면서 기능을..