학과 샘플강의

디자인 패턴 - 총 19시간 52분 / 강의당평균 : 59분36초

알지오 2016. 9. 8. 09:05



디자인 패턴
전체 : 19시간 52분 / 강의당평균 : 59분36초

01 디자인 패턴과 객체지향 part1
디자인 패턴의 필요성/스크린UI 추가/메뉴별 클래스 생성 방법/모델의 역할/UML 모델링 언어/구조 다이어그램/행의 다이어그램/클래스 다이어그램/재귀적 연관 관계
56분
책갈피 : [00:14] 객체지향과 디자인 패턴의 필요성 / [01:14] 소프트웨어의 설계가 제대로 되지 않았을 때 발생하는 문제점 / [01:36] application클래스 살펴보기 / [01:47] 화면구성 확인 / [02:30] 코드 리스트 작성 / [02:58] 화면 전환을 위한 코드 / [03:21] clicked메소드에서 이벤트 처리 / [04:00] currentmenu에 각각 해당되는 메뉴명 저장 / [04:24] 버튼2 추가 / [05:00] clicked메소드 확인 / [06:59] 같은 상황을 객체지향 방식으로 처리 / [07:15] 메뉴가 선택되면 해당 화면 출력 / [07:30] 버튼1을 클릭하면 선택된 메뉴화면에서 적절한 처리 수행 / [08:03] screenUI타입 정의 / [08:18] show메소드 / [08:35] handlebutton1click메소드 / [09:07] 메뉴별로 screenUI 인터페이스를 구현한 클래스 작성 / [09:35] clicked메소드 확인 / [10:01] show메소드 호출 / [11:05] button1을 클릭했을 때 처리하는 부분 / [11:33] clicked메소드에서 정리해야 할 코딩 부분 / [12:03] 두 종류의 버튼처리 코드 / [12:58] clickde메소드를 메뉴처리 부분과 버튼처리 부분으로 분리 / [13:43] 버튼2 추가 / [13:58] 인터페이스에 handlebutton2click추가 / [14:22] 버튼2 처리 내용 작성 / [16:30] 최종적으로 수정된 코드 내용 / [16:56] if/else구문 사용 / [17:03] 메뉴3을 추가 할 경우 / [18:14] screenUI타입을 추가시키고 메뉴별로 클래스 만드는 방법 구현 완료 / [18:33] 필요한 내용을 분리함으로 얻을 수 있는 장점 / [19:18] 객체지향 기법 / [19:45] 객체지향 모델링 / [20:15] 모델의 역할 / [21:03] 모델링 언어 UML / [22:18] 다양한 다이어그램의 제공 이유 / [22:30] 구조 다이어그램 / [23:45] 행위 다이어그램 / [25:29] 클래스 다이어그램 / [25:48] 주요 구성 요소 / [26:03] 클래스 설명 / [26:33] 고양이를 만들어내는 설계도 / [27:22] 클래스의 속성과 연산을 기술 / [27:48] public/private/protected/package / [28:52] 분석 단계 / [29:03] 설계 단계 / [29:37] 관계 설명 / [30:07] 연관 관계(association) / [30:48] 두 클래스 사이의 연관 관계 / [31:48] 두번째 다이어그램 확인 / [32:30] 두 클래스 사이의 연관 관계를 나타내는 화살표 / [33:14] 숫자로 객체 범위를 표현 / [33:35] 다중성의 표현 / [34:28] 연관 관계의 방향성 / [35:19] 클래스 다이어그램을 소스코드로 구현 / [35:49] 클래스로 표현 / [36:07] 메소드는 public으로 선언 / [36:45] 연관 관계가 표현되어 있는 클래스 다이어그램도 소스코드로 구현 / [37:51] 속성의 이름이 역할의 이름 활용 / [38:13] 단방향 연관 관계 / [38:37] 소스코드 구현 / [39:05] setter/getter메소드 / [39:37] 다중성 구현 / [40:00] 소스코드 구현 / [40:45] vector이용 / [41:37] course객체와 student객체의 관계 / [42:15] 다중성 수정 / [42:52] 소스코드 구현 / [43:12] class student와 class course가 독립적으로 선언 / [43:30] course class변화 / [44:22] 연관 클래스(association class) / [46:12] 연관 관계에 추가할 속성이나 행위가 있을 때 사용 / [46:37] 연관 클래스 구현 방법 / [46:52] 예제 확인 / [47:22] transcript클래스 / [48:36] student클래스와 transcript클래스의 연관 관계의 다중성 / [48:57] 일반 클래스로 변환 한 예 / [49:05] transcript를 소스에 적용 / [50:00] transcript생성 자료 / [51:06] 클래스 다이어그램 추가 / [51:52] borrowing연관 관계 / [52:07] 재귀적 연관 관계 / [54:44] 관계의 루프

02 객체지향 part2
클래스 다이어그램/일반화 관계/집합 관계(합성 관계, 집약 관계)/의존 관계/실체화 관계/절차지향과 객체지향의 차이점/객체의 정의/객체의 책임과 크기
54분
책갈피 : [00:03] 일반화 관계(generalization) / [00:26] 자식클래스(서브클래스)/부모클래스(슈퍼클래스) / [00:57] is a kind of 관계 / [02:52] 추상 메소드 / [03:00] 추상 클래스 / [03:15] 일반화 관계를 클래스 다이어그램으로 표현 / [03:53] 집합 관계(composition, aggregation) / [04:15] 합성 관계(composition) / [04:39] 부분 객체가 전체 객체에 속하는 관계 / [05:15] 집약 관계(aggregation) / [06:10] 부분 객체와 전체 객체가 독립적 / [06:46] 소스코드 비교 / [07:08] 속성은 모두 동일 / [08:07] 합성 관계 모델링 / [08:52] 집약 관계 모델링 / [09:11] 의존 관계(dependency) / [09:37] 클래스의 속성에서 참조할 때 / [11:28] 연산의 인자로 사용될 때 / [11:50] person과 car의 연관 관계 소스코드 구현 / [12:26] gaspump추가 / [12:58] 실체화 관계(realization) / [13:11] 인터페이스 / [13:43] turn_on/turn_off기능 / [14:24] 클래스 다이어그램 확인 / [15:58] 스테레오로 interface입력 / [16:25] 키워드 / [16:59] 인터페이스와 클래스 사이의 실체화 관계 / [17:29] can do this 관계 / [17:41] 객체지향에 대한 자세한 설명 / [18:21] 절차지향 / [18:48] 프로시저들이 데이터를 조작 / [19:37] 프로시저를 이용한 프로그래밍 기법 / [21:33] 여러가지 문제 발생 / [22:41] 객체지향 / [23:14] 객체들로 구성 / [23:45] 프로시저는 자신이 속한 객체의 데이터에만 접근 가능 / [24:30] application.java는 절차지향으로 구현 / [25:37] 절차지향-프로그램 수정이 어려운 구조 / [25:56] 객체지향-프로그램 수정이 쉬운 구조 / [26:11] 객체(object)알아보기 / [26:41] 객체가 제공해야 할 기능-소리크기 제어 객체 / [28:18] signature(기능식별이름, 파라미터, 결과값) / [29:02] 인터페이스 / [29:26] 클래스 / [29:37] 소리크기 제어 객체 / [30:56] 파일 읽기 객체 / [31:18] 암호화 처리 객체 / [31:48] 메시지 / [32:07] 객체의 책임과 크기 / [33:04] 객체의 책임을 정의-인터페이스 / [33:43] 프로그램을 만들기 위해 필요한 기능의 목록 정리 / [34:22] 객체의 구성 / [35:30] 규칙 / [36:27] 절차지향 방식과 동일한 구조 / [36:52] 객체지향의 장점 / [37:05] 단일 책임 원칙(single responsibility principle) / [37:59] 의존 / [38:28] 다른 객체 이용 / [38:49] 흐름제어 객체 소스코드 구현 / [39:49] 다른 객체를 생성/다른 객체의 메소드 호출 / [40:15] 파라미터 전달 / [41:06] 스트링 타입으로 파일 경로를 받도록 수정될 경우 / [41:22] 스트링 변수 추가 / [41:52] 변경은 의존 관계에 따라 전이 / [42:37] 순환 의존의 특성 / [43:07] 의존의 양면성을 확인하는 코드 / [44:30] authenticator클래스에 의존 / [45:22] try/catch문에 exception을 통해 구분 / [45:52] authenticate메소드의 변경 / [46:30] 의존이 상호간의 영향을 주는 것 의미 / [47:19] 캡슐화(encapsulation) / [47:59] 소스코드 확인 / [48:15] 절차지향적인 코딩 / [48:45] 만료시 처리 / [49:15] 만료 여부를 확인하는 규칙의 변경을 코드에 반영 / [49:52] 버그 발생 가능성 / [50:22] 문제 발생의 이유 / [51:04] 객체지향적으로 코드 재 구현 / [51:13] 캡슐화 기능 / [51:51] 만료 여부 확인 구현을 캡슐화 / [52:28] 만료시 처리 부분 확인 / [53:13] 만료 여부 규칙의 변경 / [54:13] 기능을 사용하는 곳의 영향을 최소화

