반응형

디자인패턴

    싱글톤 패턴 (Singleton Pattern)

    대게 공용으로 사용하는 유틸성 클래스의 경우 하나의 공용 인스턴스 객체를 생성하고 필요로 할 때마다, 해당 이스턴스 객체에 접근 하여 사용한다. 이를 싱글톤 패턴이라고 한다. 싱글톤 패턴 - 하나의 인스턴스만을 생성하는 책임이 있으며, getInstance 메소드를 통해 모든 클라이언트에게 동일한 인스턴스를 반환한다. 12345678910111213// 유틸성 클래스의 경우 인스턴스 객체를 만들거나 상속을 할 필요가 없으므로 final과 private 생성자를 만든다.public final class Util { private Utill () {} private Util util = null; public static Util getUtil() { if (util == null ) { util = new..

    옵저버 패턴 (Observer Pattern)

    옵서버 패턴은 데이터의 변경이 발생되었을 경우 상대 클래스나 객체에 의존하지 않으면서 데이터 변경을 통보하고자 할 때 유용하다. 예를 들면 새로운 파일이 추가되거나 기존 파일이 삭제되었을 때 여러 프로그램에게 동시에 알려주어야 모든 프로그램이 그 최신 내역을 반영할 수 있다. 예를 들어보자 만약 회원들의 정보를 보관하는 Member 클래스와 Member들의 리스트를 출력해주는 Member View 클래스가 존재한다고 하였을 때, 다음과 같이 Member 객체가 추가 될 때 마다 Member View를 업데이트 해줄 수 있다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152// 멤버클..

    데코레이트 패턴 (Decorator Pattern)

    데코레이트 패턴은 기본 기능에 추가할 수 있는 기능의 종류가 많은 경우에 각 추가 기능을 Decorator 클래스로 정의한 후 필요한 Decorator 객체를 조합함으로써 추가 기능을 설계하는 방식이다. 문제가 되는 예를 확인해보자. 만약 음식을 할 때, 준비를 해는 클래스 ReadyDish가 있다고 해보자. 생선 음식을 준비해야할 때는 ReadyDish 클래스에서 하는 ready() 메소드가 필요하며, 생선클래스를 위한 메소드 readyForFish()메소드가 필요하다. 그럴경우 기본적인 기능은 ReadyDish 클래스에 정의하고 추가적인 기능은 다음과 같이 하위클래스로서 상속받아서 진행할 수도 있다. 12345678910111213141516171819202122package decorator; pu..

    템플릿 메서드 패턴 (Template method)

    템플릿 메서드 패턴에 대해 알아보기 위해 먼저 문제의 소지가 있는 상황을 알아보자. [예시] 만약 특정 제품의 모터를 동작시키고자 할 때 현재 모터가 동작중인지, 작업장에 문이 열려 있는지 확인하고 동작하도록 하는 로직을 다음과 같이 만들어보자 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293package template; public class Door { private DoorStatus doorStatus; public DoorStat..

    팩토리 메서드 패턴 (Factory method)

    팩토리 메서드 패턴은 객체의 생성 코드를 별도의 클래스/메서드로 분리하는 패턴이다. 이로써 특정 기능의 구현은 개별 클래스를 통해서 제공을 하도록 설계를 하면서 호출하는 메서드 코드의 중복된 코드 발생과 기능 변경으로 인해 자주 변경되지 않도록 하기 위해서 사용하는데 효과적이다. 다음 예를 살펴보자. 여러 엘레베이터 조작을위해 다음과 같이 구성이 되어있다고 가정해보자. 엘레베이터의 층수를 관리하는 ElevatorManager 클래스 각 엘레베이터 클래스 ElevatorController 클래스 스케줄 클래스 ThroughputScheduler 클래스 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748..

반응형