Computer Science/Design Pattern
-
[디자인 패턴] 이터레이터 패턴 (Iterator Pattern)Computer Science/Design Pattern 2022. 12. 14. 00:55
이터레이터 패턴이란? : 이터레이터를 사용하여 컬렉션의 요소들에 접근하는 디자인 패턴 - 컬렉션 구현을 노출시키지 않으면서도 그 안에 있는 모든 항목에 접근할 수 있게 함 - 집합체 내에서 어떤 식으로 일이 처리되는지 몰라도 안에 있는 항목에 대해 반복작업 수행 가능 [ 장점 ] - 집합체 클래스의 응집도 증가 - 모든 항목에 일일이 접근하는 작업을 이터레이터 객체에서 진행함으로써, 집합체에서는 반복 작업이 아닌 원래 자신의 역할에 전념할 수 있음 [ 단점 ] - 단순 순회만을 구현할 경우 클래스만 많아져 복잡도가 증가함 참조: [Design Pattern] 이터레이터 패턴 (iterator pattern)
-
[디자인 패턴] 프록시 패턴 (Proxy Pattern)Computer Science/Design Pattern 2022. 12. 13. 17:24
프록시 패턴이란? : 대상 객체에 접근하기 전 그 접근에 대한 흐름을 가로채 대상 객체 앞단의 인터페이스 역할을 하는 디자인 패턴 - 이를 통해 객체의 속성, 변환 등을 보완 - 보안, 데이터 검증, 캐싱, 로깅에 사용 - 흐름제어만 할 뿐 결과값을 조작하거나 변경하지 않음 [ 종류 ] 1. Virtual Proxy : 주체 클래스가 리소스 집약적인 경우 - 해상도가 높은 이미지를 처리해야 할 경우, 인스턴스화시 많은 메모리를 사용하게 됨. - 프록시 클래스에서 자잘한 작업을 처리하고 리소스가 많이 요구되는 작업이 필요할 때만 주체 클래스를 사용하도록 구현 2. Protection Proxy : 주체 클래스에 대한 접근을 제어하기 위한 경우 - 프록시 클래스에서 클라이언트가 주체 클래스에 대해 접근을 허..
-
[디자인 패턴] 옵저버 패턴 (Observer Pattern)Computer Science/Design Pattern 2022. 12. 13. 16:51
옵저버 패턴이란? : 주체가 어떤 객체의 상태 변화를 관찰하다가 상태 변화가 있을 때마다 메서드 등을 통해 옵저버 목록에 있는 옵저버들에게 변화를 알려주는 디자인 패턴 - 주체: 객체의 상태 변화를 보고 있는 관찰자 - 옵저버: 객체의 상태 변화에 따라 전달되는 메서드 등을 기반으로 '추가 변화 사항'이 생기는 객체 - 한 객체의 상태 변화에 따라 다른 객체 상태도 연동되도록 1:N 의존 관계를 구성 - Java는 기본적으로 옵저버 패턴을 적용한 Observer 인터페이스, Observable 클래스를 제공 (Observable은 상속을 해야하기 때문에 다른 상속을 함께 사용할 수 없는 단점 존재) [ 구현 방법 ] interface Subject { public void register(Observer..
-
[디자인 패턴] 전략 패턴 (Strategy Pattern)Computer Science/Design Pattern 2022. 12. 13. 14:09
전략패턴이란? : 실행 중에 알고리즘을 선택할 수 있게 하는 행위(Behavioral) 소프트웨어 디자인 패턴 - 특정한 계열의 알고리즘을 정의하고 각각 캡슐화하며 해당 계열내에서 상호 교체가 가능하게 함 - 어떤 동작을 하는 로직을 정의하고, 이것을 캡슐화하여 관리하는 패턴 (ex. 결제할 때 네이버페이, 카카오페이 등 '전략'만 바꿔서 결제가 가능하게 함) - 독립적으로 알고리즘을 다양하게 변경할 수 있으며 기능 추가, 로직 변경시 유연하게 확장 가능 - 어떤 전략을 사용할지 외부에서 데이터 입력이 필요 - 클래스를 수정하지 않고도 기능을 추가하거나 변경할 수 있음 [ 구현 방법 ] // 결제 전략 인터페이스 interface PaymentStartegy { public void pay(int amo..
-
[디자인 패턴] 팩토리 패턴 (factory pattern)Computer Science/Design Pattern 2022. 12. 13. 00:09
팩토리패턴이란? : 객체 생성 처리를 하위 클래스로 분리해 처리하도록 캡슐화하는 패턴 - 객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화 - 상속 관계에 있는 두 클래스에서 상위클래스는 중요한 뼈대를 결정하고 하위클래스는 객체 생성에 관한 구체적인 내용을 결정 - 상위 클래스에서는 인스턴스 생성 방식에 대해 관여하지 않기 때문에 더 많은 유연성을 가짐 - 객체 생성로직이 따로 있기 때문에 코드 리팩토링에 있어서 편의성 증가 [ 구현 방법 ] abstract class Coffee { public abstract int getPrice(); @Override public String toString() { return "This coffee is " + this.getPrice(); } } cla..
-
[디자인 패턴] 싱글톤 패턴(Singleton Pattern)Computer Science/Design Pattern 2022. 12. 12. 23:41
싱글톤패턴이란? : 단 '하나'의 인스턴스만 생성하여 사용하는 디자인패턴 - 애플리케이션에 시작될 때, 클래스가 최초 한 번만 메모리를 할당하고 해당 메모리에 인스턴스를 만들어 지속 사용 - 생성자가 여러번 호출되더라도, 객체는 최초 호출시에만 한 번 생성되며 이후 호출부터는 이미 생성한 객체를 반환 [ 구현 방법 ] public class Singleton { // 1. static 영역에 객체를 1개만 생성 private static final Singleton instance = new Singleton(); // 2. public으로 인스턴스가 필요할 경우 static 메서드를 통해 조회만 가능하도록 허용 public static Singleton getInstance() { return inst..
-
[디자인 패턴 Java] 디자인 패턴이란?Computer Science/Design Pattern 2022. 10. 12. 01:19
디자인 패턴이란? : 프로그램을 설계할 때 발생했던 문제점들을 해결할 수 있도록 하나의 '규약' 형태로 만들어놓은 것 - 재사용성, 호환성, 유지보수성을 예방하기 위해 패턴을 만들어 둔 것으로 특정한 구현이 아닌 아이디어임 디자인 원칙 나쁜 디자인(Design Smell) 1. 경직성 (Rigidity) - 시스템을 변경하기 어려운 디자인. 하나를 변경하기 위해 다른 것들을 변경해야 할 때 경직성이 높다고 함. 2. 취약성 (Fragility) - 특정 부분을 수정하였을 때 관련이 없던 다른 부분에 영향을 줄 때 취약성이 높다고 함. - 수정사항이 관련되지 않은 부분에도 영향을 주므로, 관리하는 비용이 높아지고 시스템의 신뢰성이 낮아짐. 3. 부동성 (Immobility) - 모듈이 쉽게 추출되지 않고 ..