추천강의

디자인패턴 IT전문교육 강의 추천

알지오 2018. 4. 23. 11:19

알지오 평생교육원 디자인패턴 강좌입니다.


전문가들이 뽑은 꼭 배워야하는 실무활용 강의

그동안 찾던 디자인패턴 강좌의 완전판 !

여러분의 마지막 강의가 되어드리겠습니다.


알지오에서는 PC와 스마트폰, 태블릿을 이용해서 언제,

어디서나 공부를 할 수 있습니다.

열심히 공부해서 디자인패턴 강좌를 마스터해보세요.


<디자인패턴 강좌 샘플동영상>



<디자인패턴 강좌 리뷰>


제가 디자인패턴 작업을 하기 전에는 정말 아무것도 몰랐습니다.

강의를 수강하고 나니까 새삼 여러 가지를 깨닫는 계기가 되었습니다.

매일 공부하면서 강좌가 정말 좋으니까 공부하기 어렵지 않다고 생각되요.

없는 시간에도 쪼개서 볼 수 있어 편리하기까지 합니다.

저처럼 처음이라 고민되시는 분들도 샘플 강의 들어보시고 수강해보세요.



디자인패턴 강좌 정보입니다. 추천 인터넷 강의 : 알지오


  • 01.56분 디자인 패턴과 객체지향 part1

    디자인 패턴의 필요성, 스크린UI 추가, 메뉴별 클래스 생성 방법, 모델의 역할, UML 모델링 언어, 구조 다이어그램, 행의 다이어그램, 클래스 다이어그램, 재귀적 연관 관계

    책갈피 : [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.54분 객체지향 part2

    클래스 다이어그램, 일반화 관계, 집합 관계(합성 관계, 집약 관계), 의존 관계, 실체화 관계, 절차지향과 객체지향의 차이점, 객체의 정의, 객체의 책임과 크기

    책갈피 : [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.53분 객체지향 part3

    캡슐화 기능 구현, 캡슐화를 위한 규칙, 객체지향 설계과정, 객체지행의 원리

    책갈피 : [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.56분 설계 원칙과 DI와 서비스 로케이터 part1

    단일 책임 원칙, 개방 폐쇄 원칙, 리스코프 치환 원칙, 인터페이스 분리 원칙, 의존 역전 원칙, 어플리케티션 영역, 메인 영역

    책갈피 : [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.58분 설계 원칙과 DI와 서비스 로케이터 part2

    DI를 이용한 외존객체 사용 방법, 서비스 로케이터를 이용한 의존 객체 사용, 디자인 패턴의 이해, GoF 디자인 패턴, UML과 디자인 패턴, 각 디자인 패턴들

    책갈피 : [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.50분 디자인 패턴들 part1

    생성 패턴, 구조 패턴, 행위 패턴, Abstract Factory, Builder

    책갈피 : [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.57분 디자인 패턴들 part2

    Iterator, Adapter, Template Method

    책갈피 : [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.57분 디자인 패턴들 part3

    Factory Method, Singleton

    책갈피 : [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.49분 디자인 패턴들 part4

    Singleton, Prototype, Builder, Abstract Factory

    책갈피 : [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.56분 디자인 패턴들 part5

    Bridge, Strategy, Composite

    책갈피 : [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.56분 디자인 패턴들 part6

    Composite, Decorator

    책갈피 : [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.53분 디자인 패턴들 part7

    Visitor, Chain of Responsibility

    책갈피 : [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.56분 디자인 패턴들 part8

    Facade, Mediator

    책갈피 : [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.55분 디자인 패턴들 part9

    Observer 패턴

    책갈피 : [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.60분 디자인 패턴들 part10

    Observer, Memento, state

    책갈피 : [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.1시간 1분 디자인 패턴들 part11

    state 패턴

    책갈피 : [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.55분 디자인 패턴들 part12

    Flyweight, Proxy

    책갈피 : [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.1시간 52분 디자인 패턴들 part13

    Command, Interpreter

    책갈피 : [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.1시간 27분 UML 다이어그램

    다이어그램 종류, 유스케이스, 컴포넌트, 복합구조, 활동, 상태, 시퀀스, 통신, 타이밍, 상호작용 개요, 배치

    책갈피 : [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] 수행 환경

디자인패턴강의,디자인패턴강좌,디자인패턴교육,디자인패턴학원,디자인패턴인강,디자인패턴인터넷강의,디자인패턴인터넷강좌,디자인패턴동영상,디자인패턴동영상강의,디자인패턴동영상강좌,디자인패턴배우기,디자인패턴사용법,디자인패턴사용방법,Designpattern강의,Designpattern강좌,Designpattern교육,Designpattern학원,Designpattern인강,Designpattern인터넷강의,Designpattern인터넷강좌,Designpattern동영상,Designpattern동영상강의,Designpattern동영상강좌,Designpattern배우기,Designpattern사용법,Designpattern사용방법,mvc패턴,리팩토링,객체지향,싱글톤,알고리즘,디자인패턴자바워크북


'추천강의' 카테고리의 다른 글

퓨전360 강좌 교육 추천  (0) 2018.04.23
크레오 추천 교육 강의  (0) 2018.04.23
DELPHI IT전문교육 강좌 추천  (0) 2018.04.16
파워밀 교육 추천 강의  (0) 2018.04.16
CREO 강좌 추천 학원  (0) 2018.04.16