Design Pattern

    [Design Pattern] Factory Method Pattern (팩토리 메서드 패턴)

    [Design Pattern] Factory Method Pattern (팩토리 메서드 패턴)

    팩토리 메서드 패턴 (Factory Method Pattern) 구체적으로 어떤 인스턴스를 만들지는 서브클래스가 정한다. 인스턴스를 생성하는 책임을 구체 클래스가 아닌 인터페이스의 메서드로 감싸게 된다. 다양한 구현체(Product)가 있고, 그 중에서 특정한 구현체를 만들 수 있는 다양한 팩토리(Creator)를 제공할 수 있다. 장점 기존에 인스턴스 생성 코드를 건드리지 않고 비슷한 류의 인스턴스 생성 코드를 만들 수 있어 OCP를 보장한다. (Creator와 Product의 느슨한 결합) 단점 클래스가 많아진다. 예시 (as-is) public class Ship { private String name; private String color; private String logo; public Str..

    [Design Pattern] Singleton Pattern (싱글톤 패턴)

    [Design Pattern] Singleton Pattern (싱글톤 패턴)

    싱글톤 패턴 (Singleton Pattern) 인스턴스를 오직 한개만 제공하는 클래스 시스템 런타임, 환경 세팅에 대한 정보 등 인스턴스가 여러 개일 때 문제가 생길 수 있는 경우가 있다. 인스턴스를 오직 한 개만 만들어 제공하는 클래스가 필요하다. 예시 (as-is) public class Settings { } public class App { public static void main(String[] args) { Settings settings = new Settings(); Settings settings1 = new Settings(); System.out.println(settings != settings1); } } 싱글톤 패턴을 적용하려면, 위 settings != settings1에서..

    [Design Pattern] Composite Pattern (컴포지트 패턴)

    [Design Pattern] Composite Pattern (컴포지트 패턴)

    출처 : https://www.inflearn.com/course/디자인-패턴 컴포지트 패턴 (Composite Pattern) 그룹 전체와 개별 객체를 동일하게 처리할 수 있는 패턴. 클라이언트 입장에서는 전체나 부분이나 모두 동일한 컴포넌트로 인식할 수 있는 계층 구조를 만든다. (Part-Whole Hierarchy) 장점 복잡한 트리 구조를 편리하게 사용할 수 있다. 다형성과 재귀를 활용할 수 있다. 클라이언트 코드를 변경하지 않고 새로운 엘리먼트 타입을 추가할 수 있다. 단점 트리를 만들어야 하기 때문에 (공통된 인터페이스를 정의해야 하기 때문에) 지나치게 일반화 해야 하는 경우도 생길 수 있다. 예시 (as-is) public class Item { private String name; pri..

    [Design Pattern] 전략 패턴 (Strategy Pattern)

    출처 : https://www.inflearn.com/course/디자인-패턴 전략 패턴 (Strategy Pattern) 여러 알고리즘을 캡슐화하고 상호 교환 가능하게 만드는 패턴. 클라이언트가 직접 컨텍스트에서 사용할 알고리즘을 선택한다. 생성자에서, 혹은 특정 Operator에서 알고리즘을 선택해서 넘겨줄 수 있다. 장점 새로운 전략을 추가하더라도 기존 코드를 변경하지 않는다. OCP를 완벽하게 지키고 있다. 상속은 한 객체만 가능한데, 이 대신 위임을 사용할 수 있다. 런타임에 전략을 변경할 수 있다. 단점 복잡도가 증가한다. 클라이언트 코드가 구체적인 전략을 알아야 하기 때문에, 의존성이 생긴다. 예시 (as-is) public class BlueLightRedLight { private int..

    [Design Pattern] 프록시 (Proxy)

    출처 : https://www.inflearn.com/course/%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4 프록시 (Proxy) 특정 객체에 대한 접근을 제어하거나 기능을 추가할 수 있는 패턴. 어디에 쓸 수 있는가 해당 객체의 접근 제어 객체에 대한 보안 - 특정 유저의 권한 유무를 확인하여, 특정 객체에 접근 가능/불가능을 판별한다. 로깅, 캐싱 생성하는 데 많은 리소스를 요구하는 객체를 실제로 쓰일 때 생성하는 초기화 지연 방식으로 리소스를 아낀다. 왜 쓰는가 기존 코드를 전혀 건드리지 않고 특정 기능을 추가 기존 코드를 건드리지 못할 때 특정 기능을 추가 장점 기존 코드를 변경하지 않고 새로운 기능을 추가할 수 있다. 기존 코드가 해야하는 일만 유지할 수..