Design pattern (7) 썸네일형 리스트형 [JAVA 디자인패턴] Decorator pattern(데커레이터 패턴) 기본 기능을 구현하고 그들을 동적으로 조합해서 기능의 집합을 이용할 수 있는 패턴이다. Decorator pattern을 이해하기 위해, 도로를 보여주는 클래스를 작성해보자. 선이 없는 일반적인 도로를 보여주는 기능, 차선을 보여주는 기능, 교통정체를 보여주는 기능, 교차로를 보여주는 기능이 있다. 이러한 기능은 기본적인 도로를 보여주는 클래스를 부모 클래스로 두어서 자신의 기능을 추가하면 된다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 public class DisplayRoad { public void display(){ System.out.. [JAVA 디자인패턴] Composite pattern(컴포지트 패턴) OCP를 만족시키면서 부분-전체 관계를 가지는 객체들 간의 관계를 정의할 때 쓸 수있다. 전체와 부분을 동일한 인터페이스로 관리할 수 있다. composite pattern을 이해하기 위해서, 하나의 박스가 있다고 하자. 그리고 그 박스에는 컴퓨터의 부품들이 들어간다. Box클래스를 만들고 Keyboard, Monitor, Speaker 객체들을 멤버로 가진다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public class Box { private Keyboard keyboard; private Monitor monitor; private Speaker speaker; public int getTotalPrice(){ return keyboard.getPrice() + monit.. [JAVA 디자인패턴] Observer pattern(옵저버 패턴) 데이터의 변경이 발생하였고 변경을 실시간으로 통보해야할 때, OCP를 만족시키면서 데이터의 변경을 통보하는 framework이다. Observer 패턴을 이해하기 위해, 학생의 점수를 입력하고 최대/최소값을 보여주는 클래스를 작성해보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public class ScoreRecord { private List scores = new ArrayList(); private MinMaxView minMaxView; public void setMinMaxView(MinMaxView minMaxView) { this.minMaxView = minMaxView; } public List getScores() { retur.. [JAVA 디자인패턴] Command pattern(커맨드 패턴) 커맨드 패턴을 이해하기 위해, 만능 버튼을 만들어보자. 만능 버튼은 눌리면 어떠한 기능도 수행할 수 있다. 1 2 3 4 5 public class Lamp{ public void turnOn(){ System.out.println("Lamp on"); } } http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5; text-decoration:none">Colored by Color Scripter 1 2 3 4 5 6 7 8 9 10 public class Button{ private Lamp lamp; public void setLamp(Lamp lamp){ this.lamp = lamp; } public void pressed(.. [JAVA 디자인패턴] SOLID 원칙 - 객체지향프로그래밍(OOP) 설계 각 원칙을 설명하기 위해 문제 상황을 제시하고 어떻게 해결해야하는 지에 대해서 중점적으로 이야기해보도록 합시다. SOLID에 대한 기원등은 위키백과를 참고하시기 바랍니다. SRP(단일 책임 원칙, Single Responsibility Principle) 객체가 단 하나의 책임만을 가지도록 설계해야 한다. 책임이라는 것은, 이 객체가 해야할 일을 의미한다. 즉 어느 객체보다도 가장 잘 할 수 있는 일이 1개여야만 한다. 일이 1개여야하는 것은 메소드가 1개라는 의미가 아니다. 논리적으로 하는 일을 의미한다. 우리가 설계 원칙을 배우는 이유는, 예상치 못한 변경사항이 발생하더라도, 다른 객체들이 크게 변화하지 않고 확장하기 위함이다. 그래서 SRP의 단일 책임 원칙이 중요하다. 이 객체가 SRP의 원칙에 .. [JAVA 디자인패턴] Strategy pattern(스트레티지 패턴, 전략패턴) Strategy pattern(스트레티지 패턴) 같은 문제를 해결하는 여러 알고리즘이 클래스별로 캡슐화되어있다. 특정 알고리즘(전략)을 바꾸려면 해당 클래스를 교체해서, 다른 방식으로 해결할 수 있게 해주는 디자인 패턴이다. 스트레티지 패턴을 이해하기 위해, 로봇들을 만들어보자. Robot 추상 클래스를 작성해서 이를 상속받은 클래스들이 어떠한 역할을 할지 기술하였다. attack과 move 추상메소드는 자식클래스에서 재정의하도록 하였다. 왜냐하면 어떤 로봇인지에 따라 움직이는 방식, 공격하는 방식이 다르기 때문이다. Atom이 펀치를 날린다면, TaekwonV는 미사일을 발사한다. 이와같은 설계방식은 적절해보인다. 다른 로봇을 만들때, 해당 클래스를 상속받아서 재구현하면 된다. OCP를 만족한다. 즉,.. [JAVA 디자인패턴] Singleton pattern(싱글턴 패턴) Singleton pattern(싱글턴 패턴) 인스턴스가 오직 한 개만 생성되는 것을 보장하고, 어떤 위치에서든 접근할 수 있도록 하는 디자인 패턴이다. 싱글턴은 수학용어로서, 단 하나의 원소를 가진 집합에서 유래하였다. 싱글턴 패턴을 이해하기 위해, 프린터 관리자를 만들어 보자. 프린터는 오직 한 개만 존재하는 상황이다. 그렇다면, 생성자도 오직 한 번만 실행되어야한다. 그래서 생성자는 public이 아닌, private으로 한다. 그 후, 다른 메소드가 생성자를 1번만 실행하게 하면 된다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class Printer{ private Printer printer = null; private Printer(){ } pu.. 이전 1 다음