◈ Study

    [GoF] Strategy 패턴 : 알고리즘을 모두 바꾼다 [같은 문제를 다른 방법으로 해결하기 쉽게 만들어주는 패턴]

    - Strategy 패턴 : 알고리즘을 모두 바꾼다 Strategy 패턴은 스위치 전환하듯 알고리즘을 바꿔, 같은 문제를 다른 방법으로 해결하기 쉽게 만드는 패턴이다. - 어떤 경우에 사용할까? 보통 프로그래밍을 하다 보면 알고리즘을 메서드 안에 녹아드는 형태로 구현하기 쉬운데, Strategy 패턴을 사용하면 알고리즘 부분을 다른 부분과 의도적으로 분리한다. 이로 인해 알고리즘을 용이하게 전환할 수 있다. - 예제 코드 이름 설명 Hand 가위바위보의 '손'을 나타내는 클래스 Strategy 가위바위보의 '전략'을 나타내는 인터페이스 WinningStrategy 이기면 다음에도 같은 손을 내는 전략을 나타내는 클래스 ProbStrategy 직전 손에서 다음 손을 확률적으로 계산하는 전략을 나타내는 클래..

    [GoF] Bridge 패턴 : 기능 계층과 구현 계층을 나눈다 [기능의 클래스 계층과 구현의 클래스 계층을 연결하는 패턴]

    - Bridge 패턴 : 기능 계층과 구현 계층을 나눈다 Bridge 패턴은 '기능의 클래스 계층'과 '구현의 클래스 계층'이라는 두 개의 독립된 클래스 계층을 나누고, 두 계층을 연결하는 패턴이다. 계층을 분리해두면 각각의 클래스 계층을 독립적으로 확장할 수 있다. - 어떤 경우에 사용할까? Bridge 패턴의 특징은 '기능의 클래스 계층'과 '구현의 클래스 계층'을 분리하는 것이다. 기능을 추가하고 싶으면 기능의 클래스 계층에 클래스를 추가하면 되고, 구현의 클래스 계층은 전혀 수정할 필요가 없어진다. - 예제 코드 다리의 어느 쪽인가? 이름 설명 기능의 클래스 계층 Display '표시한다' 클래스 기능의 클래스 계층 CountDisplay '지정 횟수만큼 표시한다' 기능을 추가한 클래스 구현의 클..

    [GoF] Builder 패턴 : 복잡한 인스턴스를 조립한다 [구조를 가진 인스턴스를 만들어 가는 패턴]

    - Builder 패턴 : 복잡한 인스턴스를 조립한다 Builder 패턴은 구조를 가진 인스턴스를 만들어 가는 패턴으로, 뼈대를 만들고 아래에서 위로 만들어 간다. - 어떤 경우에 사용할까? Builder 패턴은 구체적인 하위 클래스를 모른다는 게 큰 장점이다. 모르기 때문에 교체가 가능하고, 교체되기 때문에 부품으로서의 가치가 높다. 클래스 설계자는 '교체 가능성'을 항상 염두에 둘 필요가 있다. - 예제 코드 이름 설명 Builder 문서를 구성하기 위한 메서드를 규정한 추상 클래스 Director 하나의 문서를 만드는 클래스 TextBuilder 텍스트(일반 문자열)를 이용하여 문서를 만드는 클래스 HTMLBuilder HTML 파일을 이용하여 문서를 만드는 클래스 Main 동작 테스트용 클래스 -..

    [GoF] Prototype 패턴 : 복사해서 인스턴스를 만든다 [인스턴스로부터 다른 인스턴스를 생성하는 패턴]

    - Prototype 패턴 : 복사해서 인스턴스를 만든다 Prototype 패턴은 복사기로 문서를 복사하는 것처럼, 클래스에서 인스턴스를 생성하는 것이 아니라 인스턴스로부터 다른 인스턴스를 생성하는 패턴이다. Java의 clone 메서드와 함께 학습해보려 한다. - 어떤 경우에 사용할까? 종류가 너무 많아 클래스로 정리할 수 없는 경우 클래스로부터 인스턴스 생성이 어려운 경우 [ ex) 마우스로 그린 도형을 나타내는 인스턴스 ] 프레임워크와 생성하는 인스턴스를 분리하고 싶은 경우 - 예제 코드 패키지 이름 설명 framework Product 추상 메서드 use와 createCopy가 선언되어 있는 인터페이스 framework Manager createCopy를 사용하여 인스턴스를 복제하는 클래스 이름 ..

    [GoF] Singleton 패턴 : 인스턴스를 단 하나만 만든다 [인스턴스가 하나만 존재하는 것을 보증하는 패턴]

    - Singleton 패턴 : 인스턴스를 단 하나만 만든다 Singleton 패턴은 인스턴스가 하나만 존재하는 것을 보증하는 패턴이다. - 어떤 경우에 사용할까? Singleton 패턴에서는 인스턴스 수를 제한하고 있다. 인스턴스가 여러 개면 인스턴스가 서로 영향을 미쳐 뜻밖의 버그를 만들어 낼 수 있으나, 인스턴스가 하나뿐이라는 보장이 있다면 인스턴스 간 영향이 최소화 될 수 있다. - 예제 코드 이름 설명 Singleton 인스턴스가 하나만 존재하는 클래스 Main 동작 테스트용 클래스 - Singleton 클래스 public class Singleton { private static Singleton singleton = new Singleton(); private Singleton() { Syst..