03 객체지향 part3
캡슐화 기능 구현/캡슐화를 위한 규칙/객체지향 설계과정/객체지행의 원리
53분
책갈피 : [00:45] 캡슐화를 위한 2가지 규칙 / [00:55] tell, don't ask / [01:59] 만료 일자 데이터를 가진 member객체에게 만료 여부 확인 / [02:36] isexpired를 member클래스에서 구현 / [02:45] 데미테르의 법칙(law of demeter) / [03:38] 파라미터로 받은 객체의 메소드만 호출 / [04:30] 기능 구현의 캡슐화를 향상 / [04:40] 예제 코드 확인(신문 배달부 예제) / [04:56] 고객과 지갑에 대한 클래스 확인 / [05:15] 신문 배달부 클래스 / [06:54] 신문 배달부가 고객의 지갑을 확인하지 않을 경우 / [07:46] 데미테르의 법칙을 어기고 있는 코드 / [08:39] 데미테르의 법칙을 지키지 않는 증상 / [09:22] 객체지향 설계과정 / [09:52] 제공해야 할 기능 찾고 알맞은 객체에 할당 / [10:20] 객체 간에 어떻게 메시지를 주고 받을 지 결정 / [10:37] 파일 데이터 암호화 기능 목록 / [11:01] 각 객체의 연결 그림 / [11:41] 객체의 크기는 구현을 진행하는 과정에서 명확 / [12:13] 객체를 새로 만들어 분리 / [13:24] 설계를 할 때 변경되는 부분 고려 / [13:37] 객체지향의 원리 / [13:56] 추상화 / [15:00] 필요로하는 속성이나 행동을 추출하는 작업 / [15:16] 추상화의 정의 / [16:56] 캡슐화 / [17:26] 응집도/결합도 / [18:07] 객체지향 설계 원리 / [18:18] 정보은닉 / [19:11] 일반화 관계 / [19:48] 일반화의 개념 / [21:25] 예제 소스코드 확인 / [21:56] 코드를 수정할 필요가 없도록 작성 / [22:52] 서브클래스 캡슐화 / [23:11] 일반화 관계와 위임 / [23:30] 예제 확인 / [24:33] 예제 소스코드 확인 / [25:22] 메인 메소드 확인 / [25:41] stack에서 사용해서는 안되는 메소드 / [25:56] is a kind of 관계의 성립 / [26:56] 위임 / [27:25] 일반화를 대신해서 위임을 사용하는 방법 / [28:33] arlist객체 생성-this로 초기화 / [28:52] arlist 객체를 참조할 수 있도록 변경 / [29:11] 클래스의 일반화 관계 제거 / [29:37] isempty/size메소드의 위임메소드를 서브클래스에 추가 / [30:03] 집합론 관점으로 본 일반화 관계 / [31:06] disjoint/complete 제약조건 사용 / [31:48] 예제 확인 / [33:28] 일반화의 역관계 특수화 / [34:50] local/non local / [35:58] 다중 분류 / [36:45] 분류 가능한 조합에 각각 대응되는 클래스 생성 / [37:15] 집합론 관점 / [38:06] 다형성 / [38:37] 예제 소스코드 확인 / [39:00] 다형성의 개념 / [40:00] 다형성을 사용하지 않고 작성한 예제 코드 / [40:20] 메인코드 확인 / [40:52] 다형성을 사용한 코드 / [41:52] 피터코드의 상속 규칙 / [42:52] 클래스 다이어그램의 예제 / [45:15] 연관관계-집약관계 사용 / [45:50] 다형성과 추상타입, 재사용 / [46:05] 다형성과 상속 / [47:14] 자바-정적타입 언어 / [47:22] 자바스크립트,루비,그루비-동적타입 언어 / [47:45] 예제 소스코드 확인 / [49:15] 타입의 상속-인터페이스 상속,구현 상속 / [50:36] 상속받은 인터페이스에 정의된 메소드 실제 구현 / [51:05] 구현상속

04 다형성과 추상타입, 재사용
추상 타입과 유연함/상속과 재사용/조립을 이용한 재사용
51분
책갈피 : [00:17] 실제 코드 확인 / [00:25] 추상 타입과 실제 구현의 연결 / [01:03] 클래스 다이어그램 확인 / [01:40] collector / [02:13] collector객체타입의 collect메소드 호출 / [03:53] socketlogreader / [04:15] 추상 타입을 이용한 구현 교체의 유연함 / [04:43] 각각의 기능에 따라 나눈 클래스 / [04:58] flowcontroller의 코드 보기 / [05:45] file read부분 수정 / [06:30] 생성자 boolean / [07:10] flowcontroller 설명 / [07:46] 기존 요구사항과 추가된 요구사항 / [08:33] 구현 추상화 / [08:50] byteSource.java 인터페이스 추가 / [09:26] socketDateReader추가해서 byteSource상속받기 / [10:07] flowcontroller코드는 byteSource를 사용하도록 수정 가능 / [10:50] source.read메소드 호출 / [11:37] byteSource타입의 객체를 생성하는 부분 / [12:26] byteSource타입 객체 생성기능 분리 / [12:46] 생성자를 이용, byteSource전달받기 / [13:07] 문제 해결 / [13:20] create메소드 보기 / [13:50] singleton pattern적용한 부분 / [14:16] flowcontroller 수정 / [14:50] http를 이용해 암호화할 데이터를 읽어오라는 요구 발생 / [15:20] 변경되는 클래스는 byteSourceFactory에 적용 / [16:03] 추상화 과정을 통해 얻은 2가지 유연함 / [17:48] 데이터 읽는 부분과 생성하는 부분 추상화 / [18:02] 변화되는 부분을 추상화하기 / [19:07] 추상타입으로 교체 / [20:10] 추상화가 되어있지 않은 코드 / [21:21] 인터페이스에 대고 프로그래밍하기 / [22:22] 인터페이스는 새롭게 발견된 추상개념을 통해 도출 / [23:03] program to interface규칙 / [23:37] 인터페이스를 사용해야할 경우 / [24:37] 인터페이스는 인터페이스 사용자 입장에서 만들기 / [25:22] 소켓을 이용해 데이터를 읽어오는 기능이 필요할 경우 / [26:29] ByteSource / [26:52] 인터페이스와 테스트 / [27:48] testProcess클래스 작성 / [28:21] byteSource인터페이스를 사용하도록 프로그래밍 되어있는 경우 / [28:45] mock객체를 이용해 테스트 / [30:18] mock객체를 만드는 방법 / [30:45] 상속과 재사용 / [31:22] 웹 요청을 처리하기 위한 클래스 제공 / [31:41] BaseCommandController / [32:45] BaseCommandController가 AbstractController기능 확장 / [33:37] 상속의 단점 / [34:51] 의존하는 클래스 코드가 변경되면 자식 클래스에 영향 / [35:57] 상속을 통한 재사용의 단점 / [36:14] 클래스의 불필요한 증가 / [37:19] 압축을 먼저 하고 암호화한 저장소가 필요할 경우 / [39:15] 상속의 오용 / [40:52] 조립을 이용한 재사용 / [41:37] 4개의 객체를 조립한 예제 / [42:30] Encryptor클래스 재사용 / [44:00] 조립을 이용하면 불필요한 클래스 증가 방지 / [44:37] 조립방식의 또 다른 장점 / [45:36] 상속보다는 객체 조립 사용 / [46:06] 조립을 사용할때의 단점 / [46:37] 위임(delegation) / [48:05] 상속을 사용할 경우 / [49:37] 클래스 계층의 특징 / [51:15] 조립으로 전환하는 부분 고려

05 설계 원칙과 DI와 서비스 로케이터 part1
단일 책임 원칙/개방 폐쇄 원칙/리스코프 치환 원칙/인터페이스 분리 원칙/의존 역전 원칙/어플리케티션 영역/메인 영역
56분
책갈피 : [00:28] 설계 원칙(SOLID) / [01:25] 단일 책임 원칙(Single responsibility principle) / [02:13] 단일 책임 원칙을 위반했을 경우의 문제 / [02:42] updateGui메소드 / [03:20] http프로토콜에서 소켓프로토콜로 변경이될 경우 / [05:10] 단일 책임 원칙을 위반했을 경우의 또 다른 문제 / [05:30] 단일 책임 원칙을 준수할 경우 / [06:15] 데이터 읽기, 데이터 보여주기 / [07:09] 단일 책임 원칙을 지킬 수 있는 방법 / [08:26] 개방 폐쇄 원칙(Open-closed principle) / [09:52] 기능을 확장하면서도 기존코드는 변경되지 않는 것을 의미 / [10:22] 변화되는 부분을 추상화해서 표현 / [10:58] 개방 폐쇄 원칙을 구현하는 또 다른 방법 / [11:16] ResponseSender클래스 예제 / [11:48] sendHeader, sendBody / [12:20] ResponseSender를 상속받은 클래스 / [13:01] ResponseSender클래스는 확장에는 열려있지만 변경에는 닫혀있는것 의미 / [13:46] 개방 폐쇄 원칙이 깨진 것이 아닌지 확인해야할 특징 / [14:11] 다운캐스팅 / [14:43] 타입확인 / [15:18] instanceof 타입확인 연산자 / [15:46] drawSpecific메소드 / [16:10] 비슷한 if-else블록 / [16:48] Enemy클래스에 새로운 경로패턴을 추가할 경우 / [17:11] 경로패턴 추상화 / [18:48] 리스코프 치환 원칙(Liskov substitution principle) / [20:18] 가장 대표적인 예제(직사각형, 정사각형) 확인 / [20:48] square클래스가 rectangle클래스를 상속받도록 구현 / [21:22] increseHeight메소드 살펴보기 / [22:41] instanceof연산자 사용 / [23:55] LSP는 계약과 확장에 대한 것 / [25:45] 리스코프 치환 원칙을 어길 경우 / [27:07] instanceof연산자를 사용해서 확인 / [28:29] 상위타입의 추상화가 되지않아 생긴 문제 / [29:15] item클래스와 specialitem클래스 소스코드 확인 / [30:03] instanceof연산자를 사용하던 코드를 클래스만 사용하도록 구현 / [31:00] 인터페이스 분리 원칙(Interface segregation principle) / [31:17] 클라이언트는 자신이 사용하는 메소드에만 의존 / [31:47] 인터페이스 분리 원칙을 지키지 않았을 경우 / [33:05] ArticleService의 목록 읽기 기능의 변경 발생 / [34:22] 게시글 목록 기능에만 변경이 됐어도 모든 소스를 다시 컴파일 / [36:06] 용도에 맞게 인터페이스 분리 / [36:52] 인터페이스를 분리하는 기준-클라이언트 / [37:14] 의존 역전 원칙(Dependency inversion principle) / [37:44] 고수준 모듈과 저수준 모듈 / [38:43] 고수준 모듈과 저수준 모듈의 예제 / [40:37] 저수준 모듈이 고수준 모듈을 의존하게 만들어 해결 / [41:43] 의존 역전 원칙은 타입의 소유도 역전 / [42:30] 배포 기준이 되는 패키지 / [43:19] 의존 역전 원칙을 적용하지 않을 경우 / [43:50] DI와 서비스 로케이터 / [44:07] 어플리케이션 영역 / 메인 영역 / [44:43] 비디오 포맷 변환기 예제 / [45:34] 요구사항 분석 / [46:15] 비디오 포맷 변환기 설계 확인 / [47:35] 개방 폐쇄 원칙 / [48:19] worker클래스 코드 살펴보기 / [49:00] jobQueue를 구현한 객체 구하기 / [49:20] Locator객체 사용 / [50:22] Locator클래스는 transcoder패키지에 위치 / [51:35] Locator객체의 초기화 / [51:52] 메인 영역 / [53:00] 어플리케이션 영역의 객체들을 생성, 설정, 실행 / [55:08] 서비스 locator방식

