요약 어댑터 패턴과 퍼사드 패턴 실전 적용! 어댑터 패턴 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) 스레드 풀, 캐시, 대화상자, 사용자 설정, 레지스트리 설정 처리, 로그 기록용, 디바이스 드라이버 객체 인스턴스를 어디서든지 액세스할 수 있게 만듦. 전역 변수..
문제 링크 https://www.acmicpc.net/problem/11652 정답 코드 package main import ( "bufio" "fmt" "os" "strconv" ) func main() { scanner := bufio.NewScanner(os.Stdin) scanner.Scan() n, _ := strconv.Atoi(scanner.Text()) memdb := make(map[int]int) var maxCount int var result int for i := 0; i maxCount || (memdb[num] ..
요약 객체지향 빵 굽기 : 팩토리 패턴 추상 팩토리 패턴의 정의 추상 팩토리 패턴 vs 팩토리 메소드 패턴 메모 추상 팩토리 패턴의 정의 📍 추상 팩토리 패턴(Abstract Factory Pattern) : 구상 클래스에 의존하지 않고도 서로 연관되거나 의존적인 객체로 이루어진 제품군을 생산하는 인터페이스를 제공함. 구상 클래스는 서브클래스에서 만듦. p191 PizzaStore 클래스 다이어그램 참고 추상 팩토리 패턴에서 인터페이스에 있는 각 메소드는 구상 제품이 생산하는 일은 맡음. 추상 팩토리의 서브클래스가 그 메소드를 구현함 → 팩토리 메소드 패턴을 사용하는 것임. 추상 팩토리 패턴 vs 팩토리 메소드 패턴 둘 다 애플리케이션을 특정 구현으로 부터 분리하는 일임. 팩토리 메소드 패턴 클래스를 써..
굉장히 오랜만에 알고리즘 문제를 풀어본다. 책너두에 이어서 무지성 알고리즘 챌린지다.. 이건 꾸준히 할 수 있을진 모르겠지만 도전해본다.. 이번에 오픈 소스 컨트리뷰션에 참여하게 되면서 golang 연습이 필요해서 golang 으로 알고리즘을 풀어본다.. 문법에서 막혀서 쉽지 않지만............. 문제 링크 https://www.acmicpc.net/problem/1874 정답 코드 package main import ( "bufio" "fmt" "os" "strconv" "strings" ) func main() { scanner := bufio.NewScanner(os.Stdin) scanner.Scan() n, _ := strconv.Atoi(scanner.Text()) stack := &..
요약 객체지향 빵 굽기 : 팩토리 패턴 원재료 팩토리 만들기 뉴욕 원재료 팩토리 만들기 Pizza 클래스 변경하기 바뀐 내용 되돌아보기 새로운 코드로 또 피자 주문하기 New! 피자가 만들어지기까지 메모 원재료 팩토리 만들기 public interface PizzaIngredientFactory { public Dough createDough(); public Sauce createSauce(); public Cheese createCheese(); public Veggies[] createVeggies(); public Pepperoni createPepperoni(); public Clams createClam(); } 원재료별 생성 메소드를 정의함. 뉴욕 원재료 팩토리 만들기 public class..
요약 객체지향 빵 굽기 : 팩토리 패턴 병렬 클래스 계층 구조 알아보기 팩토리 메소드 패턴의 정의 객체 의존성 살펴보기 의존성 뒤집기 원칙 의존성 뒤집기 원칙 적용하기 의존성 뒤집기 원칙을 지키는 방법 원재료 종류 알아보기 원재료군으로 묶기 메모 병렬 클래스 계층 구조 알아보기 생산자 클래스와 거기에 대응되는 제품 클래스는 병렬 계층구조로 볼 수 있음. 둘다 추상 클래스로 시작하고, 그 클래스를 확장하는 구상 클래스들이 지점과, 피자를 만드는 구체적인 구현을 담당함. 팩토리 메소드 패턴의 정의 📍 팩토리 메소드 패턴(Factory Method Pattern) : 객체를 생성할 때 필요한 인터페이스를 만듦. 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정함. 팩토리 메소드 패턴을 사용하면 클래스 인스..