요약 템플릿 메소드 패턴 자바 API 속 템플릿 메소드 패턴 알아보기 템플릿 메소드로 정렬하는 방법 오리 정렬하기 오리 대소 비교 템플릿 메소드로 그래픽 출력하기 메모 자바 API 속 템플릿 메소드 패턴 알아보기 야생에서도 이 패턴은 쉽게 발견할 수 있음. 패턴 교과서의 예시와 다른 모양으로 구현한 템플릿 메소드도 많음. 주의 깊게 살펴보면 템플릿 메소드임을 알 수 있음. 이 패턴이 자주 쓰이는 이유는 프레임워크를 만드는 데 아주 훌륭한 디자인 도구이기 때문임. 템플릿 메소드로 정렬하는 방법 자바의 Arrays 클래스에는 정렬할 때 쓸 수 있는 편리한 템플릿 메소드가 포함되어 있음. mergeSort 메소드에 정렬 알고리즘이 들어있음 compareTo() 메소드에 의해 결과가 결정됨. 이게 템플릿 메소드..
요약 템플릿 메소드 패턴 Coffee 클래스와 Tea 클래스 추상화하기 추상화 방법 들여다보기 템플릿 메소드 패턴 알아보기 템플릿 메소드 패턴의 정의 템플릿 메소드 속 후크 알아보기 메모 Coffee 클래스와 Tea 클래스 추상화하기 Coffee 와 Tea 의 상위 클래스인 CaffeineBeverage 를 추상화함. 공통으로 사용되는 메소드를 슈퍼 클래스에 정의함. 추상화 방법 들여다보기 커피와 홍차는 제조법이 똑같음. prepareRecipe 메서드를 추상화한다. 커피를 필터로 우려내는 것은 티백을 물에 넣어서 홍차를 우려내는 일과 별반 다르지 않음. 따라서, brew 메소드를 만들어서 똑같은 메소드를 쓰도록 함. 추상 클래스에 이 prepareRecipe 메소드를 사용함. CaffeineBevera..
요약 퍼사드 패턴과 최소 지식 원칙 디자인 도구상자 안에 들어가야 할 도구들 알고리즘 캡슐화하기 : 템플릿 메소드 패턴 커피와 홍차 만들기 Coffee 클래스와 Tea 클래스 만들기 메모 퍼사드 패턴과 최소 지식 원칙 클라이언트의 친구는 퍼사드 하나만 있는 것이 좋음. 서브 시스템에서도 최소 지식 원칙을 최대한 지키는 것이 좋음. 서로 얽혀 있는 친구가 너무 많아서 시스템이 복잡하면 퍼사드를 추가하는게 좋음. 디자인 도구상자 안에 들어가야 할 도구들 객체지향 원칙 진짜 절친에게만 이야기해야 함. 최소 결합을 해야 한다는 사실을 알려주는 새로운 원칙이 추가됨. 어댑터 패턴 특정 클래스 인터페이스를 클라이언트에서 요구하는 다른 인터페이스로 변환함. 인터페이스가 호환되지 않아 같이 쓸 수 없었던 클래스를 사용..
요약 어댑터 패턴과 퍼사드 패턴 퍼사드 작동 원리 알아보기 홈시어터 퍼사드 만들기 단순화된 인터페이스 만들기 편한 방법으로 영화 보기 퍼사드 패턴의 정의 최소 지식 원칙 친구를 만들지 않고 다른 객체에 영향력 행사하기 절친에게만 메소드 호출하기 메모 퍼사드 작동 원리 알아보기 쓰기 쉬운 인터페이스를 제공하는 퍼사드 클래스를 구현하면 복잡한 시스템을 훨씬 편리하게 사용할 수 있음. 물론, 복잡한 시스템을 직접 건드리고 싶다면 기존 인터페이스를 그대로 쓰면 됨. 홈시어터 시스템용 퍼사드를 만든다. watchMovie() 와 같은 몇가지 간단한 메소드만 들어있는 HomeTheaterFacade 클래스를 새로만들어야 함. 퍼사드 클래스는 홈시어터 구성 요소를 하나의 서브시스템으로 간주하고 watchMovie()..
요약 어댑터 패턴과 퍼사드 패턴 실전 적용! 어댑터 패턴 Enumeration을 Iterator에 적응시키기 어댑터 디자인하기 퍼사드 패턴 맛보기 홈시어터 만들기 복잡한 방법으로 영화 보기 메모 실전 적용! 어댑터 패턴 자바 초기 컬렉션 형식(Vector, Stack, Hashtable)에서 Enumeartion을 구현했기에, 컬렉션의 요소를 리턴하는 elements() 메소드가 구현되어 있음. Enumeration 인터페이스를 사용하면 컬렉션의 각 항목이 어떻게 관리되는지 신경 쓸 필요 없이 모든 항목에 접근 가능함. Enumeration과 마찬가지로 Iterator 는 컬렉션에 있는 일련의 항목에 접근하고, 그 항목을 제거할 수 있게 해주는 인터페이스임. Enumeartion 인터페이스는 구형 코드임..
요약 어댑터 패턴과 퍼사드 패턴 어댑터 살펴보기 객체지향 어댑터 알아보기 어댑터 사용 방법 알아보기 오리 어댑터 테스트 어댑터 패턴 알아보기 클라이언트에서 어댑터를 사용하는 방법 어댑터 패턴의 정의 객체 어댑터와 클래스 어댑터 메모 CHAPTER 07. 적응시키기 : 어댑터 패턴과 퍼사드 패턴 어댑터 살펴보기 어댑터 : 한 인터페이스를 다른 인터페이스로 변환해 주는 역할 ex) 표준 AC 플러그 → AC 전원 어댑터 → 영국식 전원 소켓 객체지향 어댑터 알아보기 새로운 업체에서 제공한 클래스 라이브러리를 사용하려고 했는데, 기존 시스템에서 사용하는 인터페이스가 다른 상황임. 업체에서 제공받은 클래스를 변경할 수 없는 상태임. 새로운 업체에서 사용하는 인터페이스를 기존에 사용하던 인터페이스에 적응시켜 주는..
요약 호출 캡슐화하기 : 커맨드 패턴 성풍기 테스트 코드 여러 동작을 한 번에 처리하기 매크로 커맨드 사용하기 커맨드 패턴 활용하기 커맨드 패턴 더 활용하기 디자인 도구상자 안에 들어가야 할 도구들 메모 선풍기 테스트 코드 0번 슬롯의 ON 버튼에 선풍기 속도를 MEDIUM로 설정 1번 슬롯의 ON 버튼에 선풍기 속도를 HIGH로 설정 OFF 버튼에는 속도를 OFF 로 설정 선풍기 코드 테스트 p258 참고 여러 동작을 한 번에 처리하기 버튼 한 개만 눌러도 조명이 어두워지면서 오디오와 TV가 켜지고, DVD 모드로 변경되고, 욕조에 물이 채워지는 것까지 한 번에 처리했으면 좋겠다. 다른 커맨드를 실행할 수 있는 새로운 종류의 커맨드를 만들어서 여러 가지 커맨드를 한 번에 실행할 수 있음. public ..
요약 호출 캡슐화하기 : 커맨드 패턴 커맨드 패턴의 정의 커맨드 패턴 클래스 다이어그램 살펴보기 슬롯에 명령 할당하기 리모컨 코드 만들기 커맨드 클래스 만들기 리모컨 테스트 작업 취소 기능 추가하기 작업 취소 기능 테스트 작업 취소 기능을 구현할 때 상태를 사용하는 방법 메모 커맨드 패턴의 정의 📍 커맨드 패턴(Command Pattern) : 요청 내역을 객체로 캡슐화해서 객체를 서로 다른 요청 내역에 따라 매개변수화할 수 있음. 이러면 요청을 큐에 저장하거나 로그로 기록하거나 작업 취소 기능을 사용할 수 있음. 메타 커맨드 패턴 → 여러 개의 명령을 매크로로 한 번에 실행할 수 있음. 커맨드 패턴 클래스 다이어그램 살펴보기 클라이언트 ConcreteCommand를 생성하고, Receiver를 설정함 ..
요약 6장. 호출 캡슐화하기 : 커맨드 패턴 IOT 리모컨 API 제작 협력 업체 클래스 살펴보기 커맨드 패턴 소개 객체마을 식당 등장인물의 역할 객체마을 식당과 커맨드 패턴 클라이언트 (고객) 리시버 (주방장) 커맨드 (주문서) 인보커 (종업원) 첫 번째 커맨드 객체 만들기 커맨드 객체 사용하기 메모 CHAPTER 06. 호출 캡슐화하기 : 커맨드 패턴 만능 IOT 리모컨 프로그래밍이 가능한 7개의 슬롯 + 슬롯 별 ‘ON’, ‘OFF’ 버튼이 있음. 마지막을 누른 버튼의 명령을 취소하는 ‘UNDO’ 버튼이 있음. 각 슬롯을 한 가지 기기, 혹은 하나로 엮여 있는 일련의 기기에 할당할 수 있는 API 제작이 목표. 협력 업체 클래스 살펴보기 OutdorrLight CeilingLight TV Garde..
요약 싱글턴 패턴 문제를 해결하는 적절한 방법 선택하기 멀티스레딩 문제 해결 방법 3가지 싱글턴에 동기화 문제, 클래스 로딩 문제, 리플렉션, 직렬화 역직렬화 문제가 있음 enum 을 사용하면 해결 가능 디자인 도구상자 안에 들어가야 할 도구들 메모 문제를 해결하는 적절한 방법 선택하기 멀티스레딩 문제 해결하는 3가지 방법에 각각 장단점이 있음. getInstance() 메소드를 동기화하는 방법 항상 올바른 결과가 나옴 초콜릿 보일러의 경우, 속도 문제가 그리 중요하지 않기에 이 방법을 써도 괜찮음 인스턴스를 시작하자 만드는 방법 초콜릿 인스턴스는 어짜피 항상 필요하기에 정적으로 초기화하는 것도 괜찮은 방법임. 표준적인 패턴에 익숙한 개발자는 이상하게 보일 수 있지만 지금 상황에서는 메소드 동기화 방법이..
요약 싱글턴 패턴 고전적인 싱글턴 패턴 구현법 초콜릿 보일러 코드 살펴보기 싱글턴 패턴의 정의 초콜릿 보일러에 문제 발생 멀티스레딩 문제 살펴보기 멀티스레딩 문제 해결하기 더 효율적으로 멀티스레딩 문제 해결하기 getInstance()의 속도가 그리 중요하지 않다면 그냥 둔다. 인스턴스가 필요할 때는 생성하지 말고 처음부터 만든다. ‘DCL’을 써서 getInstance()에서 동기화되는 부분을 줄인다. 메모 CHAPTER 05. 하나뿐인 특별한 객체 만들기 : 싱글턴 패턴 특정 클래스에 객체 인스턴스가 하나만 만들어지도록 해 주는 패턴 ex) 스레드 풀, 캐시, 대화상자, 사용자 설정, 레지스트리 설정 처리, 로그 기록용, 디바이스 드라이버 객체 인스턴스를 어디서든지 액세스할 수 있게 만듦. 전역 변수..
요약 객체지향 빵 굽기 : 팩토리 패턴 추상 팩토리 패턴의 정의 추상 팩토리 패턴 vs 팩토리 메소드 패턴 메모 추상 팩토리 패턴의 정의 📍 추상 팩토리 패턴(Abstract Factory Pattern) : 구상 클래스에 의존하지 않고도 서로 연관되거나 의존적인 객체로 이루어진 제품군을 생산하는 인터페이스를 제공함. 구상 클래스는 서브클래스에서 만듦. p191 PizzaStore 클래스 다이어그램 참고 추상 팩토리 패턴에서 인터페이스에 있는 각 메소드는 구상 제품이 생산하는 일은 맡음. 추상 팩토리의 서브클래스가 그 메소드를 구현함 → 팩토리 메소드 패턴을 사용하는 것임. 추상 팩토리 패턴 vs 팩토리 메소드 패턴 둘 다 애플리케이션을 특정 구현으로 부터 분리하는 일임. 팩토리 메소드 패턴 클래스를 써..