06 설계 원칙과 DI와 서비스 로케이터 part2
DI를 이용한 외존객체 사용 방법/서비스 로케이터를 이용한 의존 객체 사용/디자인 패턴의 이해/GoF 디자인 패턴/UML과 디자인 패턴/각 디자인 패턴들
58분
책갈피 : [00:19] DI를 이용한 의존 객체 사용방법 / [00:56] 서비스 로케이터를 사용할 경우 / [01:38] worker생성자 / [02:15] main클래스 변경 / [03:23] DI를 통해 의존 객체를 관리할 경우 / [03:38] main클래스가 조립기의 역할 / [03:57] Assembler작성 / [04:27] getWorker, getJobCLI를 제공 / [05:46] DI를 이용한 의존 객체 사용 / [06:15] 생성자 방식 / [06:42] 설정 메서드 방식 / [07:30] 조립기는 생성자와 설정 메서드를 이용해 의존 객체 전달 / [07:46] DI와 테스트 / [08:20] 클래스 구현이 완료되지 않은 상황 / [09:03] springframework살펴보기 / [09:33] worker는 생성자 방식, jobCli는 설정 메서드 방식 이용 / [10:13] property태그 / [11:46] classPathXmlApplicationContext클래스 / [12:11] string 조립기의 역할 / [13:13] xml설정파일을 사용하는 방식 / [14:11] xml을 사용할 때의 문제점을 해결하는 방법 / [14:31] xml파일을 java코드 기반으로 교체한 예제 / [15:20] 의존 객체를 변경해야 하는 경우 / [15:46] 서비스 로케이터를 이용한 의존 객체 사용 / [16:45] 실행 환경의 제약때문에 DI패턴을 적용할 수 없는 경우 / [17:07] serviceLocator / [17:41] 서비스 로케이터가 올바르게 동작 하려면 / [18:26] 서비스 로케이터를 구현하는 방식 / [18:52] 객체 등록 방식 / [19:15] 서비스 로케이터 접근 위한 static메서드 제공 / [19:37] 메인 영역의 코드 확인 / [20:00] 어플리케이션 영역 코드 확인 / [20:37] 서비스 로케이터가 제공할 객체의 종류 / [21:48] 어플리케이션 영역에서 의존 객체 변경 가능 / [22:33] 상속 / [23:03] abstract를 이용해 구현 / [23:33] 의존 객체를 필요로 하는 코드 / [24:25] myServiceLocator정의 / [25:14] main영역에서 클래스의 객체 생성 / [25:59] 지네릭 / 템플릿 / [26:07] serviceLocator의 단점 / [27:22] jobQueueLocator와 transcoderLocator를 따로 생성 / [28:15] 지네릭이나 템플릿을 이용해 서비스 로케이터를 구현할 경우 / [28:33] 지네릭 방식의 예제 / [28:56] static메서드만으로 구성 / [29:41] jobQueue에만 의존 / [30:33] 서비스 로케이터의 가장 큰 단점 / [31:48] 서비스 로케이터 보다는 DI사용 / [32:07] 디자인 패턴 / [33:22] 디자인 패턴의 이해 / [34:13] 디자인 패턴의 구조 / [36:19] GpF 디자인 패턴 / [37:04] 생성패턴 / [37:35] 구조패턴 / [38:15] 행위패턴 / [40:30] UML과 디자인 패턴 / [40:37] 컬레보레이션(Collaboration) / [41:59] 객체와 역할 사이의 관계 / [42:52] 객체들이 특정 상황에서 수행하는 상호작용 / [44:05] 구체적인 상황의 콜라보레이션 적용 표현 / [45:20] 순차 다이어그램(Sequence diagram) / [46:37] 생명선 / [47:19] 객체 사이의 메시지는 화살표로 표시 / [47:52] 열려있는 화살표는 비동기 메시지 / [48:14] 채워져 있는 화살표는 동기 메시지 / [48:50] <>객체생성 메시지 / [49:00] <>객체소멸 메시지 / [49:21] 메시지를 표현하는 형식 / [49:36] 시퀀스 번호 / [50:14] 가드 / [50:34] 응답 메시지 / [51:35] 도서대여 관련 순차 다이어그램 예제 / [52:22] ref키워드 사용 / [53:07] 객체사이의 상호작용을 효과적으로 나타내는 여러가지 연산 제공 / [54:52] 순차 다이어그램과 클래스 다이어그램의 관계 / [56:15] 차이점 / [57:19] 클래스x와 클래스y의 연관관계 성립

07 디자인 패턴들 part1
생성 패턴/구조 패턴/행위 패턴/Abstract Factory/Builder
50분
책갈피 : [00:05] 각 디자인 패턴들 알아보기 / [00:29] Abstract Factory / [01:03] 예제-엘리베이터 부품 업체 변경 / [01:26] 각 제조 업체별로 부품 개발 / [02:29] 추상클래스로 Motor와 Door를 정의 / [03:30] Motor클래스는 Door클래스의 getDoorStatus메소드 호출 / [03:53] Motor클래스의 move메소드 기능 / [04:55] 일반적인 흐름은 동일하지만 특정 부분만 다른 동작을 하는 경우 / [05:11] 템플릿 메서드 패턴 활용 / [05:30] Door클래스의 open메소드 기능 / [06:15] lgDoor와 hdDoor의 class코드 작성 / [06:30] Door는 추상클래스로 정의 / [07:00] Door코드 보기 / [07:24] close는 템플릿 메서드 / [08:05] 하위 클래스에서 오버라이드 될 부분은 primitive 또는 hook메서드 / [08:37] open과 doOpen / [09:18] 추상클래스 Door를 상속받는 lgDoor와 hdDoor코드 보기 / [09:37] doClose와 doOpen구현 / [09:58] 클래스 다이어그램 확인 / [10:11] open의 대표적인 역할 / [10:43] 문을 제어하는 클래스가 필요 / [11:05] LGMotor와 HDMotor생성 부분 확인 / [11:24] MotorFactory클래스의 createMotor메서드 / [12:13] MotorFactory코드 보기 / [12:35] vendorID에 따라 LGMotor, HDMotor생성 / [12:43] DoorFactory코드 보기 / [13:33] Client클래스 / [14:05] open명령을 사용 / [14:20] move메서드 기능 / [14:39] 추상팩토리가 필요한 이유 / [15:35] 다른 제조업체의 부품을 사용해야 하는 경우 / [16:17] 설정 부분 변경 / [16:37] 부품별 클래스 보기 / [17:33] 총 10개의 Factory객체를 사용해서 엘리베이터를 구성하는 코드 / [18:07] 새로운 제조업체의 부품을 사용할 경우 / [18:47] DoorFactory클래스 보기 / [19:07] enum에 SS업체 추가 / [19:41] client에서 HD를 SS로 변경 / [21:15] LGElevatorFactory / [21:25] HDElevatorFactory / [22:14] createMotor메서드와 createDoor메서드 제공 / [22:37] ElevatorFactory클래스 다이어그램 / [23:07] 추상클래스로 정의되는 ElevatorFactory클래스 보기 / [23:33] 추상메서드 createMotor와 createDoor선언 / [24:36] client코드 보기 / [25:22] 새로운 제조업체의 부품을 지원하는 경우 / [26:11] SSElevatorFactory생성 / [26:41] SSElevatorFactory클래스, SSDoor클래스, SSMotor클래스 보기 / [27:37] client수정 / [28:18] 해당 제조업체의 부품을 생성하는 factory클래스 추가 / [29:14] 클래스 다이어그램 확인 / [30:14] Abstract Factory / [31:48] 추상팩토리 패턴의 컬레보레이션 다이어그램 / [32:05] 추상팩토리 패턴에서 나타나는 역할 / [33:07] AbstractFactory / [33:22] ConcreteFactory1 / [33:44] AbstractProductA / [34:00] 추상팩토리 순차 다이어그램 / [34:30] client부터 순차적으로 보기 / [36:00] LGElevatorFactory와 HDElevatorFactory클래스에 추상팩토리 패턴을 적용한 클래스 다이어그램 / [36:30] ElevatorFactory클래스는 AbstractFactory역할 / [37:30] 예제-슈팅게임 만들기 / [38:20] 클래스 다이어그램 보기 / [39:22] Stage클래스 코드 확인 / [39:52] 코드의 문제점 / [41:05] 추상팩토리 적용 결과 확인 / [41:30] EnemyFactory추가 / [42:19] EnemyFactory구현 / [42:45] 객체 생성을 위한 팩토리 메서드 / [43:13] EasyStageEnemyFactory와 HardEnemyFactory정의 / [43:43] Factory를 사용하도록 변경된 Stage클래스 / [44:00] enemyFactory를 사용해 객체 생성 / [45:37] Builder / [46:00] Builder패턴 설명 / [46:21] 예제 확인 / [47:05] 유연한 자료구조 필요 / [47:35] Builder패턴의 클래스 다이어그램 / [48:15] client내용 확인

