design-pattern
-
프로토타입(Prototype) 패턴 개념 프로토타입 패턴은 생성할 객체들의 타입이 프로토타입(원형)인 인스턴스로부터 결정되도록 하며, 새 객체를 만들기 위해 인스턴스를 복제하는 인스턴스 생성과 관련된 디자인 패턴이다. 아래는 프로토타입 패턴을 클래스 다이어그램으로 표현한 것이다. Client 클래스는 Prototype 타입의 객체를 register() 메서드를 통해 등록해두고, create() 메서드를 통해 등록한 Prototype 타입의 객체를 생성하여 반환하는 역할을 한다. register() 메서드를 통해 등록된 객체는 Prototype 인터페이스의 구현체이다. Prototype 인터페이스에는 createCopy() 메서드가 있는데, 이는 해당 타입의 인스턴스를 복사(copy)하여 반환하는 메서드이..
[디자인패턴] 프로토타입(Prototype) 패턴프로토타입(Prototype) 패턴 개념 프로토타입 패턴은 생성할 객체들의 타입이 프로토타입(원형)인 인스턴스로부터 결정되도록 하며, 새 객체를 만들기 위해 인스턴스를 복제하는 인스턴스 생성과 관련된 디자인 패턴이다. 아래는 프로토타입 패턴을 클래스 다이어그램으로 표현한 것이다. Client 클래스는 Prototype 타입의 객체를 register() 메서드를 통해 등록해두고, create() 메서드를 통해 등록한 Prototype 타입의 객체를 생성하여 반환하는 역할을 한다. register() 메서드를 통해 등록된 객체는 Prototype 인터페이스의 구현체이다. Prototype 인터페이스에는 createCopy() 메서드가 있는데, 이는 해당 타입의 인스턴스를 복사(copy)하여 반환하는 메서드이..
2022.12.21 -
팩토리 메서드(Factory Method)와 추상 팩토리(Abstract Factory) 패턴 팩토리(Factory) 패턴을 사용하면 객체 생성을 캡슐화 할 수 있다. 팩토리 패턴에는 팩토리 메서드(Factory Method) 패턴과 추상 팩토리(Abstract Factory) 패턴이 있다. 팩토리 메서드 패턴 개념 팩토리 메서드 패턴은 인스턴스 생성 방법을 상위 클래스에서 결정하되, 생성될 인스턴스가 구체적으로 어떤 클래스의 인스턴스인지는 하위 클래스에서 결정하도록 하는 디자인 패턴을 말한다. 팩토리 메서드 패턴을 사용하면 인스턴스 생성을 위한 프레임워크와 실제 인스턴스를 생성하는 클래스를 나누어 생각할 수 있다. 아래는 팩토리 메서드 패턴을 클래스 다이어그램으로 표현한 것이다. Creator 추상 클..
[디자인패턴] 팩토리 메서드(Factory Method)와 추상 팩토리(Abstract Factory) 패턴팩토리 메서드(Factory Method)와 추상 팩토리(Abstract Factory) 패턴 팩토리(Factory) 패턴을 사용하면 객체 생성을 캡슐화 할 수 있다. 팩토리 패턴에는 팩토리 메서드(Factory Method) 패턴과 추상 팩토리(Abstract Factory) 패턴이 있다. 팩토리 메서드 패턴 개념 팩토리 메서드 패턴은 인스턴스 생성 방법을 상위 클래스에서 결정하되, 생성될 인스턴스가 구체적으로 어떤 클래스의 인스턴스인지는 하위 클래스에서 결정하도록 하는 디자인 패턴을 말한다. 팩토리 메서드 패턴을 사용하면 인스턴스 생성을 위한 프레임워크와 실제 인스턴스를 생성하는 클래스를 나누어 생각할 수 있다. 아래는 팩토리 메서드 패턴을 클래스 다이어그램으로 표현한 것이다. Creator 추상 클..
2022.12.20 -
템플릿 메소드(Template Method) 패턴 템플릿 메소드 패턴은 상위 클래스에 알고리즘의 골격의 정의하고 알고리즘의 일부 구현을 하위 클래스에 위임하여 알고리즘을 재사용할 수 있도록 하는 패턴을 말한다. 템플릿 메소드를 사용하면 알고리즘의 일부 단계를 서브클래스에서 구현할 수 있으며, 알고리즘의 구조는 그대로 유지하면서 알고리즘의 특정 단계를 서브클래스에서 재정의할 수 있다. 템플릿 메소드 패턴을 사용하면 부모 클래스에서 알고리즘의 골격을 제공하기 때문에 추후 알고리즘에 변경이 일어나더라도 부모 클래스 한 군데만 수정하면 된다는 장점이 있다. 예시 템플릿 메소드 패턴이 어떻게 구현되는지 예시로 확인해보자. 아래 Tea 클래스는 추상 클래스로 make() 메서드에서 알고리즘의 골격을 정의한다. ma..
[디자인패턴] 템플릿 메소드(Template Method) 패턴템플릿 메소드(Template Method) 패턴 템플릿 메소드 패턴은 상위 클래스에 알고리즘의 골격의 정의하고 알고리즘의 일부 구현을 하위 클래스에 위임하여 알고리즘을 재사용할 수 있도록 하는 패턴을 말한다. 템플릿 메소드를 사용하면 알고리즘의 일부 단계를 서브클래스에서 구현할 수 있으며, 알고리즘의 구조는 그대로 유지하면서 알고리즘의 특정 단계를 서브클래스에서 재정의할 수 있다. 템플릿 메소드 패턴을 사용하면 부모 클래스에서 알고리즘의 골격을 제공하기 때문에 추후 알고리즘에 변경이 일어나더라도 부모 클래스 한 군데만 수정하면 된다는 장점이 있다. 예시 템플릿 메소드 패턴이 어떻게 구현되는지 예시로 확인해보자. 아래 Tea 클래스는 추상 클래스로 make() 메서드에서 알고리즘의 골격을 정의한다. ma..
2022.12.18 -
어댑터(Adapter) 패턴 어댑터 패턴은 특정 클래스 인터페이스를 클라이언트에서 요구하는 다른 인터페이스로 변환한다. 인터페이스가 호환되지 않아 같이 쓸 수 없었던 클래스를 사용할 수 있게 도와준다. 어댑터 패턴을 사용하면 호환되지 않는 인터페이스를 사용하는 클라이언트를 그대로 활용할 수 있다. 이렇게 되면 클라이언트와 구현된 인터페이스를 분리할 수 있으며, 변경 내역이 어댑터에 캡슐화되기 때문에 나중에 인터페이스가 바뀌더라도 클라이언트를 바꿀 필요가 없다. 아래는 어댑터 패턴의 클래스 다이어그램이다. 예시 다음과 같은 WeatherApi 인터페이스가 있다고 하자. // Target public interface WeatherApi { String getData(); } 모든 날씨 관련 API는 해당 ..
[디자인패턴] 어댑터(Adapter) 패턴어댑터(Adapter) 패턴 어댑터 패턴은 특정 클래스 인터페이스를 클라이언트에서 요구하는 다른 인터페이스로 변환한다. 인터페이스가 호환되지 않아 같이 쓸 수 없었던 클래스를 사용할 수 있게 도와준다. 어댑터 패턴을 사용하면 호환되지 않는 인터페이스를 사용하는 클라이언트를 그대로 활용할 수 있다. 이렇게 되면 클라이언트와 구현된 인터페이스를 분리할 수 있으며, 변경 내역이 어댑터에 캡슐화되기 때문에 나중에 인터페이스가 바뀌더라도 클라이언트를 바꿀 필요가 없다. 아래는 어댑터 패턴의 클래스 다이어그램이다. 예시 다음과 같은 WeatherApi 인터페이스가 있다고 하자. // Target public interface WeatherApi { String getData(); } 모든 날씨 관련 API는 해당 ..
2022.12.13 -
반복자(Iterator) 패턴 반복자 패턴은 무엇인가 많이 모여 있을 때 이를 순서대로 가리키며 전체를 검색하고 처리를 반복하는 패턴이다. 반복자 패턴은 컬렉션의 구현 방법을 노출하지 않으면서 집합체 내의 모든 항목에 접근하는 방법을 제공한다. 예시 아래와 같은 구조의 Book 클래스가 있다. public class Book { private String name; public Book(String name) { this.name = name; } public String getName() { return name; } } 여러 Book 객체를 배열 형식으로 담은 ArrayBookShelf가 있다. public class ArrayBookShelf { private static final int MAX_..
[디자인패턴] 반복자(Iterator) 패턴반복자(Iterator) 패턴 반복자 패턴은 무엇인가 많이 모여 있을 때 이를 순서대로 가리키며 전체를 검색하고 처리를 반복하는 패턴이다. 반복자 패턴은 컬렉션의 구현 방법을 노출하지 않으면서 집합체 내의 모든 항목에 접근하는 방법을 제공한다. 예시 아래와 같은 구조의 Book 클래스가 있다. public class Book { private String name; public Book(String name) { this.name = name; } public String getName() { return name; } } 여러 Book 객체를 배열 형식으로 담은 ArrayBookShelf가 있다. public class ArrayBookShelf { private static final int MAX_..
2022.12.11