[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:04:47.28,0:04:49.100,Default,,0000,0000,0000,,뒤에 잘 들리나요? Dialogue: 0,0:04:50.88,0:04:56.30,Default,,0000,0000,0000,,저 뒤에도 잘 들리나요? 오케이 좋습니다.\N Dialogue: 0,0:04:56.99,0:05:02.80,Default,,0000,0000,0000,,Um what is an electron?\N Dialogue: 0,0:05:02.87,0:05:07.98,Default,,0000,0000,0000,,So part of atom, everybody knows that, I think\N Dialogue: 0,0:05:08.29,0:05:17.72,Default,,0000,0000,0000,,It's um.. (Screams from other room) yeah I think so, . I think that's royal ???\N Dialogue: 0,0:05:17.88,0:05:23.10,Default,,0000,0000,0000,,Um electron is part of atom\N Dialogue: 0,0:05:23.33,0:05:32.11,Default,,0000,0000,0000,,it's carries a unit of electronic charge, negative charge, as oppose to a proton which carries a positive charge\N Dialogue: 0,0:05:32.23,0:05:42.41,Default,,0000,0000,0000,,It apparently has ??? not very much, thousands of electron... very very small amount of mass\N Dialogue: 0,0:05:42.92,0:05:56.25,Default,,0000,0000,0000,,And we think of it as a particle, although that misleading um.. electron actually behaves much more like a wave than like a particle\N Dialogue: 0,0:05:56.28,0:05:58.78,Default,,0000,0000,0000,,why do we think of it as particle?\N Dialogue: 0,0:05:58.78,0:06:08.91,Default,,0000,0000,0000,,and the reason we do that is that when electron interacts a location like a particle would\N Dialogue: 0,0:06:09.15,0:06:16.30,Default,,0000,0000,0000,,when electron is moving through the space it does not moves the way a particle would\N Dialogue: 0,0:06:16.42,0:06:21.31,Default,,0000,0000,0000,,moves as a wave and the wave has no location\N Dialogue: 0,0:06:21.31,0:06:25.08,Default,,0000,0000,0000,,you look at an ocean wave, and ocean wave can be huge\N Dialogue: 0,0:06:25.55,0:06:34.21,Default,,0000,0000,0000,,it has no distinct location it has well defined energy but no distinct location\N Dialogue: 0,0:06:34.21,0:06:35.33,Default,,0000,0000,0000,,this is how an electron moves\N Dialogue: 0,0:06:35.100,0:06:39.13,Default,,0000,0000,0000,,electrons obey a principle and it's a mistruster principle\N Dialogue: 0,0:06:42.19,0:06:46.17,Default,,0000,0000,0000,,It's called the poly exclusion principle\N Dialogue: 0,0:06:46.17,0:06:52.75,Default,,0000,0000,0000,,two electrons bound into the same system will not be in the same state\N Dialogue: 0,0:06:52.75,0:06:57.33,Default,,0000,0000,0000,,for whatever reason they cannot be in the same state\N Dialogue: 0,0:06:57.33,0:07:00.68,Default,,0000,0000,0000,,so if there are two electrons in an atom\N Dialogue: 0,0:07:00.68,0:07:04.07,Default,,0000,0000,0000,,those two electrons must be different somehow\N Dialogue: 0,0:07:04.07,0:07:07.36,Default,,0000,0000,0000,,now they might different in the direction of their spin\N Dialogue: 0,0:07:07.36,0:07:10.90,Default,,0000,0000,0000,,an electron can spin to the left or spin to the right\N Dialogue: 0,0:07:10.90,0:07:18.30,Default,,0000,0000,0000,,two electrons that have exactly same energy could fit together spinning one left and one right Dialogue: 0,0:07:18.30,0:07:21.44,Default,,0000,0000,0000,, Dialogue: 0,0:07:21.45,0:07:27.49,Default,,0000,0000,0000,, Dialogue: 0,0:07:27.49,0:07:30.25,Default,,0000,0000,0000,, Dialogue: 0,0:07:30.25,0:07:35.06,Default,,0000,0000,0000,, Dialogue: 0,0:07:35.11,0:07:37.92,Default,,0000,0000,0000,, Dialogue: 0,0:07:37.98,0:07:48.21,Default,,0000,0000,0000,, Dialogue: 0,0:07:48.21,0:07:57.68,Default,,0000,0000,0000,, Dialogue: 0,0:07:57.69,0:08:08.56,Default,,0000,0000,0000,, Dialogue: 0,0:08:08.56,0:08:10.63,Default,,0000,0000,0000,, Dialogue: 0,0:08:10.97,0:08:15.30,Default,,0000,0000,0000,, Dialogue: 0,0:08:16.58,0:08:17.62,Default,,0000,0000,0000,, Dialogue: 0,0:08:19.62,0:08:25.08,Default,,0000,0000,0000,, Dialogue: 0,0:08:25.08,0:08:27.50,Default,,0000,0000,0000,, Dialogue: 0,0:08:27.50,0:08:33.73,Default,,0000,0000,0000,, Dialogue: 0,0:08:33.73,0:08:40.44,Default,,0000,0000,0000,, Dialogue: 0,0:08:40.44,0:08:46.33,Default,,0000,0000,0000,, Dialogue: 0,0:08:46.33,0:08:51.16,Default,,0000,0000,0000,, Dialogue: 0,0:08:51.16,0:08:55.24,Default,,0000,0000,0000,, Dialogue: 0,0:08:55.24,0:09:03.38,Default,,0000,0000,0000,, Dialogue: 0,0:09:03.38,0:09:11.23,Default,,0000,0000,0000,, Dialogue: 0,0:09:11.23,0:09:20.40,Default,,0000,0000,0000,, Dialogue: 0,0:09:20.40,0:09:25.10,Default,,0000,0000,0000,, Dialogue: 0,0:09:25.10,0:09:30.86,Default,,0000,0000,0000,, Dialogue: 0,0:09:30.86,0:09:35.18,Default,,0000,0000,0000,, Dialogue: 0,0:09:35.18,0:09:45.68,Default,,0000,0000,0000,, Dialogue: 0,0:09:45.68,0:09:54.03,Default,,0000,0000,0000,, Dialogue: 0,0:09:54.14,0:09:57.68,Default,,0000,0000,0000,, Dialogue: 0,0:09:57.68,0:10:02.00,Default,,0000,0000,0000,, Dialogue: 0,0:10:02.00,0:10:08.08,Default,,0000,0000,0000,, Dialogue: 0,0:10:08.08,0:10:11.21,Default,,0000,0000,0000,, Dialogue: 0,0:10:11.21,0:10:23.14,Default,,0000,0000,0000,, Dialogue: 0,0:10:23.15,0:10:33.74,Default,,0000,0000,0000,, Dialogue: 0,0:10:33.89,0:10:36.80,Default,,0000,0000,0000,, Dialogue: 0,0:10:36.80,0:10:42.89,Default,,0000,0000,0000,, Dialogue: 0,0:10:42.89,0:10:51.70,Default,,0000,0000,0000,, Dialogue: 0,0:10:51.70,0:11:03.02,Default,,0000,0000,0000,, Dialogue: 0,0:11:03.03,0:11:06.06,Default,,0000,0000,0000,, Dialogue: 0,0:11:06.34,0:11:08.100,Default,,0000,0000,0000,,물론 오늘의 발표 주제는 이게 아니지요.\N Dialogue: 0,0:11:10.34,0:11:19.84,Default,,0000,0000,0000,,오늘 이야기할 주제는 "아키텍처, 잃어 버린 시간" 입니다.\N Dialogue: 0,0:11:20.06,0:11:24.08,Default,,0000,0000,0000,,이 것은 클린 코드와 클린 디자인의 다음 단계에 대한 이야기입니다.\N Dialogue: 0,0:11:28.54,0:11:32.12,Default,,0000,0000,0000,,클린 시스템 스트럭쳐에 대한 이야기 입니다.\N Dialogue: 0,0:11:32.46,0:11:38.16,Default,,0000,0000,0000,,이 그림은 내가 10년 전에 작성했던 어플리케이션의 디렉터리 구조입니다.\N Dialogue: 0,0:11:38.16,0:11:47.07,Default,,0000,0000,0000,, Dialogue: 0,0:11:47.07,0:11:52.49,Default,,0000,0000,0000,,당시에 Rails를 배우고 있었지요.\N여기 Ruby 프로그래머가 있나요? Ruby on Rails 프로그래머? Dialogue: 0,0:11:52.65,0:11:56.91,Default,,0000,0000,0000,,저쪽에 손 흔드는 사람이 한 명 있네요. 오케이.\N Dialogue: 0,0:11:57.05,0:12:03.36,Default,,0000,0000,0000,,당시에 Rails를 배우면서 이 어플리케이션을 작성했는데 책의 내용을 따라 했습니다.\N Dialogue: 0,0:12:03.47,0:12:09.74,Default,,0000,0000,0000,, Dialogue: 0,0:12:09.77,0:12:13.84,Default,,0000,0000,0000,,책에서 이야기하는데로 그대로 작성했더니 이런 형태의 결과가 나왔습니다.\N Dialogue: 0,0:12:13.84,0:12:20.08,Default,,0000,0000,0000,,만족스럽게 마무리했고 그뒤로 오랫동안 안 봤습니다.\N Dialogue: 0,0:12:20.14,0:12:27.38,Default,,0000,0000,0000,,그리고 한 3년 전에 내 아들한테 어플리케이션을 하나 작성해달라고 했습니다.\N Dialogue: 0,0:12:27.38,0:12:34.43,Default,,0000,0000,0000,,그런데 작성된 어플리케이션을 보니 디렉터리 구조가 똑 같았어요.\N Dialogue: 0,0:12:34.53,0:12:40.57,Default,,0000,0000,0000,,이 둘은 전혀 다른 어플리케이션이고 아무런 연관도 없습니다.\N Dialogue: 0,0:12:40.61,0:12:52.94,Default,,0000,0000,0000,,그런데 디렉터리 구조는 똑 같아요. 이걸 보면서 왜 두 어플리케이션의 최상위 구조가 똑 같은지에 대해서 고민했습니다.\N Dialogue: 0,0:12:52.94,0:12:56.61,Default,,0000,0000,0000,,이 둘은 전혀 다른 어플리케이션이거든요. Dialogue: 0,0:12:56.71,0:13:02.41,Default,,0000,0000,0000,,두 어플리케이션의 디렉터리 구조가 동일한 이유는 둘다 Rails 어플리케이션이기 때문이었습니다. Dialogue: 0,0:13:02.48,0:13:07.72,Default,,0000,0000,0000,,그러자 이게 왜 중요한지가 궁금해졌습니다. Dialogue: 0,0:13:07.72,0:13:20.41,Default,,0000,0000,0000,,Rails 같은 프레임워크가 얼마나 중요하길래 어플리케이션의 최상위 디렉터로 구조를 결정지어버리는 걸 까요?\N Dialogue: 0,0:13:20.73,0:13:25.36,Default,,0000,0000,0000,,내가 생각한 이유는 바로 다음과 같습니다.\N Dialogue: 0,0:13:25.43,0:13:34.44,Default,,0000,0000,0000,,웹은 전달을 위한 장치입니다. 웹은 I/O 채널이에요.\N Dialogue: 0,0:13:34.53,0:13:37.91,Default,,0000,0000,0000,,웹 자체는 아키텍처적으로 중요하지 않습니다. Dialogue: 0,0:13:37.98,0:13:51.90,Default,,0000,0000,0000,,흔히 웹 어플리케이션을 작성한다고 생각하는데 그렇지 않습니다. 우리는 컨텐츠를 전달하는 어플리케이션을 작성하고 있는 것 입니다. Dialogue: 0,0:13:51.96,0:13:56.80,Default,,0000,0000,0000,,그러면 왜 I/O 채널이 그렇게 중요할까요?\N Dialogue: 0,0:13:56.87,0:14:06.70,Default,,0000,0000,0000,,혹시 웹이 번성하기 시작한 시기를 기억하나요? 1980년대? 1990년대?\N Dialogue: 0,0:14:06.70,0:14:12.88,Default,,0000,0000,0000,,얼마나 큰 변화였는지 기억하나요? 얼마나 모든 것이 근본적으로 변했는지 기억하나요? Dialogue: 0,0:14:12.91,0:14:19.71,Default,,0000,0000,0000,,그렇게 큰 변화는 없었습니다. 왜냐하면 실제로 그다지 새로운 것이 아니었기 때문이지요.\N Dialogue: 0,0:14:19.79,0:14:26.51,Default,,0000,0000,0000,,우리는 단지 입력 소스로 부터 입력을 받고, 처리하고, 출력 소스로 내보내기만 했습니다.\N Dialogue: 0,0:14:26.57,0:14:28.37,Default,,0000,0000,0000,,웹은 그냥 그런거에요.\N Dialogue: 0,0:14:28.37,0:14:31.08,Default,,0000,0000,0000,,그런데 왜 왭이 모든 것들을 결정해버릴까요? Dialogue: 0,0:14:31.08,0:14:38.99,Default,,0000,0000,0000,,그래서 나는 건축에 대해서 생각해봤습니다. 건축 도면을 봤어요.\N Dialogue: 0,0:14:38.99,0:14:49.60,Default,,0000,0000,0000,,저 건축 도면을 보세요. 첫 눈에 도서관 도면이라고 생각이 안들어도 깨닫는데까지 얼마 걸리지 않을 겁니다.\N Dialogue: 0,0:14:49.60,0:14:51.73,Default,,0000,0000,0000,,도서관이라는게 너무 명백하거든요.\N Dialogue: 0,0:14:51.80,0:14:55.88,Default,,0000,0000,0000,,책장들이 많이 있고 책상도 많습니다.\N Dialogue: 0,0:14:55.88,0:15:05.70,Default,,0000,0000,0000,,책상위엥 컴퓨터도 보이고요 책을 대출하고 반납하는 곳도 보여요. Dialogue: 0,0:15:05.70,0:15:11.31,Default,,0000,0000,0000,,저 도면을 보고 도서관이라는 것을 알아채는데에 오랜 시간이 걸리지 않을 겁니다.\N Dialogue: 0,0:15:11.38,0:15:16.33,Default,,0000,0000,0000,,다른 것도 봐볼까요? 저건 교회에요. 누가 봐도 교회지요.\N Dialogue: 0,0:15:16.36,0:15:21.71,Default,,0000,0000,0000,,어쩌면 극장이라고 생각할 수 도 있겠지요. 극장이랑 교회는 공통 부분이 있으니까요.\N Dialogue: 0,0:15:21.76,0:15:29.74,Default,,0000,0000,0000,,하지만 이건 분명히 교회입니다. 제단, 바깥의 교실, Dialogue: 0,0:15:29.74,0:15:32.12,Default,,0000,0000,0000,,분명히 교회지요. Dialogue: 0,0:15:32.12,0:15:42.32,Default,,0000,0000,0000,,이 건물의 아키텍처는 어떻게 지어지는지 이야기하지 않습니다. Dialogue: 0,0:15:42.32,0:15:47.26,Default,,0000,0000,0000,,이 건물의 아키텍처는 그 의도 이야기하고 있지요. 아키텍처라는 것은 의도에 대한 것 입니다. Dialogue: 0,0:15:47.26,0:15:56.02,Default,,0000,0000,0000,,하지만 저 Rails 어플리케이션들의 최상위 구조는 그 의도에 대해서 이야기하지 않고 있지요. Dialogue: 0,0:16:01.72,0:16:01.97,Default,,0000,0000,0000,,저 어플레케이션들은 스스로 Rails 어플리케이션이라는 것을 이야기하고 있습니다. 무언가 잘못되었어요. Dialogue: 0,0:16:02.04,0:16:04.86,Default,,0000,0000,0000,,그리고 이런 생각이 들었습니다. Dialogue: 0,0:16:04.90,0:16:15.87,Default,,0000,0000,0000,,이건 이미 알려진 문제인가? 이미 해결되었던 문제인가? 이 문제는 1992년에 Iva jacobson이 저술한 책에서 거론되고 해결되었었습니다. Dialogue: 0,0:16:15.91,0:16:20.64,Default,,0000,0000,0000,,이 책을 가진 사람이 있나요? 읽어 본 사람? 여기 한 사람있네요 또 없나요? Dialogue: 0,0:16:20.68,0:16:23.43,Default,,0000,0000,0000,,Object-Oriented Software Engineering. 아주 훌륭한 책이에요. Dialogue: 0,0:16:23.50,0:16:29.82,Default,,0000,0000,0000,,1992년에 출반된 책이지만 상관없어요. 책에 담긴 원칙들은 여전히 유효합니다. Dialogue: 0,0:16:29.92,0:16:36.62,Default,,0000,0000,0000,,부제를 보세요. 부제는 'A Usecase driven approach' 입니다. Dialogue: 0,0:16:36.62,0:16:45.11,Default,,0000,0000,0000,,유즈케이스 기억하는 사람 있나요? 1990년대에는 아주 아주 유명했었습니다. Dialogue: 0,0:16:45.11,0:16:54.13,Default,,0000,0000,0000,,실제론 너무 유명해서 수많은 컨설턴트들에 의해 본래의 의미가 변질되었었지요. Dialogue: 0,0:16:54.13,0:17:07.15,Default,,0000,0000,0000,,수많은 컨설턴트들이 자신의 유즈케이스 양식을 인터넷에 앞다퉈서 내놓았었지요. Dialogue: 0,0:17:07.15,0:17:12.77,Default,,0000,0000,0000,,그러더니 양식 자체가 매우 중요하게 여겨져 버렸어요. 우리는 그 표준 양식의 빈칸을 채우도록 강요받았지요. Dialogue: 0,0:17:12.77,0:17:28.98,Default,,0000,0000,0000,,유즈케이스의 이름, 입력값, 사전조건, 사후조건, 주액터, 부액터 등을 채워야했습니다. Dialogue: 0,0:17:29.01,0:17:38.28,Default,,0000,0000,0000,,우리는 모든 빈칸을 채워야만했고 결국 유즈케이스의 가장 중요한 점은 그 기능이 아니라 양식이 되버렸습니다. Dialogue: 0,0:17:38.31,0:17:51.67,Default,,0000,0000,0000,,그 시기의 절정 즈음에 에자일 운동이 시작되었습니다. 우리는 유즈케이스에 대한 이야기는 멈추고 유저 스토리에 대해 이야기했습니다. 유즈케이스에 대해서는 아무도 이야기하지 않게되었지요. Dialogue: 0,0:17:51.71,0:17:58.19,Default,,0000,0000,0000,,그래서 나는 이 책을 다시 읽어봤어요. Dialogue: 0,0:17:58.23,0:18:02.10,Default,,0000,0000,0000,,Jacobson이 쓴것들을 다시 기억해냈습니다. Dialogue: 0,0:18:02.17,0:18:11.41,Default,,0000,0000,0000,,여기 유즈케이스가 있습니다. 전형적인 Jacobson 스타일의 유즈케이스에요. Dialogue: 0,0:18:11.44,0:18:23.73,Default,,0000,0000,0000,,매우 작은 양식이에요. '주문 생성'이라는 이름이 있네요. 주문 처리 시스템의 유즈케이스라고 생각해보세요. Dialogue: 0,0:18:23.79,0:18:32.57,Default,,0000,0000,0000,,입력 값으로 고객 아이디, 고객 연락처, 수신처 등이 보이네요. Dialogue: 0,0:18:32.60,0:18:37.96,Default,,0000,0000,0000,,여기에는 세부적인 내용은 없어요. 고객 아이디가 어떤 것인지 기술하지 않습니다. Dialogue: 0,0:18:38.03,0:18:40.15,Default,,0000,0000,0000,,숫자이건 문자열이건 상관없어요. Dialogue: 0,0:18:40.19,0:18:48.26,Default,,0000,0000,0000,,고객 연락처가 어떤 것인지 기술하지 않습니다. 아마도 이름 날자 주소등등 이겠지요. Dialogue: 0,0:18:48.33,0:18:51.56,Default,,0000,0000,0000,,하지만 세부사항들연 여기에 명시되어있지 않습니다. Dialogue: 0,0:18:51.60,0:19:05.29,Default,,0000,0000,0000,,여기 메인 흐름이 있네요. 메인 흐름은 유즈케이스를 만족시키기 위해 컴퓨터가 실행하는 단계들이에요. Dialogue: 0,0:19:05.33,0:19:11.04,Default,,0000,0000,0000,,첫 번째로 주문 담당자는 '주문 생성'을 요청합니다. Dialogue: 0,0:19:11.07,0:19:18.51,Default,,0000,0000,0000,,그리고 시스템이 데이터를 검증합니다. 어떻게 검증한다는 이야기는 안했지요? 어떻게든 검증을 하는지는 중요하지 않습니다. 그냥 검증을 한다는게 중요합니다. Dialogue: 0,0:19:18.58,0:19:27.95,Default,,0000,0000,0000,,세번째로 시스템이 주문을 생성하고 ID를 결정합니다. 아마도 어떤 데이터베이스 작업이겠지만 이야기는 안하겠습니다. Dialogue: 0,0:19:27.98,0:19:35.04,Default,,0000,0000,0000,,그리고 시스템은 담당자에게 ID를 전달합니다. 아마도 웹 페이지를 통해서겠지만 이야기는 안하겠습니다. Dialogue: 0,0:19:35.11,0:19:44.20,Default,,0000,0000,0000,,실제로 이 유즈케이스는 웹에 대해 아무런 이야기도 하지 않습니다. 이 유즈케이스는 어떤 I/O 채널을 통해서도 구현이 가능하겠지요. Dialogue: 0,0:19:44.23,0:19:53.38,Default,,0000,0000,0000,,이 유즈케이스는 콘솔 앱, 데스크탑 앱, SOA 앱, 아이폰 앱에서도 구현이 가능합니다. Dialogue: 0,0:19:53.38,0:19:59.61,Default,,0000,0000,0000,,유즈케이스는 I/O 채널을 모르기 때문에 가능한 것 입니다. Dialogue: 0,0:19:59.61,0:20:08.60,Default,,0000,0000,0000,,Jacobson은 유즈케이스를 오브젝트로 바꿀 수 있다고 했습니다. Dialogue: 0,0:20:08.60,0:20:19.22,Default,,0000,0000,0000,,Jacobson은 저것을 Control Object라고 불렀지만 MVC의 Controller와 헷갈릴 수 있으므로 Interactors라고 이름을 바꿨습니다. Dialogue: 0,0:20:19.22,0:20:26.49,Default,,0000,0000,0000,,어쩌면 유즈케이스라는 이름이 더 좋겠지만 그렇게 하지는 않았습니다. Interactors로 부르겠습니다. Dialogue: 0,0:20:26.49,0:20:38.38,Default,,0000,0000,0000,,Interactor 오브젝트는 유즈케이스를 구현합니다. 유즈케이스의 입력값을 입력 받아서 유즈케이스의 출력값을 출력합니다. Dialogue: 0,0:20:38.38,0:20:44.76,Default,,0000,0000,0000,,그리고 유즈케이스의 처리 흐름을 구현합니다. Dialogue: 0,0:20:44.76,0:20:53.94,Default,,0000,0000,0000,,밑에 설명을 보면 어플리케이션 별 비지니스 규칙들을 가진다고 되어있지요? Dialogue: 0,0:20:53.94,0:20:56.77,Default,,0000,0000,0000,,거기에는 두 종류의 비지니스 규칙이 있습니다. Dialogue: 0,0:20:56.77,0:21:06.64,Default,,0000,0000,0000,,먼저 글로벌할 비지니스 규칙이 있습니다. 모든 어플리케이션에 적용이 가능하지요. Dialogue: 0,0:21:06.64,0:21:11.100,Default,,0000,0000,0000,,그리고 개발중인 어플리케이션에만 해당하는 비지니스 규칙들이 있습니다. Dialogue: 0,0:21:11.100,0:21:22.02,Default,,0000,0000,0000,,예를 들어서 주문 입력 어플리케이션과 주문 처리 어플리케이션이 있다고 생각해봅시다. Dialogue: 0,0:21:22.02,0:21:29.69,Default,,0000,0000,0000,,둘 다 '주문'이라는 오브젝트가 있을겁니다. 그리고 그 주문 오브젝트들은 같은 비지니스 규칙을 가지고 있겠지요. Dialogue: 0,0:21:29.69,0:21:40.27,Default,,0000,0000,0000,,하지만 둘 중 하나의 어플리케이션만 주문 추가라는 유즈케이스를 가지고 있을 겁니다. Dialogue: 0,0:21:40.27,0:21:47.57,Default,,0000,0000,0000,,유즈케이스는 어플리케이션에 따라 다릅니다. 유즈케이스는 특정 어플리케이션에 종속되지요. Dialogue: 0,0:21:47.57,0:21:56.70,Default,,0000,0000,0000,,비지니스 규칙은 어플리케이션에 따라 다르지 않습니다. Entity 오브젝트에 종속됩니다. 비지니스 오브젝트라고 불려지기도 합니다. Dialogue: 0,0:21:56.73,0:22:01.32,Default,,0000,0000,0000,,나는 비지니스 오브젝트라는 말은 좋아하지는 않습니다. Jacobson 도 Entiry 오브젝트라고 불렀지요. Dialogue: 0,0:22:01.40,0:22:09.86,Default,,0000,0000,0000,,어플리케이션 비종속적인 비지니스 규칙들을 Entity 오브젝트에 넣고 Interactor가 Entity 오브젝트들을 관장합니다. Dialogue: 0,0:22:09.93,0:22:17.48,Default,,0000,0000,0000,,그런 후에 유즈케이스의 입력값과 출력값을 다른 유즈케이스에 전달하는 방법을 정합니다. Dialogue: 0,0:22:17.58,0:22:30.44,Default,,0000,0000,0000,,이 경우에는 인터페이스를 사용합니다. 그림에 객체지향 방식의 인터페이스로 표현을 했는데요. Interactor는 인터페이스 하나를 사용하고 있고요 다른 하나의 인터페이스는 구현을 하고 있습니다. Dialogue: 0,0:22:30.44,0:22:38.75,Default,,0000,0000,0000,,Interactor가 구현하고 있는 것은 입력 인터페이스이고요 Interactor가 사용하고 있는 것은 출력 인퍼테이스입니다. Dialogue: 0,0:22:38.75,0:22:42.17,Default,,0000,0000,0000,,두 인터페이스와 Interactor 사이의 화살표가 같은 방향이지요? 이 것이 중요한 것 입니다!!!!! Dialogue: 0,0:22:42.17,0:22:42.42,Default,,0000,0000,0000,,이게 왜 중요한지는 조금 뒤에 이야기하겠습니다. Dialogue: 0,0:22:45.45,0:22:53.82,Default,,0000,0000,0000,, Dialogue: 0,0:22:53.82,0:22:56.48,Default,,0000,0000,0000,, Dialogue: 0,0:22:56.48,0:23:03.34,Default,,0000,0000,0000,, Dialogue: 0,0:23:03.34,0:23:10.52,Default,,0000,0000,0000,, Dialogue: 0,0:23:10.52,0:23:12.71,Default,,0000,0000,0000,, Dialogue: 0,0:23:12.71,0:23:25.92,Default,,0000,0000,0000,, Dialogue: 0,0:23:25.92,0:23:31.62,Default,,0000,0000,0000,, Dialogue: 0,0:23:31.62,0:23:37.45,Default,,0000,0000,0000,, Dialogue: 0,0:23:37.45,0:23:50.75,Default,,0000,0000,0000,, Dialogue: 0,0:23:50.75,0:23:52.76,Default,,0000,0000,0000,, Dialogue: 0,0:23:52.76,0:23:56.90,Default,,0000,0000,0000,, Dialogue: 0,0:23:56.90,0:24:01.91,Default,,0000,0000,0000,, Dialogue: 0,0:24:01.98,0:24:10.55,Default,,0000,0000,0000,, Dialogue: 0,0:24:10.55,0:24:26.69,Default,,0000,0000,0000,, Dialogue: 0,0:24:26.75,0:24:33.21,Default,,0000,0000,0000,, Dialogue: 0,0:24:33.67,0:24:41.67,Default,,0000,0000,0000,, Dialogue: 0,0:24:41.67,0:24:47.94,Default,,0000,0000,0000,, Dialogue: 0,0:24:47.94,0:25:00.81,Default,,0000,0000,0000,, Dialogue: 0,0:25:00.81,0:25:10.96,Default,,0000,0000,0000,, Dialogue: 0,0:25:10.96,0:25:14.69,Default,,0000,0000,0000,, Dialogue: 0,0:25:14.69,0:25:20.29,Default,,0000,0000,0000,, Dialogue: 0,0:25:20.29,0:25:24.77,Default,,0000,0000,0000,, Dialogue: 0,0:25:24.77,0:25:30.22,Default,,0000,0000,0000,, Dialogue: 0,0:25:30.22,0:25:33.04,Default,,0000,0000,0000,, Dialogue: 0,0:25:33.04,0:25:40.66,Default,,0000,0000,0000,, Dialogue: 0,0:25:40.66,0:25:45.24,Default,,0000,0000,0000,, Dialogue: 0,0:25:45.24,0:25:50.78,Default,,0000,0000,0000,, Dialogue: 0,0:25:50.78,0:25:56.70,Default,,0000,0000,0000,, Dialogue: 0,0:25:56.70,0:25:58.45,Default,,0000,0000,0000,, Dialogue: 0,0:25:58.45,0:26:05.85,Default,,0000,0000,0000,, Dialogue: 0,0:26:05.85,0:26:14.50,Default,,0000,0000,0000,, Dialogue: 0,0:26:14.50,0:26:18.20,Default,,0000,0000,0000,, Dialogue: 0,0:26:18.20,0:26:27.61,Default,,0000,0000,0000,, Dialogue: 0,0:26:27.61,0:26:35.48,Default,,0000,0000,0000,, Dialogue: 0,0:26:35.48,0:26:41.15,Default,,0000,0000,0000,, Dialogue: 0,0:26:41.15,0:26:47.46,Default,,0000,0000,0000,, Dialogue: 0,0:26:47.46,0:26:50.03,Default,,0000,0000,0000,, Dialogue: 0,0:26:50.03,0:26:57.64,Default,,0000,0000,0000,, Dialogue: 0,0:26:57.64,0:27:00.55,Default,,0000,0000,0000,, Dialogue: 0,0:27:00.55,0:27:06.41,Default,,0000,0000,0000,, Dialogue: 0,0:27:06.41,0:27:12.78,Default,,0000,0000,0000,, Dialogue: 0,0:27:12.84,0:27:18.54,Default,,0000,0000,0000,, Dialogue: 0,0:27:18.54,0:27:27.72,Default,,0000,0000,0000,, Dialogue: 0,0:27:27.72,0:27:29.76,Default,,0000,0000,0000,, Dialogue: 0,0:27:29.76,0:27:41.70,Default,,0000,0000,0000,, Dialogue: 0,0:27:41.76,0:27:48.41,Default,,0000,0000,0000,, Dialogue: 0,0:27:48.47,0:27:59.13,Default,,0000,0000,0000,, Dialogue: 0,0:27:59.22,0:28:01.29,Default,,0000,0000,0000,, Dialogue: 0,0:28:01.32,0:28:07.47,Default,,0000,0000,0000,, Dialogue: 0,0:28:07.47,0:28:15.16,Default,,0000,0000,0000,, Dialogue: 0,0:28:15.20,0:28:24.12,Default,,0000,0000,0000,, Dialogue: 0,0:28:24.15,0:28:35.69,Default,,0000,0000,0000,, Dialogue: 0,0:28:35.72,0:28:40.08,Default,,0000,0000,0000,, Dialogue: 0,0:28:40.14,0:28:50.36,Default,,0000,0000,0000,, Dialogue: 0,0:28:50.42,0:29:01.22,Default,,0000,0000,0000,, Dialogue: 0,0:29:01.28,0:29:04.32,Default,,0000,0000,0000,, Dialogue: 0,0:29:04.38,0:29:14.74,Default,,0000,0000,0000,, Dialogue: 0,0:29:14.74,0:29:23.96,Default,,0000,0000,0000,, Dialogue: 0,0:29:23.96,0:29:29.43,Default,,0000,0000,0000,, Dialogue: 0,0:29:29.43,0:29:37.78,Default,,0000,0000,0000,, Dialogue: 0,0:29:37.78,0:29:43.46,Default,,0000,0000,0000,, Dialogue: 0,0:29:43.46,0:29:50.64,Default,,0000,0000,0000,, Dialogue: 0,0:29:50.64,0:29:53.60,Default,,0000,0000,0000,, Dialogue: 0,0:29:53.60,0:30:07.61,Default,,0000,0000,0000,, Dialogue: 0,0:30:07.61,0:30:21.49,Default,,0000,0000,0000,, Dialogue: 0,0:30:21.49,0:30:34.44,Default,,0000,0000,0000,, Dialogue: 0,0:30:34.44,0:30:44.62,Default,,0000,0000,0000,, Dialogue: 0,0:30:44.62,0:30:55.78,Default,,0000,0000,0000,, Dialogue: 0,0:30:55.78,0:31:06.17,Default,,0000,0000,0000,, Dialogue: 0,0:31:06.24,0:31:13.12,Default,,0000,0000,0000,, Dialogue: 0,0:31:10.12,0:31:31.44,Default,,0000,0000,0000,, Dialogue: 0,0:31:13.15,0:31:17.47,Default,,0000,0000,0000,, Dialogue: 0,0:31:31.50,0:31:37.29,Default,,0000,0000,0000,, Dialogue: 0,0:31:37.32,0:31:44.85,Default,,0000,0000,0000,, Dialogue: 0,0:31:44.91,0:31:51.87,Default,,0000,0000,0000,, Dialogue: 0,0:31:51.94,0:32:03.28,Default,,0000,0000,0000,, Dialogue: 0,0:32:03.32,0:32:10.68,Default,,0000,0000,0000,, Dialogue: 0,0:32:10.75,0:32:17.42,Default,,0000,0000,0000,, Dialogue: 0,0:32:17.49,0:32:28.31,Default,,0000,0000,0000,, Dialogue: 0,0:32:28.40,0:32:37.52,Default,,0000,0000,0000,, Dialogue: 0,0:32:37.60,0:32:43.10,Default,,0000,0000,0000,, Dialogue: 0,0:32:43.19,0:32:53.17,Default,,0000,0000,0000,, Dialogue: 0,0:32:53.20,0:33:03.70,Default,,0000,0000,0000,, Dialogue: 0,0:33:03.70,0:33:08.02,Default,,0000,0000,0000,, Dialogue: 0,0:33:08.08,0:33:16.24,Default,,0000,0000,0000,, Dialogue: 0,0:33:16.28,0:33:21.13,Default,,0000,0000,0000,, Dialogue: 0,0:33:21.13,0:33:28.69,Default,,0000,0000,0000,, Dialogue: 0,0:33:28.73,0:33:33.07,Default,,0000,0000,0000,, Dialogue: 0,0:33:33.10,0:33:38.59,Default,,0000,0000,0000,, Dialogue: 0,0:33:38.66,0:33:43.80,Default,,0000,0000,0000,, Dialogue: 0,0:33:43.84,0:33:48.84,Default,,0000,0000,0000,, Dialogue: 0,0:33:48.84,0:33:53.20,Default,,0000,0000,0000,, Dialogue: 0,0:33:53.20,0:33:55.96,Default,,0000,0000,0000,, Dialogue: 0,0:33:55.96,0:33:59.52,Default,,0000,0000,0000,, Dialogue: 0,0:33:59.52,0:34:06.61,Default,,0000,0000,0000,, Dialogue: 0,0:34:06.61,0:34:12.98,Default,,0000,0000,0000,, Dialogue: 0,0:34:12.98,0:34:18.56,Default,,0000,0000,0000,, Dialogue: 0,0:34:18.56,0:34:24.99,Default,,0000,0000,0000,, Dialogue: 0,0:34:24.99,0:34:32.49,Default,,0000,0000,0000,, Dialogue: 0,0:34:32.49,0:34:37.35,Default,,0000,0000,0000,, Dialogue: 0,0:34:37.35,0:34:48.54,Default,,0000,0000,0000,, Dialogue: 0,0:34:48.54,0:34:54.21,Default,,0000,0000,0000,, Dialogue: 0,0:34:54.21,0:35:00.05,Default,,0000,0000,0000,, Dialogue: 0,0:35:00.05,0:35:04.59,Default,,0000,0000,0000,, Dialogue: 0,0:35:04.59,0:35:11.04,Default,,0000,0000,0000,, Dialogue: 0,0:35:11.04,0:35:20.65,Default,,0000,0000,0000,, Dialogue: 0,0:35:20.65,0:35:30.22,Default,,0000,0000,0000,, Dialogue: 0,0:35:30.22,0:35:33.52,Default,,0000,0000,0000,, Dialogue: 0,0:35:33.52,0:35:38.75,Default,,0000,0000,0000,, Dialogue: 0,0:35:38.75,0:35:50.05,Default,,0000,0000,0000,, Dialogue: 0,0:35:50.08,0:35:54.42,Default,,0000,0000,0000,, Dialogue: 0,0:35:54.42,0:36:03.30,Default,,0000,0000,0000,, Dialogue: 0,0:36:03.36,0:36:14.77,Default,,0000,0000,0000,, Dialogue: 0,0:36:14.80,0:36:26.29,Default,,0000,0000,0000,, Dialogue: 0,0:36:26.33,0:36:27.52,Default,,0000,0000,0000,,