08 디자인 패턴들 part2
Iterator/Adapter/Template Method
57분
책갈피 : [00:17] 추상팩토리 패턴에 Factory Method패턴과 Template Method패턴 / [00:36] 패턴들의 순서 / [01:42] Iterator패턴 / [01:59] 배열 arr의 모든 요소를 표시하기 위해 for문 사용 / [02:07] i변수 확인 / [02:42] i를 하나씩 증가 / [03:00] Iterator패턴 설명 / [03:21] 예제 확인 / [03:43] 클래스 다이어그램 확인 / [04:14] 인터페이스 Aggregate / [04:30] Aggregate의 소스 보기 / [05:13] 인터페이스 Iterator / [05:30] Iterator에 필요한 메서드 / [05:54] hasNext메서드 / [06:24] next메서드 / [07:00] Book클래스 보기 / [07:30] BookShelf클래스 / [07:54] BookShelf클래스 소스 보기 / [08:31] books필드를 private으로 한 이유 / [09:15] BookShelfIterator클래스 소스 보기 / [09:56] hasNext메서드 / [10:24] next메서드 / [11:03] Main클래스 만들기 / [11:39] while의 조건 / [12:07] Iterator패턴의 4가지 역할 / [12:15] Iterator / [12:41] ConcreteIterator / [13:24] Aggregate / [13:56] ConcreteAggregate / [14:43] Iterator패턴을 사용하는 이유 / [16:22] 동일 자료형의 여러 객체 순차 접근 / [16:48] Adapter패턴 / [18:03] wrapper패턴 / [18:30] 클래스에 의한 Adapter패턴(상속) / [18:56] 예제 확인 / [19:11] Banner클래스 / [19:37] 인터페이스 Print / [20:07] PrintBanner가 Adapter의 역할을 담당 / [20:52] Banner클래스 보기 / [21:14] Print인터페이스 보기 / [21:45] PrintBanner클래스 보기 / [22:03] printWeak메서드와 printStrong메서드 / [22:22] Main보기 / [23:48] 인스턴스에 의한 Adapter패턴(위임) / [24:22] 클래스 다이어그램 확인 / [25:18] Print와 Print2의 소스 차이 / [25:52] printWeak메서드와 printStrong메서드 / [27:07] 역할 살펴보기 / [27:25] Target의 역할 / [27:56] Client의 역할 / [28:15] Adaptee의 역할 / [28:52] Adapter의 역할 / [30:11] 위임을 사용한 경우 / [31:37] 만들어진 클래스를 새로운 인터페이스에 맞게 개조 시킬 경우 / [33:00] 버전 업 / [33:34] Template Method / [34:05] 예제 확인 / [34:22] HDMotor클래스 / [35:00] enumeration인터페이스 필요 / [35:37] HDMotor클래스의 move메소드를 순차 다이어그램으로 표현 / [37:00] 소스 코드 구현 / [37:22] Door클래스 보기 / [37:37] HDMotor클래스 보기 / [37:57] move메서드 보기 / [38:30] Client클래스 보기 / [38:49] LGMotor를 추가할 경우 / [39:07] LGMotor를 구현한 예제 / [39:30] 코드 중복의 문제 / [40:37] Motor클래스 구현 / [41:43] HDMotor와 LGMotor의 소스 코드 보기 / [42:12] 상속을 활용해 코드 중복 피하기 / [43:19] 클래스 다이어그램 확인 / [43:36] move메서드를 Motor클래스로 이동시킨 모습 / [44:00] HDMotor확인 / [44:42] 소스 코드 확인 / [45:12] Motor클래스의 move메서드 보기 / [45:59] 코드 중복 최소화에 유용 / [46:45] move메소드-템플릿 메소드 / [47:00] moveMotor메소드-Primitive메소드 또는 hook메소드 / [47:28] 콜라보레이션 다이어그램 확인 / [48:43] Client는 templateMethod메소드 호출 / [49:35] 템플릿 메소드 패턴을 Motor예제에 적용한 경우 / [50:07] 템플릿 메소드 패턴의 특징 / [52:37] 리스코프 치환 원칙 / [53:52] 상위 클래스 입장 / [54:37] 추상 클래스 개념 / [55:37] 상위 클래스와 하위 클래스의 협조

09 디자인 패턴들 part3
Factory Method/Singleton
57분
책갈피 : [00:05] Factory Method패턴 / [00:38] 인스턴스를 생성하는 공장을 Template Method로 구현 / [00:52] idcard를 만드는 예제 / [01:03] framework살펴보기 / [01:34] Product클래스 확인 / [02:07] 클래스 다이어그램으로 소스 구현 / [02:15] Product클래스 / [02:46] Factory클래스 / [03:15] 제품을 만들고 등록하는 구현작업은 하위클래스에서 수행 / [03:36] create메소드 / [04:00] 추상메소드로 정의 / [04:30] IDCard패키지 살펴보기 / [04:46] IDCardFactory클래스 / [05:08] createProduct, registerProduct / [05:28] Main클래스 / [05:56] Factory Method패턴 상세히 알아보기 / [06:10] 여러대의 엘리베이터 예제 / [06:46] 스케줄링 / [07:29] 복수의 엘리베이터를 스케줄링해서 이동시키는 클래스 다이어그램 / [08:45] ElevatorManager클래스 소스 / [09:07] 주어진 수만큼의 ElevatorController를 생성함 / [09:20] requestElevator메소드 / [09:41] ElevatorController클래스 / [09:58] ThroughputScheduler클래스 / [10:18] 소스 구현의 문제점 / [12:18] 동적 스케줄링을 지원할 수 있도록 수정된 ElevatorManager클래스 코드 / [12:31] requestElevator의 코드 변화 / [13:31] 현재 시간에 따라 적절한 스케줄링 객체 생성 / [14:41] 클래스 다이어그램에 적용 / [15:37] 새로운 스케줄링 전략이 추가되는 경우 / [17:17] 문제점을 해결을 위한 방법 / [17:59] SchedulerFactory클래스 추가 / [18:37] SchedulerFactory클래스 소스 구현 / [19:37] getScheduler메소드 호출 / [19:52] SchedulerFactory클래스를 이용할 수 있도록 수정된 ElevatorManager클래스 / [20:15] 스케줄링 전략을 설정 / [20:47] Client클래스 코드 보기 / [22:52] 상황에 따라 적절한 객체를 생성하는 코드 자주 중복 / [23:29] Factory Method패턴의 개념을 잘 보여주는 그림 / [24:11] Factory Method패턴이 적용된 부분 / [25:11] Factory Method패턴을 상속을 이용해 적용한 다이어그램 / [26:37] ElevatorManager는 getScheduler메소드를 추상메소드로 정의 / [26:59] ElevatorManager클래스의 코드 / [27:48] requestElevator메소드는 getScheduler메소드를 추상메소드로 정의 / [28:41] 템플릿 메소드에 해당 / [29:21] Factory Method Pattern의 콜라보레이션 다이어그램 / [30:22] Factory Method Pattern을 엘리베이터 예제에 적용 / [32:43] Singleton패턴 / [34:30] 요소를 하나만 가지고 있는 집합 / [34:44] 간단한 클래스 다이어그램 / [35:19] singleton클래스 생성자 / [36:07] Singleton클래스 소스 코드 / [36:36] Main클래스 소스 코드 / [37:07] obj1과 obj2가 동일한 객체인지 확인 / [37:37] Printer클래스 / [38:15] 외부에서 생성자를 호출할 수 없도록 하기 / [38:36] Printer클래스의 생성자를 private로 선언 / [39:07] getPrinter메소드 / [39:51] getPrinter메소드와 printer변수 static타입으로 선언 / [40:45] 정적메소드로 선언 / [41:30] 5명의 사용자가 printer를 이용하는 상황으로 코드 작성 / [42:30] 다중 쓰레드에서 Printer클래스를 이용할 경우 / [43:21] 다중 쓰레드 애플리케이션에 발생하는 문제 해결방법 / [43:49] 정적 변수에 인스턴스를 만들어 초기화하는 방법 / [45:22] 인스턴스를 만드는 메소드에 동기화하는 방법 / [45:59] counter변수 추가 / [46:37] print메소드의 counter변수를 변경하는 부분 동기화 필요 / [47:20] Singleton패턴의 순차다이어그램 / [47:59] Singleton패턴과 정적 클래스의 관계 / [48:29] print메소드 동기화 / [48:52] UserThread 5개 생성 후 스레드 실행 / [49:52] 정적 클래스를 사용할 수 없는 경우 / [50:15] Printer 인터페이스를 구현하는 RealPrinter / [50:44] UsePrinter소스 코드 확인 / [52:45] Printer 인터페이스 확인 / [53:15] 테스트용 가짜 프린터인 FakePrinter확인 / [53:37] doSomething메소드로 인터페이스의 단위테스트를 하는 상황 가정 / [54:43] 정적 클래스의 문제를 싱글턴 패턴으로 해결 / [55:07] 정적 setter메소드 사용 / [56:04] DoSomethingTest / [56:36] 가짜 Printer객체 주입 / [57:04] Singleton패턴 정리

10 디자인 패턴들 part4
Singleton/Prototype/Builder/Abstract Factory
49분
책갈피 : [00:05] Singleton패턴 / [00:27] 팩토리메소드 패턴 설계부분 보기 / [00:50] SchedylerFactory클래스 / [01:11] RESPONSE_TIME, THROUGHPUT, DYNAMIC / [01:55] Client class확인 / [02:27] 중복되어 생성 / [03:36] Singleton패턴을 적용한 설계부분 / [04:14] Singleton패턴을 적용한 SchedylerFactory클래스 / [04:46] Singleton패턴으로 구현한 ThroughputScheduler, ResponseTimeScheduler / [05:44] Abstract Factory Pattern에서 Singleton패턴을 적용하는 과정 / [07:15] 제품군별 객체 생성 / [08:45] Motor클래스 확인 / [09:28] 템플릿 메소드 패턴 / [10:03] Client3 소스 확인 / [10:54] 제조 업체별 Factory객체 / [11:30] 제조 업체별 Factory클래스를 Singleton패턴으로 설계 / [12:03] 소스 코드 확인 / [12:54] Client4 클래스 코드 / [13:31] Prototype패턴 / [14:03] 클래스 이름을 지정하지 않고 인스턴스를 생성할 때 / [14:31] 종류가 너무 많아 클래스로 정리되지 않는 경우 / [14:46] 클래스로부터 인스턴스 생성이 어려운 경우 / [15:37] framework와 생성할 인스턴스를 분리하고자 할 경우 / [17:00] Prototype패턴을 사용한 예제 / [17:22] product 인터페이스 / [17:41] UnderlinePen클래스와 MessageBox클래스 / [19:03] product 인터페이스 소스 코드 확인 / [19:37] use메소드 / [19:48] createClone메소드 / [19:56] Manager클래스 / [20:40] proto / [22:06] 하위클래스 살펴보기 / [22:30] decochar / [22:45] MessageBox클래스 소스 코드 확인 / [23:21] clone메소드로 복사 가능한 것 / [24:21] 자신 또는 하위 클래스에서만 호출 / [25:21] UnderlinePen클래스의 소스 코드 확인 / [26:26] Prototype패턴의 역할을 나타내는 클래스 다이어그램 / [27:52] 종류가 너무 많아 클래스로 정리되지 않는 경우 / [28:26] 클래스로부터 인스턴스 생성이 어려운 경우 / [29:00] framework와 생성할 인스턴스를 분리하고자 할 경우 / [30:45] Clone알아보기 / [32:12] Clone이 내부적으로 하는 일 / [33:19] Cloneable인터페이스 / [34:05] Builder패턴의 개념 / [34:30] Biilder패턴의 예제 / [34:58] 클래스의 구성 확인 / [35:30] Builder클래스 / [36:06] Builder클래스의 하위 클래스 / [36:43] Builder클래스의 소스 코드 / [37:15] Director클래스의 소스 코드 / [38:22] construct메소드 / [39:22] TextBuilder클래스 소스 코드 / [40:20] HTMLBuilder클래스 소스 코드 / [41:13] Main클래스 소스 코드 / [42:00] 동일한 메소드 / [43:12] Builder패턴의 역할 / [43:45] ConcreteBuilder의 역할 / [44:22] Director의 역할 / [45:06] Client의 역할 / [45:45] 순차다이어그램 / [46:05] Director소스 코드 확인 / [48:38] Builder클래스를 수정하는 것

