◈ Study/디자인패턴(GoF)🥞

    [GoF] Decorator 패턴 : 장식들과 내용물을 동일시한다 [객체에 장식을 더해 가는 패턴]

    - Decorator 패턴 : 장식들과 내용물을 동일시한다 Decorator 패턴은 중심이 되는 객체가 있고, 거기에 장식이 되는 기능을 하나씩 추가해서 목적에 더 맞는 객체로 만들어 가는 패턴이다. 객체에 장식을 더해 가는 디자인 패턴이라 이해하면 된다. - 어떤 경우에 사용할까? Decorator 패턴에서는 장식틀과 내용물이 공통의 인터페이스를 가지지만, 감싸면 감쌀수록 기능이 추가된다. 이때 감싸지는 쪽을 수정할 필요는 없기에, 내용물을 변경하지 않고 기능을 추가할 수 있다. - 예제 코드 이름 설명 Display 문자열 표시용 추상 클래스 StringDisplay 1행으로 구성된 문자열 표시용 클래스 Border '장식틀'을 나타내는 추상 클래스 SideBorder 좌우에만 장식틀을 붙이는 클래스..

    [GoF] Composite 패턴 : 그릇과 내용물을 동일시한다 [재귀적인 구조를 만드는 패턴]

    - Composite 패턴 : 그릇과 내용물을 동일시한다 Composite 패턴은 컴퓨터 파일 시스템의 '디렉터리(Directory)'처럼 '중첩'된 구조, 재귀적인 구조를 만들어내는 패턴이다. 그릇과 내용물을 동일하게 만들어내는 것이 특징이다. - 어떤 경우에 사용할까? 그릇과 내용물을 같은 종류로 취급하면 편리한 경우가 있다. Composite 패턴을 사용하면 그릇 안에 내용물을 넣을 수도 있고, 더 작은 그릇을 넣을 수도 있다. 이러한 형태로 중첩된 구조, 재귀적인 구조를 만들 수 있다. - 예제 코드 이름 설명 Entry File과 Directory를 동일시하는 추상 클래스 File 파일을 나타내는 클래스 Directory 디렉터리를 나타내는 클래스 Main 동작 테스트용 클래스 - Entry 클..

    [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 동작 테스트용 클래스 -..