OCP(Open Closed Principle)는 확장에는 열려있되, 수정에는 닫혀있어야한다는 디자인 원칙이다. 게임 캐릭터에서 궁수라는 캐릭터를 예를들어 설명해보겠다. 아래 클래스는 아처(캐릭터) 클래스와 활(무기) 클래스이다. public class Archer { private Bow bow; private int level; public Archer(int level) { bow = new Bow(); this.level = level; } public void Attack(){ StringBuilder sb = new StringBuilder(); sb.append("Archer가 데미지 "); sb.append(getPower()); sb.append("을(를) 입혔습니다."); System...
객체지향 원리변하는 것을 캡슐화하라구현에 의존하기 보다는 인터페이스에 의존하도록 코딩하라각 클래스는 변경 요인이 오직 하나이어야한다.클래스는 행동과 기능에 관한 것이다. 디자인 원리 (SOLID) Single Responsibility Principle (SRP) 단일책임의 원리로 모든 객체는 하나의 책임을 가진다. Open Closed Principle (OCP) 수정에는 닫혀있고, 확장에는 열려있다. Liskov Substitution Principle (LSP) 자식 타입들은 부모타입들이 사용되는 곳에 대체될 수 있어야한다. 상속보다는 위임, 구성, 집합을 사용하면 소프트웨어는 더 유연하고, 유지보 수성, 확장성, 재사용성이 좋아진다. Interface segregation principle (IS..
여러 패턴이 함께 사요이되는 형태를 Compound패턴이라고 한다. 이 중 가장 대표적인 MVC(Model, View, Controller)패턴에 대해 알아보자. MVC패턴은 모델과 뷰를 분리하고 그 사이에 제어를 하는 Controller를 두는 형태이다. 모델 : 응용의 데이터와 데이터를 조작하기 위한 규칙이 구현됨 뷰 : 외부로 보여지는 부분 컨트롤러 : 모델의 변 위 이미지 처럼 사람이 보는 쪽은 View이며, 리모컨으로 컨트롤 해준다. 실제 MP3의 경우는 View이면서 Controller이기도 하다. 다른 패턴과의 사용 원격 프록시 패턴 : 뷰와 모델관계를 클라이언트-서버 모델로 쉽게 확장 가능하다. Composite 패턴 : Controller는 오직 가장 상위 Component에게만 upda..
StatePattern : 객체 내부 상태가 변경되었을 때 행동 패턴을 바꿀 수 있도록 해준다. StatePattern을 구현하는 방법에는 여러가지가 있다. 1. State-driven transition 2. Context-driven transition 3. Singleton, State-driven transition 4. Singleton, Context-driven transition 5. + 열거형을 통한 방법 (context-driven, state-driven) 1. State-driven transition 2. Context-driven transition 이 두 방식을 구현해보자면, 아래와 같다. main Door door = new Door(); door.close(); door.l..
Template패턴 상위 클래스에서는 처리의 뼈대(program skeleton of analgorithm)를 결정하고, 하위 클래스에서는 구체적인 내용을 결정한다. -> 의존성 부패(dependency rot) 문제를 방지 Concrete Method: Template 메소드가 정의된 클래스에 완전히 정의되는 메소드로 하위 클래스에서는 재정의하지 않아야 하는 연산. 다른 말로 complete method라 함 (자바에서 final 키워드로 수식) Abstract Method: - 하위에서 반드시 정의 Template 메소드가 정의된 클래스에 선언만 되어 있는 추상 메소드로 하위 클래스에서 반드시 정의하여야 하는 연산 Hook Method: - 선택적 정의 Template 메소드가 정의된 클래스에 기본 ..
어댑터(Wrapper) 클래스는 기존 클래스에 대한 수정 없이 서로 직접적으로 상호작용할 수 없는 두 클래스를 상호작용할 수 있도록 해준다.즉, ‘이미 제공되어 있는 것’과 ‘필요한 것’의 차이를 없애줄 수 있는 패턴 예) A라는 회사에서 B라는 회사에서 만든 코드를 자기회사에서 만든 회사의 코드와 연동시킬 때, 코드를 받을 때 마다 수정할 순 없다. 이때사용되는 것이 Adapter패턴!! AdpaterPattern의 구현은 is-a 또는 has-a 로 구현된다. -------------------------------------------------------------------------------------------------------------- User라는 클래스가 있을 때, UserAda..
CommandPattern을 사용하다 보면 슬롯이 아직 Command객체가 null상태인데 execute()하려는 경우 java.lang.NullPointerException이라는 예외가 발생할 경우가 있다. 이런 경우를 처리하기위해서는 if(onCommands[slot] != null) 과같은 조건문을 통해 걸러주어야한다. 만약 조건문 이외의 다른 처리방법이 있을까? 바로 초기화를 시켜놓는 방법이다. Command라는 인터페이스를 가지는 빈 클래스를(noCommand) 생성하여 모두 이 클래스로 초기화 시켜주는 방법이 있다. for(int i=0; i
Command 패턴 요청을 객체로 캡슐화해주며, 파라미터를 통해 다양한 요청을 처리할 수 있도록 해준다. 또한 요청을 큐에 유지할 수 있으며, 요청에 대한 로그를 유지할 수 있고, 요청 취소 기능도 제공한다. Project : 작업 취소 기능이 있는 선풍기 구현해보기 Command 인터페이스 생성 public interface Command { public void execute(); public void undo(); } Command 인터페이스에 맞춰 프로그래밍할 클래스 생성 CeilingFanHighCommand implements Command{..} CeilingFanLowCommand implements Command{..} CeilingFanMediumCommnad implements Com..
1. Singleton public class SerialNumberGenerator { private int count = 0; private SerialNumberGenerator() { } private static class SerialHolder { private static final SerialNumberGenerator serial = new SerialNumberGenerator(); } public static SerialNumberGenerator getInstance() { return SerialHolder.serial; } public int getNext() { return ++count; } } public class SerialNumberGenerator { private ..
- Total
- Today
- Yesterday