11 디자인 패턴들 part5
Bridge/Strategy/Composite
56분
책갈피 : [00:02] Bridge패턴의 역할 / [00:34] 기능의 클래스 계층 / [01:07] 기능을 추가하기 위해 만들어진 계층 / [01:57] 구현의 클래스 계층 / [02:53] 클래스 계층 등장 / [05:12] Bridge패턴의 예제 / [05:30] 4개의 클래스 / [06:11] Display와 CountDisplay는 기능의 클래스 계층 / [06:15] DisplayImpl과 StringDisplayImpl는 구현의 클래스 계층 / [06:44] Display클래스의 소스 / [07:00] 인수로 전달된 인스턴스 / [07:27] open, print, close메소드 / [07:46] 메소드를 실행하기 위해 impl필드의 구현 메소드 사용 / [08:16] CountDisplay클래스 소스 / [08:41] multiDisplay추가 / [09:31] DisplayImpl클래스 소스 / [09:48] StringDisplayImpl클래스 소스 / [10:35] Main클래스 소스 / [10:58] 변수 d1, d2, d3 / [11:48] d3는 multiDisplay도 호출 / [12:18] Abstraction역할 / [12:48] RefinedAbstraction역할 / [13:03] Implementor역할 / [13:22] ConcreteImplementor역할 / [14:00] 기능을 추가 할 경우 / [15:20] 상속과 위임 / [16:15] 예제에서 위임 사용 / [18:03] Strategy패턴 / [19:02] Strategy패턴을 사용한 게임 예제 / [19:56] Hand클래스 소스 / [20:30] Hand클래스의 인스턴스 3개 작성 / [21:07] 가위바위보의 승패 비교 / [21:25] fight메소드 / [22:18] 퍼센트 연산자 사용 / [23:03] Strategy인터페이스 / [23:33] study메소드 / [24:18] WinningStrategy클래스 / [24:55] random이용 / [25:37] ProbStrategy클래스 / [25:56] history필드 / [27:15] getSum / [28:41] study메소드 / [29:02] Player클래스 / [29:52] win, lose, even메소드 / [30:30] Main클래스 / [30:51] player1과 player2 / [31:07] for문 사용 / [31:55] Robot의 예제 / [32:37] Robot클래스 소스 / [32:52] RobotA와 RobotB 각각 attack과 move구현 / [34:07] 새로운 내용으로 변경을 위해 기존 코드 수정 / [34:45] 기능이 중복되는 상황 / [35:15] 새로운 Robot을 추가 / [36:06] Robot설계의 문제 해결 / [37:07] 구체적인 이동방식과 공격방식을 담은 클래스 / [39:27] Robot클래스에 setMovingStrategy와 setAttackStrategy메소드 정의 / [39:58] 계선된 설계를 코드로 변경 / [40:35] MovingStrategy인터페이스 선언 / [40:52] AttackStrategy인터페이스 선언 / [41:06] Client클래스 소스 / [41:37] Strategy Pattern의 각 역할 / [42:28] Strategy인터페이스 / [42:45] ConcreteStrategy역할 / [43:00] Context역할 / [43:52] Composite패턴 / [46:27] Entry클래스 / [46:37] Entry클래스의 소스 / [46:52] 하위클래스인 File과 Directory / [47:15] getName메소드 하위클래스에서 구현 / [47:29] getSize메소드 하위클래스에서 구현 / [48:07] add 구현 / [48:29] printList메소드 / [49:15] toString메소드 / [49:52] File클래스 소스 / [51:04] Directory클래스 소스 / [51:52] getSize메소드 보기 / [53:52] add메소드 보기 / [54:29] printList메소드 보기 / [55:08] FileTreatmentException클래스

12 디자인 패턴들 part6
Composite/Decorator
56분
책갈피 : [00:04] Composite패턴의 Main클래스 소스 / [00:15] 디렉토리 계층 확인 / [01:07] usr디렉토리에 새로운 디렉토리 생성 / [01:49] add메소드 구현 방법 / [02:07] Entry클래스에서 구현하고 에러를 넘겨주는 방법 / [02:50] Entry클래스에서 구현하고 아무것도 실행하지 않는 방법 / [03:07] Entry클래스에서 선언하지만 구현하지 않는 방법 / [03:45] Directory클래스에만 add를 넣는 방법 / [04:15] Composite패턴의 구조 / [05:12] Computer모델링 하는 예제 / [05:30] Keyboard, Body, Monitor클래스 정의 / [06:00] 컴퓨터클래스 부품을 표현한 클래스 다이어그램 / [06:15] 합성관계 표시 / [07:15] Keyboard, Body, Monitor클래스의 코드 / [07:30] Computer클래스의 코드 / [07:56] addBody, addKeyboard, addMonitor메소드 / [08:24] Client클래스의 코드 / [09:05] 설계의 문제점 / [09:28] Speaker객체를 지원할 수 있도록 Computer클래스를 확장하는 방법 / [10:26] Speaker클래스 코드 / [10:48] Speaker클래스를 지원하는 Computer클래스 코드 / [11:41] Computer클래스의 코드를 변경해야만 하는 설계 / [12:39] ocp를 준수할 수 있도록 개선한 Computer클래스의 클래스 다이어그램 / [12:54] ComputerDevice클래스 정의 / [14:16] Computer클래스도 ComputerDevice의 하위클래스로 정의 / [14:46] ComputerDevice추상클래스 코드 / [15:28] 변경된 Computer클래스 확인 / [15:43] addComponent메소드 / [16:29] 개선된 Computer클래스를 이용하는 Client클래스 코드 / [18:30] Speaker클래스를 ComputerDevice의 하위클래스로 구현 / [19:11] Client에 Speaker추가된 것 확인 / [20:06] Composite Pattern의 각 역할 / [21:33] Decorator패턴 / [21:52] 문자열 주변에 장식을 표시하는 예제 / [22:30] Display는 문자열 표시용 추상클래스 / [23:00] Display클래스의 코드 / [23:48] show메소드 / [24:26] StringDisplay클래스 코드 / [25:40] Border클래스 코드 / [27:59] SideBorder클래스 / [28:47] getColumns메소드-문자수 계산 / [29:48] getRows메소드 / [30:03] getRowText메소드 / [30:47] FullBorder클래스 코드 / [31:02] makeLine메소드 / [32:45] Main클래스 코드 / [34:07] 인스턴스 b1, b2, b3의 관계 확인 / [34:43] 네비게이션 예제 / [35:52] RoadDisplay클래스 소스 / [36:44] draw메소드 구현 / [37:22] 소스 코드의 문제점 / [37:52] 도로 표시 기능을 추가로 구현하는 경우 / [38:20] RoadDisplayWithTraffic클래스 정의 / [38:37] RoadDisplay에서 상속받은 draw메소드 오버라이드 / [39:07] RoadDisplayWithTraffic클래스 코드 / [39:30] 여러가지 추가기능을 조합해야 하는 경우 / [41:15] LaneDecorator와 TrafficDecorator를 이용한 설계 / [42:42] Display클래스 / [43:07] DisplayDecorator클래스 / [43:22] LaneDecorator클래스 / [43:52] TrafficDecorator클래스 / [44:12] Client클래스 소스 코드 확인 / [45:37] 동일한 Display클래스를 통해 도로 정보 표시 / [48:30] 교차로를 표시하는 기능을 추가하려면 CrossingDecorator클래스 추가 / [49:06] 내용은 다른 Decorator클래스와 유사 / [51:30] 추가기능을 동적으로 생성하는 예제 / [52:04] Decorator Pattern의 각 역할

13 디자인 패턴들 part7
Visitor/Chain of Responsibility
53분
책갈피 : [00:03] Visitor패턴 / [00:49] 데이터구조와 처리 분리 / [01:23] Visitor패턴의 예제를 위한 클래스다이어그램 / [01:53] Visitor클래스 / [02:07] Element / [02:22] ListVisitor / [02:44] Entry의 하위 클래스 File과 Directory / [02:58] Visitor클래스 자세히 보기 / [03:21] visit라는 동일한 이름의 메소드를 2개 선언 / [04:24] Visitor클래스의 소스 코드 / [04:46] Element인터페이스 / [05:15] Entry클래스 / [05:57] accept를 실제로 구현하는 Entry의 하위클래스 / [06:15] add메소드는 Entry클래스에서 예외처리 / [06:46] iterator메소드 Entry클래스에서 예외처리 / [07:00] File클래스 / [07:15] accept메소드 / [08:16] Directory클래스 / [08:35] iterator메소드 / [09:24] ListVisitor클래스 / [09:43] ListVisitor클래스의 소스 코드 / [10:11] visit file 메소드 / [10:58] visit directory 메소드 / [12:13] File클래스 소스 코드 / [12:45] Main클래스 소스 코드 / [13:15] ListVisitor의 인스턴스를 사용 / [14:01] File클래스와 Directory클래스, ListVisitor의 관계 / [14:39] Entry는 Element구현 / [15:07] 상호 호출에 관한 내용 / [15:35] 한 Directory에 2개의 File이 있을 때의 처리 / [18:48] Directory인스턴스나 File인스턴스는 accept메소드 호출 / [19:33] Visitor패턴의 각 역할 / [20:00] Visitor의 역할 / [20:40] ConcreteVisitor의 역할 / [21:26] Element의 역할 / [21:52] ConcreteElement들의 역할 / [22:11] ObjectStructure의 역할 / [22:56] Visitor패턴의 메소드 호출 / [24:03] 더블 디스패치(double dispatch) / [25:52] OCP / [28:11] 주의할 점 / [29:21] 새로운 ConcreteVisitor의 역할 추구 / [29:48] ConcreteElement의 역할 추가는 복잡 / [30:51] 데이터 구조의 요소에 대한 처리를 따로 분리 / [32:07] Visitor패턴에 대한 정리 / [34:20] Chain of Responsibility패턴 / [35:51] Chain of Responsibility패턴을 사용한 예제 / [37:15] Trouble클래스의 소스 코드 / [37:37] Support클래스 / [38:36] Support클래스의 소스 코드 / [39:28] resolve메소드 / [40:29] NoSupport클래스 / [40:49] LimitSupport클래스 / [41:30] OddSupport클래스 / [41:45] SpecialSupport클래스 / [42:00] Main클래스 / [42:45] setNext메소드 사용 / [45:22] Chain of Responsibility패턴의 각 역할 / [45:37] Handler의 역할 / [46:07] ConcreteHandler의 역할 / [46:29] Client의 역할 / [48:49] Chain of Responsibility패턴을 사용하지 않을 경우 / [50:52] Chain of Responsibility패턴을 사용할 때 고려할 점 / [52:28] Chain of Responsibility 정리

14 디자인 패턴들 part8
Facade/Mediator
56분
책갈피 : [00:05] Facade패턴 / [00:46] 상호 관련된 클래스 제어 / [01:41] 사용자의 웹페이지를 작성하는 예제 / [02:49] Database클래스 / [03:07] Database클래스의 소스 코드 / [03:57] HtmlWriter클래스의 소스 코드 / [04:46] title메소드 제일 먼저 호출 / [05:11] PageMaker클래스 소스 코드 / [06:15] Main클래스 소스 코드 / [06:46] Facade패턴으로 생각한 역할 / [07:38] 시스템을 구성하는 역할 / [08:43] Facade의 역할 / [09:26] 인터페이스의 수가 적은 것 / [10:48] 확장시켜서 Facade패턴 적용 / [11:52] 추상팩토리 패턴과 관련 / [12:33] Facade패턴 정리 / [12:56] Mediator패턴 / [14:07] Mediator패턴의 예제 클래스 다이어그램 / [14:50] 사용자 Login인 경우 / [15:18] 게스트 Login인 경우 / [17:03] OK나 Cancle버튼은 각각의 다른 클래스로 정의 / [18:33] 다수의 오브젝트 사이를 조정해야 할 경우 Mediator패턴 사용 / [19:06] 예제의 클래스 살펴보기 / [20:33] LoginFrame의 구성 / [21:48] Mediator인터페이스 / [21:56] createColleagues메소드 / [22:15] colleagueChanged메소드 / [22:48] Colleague인터페이스 / [23:30] setMediator메소드 / [24:18] setColleagueEnabled메소드 / [25:52] ColleagueButton클래스 / [26:33] mediator필드 / [26:52] setColleagueEnabled메소드 / [27:22] ColleagueTextField클래스 / [29:03] textValueChanged메소드 / [29:41] ColleagueCheckbox클래스 / [30:56] LoginFrame클래스 / [32:22] createColleagues메소드 / [32:44] colleagueChanged메소드 / [33:07] userpassChanged메소드 / [33:37] LoginFrame의 생성자 부분 / [34:44] 리스너의 설정 수행 / [36:00] colleagueChanged메소드 내용 보기 / [37:07] Main클래스 / [37:30] Mediator패턴을 보고 각 역할 알아보기 / [37:57] ConcreteMediator의 역할 / [38:27] Colleague인터페이스의 역할 / [38:43] ConcreteColleague의 역할 / [39:07] Mediator패턴의 예제 / [39:30] 미디어플레이어의 주요기능 / [40:59] 각 영역을 별도의 클래스로 구현-의존관계 형성 / [42:07] 재사용이 어려운 단점 / [43:29] 함께 사용되는 클래스가 증가할수록 개별 클래스의 수정이 어려워지는 단점 / [45:19] 문제점 해결을 위해 Mediator패턴 사용 / [46:57] VideoListUI의 소스 일부분 확인 / [47:30] VideoMediator의 소스 일부분 확인 / [49:15] MediaController와 VideoMediator의 의존 부분 / [51:22] Mediator패턴의 단점 / [51:45] 추상 Mediator클래스의 재사용 / [53:21] select메소드와 volumeChanged메소드의 구현 / [55:15] Mediator패턴 정리

15 디자인 패턴들 part9
Observer 패턴
55분
책갈피 : [00:04] Observer패턴 / [00:40] 예제를 위한 클래스 다이어그램 확인 / [01:59] Observer인터페이스 / [02:22] update메소드 / [03:00] NumberGenerator클래스 / [03:38] addObserver메소드 / [03:51] notifyObservers메소드 / [04:26] RandomNumberGenerator클래스 / [05:29] DigitObserver클래스 / [06:13] GraphObserver클래스 / [06:40] Main클래스를 보며 Observer사용 확인 / [07:26] execute를 할 경우 / [08:09] 여러가지 방식으로 성적을 출력하는 예제 / [08:31] ScoreRecord클래스와 DataSheetView클래스 필요 / [10:50] ScoreRecord클래스의 소스 코드 / [11:50] DataSheetView클래스 소스 코드 / [12:43] Client클래스 소스 코드 / [13:37] addScore메소드 호출 / [14:11] 주의점 / [15:16] addScore메소드를 호출할 때 dateSheetView의 update메소드 호출 / [15:46] 성적을 다른 형태로 출력하고 싶을 경우의 변경 작업 / [16:36] 최소, 최대값만 출력 / [17:07] ScoreRecord부터 소스 변경 / [17:37] MinMaxView클래스 추가 / [18:33] displayMinMax메소드는 Collections클래스 이용 / [19:21] ocp에 위배가 되는 작업 / [20:02] 동시에 또는 순차적으로 성적을 출력하는 경우 / [21:30] 적용한 ScoreRecord클래스 소스 / [21:48] dataSheetViews필드 / [22:15] setMinMaxView메소드 / [22:52] Client클래스 / [24:11] 출력 변경을 새로운 클래스에 통보할 때마다 반복적으로 발생 / [25:33] 공통기능을 상위클래스 및 인스턴스로 일반화 시키고 활용해 ScoreRecord구현 / [25:59] 개선한 ScoreRecord클래스 다이어그램 / [26:32] Subject클래스 정의 / [28:00] ScoreRecord클래스의 소스 구성 / [28:29] 추상클래스 Subject / [28:59] attach메소드와 detach메소드 / [29:40] ScoreRecord클래스 / [30:14] DataSheetView클래스와 MinMaxView클래스는 기존 코드와 동일 / [30:30] Client클래스 소스 코드 / [31:33] 성적변경에 관심이 있는 대상객체들의 관리는 Subject클래스에서 구현 / [32:35] 목록출력과 최소/최대값 출력, 합계와 평균 출력 / [33:30] StatisticsView클래스 / [33:49] update메소드 / [34:15] displayStatistics메소드 / [34:27] Client클래스의 소스 코드 / [36:19] Observer패턴만볼 수 있도록 구성한 클래스 다이어그램 / [38:35] Observer의 역할 / [38:59] Subject의 역할 / [39:21] ConcreteSubject의 역할 / [39:52] ConcreteObserver의 역할 / [41:19] Subject클래스의 notifyObservers메소드 호출 / [42:12] 다음 예제 / [42:42] StatusChecker클래스의 소스 코드 / [43:37] 변경된 클래스 다이어그램 확인 / [44:21] 상태가 변경될 때 임의의 객체에게 변경사실 통보 / [44:45] Observer패턴 적용 / [45:49] notifyStatus메소드가 등록된 Observer객체의 omAbnormalStatus메소드 호출 / [46:14] StatusSubject클래스 / [46:36] notifyStatus메소드 / [47:15] StatusChecker클래스 / [48:22] StatusObserver인터페이스 / [49:07] Observer를 등록하는 부분 / [50:37] Observer패턴을 적용할 때의 장점 / [51:22] Observer객체에게 상태를 전달하는 방법

16 디자인 패턴들 part10
Observer/Memento/state
60분
책갈피 : [00:05] Observer패턴 / [00:19] Subject객체 구분 / [01:00] onClickListener인터페이스가 Observer인터페이스 / [01:15] onClick했을 때 login할 수 있도록 구현 / [01:52] onCreate메소드 / [02:57] onClick메소드에서 id값 사용 / [04:15] Observer패턴을 구현할 때 고려해야 할 사항 / [04:25] 주제 객체의 통지 기능 실행 주체 / [05:40] Client에서 여러 StatusChecker를 두고 조건을 만족하는지 확인 / [06:24] Subject객체에서 직접 통지기능을 실행하는 것이 구현에 유리 / [07:40] 옵저버 인터페이스의 분리 / [08:41] EventObserver인터페이스 / [09:11] ConcreteObserver클래스는 모든 메소드 구현 / [10:37] 통지 시점에서의 주제 객체 상태 / [11:01] SomeSubject를 상속받고 있는 AnySubject클래스 / [12:22] 옵저버 객체가 올바르지 않은 값을 사용하는 문제 발생 / [12:45] 템플릿 메소드 패턴을 적용한 예 / [13:07] 상위클래스가 제어의 흐름 결정 / [13:54] 옵저버 객체의 실행 제약 조건 / [14:26] notifyToObserver메소드 / [15:33] 옵저버 인터페이스를 정의할 때는 옵저버 메소드의 실행 제한에 대한 기준 필요 / [16:41] Observer패턴의 정리 / [17:03] Memento패턴 / [18:41] 캡슐화의 파괴에 빠지지 않고 저장과 복원 실행 / [19:03] undo, redo, history, snapshot 실행 / [19:25] Memento패턴의 예제 클래스 다이어그램 / [19:45] 게임규칙 살펴보기 / [20:22] 프로그램에서 Memento를 어떻게 사용하는지 확인 / [20:56] Memento클래스 보기 / [21:30] money필드와 fruits필드 보기 / [22:00] Memento클래스의 소스 코드 / [22:41] addFruit메소드 / [23:22] Gamer클래스 소스 코드 / [23:52] 중심이되는 bet메소드 / [24:30] createMemento메소드 / [25:18] restoreMemento메소드 / [26:00] Main클래스 소스 코드 / [26:33] Memento패턴 적용 / [26:52] createMemento를 통해 현재상태 저장 / [27:18] 시퀀스 다이어그램으로 나타내서 학인 / [28:03] Memento패턴의 역할 / [28:17] Originator의 역할 / [28:52] Memento의 역할 / [29:26] wide interface: 넓은 인터페이스 / [30:00] narrow interface: 좁은 인터페이스 / [30:41] Caretaker의 역할 / [31:26] Memento역할이 갖는 좁은 인터페이스만 사용 / [32:19] 자바의 엑세스 제어 기능 사용 / [34:45] Caretaker역할의 Main클래스 / [35:07] Main클래스가 할 수 있는 일 / [36:30] Memento의 개수와 유효기간 / [37:37] Caretaker의 역할과 Originator의 역할을 분리하는 이유 / [39:00] Memento패턴의 정리 / [39:14] State패턴 / [39:52] 상태를 클래스로 표현 / [40:30] State패턴을 사용한 예제 / [42:43] 예제를 유사코딩으로 작성 / [43:36] State패턴을 사용해 유사코딩으로 작성 / [44:42] 두 코드의 차이점 / [45:44] 예제의 클래스 다이어그램 / [46:52] State인터페이스 / [47:52] 상태 의존 메소드의 집합 / [48:19] DayState클래스 / [49:20] DayState클래스의 소스 / [49:45] doClock메소드 / [51:42] NightState클래스의 소스 / [52:15] Context인터페이스 / [52:35] 추상메소드들 선언 / [53:07] SafeFrame클래스 소스 / [53:30] 필드와 메소드 살펴보기 / [54:00] SafeFrame생성자 보기 / [54:22] Panel생성 후 버튼 저장 / [54:45] actionPerformed메소드 / [56:13] 리스너 설정 부분 확인 / [57:15] 버튼이 클릭되었을 때 호출되는 메소드 / [58:22] state패턴을 사용하지 않고 프로그래밍을 했을 경우 / [59:13] changeState메소드

17 디자인 패턴들 part11
state 패턴
1시간 1분
책갈피 : [00:04] State패턴의 예제 / [00:20] doUse메소드의 다른점 / [01:03] setClock을 통해 State가 바뀌는 과정 확인 / [01:26] Main클래스 소스 코드 / [02:06] State패턴의 클래스 다이어그램을 보며 각 클래스의 역할 확인 / [02:23] State의 역할 / [02:53] ConcreteState의 역할 / [03:27] Context의 역할 / [04:29] Divide and conquer / [05:26] 상태가 많은 시스템에서 State패턴의 장점 발휘 / [06:10] State패턴은 시스템 상태를 클래스로 표현 / [06:25] SafeFrame클래스의 setClock메소드와 State인터페이스의 doClock메소드의 관계 / [07:53] 상태의 의존한 처리 이해 / [08:16] 상태 전환의 관리 / [08:54] SafeFrame클래스가 changeState메소드 구현 / [09:35] 상태 전환의 장점과 단점 / [11:33] 상태 전환은 SafeFrame클래스에 맡기기 / [11:50] Context역할이 모든 ConcreteState의 역할을 알아야 하는 단점 / [12:16] State패턴을 사용하므로 얻는 장점 / [13:05] state필드의 값이 시스템의 상태를 결정 / [13:22] 새로운 상태 추가 / [13:56] 특정 메소드 추가 / [14:20] 클래스의 수정이 많지만 에러를 줄여주는 역할 / [15:13] 인스턴스활용 부분 소스 코드 / [15:56] this가 addActionListener와 doUse에 전달될 때의 차이 / [17:32] State패턴의 다음 예제 / [18:06] 선풍기를 표현한 상태 다이어그램 / [19:15] 상태의 한 종류 Pseudo state / [19:45] 상태 머신 다이어그램의 시작과 종료 / [20:15] 상태진입 / [20:37] 특정이벤트 발생 후 조건을 만족할 경우 / [21:02] 진입 이후 수행해야 하는 액션 / [21:15] 선풍기가 OFF상태일 경우 / [21:45] 상태 머신 다이어그램의 해석 / [23:21] 선풍기가 on이나 WORKING상태일 경우 / [23:41] Active라는 복합상태 이용 / [24:47] 복합상태 안의 on상태 / [25:11] 형광등 예제 / [26:11] 상태 머신 다이어그램으로 표현 / [26:41] 상태 머신 다이어그램으로 실제 코드 만들기 / [27:00] 변수 설정 / [27:29] Light클래스 구현 / [28:22] Client클래스 / [28:48] 새로운 요구사항이 있을 때의 코드 변경 / [29:52] 상수 추가 / [30:41] 두번째 Light클래스 / [31:06] 각 메소드에 SLEEPING상태 추가 / [32:13] 변하는 부분을 찾아서 캡슐화 / [33:15] 형광등의 상태 머신 다이어그램 / [33:37] 구조가 Strategy패턴과 유사 / [34:30] 코딩하기 / [35:15] State인터페이스 / [35:22] on클래스 / [36:15] OFF클래스 / [37:22] 상태진입도 각 상태에서 처리 / [37:43] Light클래스를 수정한 코드 / [38:35] state의 메소드 이용 / [39:52] 개선할 점 / [41:07] Singleton패턴을 사용해 on과 OFF클래스 변경 / [42:22] State Pattern의 콜라보레이션 다이어그램 / [43:57] State인터페이스의 역할 / [44:22] 각각의 State확인 / [45:22] request메소드 / [45:37] State패턴을 적용한 Light클래스 / [46:52] state변수의 변경 / [47:22] State패턴의 새로운 예제 / [47:52] 자판기에 들어갈 소프트웨어의 내용 / [49:15] VendingMachine클래스로 구현 / [49:35] insertCoin메소드 / [50:29] select메소드 / [51:37] SOLDOUT추가 / [52:36] 각 메소드의 코드 / [53:22] 상태 패턴을 적용한 자판기 프로그램의 클래스 다이어그램 / [54:30] 상태패턴이 적용된 VendingMachine의 소스 코드 / [55:00] insertCoin과 select메소드 / [55:22] NoCoinState클래스 / [55:59] increaseCoin메소드 / [56:27] select메소드 / [56:37] SelectableState클래스 / [57:22] 상태패턴 적용 전과 비교 / [58:57] Context에서 직접 상태 변경하는 코드 / [60:36] 상태객체에서 Context의 상태를 변경할 경우 / [61:00] State패턴의 정리

18 디자인 패턴들 part12
Flyweight/Proxy
55분
책갈피 : [00:05] Flyweight패턴 / [00:30] 무게의 개념은 메모리의 사용량 / [00:46] new Something문장 / [01:30] 이미 만들어져 있는 인스턴스 공유 / [01:48] Flyweight패턴을 사용한 예제 클래스 다이어그램 / [02:13] BigChar클래스 / [03:07] BigCharFactory클래스 / [03:53] BigString클래스 / [04:10] BigChar클래스의 소스 코드 / [04:15] fontdata / [05:14] 복잡한 생성자 / [06:30] BigCharFactory클래스의 소스 코드 / [06:46] 공유의 방법 실현 / [07:00] pool필드는 인스턴스 관리 / [07:41] put메소드 / [07:55] get메소드 / [08:26] singleton패턴을 사용해서 구현 / [08:48] getInstance메소드 / [09:01] getBigChar메소드 / [09:39] pool이용 / [10:07] new를 사용해서 BigChar의 인스턴스 생성 / [10:52] synchronized / [11:43] BigString클래스의 소스 코드 / [12:16] for문을 돌며 factory.getBigChar메소드 호출 / [12:35] new연산자를 이용하면 인스턴스 공유 불가능 / [12:52] bigchars의 배열 보기 / [13:54] Main클래스의 소스 코드 / [14:15] BigString인스턴스를 만들고 표시하는 것 구현 / [14:28] Flyweight패턴의 각 역할 / [14:41] Flyweight의 역할 / [15:05] FlyweightFactory의 역할 / [15:24] Client의 역할 / [16:03] Flyweight패턴은 인스턴스를 공유 / [16:11] 주의점 / [18:03] BigString에서 색 정보를 제공할 경우 / [18:37] Intrinsic, extrinsic / [21:07] 인스턴스와 garbage collection / [23:52] 인스턴스에 대한 참조 제거 / [24:26] 메모리 이외의 리소스 / [25:03] 인스턴스를 new할 경우 / [25:48] Flyweight패턴 정리 / [26:03] Proxy패턴 / [26:37] Proxy패턴을 사용한 예제 / [27:32] setPrinterName, getPrinterName메소드 / [27:52] print메소드를 호출해 Printer클래스의 인스턴스 생성 / [28:22] Printable인스턴스 정의 / [28:55] Printer클래스의 소스 코드 / [30:07] heavyJob메소드 / [30:25] Printable인터페이스 / [30:52] PrinterProxy클래스 소스 코드 / [31:45] realize메소드 / [32:57] 대리인의 인스턴스 이름 설정 / [33:22] 위임 과정 / [33:58] 생성되지않는 Printer의 인스턴스 / [35:37] synchronized메소드로 하지 않은 경우 / [36:22] Main클래스의 소스 코드 / [37:44] Printer클래스의 생성자 / [38:52] PrinterProxy클래스를 수정하기위한 방법 / [39:35] real필드 변경 / [40:28] Main에 PrinterProxy생성부분 변경 / [41:35] Proxy패턴의 각 역할 / [41:57] Subject의 역할 / [42:27] Proxy의 역할 / [43:15] RealSubject의 역할 / [43:45] Client의 역할 / [46:30] 분리해서 개별적으로 수정 가능 / [48:07] 위임 / [48:45] 투과적 / [49:28] Proxy패턴의 종류 / [49:42] Virtual Proxy(가상 프록시) / [49:52] Remote Proxy(원격 프록시) / [50:19] Access Proxy / [50:44] Proxy패턴의 예제 / [52:12] 예제를 Proxy패턴으로 구현한 ProxyImage클래스 / [52:30] draw메소드 / [53:07] ListUI클래스 / [55:14] Proxy패턴의 정리

19 디자인 패턴들 part13
Command/Interpreter
1시간 52분
책갈피 : [00:05] Command패턴 / [00:37] 명령 표현 / [02:07] Command패턴을 사용한 그림그리기 예제 / [02:42] 클래스 다이어그램 확인 / [03:05] 점을 그리는 명령-DrawCommand클래스의 인스턴스로 생성 / [03:19] 3가지 패키지로 구성 / [04:30] Command인터페이스의 소스 코드 / [04:46] execute메소드 호출 / [05:15] MacroCommand클래스의 소스 코드 / [05:46] commands필드 / [07:00] append메소드 / [07:57] undo메소드 / [08:22] clear메소드 / [08:46] DrawCommand클래스의 소스 코드 / [09:52] execute메소드 / [10:11] Drawable인터페이스 / [10:39] DrawCanvas클래스의 소스 코드 / [12:16] paint메소드 / [12:48] draw메소드 / [13:18] Main클래스의 소스 코드 / [14:09] history필드 / [14:22] canvas필드 / [14:37] clearButton필드 / [14:58] 생성자에서 전체화면 구성 / [16:07] 이벤트리스너 설정 / [16:33] 버튼의 레이아웃 / [17:26] actionPerformed메소드 / [17:48] mouseMoved와 mouseDragged메소드 / [18:29] 윈도우 리스너 인터페이스를 구현하기 위한 메소드 / [18:59] 버튼 예제 / [19:47] 예제 클래스 다이어그램을 기반으로 소스 코드 작성 / [20:18] Button클래스 / [21:11] 버튼을 눌렀을 때 다른 기능을 실행하는 경우 / [22:21] 버튼을 누르는 동작에 따라 다른 기능 실행 / [23:18] Button클래스에 setMode메소드 추가 / [23:48] Client클래스 확인 / [25:03] 새로운 기능의 추가나 변경을 하더라도 Button클래스를 그대로 사용하기 위한 방법 / [25:44] pressed메소드 수정 / [25:59] 여러가지 기능을 수행하는 버튼클래스의 설계 예제 / [27:30] 예제를 구현한 소스 코드 확인 / [28:26] Button클래스 / [29:11] LampOnCommand클래스 / [29:41] Alarm클래스 / [30:18] Client클래스 / [31:03] 동일한 pressed메소드 호출 / [31:48] Command패턴 적용 / [32:07] Button클래스의 pressed메소드 / [33:22] 버튼을 한번 눌렀을 때 램프를 켜고 두번 눌렀을 때 램프를 끄는 기능의 구현 / [34:15] Lamp클래스에 turnOFF메소드 추가 / [34:27] LampOffCommand클래스 추가 / [34:51] Client클래스 / [35:07] setCommand를 통해 lampOffCommand설정 / [35:30] LampOffCommand클래스 새롭게 정의 / [36:07] 파일open과 파일close가 있다고 가정 / [37:00] Command Pattern을 사용해 메뉴아이템 재사용 / [37:37] Command패턴에서 각각의 역할 / [37:52] ConcreteCommand의 역할 / [38:15] Receiver의 역할 / [38:52] 첫번째 예제의 Command패턴 적용부분 확인 / [40:30] Main클래스 소스 코드 / [41:35] Main클래스와 DrawCanvas클래스가 execute메소드 호출 / [41:58] 시퀀스 다이어그램 확인 / [43:43] 그림그리기에 색을 설정하는 기능 추가하기 / [44:52] ColorCommand클래스 생성 / [45:15] Drawable인터페이스 수정 / [45:37] DrawCanvas에 적용 / [46:22] setColor메소드 추가 / [47:00] Main클래스에 3개의 버튼 추가 생성 / [47:22] 버튼 버튼박스에 추가 / [48:12] redButton이 눌렸을 때의 Command / [48:52] blueButton과 greenButton동일 작업 / [49:13] undo기능 추가 / [49:49] Main클래스에 undo버튼 추가 / [50:30] Command패턴의 정리 / [50:52] Interpreter패턴 / [51:45] 변화가 생겼을 때 어느 레벨의 프로그램을 수정할 것인지 확인 / [53:07] 미니 언어 설명 / [54:22] 미니 언어로 기술된 미니 프로그램의 예 / [56:00] 미니 언어의 문법 / [58:45] 미니 언어를 구분해석하는 예제 / [60:00] 예제 프로그램의 클래스 다이어그램 / [61:19] Node클래스의 소스 코드 / [62:50] ProgramNode클래스 / [63:49] Token-구문해석의 처리 단위 / [65:15] CommandListNode클래스 / [68:09] CommandNode클래스 / [69:30] RepeatCommandNode클래스 / [70:14] parse메소드 / [72:45] PrimitiveCommandNode클래스 / [73:56] Context클래스 / [76:15] nextToken메소드 호출 / [77:15] Main클래스 / [78:45] parse를 끝내고 node출력 / [79:45] Interpreter패턴의 각 역할 / [80:45] Terminalexpression의 역할 / [81:00] NonTerminalexpression의 역할 / [81:26] Context의 역할 / [81:45] Client의 역할 / [82:13] 미니 언어의 다른 종류 / [83:30] Interpreter를 만들 때의 오류 / [84:15] 프로그램을 수정해서 실행 / [87:00] InterpreterFacade클래스 / [87:45] parse메소드 / [88:40] ExecutorFactory인터페이스 / [88:54] Context클래스에서 ExecutorFactory구현 / [89:45] Node클래스에서 Executor구현 / [90:30] ProgramNode클래스 / [91:00] CommandNode클래스 / [91:30] RepeatCommandNode클래스 / [91:58] CommandListNode클래스 / [92:15] PrimitiveCommandNode클래스 / [93:45] TurtleCanvas클래스 / [96:00] TurtleExecutor클래스 / [97:41] initialize호출 / [99:15] Main클래스 / [00:00] actionPerformed메소드 / [00:17] parseAndExecute메소드 / [00:53] Interpreter패턴 정리 / [01:38] Iterator패턴 / [02:28] Iterator와 Visitor패턴을 같이 사용할 경우 / [02:42] Composite패턴 / [03:00] Factory Method / [03:23] Adapter패턴 / [04:15] Template Method / [05:00] Factory Method의 연관 패턴 / [06:14] Singleton패턴 / [06:38] Prototype의 연관 패턴 / [07:46] Builder의 연관 패턴 / [08:43] Abstract Factory / [09:15] Bridge / [09:35] Strategy패턴 / [10:54] Chain of Responsibility / [11:18] Mediator

20 UML 다이어그램
다이어그램 종류/유스케이스/컴포넌트/복합구조/활동/상태/시퀀스/통신/타이밍/상호작용 개요/배치
1시간 27분
책갈피 : [00:05] UML알아보기 / [00:47] UML의 다이어그램의 종류와 특성 / [01:19] 여러가지 다이어그램을 클래스 다이어그램으로 구성 / [02:51] UML2.0을 구성하는 다이어그램 / [03:53] 구조 다이어그램 / [04:00] Class다이어그램 / [04:15] Object다이어그램 / [04:28] Deployment다이어그램 / [04:58] Package다이어그램 / [05:15] Component다이어그램 / [05:24] Composite structure다이어그램 / [07:00] 행위 다이어그램 / [07:46] Use case다이어그램 / [08:03] State machine다이어그램 / [08:16] Activity다이어그램 / [08:26] Interaction다이어그램 / [08:41] Sequence와 Communication다이어그램 / [09:20] Interaction overview다이어그램 / [09:39] Timing다이어그램 / [10:13] 요구사항 정의 단계에서 사용되는 다이어그램 / [10:50] 분석 단계에서 사용되는 다이어그램 / [12:31] 설계 단계에서 사용되는 다이어그램 / [14:45] 구현과 테스트 단계에서 사용되는 다이어그램 / [16:10] Package다이어그램은 요구사항 정의, 분석, 설계 단계에서 사용 / [16:44] 유스케이스 다이어그램의 예제 / [17:11] 시스템과 상호작용하는 대상을 액터로 정의 / [20:03] 유스케이스로 포함되지 않은 것은 요구사항에서 제외 / [21:48] Timer액터의 역할 / [22:22] 확장된 유스케이스 다이어그램 확인 / [22:48] 액터의 일반화 / [24:07] Use case의 일반화 / [25:30] Use case의 포함 / [26:37] Use case의 확장 / [27:36] 액터간의 연관관계 / [28:29] 클래스 다이어그램 / [28:56] 도서대출 시스템을 구성하고 있는 클래스 / [29:33] 능동(actiive)클래스 / [30:41] boundary / [30:52] control / [31:06] entity / [31:26] 속성과 연산이 명시된 클래스 다이어그램 / [32:52] 설계단계의 클래스 다이어그램 활용방법 / [33:37] 파트클래스의 표현 / [35:22] 객체 다이어그램 / [35:43] 객체의 표현방법 확인 / [36:37] 4개의 객체는 교통수단 클래스로 instantiation의존관계 / [37:37] 패키지 다이어그램 / [38:07] packageElement / [38:57] 클래스를 패키지로 조직화한 예제 / [39:45] 컴포넌트 다이어그램 / [40:29] 소프트웨어 아키텍쳐를 표현할 때 사용 / [41:15] 인터페이스 / [41:52] 인터페이스를 구성하는 연산에의해 정의 / [42:45] 복합구조 다이어그램 / [43:15] 파트, 포트, 연결자의 개념을 이용 / [44:52] 포트-파트간의 통신을 위한 연결지점 / [46:07] 연결자 / [47:50] 활동 다이어그램 / [48:07] 활동노드 / [48:22] 객체노드 / [48:45] 제어노드 / [49:27] 판단노드 / [50:05] 병합노드 / [50:37] 포크노드 / [51:13] 조인노드 / [51:52] 제어흐름 / [52:27] 객체흐름 / [53:15] 예외처리가 추가된 활동 다이어그램 / [53:37] orderCancelRequest / [54:57] 활동 다이어그램을 파티션과 구획면을 이용하여 나타낸 그림 / [55:12] 파티션 / [55:52] Invoice / [56:15] 상태 다이어그램 / [56:45] 휴대폰의 종료버튼을 눌렀을 경우의 예제 / [57:29] 상태 / [58:07] 시작상태 / [58:37] 종료상태 / [59:36] 전이-객체의 상태가 다른 상태로 변경 / [60:00] 이벤트/액션 / [60:42] 복잡한 상태 다이어그램의 예제 / [61:20] 상태 내부 확인 / [62:37] 복합 상태(Operating) / [63:00] 상태 내부의 do/액션 / [64:00] 상태를 벗어날 때마다 수행되는 Exit/액션 / [65:45] 복합 상태 내부 / [67:23] 직교복합 상태 / [67:58] Motor의 상태와 ArrivalSensor의 상태 / [68:45] 히스토리 상태 / [70:00] 시퀀스 다이어그램 / [70:28] 생명선 / [71:15] 메시지 / [71:45] 메시지의 전달 순서 / [72:15] 동기적 메시지 / [72:45] 비동기적 메시지 / [73:15] 복잡한 시퀀스 다이어그램 예제 / [73:28] 상호작용 이름 / [74:12] 발견된 메시지 / [74:40] 복합적 부분 / [76:27] 통신 다이어그램 / [77:44] 메시지 전달 순서는 메시지 앞에 순번을 명시 / [78:45] 타이밍 다이어그램 / [79:15] 생명선 가로방향으로 표시 / [81:00] 상호작용 개요 다이어그램 / [82:15] 활동 다이어그램의 일종 / [84:10] 배치 다이어그램 / [84:44] 노드 / [85:15] 통신 경로 / [86:04] 수행 환경


샘플확인 : 알지오 검색후 -> 강의검색란 -> 디자인 패턴