[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:08.06,0:00:10.83,Default,,0000,0000,0000,,... Dialogue: 0,0:00:10.83,0:00:14.10,Default,,0000,0000,0000,,이 강의는 스탠포드에서 전문인 양성을 위하여 Dialogue: 0,0:00:14.10,0:00:21.10,Default,,0000,0000,0000,,제공됩니다. Dialogue: 0,0:00:22.04,0:00:26.88,Default,,0000,0000,0000,,지난 시간의 주제를 이어서 공부해 봅시다 Dialogue: 0,0:00:26.88,0:00:30.80,Default,,0000,0000,0000,,우리의 친구, 상호작용자를 배우고 있었죠 Dialogue: 0,0:00:30.80,0:00:34.30,Default,,0000,0000,0000,,상호작용자와 액션 리스너에 대해서요 Dialogue: 0,0:00:34.30,0:00:38.74,Default,,0000,0000,0000,,구체적으로는 버튼을 만드는 방법과 그 버튼들에 의해 발생하는 액션 이벤트에 대해 배웠습니다 Dialogue: 0,0:00:38.74,0:00:42.00,Default,,0000,0000,0000,,기억하나요? 그걸 간단히 정리하고 좀 더 깊이 있는 내용을 배워봅시다 Dialogue: 0,0:00:42.00,0:00:46.51,Default,,0000,0000,0000,,지난 시간에 이야기 했던 것 중 하나가 바로 프로그램에 init 메소드를 만드는 것이었습니다 Dialogue: 0,0:00:46.51,0:00:50.33,Default,,0000,0000,0000,,public void고요 Dialogue: 0,0:00:50.33,0:00:54.50,Default,,0000,0000,0000,,이 메소드 안에서 프로그램의 일부를 Dialogue: 0,0:00:54.50,0:00:57.47,Default,,0000,0000,0000,,다양한 사용자들을 클릭하거나 해서 Dialogue: 0,0:00:57.47,0:01:00.47,Default,,0000,0000,0000,,어떠한 이벤트가 발생했을 때의 상황을 처리해 줄 수 있었죠 Dialogue: 0,0:01:00.47,0:01:02.61,Default,,0000,0000,0000,,액션 리스너를 add해 줌으로써요 Dialogue: 0,0:01:02.61,0:01:07.51,Default,,0000,0000,0000,,그래서 버튼을 클릭하면 Dialogue: 0,0:01:07.51,0:01:10.47,Default,,0000,0000,0000,,특정한 메소드를 호출하도록 처리해 주는 것입니다 Dialogue: 0,0:01:10.47,0:01:14.39,Default,,0000,0000,0000,,액션리스너는 예를 들어 프로그램의 버튼이 있을 때 버튼에 무슨 일이 일어나는 지 감시해주었습니다 Dialogue: 0,0:01:14.39,0:01:17.85,Default,,0000,0000,0000,,그래서 버튼을 클릭하면 특정한 메소드를 호출하도록 처리해 주는 것입니다 Dialogue: 0,0:01:17.85,0:01:21.20,Default,,0000,0000,0000,,예를 들어 actionPerformed를 호출하면 그것에 바탕하여 어떤 버튼이 눌렸는 지를 확인하고 Dialogue: 0,0:01:21.20,0:01:23.71,Default,,0000,0000,0000,,실제로 무엇인가를 실행해줍니다 아셨죠? Dialogue: 0,0:01:23.71,0:01:27.52,Default,,0000,0000,0000,,자 여기 우리의 친구 public void actionPerformed가 있습니다 Dialogue: 0,0:01:27.52,0:01:30.94,Default,,0000,0000,0000,,자 여기 우리의 친구 public void actionPerformed가 있습니다 Dialogue: 0,0:01:30.94,0:01:32.94,Default,,0000,0000,0000,,자 여기 우리의 친구 public void actionPerformed가 있습니다 Dialogue: 0,0:01:32.94,0:01:33.91,Default,,0000,0000,0000,,자 여기 우리의 친구 public void actionPerformed가 있습니다 Dialogue: 0,0:01:33.91,0:01:37.99,Default,,0000,0000,0000,,그리고 actionPerformed는 ActionEvent라고 부르는 인자를 갖습니다. Dialogue: 0,0:01:37.99,0:01:39.62,Default,,0000,0000,0000,,그리고 actionPerformed는 ActionEvent라고 부르는 인자를 갖습니다. Dialogue: 0,0:01:39.62,0:01:43.87,Default,,0000,0000,0000,,액션 이벤트를 우리는 여기서 e라고 지칭해주고요 Dialogue: 0,0:01:43.87,0:01:47.56,Default,,0000,0000,0000,,이것은 어떤 액션이 일어났는지 혹은 어떤 버튼이 클릭되었는지를 확인해 줍니다 Dialogue: 0,0:01:47.56,0:01:51.22,Default,,0000,0000,0000,,기억하고 있길 바래요 \N지난 시간 수업을 잠시 돌아봤고요 Dialogue: 0,0:01:51.22,0:01:54.11,Default,,0000,0000,0000,,이제 액션 이벤트가 생겼을 때, 몇 가지 할 일이 있다고 했었죠 Dialogue: 0,0:01:55.14,0:01:58.25,Default,,0000,0000,0000,,가장 중요한 것은 Dialogue: 0,0:01:58.25,0:02:02.11,Default,,0000,0000,0000,,어떤 코맨드가 이 액션 이벤트를 발생시켰는 지를 알아내는 겁니다 Dialogue: 0,0:02:02.11,0:02:03.43,Default,,0000,0000,0000,,어떤 코맨드가 이 액션 이벤트를 발생시켰는 지를 알아내는 겁니다 Dialogue: 0,0:02:03.43,0:02:05.50,Default,,0000,0000,0000,,이렇게 하는 거죠 Dialogue: 0,0:02:05.50,0:02:09.36,Default,,0000,0000,0000,,일단 문자열 cmd를 만듭니다 command의 줄임말이고요 Dialogue: 0,0:02:09.36,0:02:12.42,Default,,0000,0000,0000,,이 코맨드, 즉 상호작용자는 actionPerfromed 메소드를 호출합니다 Dialogue: 0,0:02:12.42,0:02:15.60,Default,,0000,0000,0000,,이 코맨드, 즉 상호작용자는 actionPerfromed 메소드를 호출합니다 Dialogue: 0,0:02:16.60,0:02:19.01,Default,,0000,0000,0000,,자 여기서 e.cmd = e.getActionCommand를 써주세요 Dialogue: 0,0:02:19.01,0:02:22.48,Default,,0000,0000,0000,,자 여기서 e.cmd = e.getActionCommand를 써주세요 Dialogue: 0,0:02:22.48,0:02:26.16,Default,,0000,0000,0000,,. getActionCommand가 하는 일은 바로 Dialogue: 0,0:02:26.16,0:02:30.10,Default,,0000,0000,0000,,상호작용자의 이름을 문자열로 리턴시켜 주는 것입니다 Dialogue: 0,0:02:30.10,0:02:33.04,Default,,0000,0000,0000,,그리고 버튼의 이름은 기본적으로 버튼에 써져있는 것입니다 Dialogue: 0,0:02:33.04,0:02:33.61,Default,,0000,0000,0000,,그리고 버튼의 이름은 기본적으로 버튼에 써져있는 것입니다 Dialogue: 0,0:02:33.61,0:02:38.24,Default,,0000,0000,0000,,그리고 몇 개의 if를 이 cmd를 바탕으로 여기 써줍니다 Dialogue: 0,0:02:38.24,0:02:40.91,Default,,0000,0000,0000,,if(cmd.equal)으로 확인해서 어떤 버튼이 눌려졌는 지에 따라 액션을 취해 줄 수 있도록 Dialogue: 0,0:02:40.91,0:02:42.55,Default,,0000,0000,0000,,버튼의 이름을 확인 할 수 있습니다 Dialogue: 0,0:02:42.55,0:02:46.25,Default,,0000,0000,0000,,사실 이 액션 코맨드cmd보다는 Dialogue: 0,0:02:46.25,0:02:47.65,Default,,0000,0000,0000,,ActionEvent e를 활용해서 할 수 있는 것이 더 많습니다 Dialogue: 0,0:02:47.65,0:02:51.14,Default,,0000,0000,0000,,이걸 지난 수업 때 간단히 봤었는데요\N우리가 했던 프로그램에서요 Dialogue: 0,0:02:51.14,0:02:54.27,Default,,0000,0000,0000,,이제 이걸 좀 더 배워봅시다 좀 더 시간을 들여서요 Dialogue: 0,0:02:54.27,0:02:56.73,Default,,0000,0000,0000,,이제 저희가 원하는 것은 e에서 액션 코맨드를 알아내는 것이 아닙니다 Dialogue: 0,0:02:56.73,0:03:00.72,Default,,0000,0000,0000,,액션의 소스를 직접 가져오는 것을 바라죠 Dialogue: 0,0:03:00.72,0:03:02.85,Default,,0000,0000,0000,,액션의 소스를 직접 가져오는 것을 바라죠 Dialogue: 0,0:03:02.85,0:03:06.99,Default,,0000,0000,0000,,자, 여기서 재밌는 것은 getSource가 리턴하는 내용입니다 Dialogue: 0,0:03:06.99,0:03:08.77,Default,,0000,0000,0000,,여기선 잠시 세미콜론을 뺄게요 Dialogue: 0,0:03:08.77,0:03:12.75,Default,,0000,0000,0000,,getSource는 오브젝트(객체)를 리턴해 줍니다 Dialogue: 0,0:03:12.75,0:03:17.58,Default,,0000,0000,0000,,이벤트를 발생시키는 오브젝트 자체를 리턴해주죠 Dialogue: 0,0:03:17.58,0:03:19.81,Default,,0000,0000,0000,,즉, 버튼을 클릭했다면 Dialogue: 0,0:03:19.81,0:03:23.41,Default,,0000,0000,0000,,e.getActionCommand는 버튼의 이름을 리턴해주고 Dialogue: 0,0:03:23.41,0:03:27.56,Default,,0000,0000,0000,,e.getSource는 버튼 오브젝트의 레퍼런스를 리턴해 줍니다 Dialogue: 0,0:03:27.56,0:03:31.15,Default,,0000,0000,0000,,즉 오브젝트를 참조할 수 있게 되는 겁니다 Dialogue: 0,0:03:31.15,0:03:31.68,Default,,0000,0000,0000,,즉 오브젝트를 참조할 수 있게 되는 겁니다 Dialogue: 0,0:03:31.68,0:03:34.82,Default,,0000,0000,0000,,이것은 어떤 의미를 가질까요 Dialogue: 0,0:03:34.82,0:03:38.15,Default,,0000,0000,0000,,여기서 이것은 여러분이 초기화를 설정 할 때 Dialogue: 0,0:03:38.15,0:03:40.67,Default,,0000,0000,0000,,여기서 이것은 여러분이 초기화를 설정 할 때 Dialogue: 0,0:03:40.67,0:03:43.11,Default,,0000,0000,0000,,new JButton을 해줍니다 Dialogue: 0,0:03:43.11,0:03:44.54,Default,,0000,0000,0000,,new JButton을 해줍니다 Dialogue: 0,0:03:44.54,0:03:46.18,Default,,0000,0000,0000,,new JButton을 해줍니다 Dialogue: 0,0:03:46.18,0:03:50.73,Default,,0000,0000,0000,,이걸 hi라고 할게요. 알겠죠 Dialogue: 0,0:03:50.73,0:03:55.49,Default,,0000,0000,0000,,그리고 hi = new JButton을 해주고요 Dialogue: 0,0:03:55.49,0:03:58.08,Default,,0000,0000,0000,,hi를 인스턴스 변수로 만든거죠 Dialogue: 0,0:03:58.08,0:04:02.40,Default,,0000,0000,0000,,그럼 프로그램 내에 인스턴스 변수, private JButton hi가 생겼습니다. Dialogue: 0,0:04:02.40,0:04:03.14,Default,,0000,0000,0000,,그럼 프로그램 내에 인스턴스 변수, private JButton hi가 생겼습니다. Dialogue: 0,0:04:03.14,0:04:10.14,Default,,0000,0000,0000,,hi라는 변수를 선언했고요, JButton입니다 Dialogue: 0,0:04:10.48,0:04:14.28,Default,,0000,0000,0000,,그리고 초기화 메소드에서 Dialogue: 0,0:04:14.28,0:04:17.72,Default,,0000,0000,0000,,이 버튼에 라벨 hi를 붙여 생성합니다 Dialogue: 0,0:04:17.72,0:04:20.93,Default,,0000,0000,0000,,그런 다음 이것을 컨트롤 바에 add해 줍니다 Dialogue: 0,0:04:20.93,0:04:25.09,Default,,0000,0000,0000,,예를 들어 이 hi를 SOUTH 컨트롤 바에 add시켜 주죠 Dialogue: 0,0:04:25.09,0:04:28.73,Default,,0000,0000,0000,,여기에 add하는 게 일반적이라서요 Dialogue: 0,0:04:28.73,0:04:30.45,Default,,0000,0000,0000,,버튼이 실제로 화면 상에 나타나는 걸 보는 건 즐겁죠 Dialogue: 0,0:04:30.45,0:04:31.87,Default,,0000,0000,0000,,버튼이 실제로 화면 상에 나타나는 걸 보는 건 즐겁죠 Dialogue: 0,0:04:31.87,0:04:35.27,Default,,0000,0000,0000,,이렇게 add시켜 준 뒤에 이벤트 발생을 기다리는 거죠 Dialogue: 0,0:04:35.27,0:04:36.01,Default,,0000,0000,0000,,이렇게 add시켜 준 뒤에 이벤트 발생을 기다리는 거죠 Dialogue: 0,0:04:36.01,0:04:38.20,Default,,0000,0000,0000,,그리고 이 버튼이 클릭 될 때를 위한 액션 리스너를 add해 줍니다 Dialogue: 0,0:04:38.20,0:04:40.18,Default,,0000,0000,0000,,이제 버튼이 클릭 되면 Dialogue: 0,0:04:40.18,0:04:41.31,Default,,0000,0000,0000,,이 버튼의 cmd로 Dialogue: 0,0:04:41.31,0:04:42.45,Default,,0000,0000,0000,,이 버튼의 이름을 가져오라고 요청할 수 있어요 Dialogue: 0,0:04:42.45,0:04:47.46,Default,,0000,0000,0000,,혹은 액션 이벤트에게 액션 코맨드의 이름을 가져오게 할 수 있죠 Dialogue: 0,0:04:47.46,0:04:52.09,Default,,0000,0000,0000,,그리고 cmd.equal이 예를 들어 저기 버튼 hi의 이름과 같을 때 Dialogue: 0,0:04:52.09,0:04:55.74,Default,,0000,0000,0000,,그리고 cmd.equal이 예를 들어 저기 버튼 hi의 이름과 같을 때 Dialogue: 0,0:04:55.74,0:04:58.25,Default,,0000,0000,0000,,이제 처리하고 싶은 대로 할 수 있습니다 Dialogue: 0,0:04:58.25,0:05:01.38,Default,,0000,0000,0000,,예를 들면 스크린에 뭔가를 출력해 주던가 하는 거죠 Dialogue: 0,0:05:01.38,0:05:04.64,Default,,0000,0000,0000,,이게 이걸 쓰는 한 가지 방법이고요 Dialogue: 0,0:05:04.64,0:05:07.52,Default,,0000,0000,0000,,고전적이 방법이기도 하죠 Dialogue: 0,0:05:07.52,0:05:09.11,Default,,0000,0000,0000,,지난 시간에 본 겁니다 Dialogue: 0,0:05:09.11,0:05:13.31,Default,,0000,0000,0000,,이걸 쓰는 또 다른 방법으로는 getSource를 이용하는 것입니다 Dialogue: 0,0:05:13.31,0:05:16.88,Default,,0000,0000,0000,,cmd의 이름을 가져와 hi와 같은지 확인하는 것과 달리 Dialogue: 0,0:05:16.88,0:05:20.96,Default,,0000,0000,0000,,e.getSource를 호출하는 방법입니다 Dialogue: 0,0:05:20.96,0:05:24.36,Default,,0000,0000,0000,,사실, 이 방법을 사용하면 이 cmd 라인은 더 이상 필요가 없게 됩니다 Dialogue: 0,0:05:24.36,0:05:27.91,Default,,0000,0000,0000,,지우지는 않고 코멘트 처리 하겠습니다 Dialogue: 0,0:05:27.91,0:05:29.54,Default,,0000,0000,0000,,e.getSource를 하면 오브젝트를 리턴해 준다고 했었죠 Dialogue: 0,0:05:29.54,0:05:33.51,Default,,0000,0000,0000,,e.getSource를 하면 오브젝트를 리턴해 준다고 했었죠 Dialogue: 0,0:05:33.51,0:05:37.10,Default,,0000,0000,0000,,그럼 저는 이 리턴되는 오브젝트가 Dialogue: 0,0:05:37.10,0:05:38.51,Default,,0000,0000,0000,,제 hi 버튼이 맞는 지 확인할 겁니다 Dialogue: 0,0:05:38.51,0:05:44.51,Default,,0000,0000,0000,,여기서, 직접적으로 hi와 equal 하는 지 확인하고 Dialogue: 0,0:05:44.51,0:05:47.85,Default,,0000,0000,0000,,맞으면 원하는 데로 처리해 줍니다 아까와 똑같이 처리하겠습니다 Dialogue: 0,0:05:47.85,0:05:49.58,Default,,0000,0000,0000,,내가 가지고 있는 버튼이 클릭된 hi버튼인지 확인하는 작업입니다 Dialogue: 0,0:05:49.58,0:05:52.33,Default,,0000,0000,0000,,내가 가지고 있는 버튼이 클릭된 hi버튼인지 확인하는 작업입니다 Dialogue: 0,0:05:52.33,0:05:56.28,Default,,0000,0000,0000,,이 두 가지 방식의 차이는 Dialogue: 0,0:05:56.28,0:05:57.54,Default,,0000,0000,0000,,하나는 이름을 문자열로 사용한다는 것이고 Dialogue: 0,0:05:57.54,0:06:01.27,Default,,0000,0000,0000,,다른 하나는 실제 오브젝트를 사용한다는 것입니다 Dialogue: 0,0:06:01.27,0:06:02.81,Default,,0000,0000,0000,,다른 하나는 실제 오브젝트를 사용한다는 것입니다 Dialogue: 0,0:06:02.81,0:06:06.46,Default,,0000,0000,0000,,이제 이게 무엇인지 깊이 생각해봅시다 Dialogue: 0,0:06:06.46,0:06:10.43,Default,,0000,0000,0000,,이름을 이용할 때 우리는 실제 오브젝트까지 손 댈 필요가 없었죠 Dialogue: 0,0:06:10.43,0:06:12.39,Default,,0000,0000,0000,,이것은 즉 실제 오브젝트를 사용한다면 Dialogue: 0,0:06:12.39,0:06:15.92,Default,,0000,0000,0000,,우리는 이것을 인스턴스 변수로 사용할 필요가 없을 거라는 겁니다 Dialogue: 0,0:06:15.92,0:06:20.11,Default,,0000,0000,0000,,이것을 인스턴스 변수로서 사용할 일은 Dialogue: 0,0:06:20.11,0:06:24.25,Default,,0000,0000,0000,,이것을 아직 사용한 일이 없는 다른 메소드에서 일 겁니다 Dialogue: 0,0:06:24.25,0:06:27.56,Default,,0000,0000,0000,,이것을 아직 사용한 일이 없는 다른 메소드에서 일 겁니다 Dialogue: 0,0:06:27.56,0:06:31.40,Default,,0000,0000,0000,,예제를 하나 보여드리겠습니다\N코드로 좀 더 구체적으로 알아봅시다 Dialogue: 0,0:06:31.40,0:06:33.46,Default,,0000,0000,0000,,자, 코드를 보세요 Dialogue: 0,0:06:33.46,0:06:36.45,Default,,0000,0000,0000,,이게 기본적으로 버튼을 만드는 코드 입니다 Dialogue: 0,0:06:36.45,0:06:40.19,Default,,0000,0000,0000,,이게 기본적으로 버튼을 만드는 코드 입니다 Dialogue: 0,0:06:40.19,0:06:43.34,Default,,0000,0000,0000,,버튼 이름을 hi라고 했고요 Dialogue: 0,0:06:43.34,0:06:46.91,Default,,0000,0000,0000,,서쪽 영역에 넣었고요\N그리고 버튼이 클릭되는 상황을 알아챌 수 있게 Dialogue: 0,0:06:46.91,0:06:48.02,Default,,0000,0000,0000,,액션 리스너를 add하였습니다 Dialogue: 0,0:06:48.02,0:06:50.28,Default,,0000,0000,0000,,버튼이 클릭되면 Dialogue: 0,0:06:50.28,0:06:54.02,Default,,0000,0000,0000,,클릭된 버튼이 내가 만든 버튼인지를 확인하고요 Dialogue: 0,0:06:54.02,0:06:57.29,Default,,0000,0000,0000,,저쪽의 hi대신에 여기 실제로 호출되는 hi버튼이 있고요 Dialogue: 0,0:06:57.29,0:06:57.98,Default,,0000,0000,0000,,이걸 칠판에서는 자리를 좀 덜 차지하게 줄여썼어요 Dialogue: 0,0:06:57.98,0:07:02.64,Default,,0000,0000,0000,,클릭된 게 hi버튼이라면 Dialogue: 0,0:07:02.64,0:07:04.68,Default,,0000,0000,0000,,화면에 hello가 출력될 겁니다 Dialogue: 0,0:07:04.68,0:07:07.40,Default,,0000,0000,0000,,계속해서 이 프로그램을 실행해보죠 Dialogue: 0,0:07:07.40,0:07:09.71,Default,,0000,0000,0000,,계속해서 이 프로그램을 실행해보죠 Dialogue: 0,0:07:09.71,0:07:13.29,Default,,0000,0000,0000,,hi를 클릭하면 전에 봤던 게 나옵니다 Dialogue: 0,0:07:13.29,0:07:14.32,Default,,0000,0000,0000,,hi를 클릭할 때마다 hello가 화면에 뜨죠 Dialogue: 0,0:07:14.32,0:07:17.29,Default,,0000,0000,0000,,이제, 이걸 조금 다른 방식으로 활용할 수 있습니다 Dialogue: 0,0:07:17.29,0:07:19.77,Default,,0000,0000,0000,,지난 시간에 봤었던 것처럼요 Dialogue: 0,0:07:19.77,0:07:21.99,Default,,0000,0000,0000,,자 보세요. add를 할 때. 버튼을 생성하고 그걸 add해 주잖아요 Dialogue: 0,0:07:21.99,0:07:25.84,Default,,0000,0000,0000,,자 보세요. add를 할 때. 버튼을 생성하고 그걸 add해 주잖아요 Dialogue: 0,0:07:25.84,0:07:30.24,Default,,0000,0000,0000,,한 줄의 코드로요. 왜냐면 버튼을 저장할 변수가 필요 없었기 때문이었습니다 Dialogue: 0,0:07:30.24,0:07:33.80,Default,,0000,0000,0000,,여기서는 어떤 액션이벤트인지 소스를 체크할 필요가 없습니다 Dialogue: 0,0:07:33.80,0:07:35.55,Default,,0000,0000,0000,,여기서는 어떤 액션이벤트인지 소스를 체크할 필요가 없습니다 Dialogue: 0,0:07:35.55,0:07:37.94,Default,,0000,0000,0000,,그냥 액션 이벤트한테 command를 내놓으라고 하는 거에요 Dialogue: 0,0:07:37.94,0:07:39.33,Default,,0000,0000,0000,,그냥 액션 이벤트한테 command를 내놓으라고 하는 거에요 Dialogue: 0,0:07:39.33,0:07:42.06,Default,,0000,0000,0000,,cmd는 버튼의 이름일 것이고요 Dialogue: 0,0:07:42.06,0:07:46.22,Default,,0000,0000,0000,,그러므로 더 이상 실제 버튼 오브젝트의 레퍼런스를 저장하는 변수가 필요 없어지게 됩니다 Dialogue: 0,0:07:46.22,0:07:47.93,Default,,0000,0000,0000,,그러므로 더 이상 실제 버튼 오브젝트의 레퍼런스를 저장하는 변수가 필요 없어지게 됩니다 Dialogue: 0,0:07:47.93,0:07:51.02,Default,,0000,0000,0000,,왜냐면 이게 내가 필요한 이름을 전달해 주기 때문에요 Dialogue: 0,0:07:51.02,0:07:53.92,Default,,0000,0000,0000,,결과적으로, 여기서 인스턴스 변수가 필요없다는 것에 주목해주세요 Dialogue: 0,0:07:53.92,0:07:56.59,Default,,0000,0000,0000,,이게 바로 거래입니다 Dialogue: 0,0:07:56.59,0:07:59.30,Default,,0000,0000,0000,,이것은 또한 여러분에게 인스턴스 변수가 필요할 때을 구분할 수 있는 통찰력을 줍니다 Dialogue: 0,0:07:59.30,0:08:00.82,Default,,0000,0000,0000,,이것은 또한 여러분에게 인스턴스 변수가 필요할 때을 구분할 수 있는 통찰력을 줍니다 Dialogue: 0,0:08:00.82,0:08:02.96,Default,,0000,0000,0000,,이런 케이스에는 인스턴스 변수가 필요하고 Dialogue: 0,0:08:02.96,0:08:05.51,Default,,0000,0000,0000,,이런 케이스에는 인스턴스 변수가 필요하고 Dialogue: 0,0:08:05.51,0:08:09.96,Default,,0000,0000,0000,,아 잘못된 줄이네요 Dialogue: 0,0:08:11.37,0:08:13.81,Default,,0000,0000,0000,,인스턴스 변수가 있어야 하는 경우는 Dialogue: 0,0:08:13.81,0:08:16.36,Default,,0000,0000,0000,,다른 메소드에서 이 변수를 참조해야 할 경우입니니다 Dialogue: 0,0:08:16.36,0:08:17.78,Default,,0000,0000,0000,,다른 메소드에서 이 변수를 참조해야 할 경우입니니다 Dialogue: 0,0:08:17.78,0:08:21.57,Default,,0000,0000,0000,,자 이렇게 버튼을 생성했고요 Dialogue: 0,0:08:21.57,0:08:23.65,Default,,0000,0000,0000,,이걸 어딘가에 저장(store)했고요 Dialogue: 0,0:08:23.65,0:08:26.56,Default,,0000,0000,0000,,이걸 다른 메소드에서 참조할 수 있어야 합니다 Dialogue: 0,0:08:26.56,0:08:27.63,Default,,0000,0000,0000,,그래서 인스턴스 변수가 필요해 지는 겁니다 Dialogue: 0,0:08:27.63,0:08:31.31,Default,,0000,0000,0000,,만약 다른 메소드에서 이것을 참조할 필요가 없다면 Dialogue: 0,0:08:31.31,0:08:34.04,Default,,0000,0000,0000,,만약 다른 메소드에서 이것을 참조할 필요가 없다면 Dialogue: 0,0:08:34.04,0:08:37.02,Default,,0000,0000,0000,,두 번 째 경우처럼 되는 것이죠 Dialogue: 0,0:08:37.02,0:08:41.15,Default,,0000,0000,0000,,자 이렇게 참조가 필요 없는 경우에는 이걸 저장할 필요도 없죠 Dialogue: 0,0:08:41.15,0:08:48.15,Default,,0000,0000,0000,,여기에 대해 질문? Dialogue: 0,0:08:53.68,0:08:56.82,Default,,0000,0000,0000,,그게 학생의 로직 내의 버그(오류)입니다\N컴퓨터는 두 버튼에 동시에 같은 이름을 주었을 경우 Dialogue: 0,0:08:56.82,0:09:00.22,Default,,0000,0000,0000,,사용자가 둘 중 어떤 버튼을 이용한 것인지 알아내려고 하지 않습니다 Dialogue: 0,0:09:00.22,0:09:01.88,Default,,0000,0000,0000,,난 모른다 이런 식이죠 Dialogue: 0,0:09:01.88,0:09:04.28,Default,,0000,0000,0000,,그게 문제를 발생시켜요 그러니까 이런 짓은 하지 마세요 Dialogue: 0,0:09:04.28,0:09:07.76,Default,,0000,0000,0000,,이렇게 해서 어떤 일이 일어나는 지 궁금하다면 한 번 시도해 보시고요 Dialogue: 0,0:09:07.76,0:09:10.97,Default,,0000,0000,0000,,이것은 컴퓨터 실행의 오류가 아니라 논리적 오류입니다 Dialogue: 0,0:09:10.97,0:09:17.97,Default,,0000,0000,0000,,또 다른 질문 있나요? 네? Dialogue: 0,0:09:19.13,0:09:21.71,Default,,0000,0000,0000,,그런 식의 접근도 이 케이스와 비슷합니다\N실제 버튼을 얻는 거죠 Dialogue: 0,0:09:21.71,0:09:25.99,Default,,0000,0000,0000,,여기서 변수를 만들기 않으면 이게 뭘 리턴 할까요? Dialogue: 0,0:09:25.99,0:09:29.33,Default,,0000,0000,0000,,여기서 변수를 만들기 않으면 이게 뭘 리턴 할까요? Dialogue: 0,0:09:29.33,0:09:32.57,Default,,0000,0000,0000,,여전히 우리가 만든 오브젝트의 레퍼런스를 리턴해 줄 겁니다 Dialogue: 0,0:09:32.57,0:09:35.99,Default,,0000,0000,0000,,이제 문제는 뭐냐면 이제 어떤 오브젝트와 equal한 것인 가를 확인할 방도가 없다는 겁니다 Dialogue: 0,0:09:35.99,0:09:38.73,Default,,0000,0000,0000,,이걸 인스턴스 변수로 만들기 않았다면요 Dialogue: 0,0:09:38.73,0:09:42.43,Default,,0000,0000,0000,,이게 hi버튼과 같은 것인지 확인할 수가 없어요 Dialogue: 0,0:09:42.43,0:09:45.56,Default,,0000,0000,0000,,그러므로 hi버튼을 여기 생성하면 즉각적으로 이것이 add되서 그 후에는 기록을 추적할 수 없게 됩니다 Dialogue: 0,0:09:45.56,0:09:46.65,Default,,0000,0000,0000,,그러므로 hi버튼을 여기 생성하면 즉각적으로 이것이 add되서 그 후에는 기록을 추적할 수 없게 됩니다 Dialogue: 0,0:09:46.65,0:09:48.13,Default,,0000,0000,0000,,이 녀석은 hi버튼에 대한 포인터를 리턴해 주고요 Dialogue: 0,0:09:48.13,0:09:51.27,Default,,0000,0000,0000,,그래서 여러분이 “좋았어, hi버튼의 포인터를 얻었어”라고 할 수 있게 되는 겁니다 Dialogue: 0,0:09:51.27,0:09:52.31,Default,,0000,0000,0000,,그래서 여러분이 “좋았어, hi버튼의 포인터를 얻었어”라고 할 수 있게 되는 겁니다 Dialogue: 0,0:09:52.31,0:09:55.23,Default,,0000,0000,0000,,이게 hi버튼이걸 어떻게 아냐고 묻는다면 알 수 없습니다 Dialogue: 0,0:09:55.23,0:09:56.07,Default,,0000,0000,0000,,이게 hi버튼이걸 어떻게 아냐고 묻는다면 알 수 없습니다 Dialogue: 0,0:09:56.07,0:09:59.11,Default,,0000,0000,0000,,이걸 실제 hi버튼과 비교할 방법이 없어요 Dialogue: 0,0:09:59.11,0:10:01.99,Default,,0000,0000,0000,,이게 바로 이걸 저장해야 하는 이유랍니다 Dialogue: 0,0:10:01.99,0:10:05.13,Default,,0000,0000,0000,,좋아요, 이 두 가지 다른 방식을 어째서 보여주는가? Dialogue: 0,0:10:05.13,0:10:08.28,Default,,0000,0000,0000,,그 이유는 이제 여러분이 상호작용자들을 실제로 활용하게 되면서 Dialogue: 0,0:10:08.28,0:10:11.47,Default,,0000,0000,0000,,이러한 측면을 사용하게 될 것이기 때문입니다 Dialogue: 0,0:10:11.47,0:10:13.38,Default,,0000,0000,0000,,이러한 측면을 사용하게 될 것이기 때문입니다 Dialogue: 0,0:10:13.38,0:10:15.62,Default,,0000,0000,0000,,자 이제 다음으로 할 것은요 Dialogue: 0,0:10:15.62,0:10:18.65,Default,,0000,0000,0000,,항상 말하지만 프로그램을 만들 때 항상 유저들이 콘솔창에서 뜨는 게 아니고 Dialogue: 0,0:10:18.65,0:10:22.89,Default,,0000,0000,0000,,또 상호작용적으로 쓸 수 있는 텍스트를 마련해 주어야 합니다 Dialogue: 0,0:10:22.89,0:10:24.42,Default,,0000,0000,0000,,또 상호작용적으로 쓸 수 있는 텍스트를 마련해 주어야 합니다 Dialogue: 0,0:10:24.42,0:10:27.60,Default,,0000,0000,0000,,또 상호작용적으로 쓸 수 있는 텍스트를 마련해 주어야 합니다 Dialogue: 0,0:10:27.60,0:10:30.27,Default,,0000,0000,0000,,또 상호작용적으로 쓸 수 있는 텍스트를 마련해 주어야 합니다 Dialogue: 0,0:10:30.27,0:10:31.78,Default,,0000,0000,0000,,그러므로 이제 이 예제를 함께 봅시다 Dialogue: 0,0:10:31.78,0:10:35.76,Default,,0000,0000,0000,,그러므로 이제 이 예제를 함께 봅시다 Dialogue: 0,0:10:35.76,0:10:39.74,Default,,0000,0000,0000,,프로그램에서 textField라 불리는 게 있습니다 Dialogue: 0,0:10:39.74,0:10:43.02,Default,,0000,0000,0000,,내 이름이 Mehran이잖아요 Dialogue: 0,0:10:43.02,0:10:44.95,Default,,0000,0000,0000,,그럼 hello, Mehran 이렇게 나오고 Dialogue: 0,0:10:44.95,0:10:48.80,Default,,0000,0000,0000,,만약 Sally면 hello, Sally이렇게 출력되게 하고 싶어요 Dialogue: 0,0:10:48.80,0:10:50.42,Default,,0000,0000,0000,,이걸 텍스트 필드를 이용하여 할 수 있습니다 Dialogue: 0,0:10:50.42,0:10:54.27,Default,,0000,0000,0000,,이걸 텍스트 필드를 이용하여 할 수 있습니다 Dialogue: 0,0:10:54.27,0:10:55.87,Default,,0000,0000,0000,,이걸 텍스트 필드를 이용하여 할 수 있습니다 Dialogue: 0,0:10:55.87,0:10:59.02,Default,,0000,0000,0000,,상호작용자잖아요? 이게 필드 입니다. 콘솔창에 뜨는 거 아닙니다 Dialogue: 0,0:10:59.02,0:11:01.10,Default,,0000,0000,0000,,상호작용자잖아요? 이게 필드 입니다. 콘솔창에 뜨는 거 아닙니다 Dialogue: 0,0:11:01.10,0:11:04.35,Default,,0000,0000,0000,,그리고 여기에 유저가 뭔가를 써 넣을면 그것을 콘솔창에서 이용하게 해보죠 Dialogue: 0,0:11:04.35,0:11:05.29,Default,,0000,0000,0000,,그리고 여기에 유저가 뭔가를 써 넣을면 그것을 콘솔창에서 이용하게 해보죠 Dialogue: 0,0:11:05.29,0:11:07.37,Default,,0000,0000,0000,,그리고 여기에 유저가 뭔가를 써 넣을면 그것을 콘솔창에서 이용하게 해보죠 Dialogue: 0,0:11:09.94,0:11:12.50,Default,,0000,0000,0000,,자 이걸 어떻게 만들까요? Dialogue: 0,0:11:12.50,0:11:13.95,Default,,0000,0000,0000,,일단 text field라 불리는 상호작용자를 만들어야겠죠 Dialogue: 0,0:11:13.95,0:11:18.37,Default,,0000,0000,0000,,일단 text field라 불리는 상호작용자를 만들어야겠죠 Dialogue: 0,0:11:18.37,0:11:21.84,Default,,0000,0000,0000,,기본적으로, 텍스트 필드는 여러분이 봤던 겁니다 Dialogue: 0,0:11:21.84,0:11:25.95,Default,,0000,0000,0000,,텍스트를 입력할 수 있는 공간이 있는 상호작용자입니다 Dialogue: 0,0:11:25.95,0:11:28.58,Default,,0000,0000,0000,,이것이 컨트롤바에 뜨고 그 안에서 엔터를 치면 액션 이벤트가 일어나게 되는 겁니다 Dialogue: 0,0:11:28.58,0:11:30.89,Default,,0000,0000,0000,,이것이 컨트롤바에 뜨고 그 안에서 엔터를 치면 액션 이벤트가 일어나게 되는 겁니다 Dialogue: 0,0:11:30.89,0:11:35.08,Default,,0000,0000,0000,,여러분이 텍스트와 관련된 뭔가를 만들 고 싶다면 이게 바로 그 기본입니다 Dialogue: 0,0:11:35.08,0:11:37.20,Default,,0000,0000,0000,,여러분이 텍스트와 관련된 뭔가를 만들 고 싶다면 이게 바로 그 기본입니다 Dialogue: 0,0:11:37.20,0:11:41.67,Default,,0000,0000,0000,,만들면 실제로 상자모양이 생깁니다. 그게 다에요 Dialogue: 0,0:11:41.67,0:11:46.32,Default,,0000,0000,0000,,만약 거기에 라벨을 add하고 싶다면 Dialogue: 0,0:11:46.32,0:11:48.62,Default,,0000,0000,0000,,앞에서 이름을 add해 주었던 것처럼 해주어야 합니다 Dialogue: 0,0:11:48.62,0:11:51.21,Default,,0000,0000,0000,,이걸 어떻게 하는지는 잠시 뒤에 보여드리고요 Dialogue: 0,0:11:51.21,0:11:53.58,Default,,0000,0000,0000,,자 상자모양이 생기고 그 안에 뭔가를 쓰고 엔터키를 칩니다 Dialogue: 0,0:11:53.58,0:11:58.02,Default,,0000,0000,0000,,그럼 잠재적으로 이벤트가 발생합니다. Dialogue: 0,0:11:58.02,0:11:59.59,Default,,0000,0000,0000,,그럼 잠재적으로 이벤트가 발생합니다. Dialogue: 0,0:11:59.59,0:12:03.65,Default,,0000,0000,0000,,이걸 또 어떻게 설정할까요? Dialogue: 0,0:12:03.65,0:12:08.43,Default,,0000,0000,0000,,자 우리가 만들려고 하는 것은 바로 JTextField입니다 Dialogue: 0,0:12:08.43,0:12:12.58,Default,,0000,0000,0000,,이전에 봤던 체크박스나 콤보박스 등과 같은 상호작용자고요 Dialogue: 0,0:12:12.58,0:12:13.37,Default,,0000,0000,0000,,이것을 JTextField라 합니다 Dialogue: 0,0:12:13.37,0:12:15.37,Default,,0000,0000,0000,,저는 이 약자를 따서 TF라고 이름 짓겠습니다 Dialogue: 0,0:12:15.37,0:12:17.01,Default,,0000,0000,0000,,저는 이 약자를 따서 TF라고 이름 짓겠습니다 Dialogue: 0,0:12:17.01,0:12:21.80,Default,,0000,0000,0000,,자 이걸 새로 하나 생성하는 방법은 new JTextField를 해주는 거고요 Dialogue: 0,0:12:21.80,0:12:26.04,Default,,0000,0000,0000,,인자를 줍니다. 여기서 재미있는 게 있죠 Dialogue: 0,0:12:26.04,0:12:27.47,Default,,0000,0000,0000,,여러분은 라벨을 주는 것이 아닙니다 Dialogue: 0,0:12:27.47,0:12:30.83,Default,,0000,0000,0000,,텍스트 필드는 라벨이 딸려 있지 않아요\N라벨을 별개로 만들어 주어야 하죠 Dialogue: 0,0:12:30.83,0:12:35.39,Default,,0000,0000,0000,,여기에 주는 인자는 바로 텍스트 필드의 사이즈 입니다 Dialogue: 0,0:12:35.39,0:12:39.30,Default,,0000,0000,0000,,이것이 얼마나 큰지를 텍스트 필드 내에 들어가는 문자의 최대치로 정해 줍니다 Dialogue: 0,0:12:39.30,0:12:43.31,Default,,0000,0000,0000,,이것이 얼마나 큰지를 텍스트 필드 내에 들어가는 문자의 최대치로 정해 줍니다 Dialogue: 0,0:12:43.31,0:12:46.79,Default,,0000,0000,0000,,만약 폰트를 설정해 준다면 사이즈는 10M이 됩니다 Dialogue: 0,0:12:46.79,0:12:50.35,Default,,0000,0000,0000,,여기서 M은 그 폰트의 가장 넓은 문자입니다 Dialogue: 0,0:12:50.35,0:12:52.89,Default,,0000,0000,0000,,모를까 봐 알려드려요 Dialogue: 0,0:12:52.89,0:12:57.26,Default,,0000,0000,0000,,모를까 봐 알려드려요 Dialogue: 0,0:12:57.26,0:12:57.78,Default,,0000,0000,0000,,모를까 봐 알려드려요 Dialogue: 0,0:12:57.78,0:13:00.36,Default,,0000,0000,0000,,사용자가 엔터를 칠 때 말입니다 Dialogue: 0,0:13:00.36,0:13:03.99,Default,,0000,0000,0000,,다른 아무 것도 쓰지 않으면 actionPerformed는 오직 버튼에서만 호출되기 때문에 Dialogue: 0,0:13:03.99,0:13:04.62,Default,,0000,0000,0000,,다른 아무 것도 쓰지 않으면 actionPerformed는 오직 버튼에서만 호출되기 때문에 Dialogue: 0,0:13:04.62,0:13:08.29,Default,,0000,0000,0000,,actionPerformed를 호출하지 않을 겁니다 Dialogue: 0,0:13:08.29,0:13:11.64,Default,,0000,0000,0000,,그러므로 우리가 해 야 할 것은 텍스트 필드를 만든 후에 Dialogue: 0,0:13:11.64,0:13:13.49,Default,,0000,0000,0000,,이 텍스트 필드가 뭔가 액션을 생성한다는 것을 알려주어야 합니다 Dialogue: 0,0:13:13.49,0:13:17.43,Default,,0000,0000,0000,,이 텍스트 필드가 뭔가 액션을 생성한다는 것을 알려주어야 합니다 Dialogue: 0,0:13:17.43,0:13:20.75,Default,,0000,0000,0000,,이걸 하는 방법은 좀 펑키한데, Dialogue: 0,0:13:20.75,0:13:22.78,Default,,0000,0000,0000,,일단 textfield.addActionLestener를 해주고요 Dialogue: 0,0:13:22.78,0:13:24.89,Default,,0000,0000,0000,,textfield.addActionLestener Dialogue: 0,0:13:24.89,0:13:29.05,Default,,0000,0000,0000,,textfield.addActionLestener Dialogue: 0,0:13:29.05,0:13:31.69,Default,,0000,0000,0000,,알겠죠? Dialogue: 0,0:13:31.69,0:13:35.18,Default,,0000,0000,0000,,실제로 이 방식이 모두 낮을 레벨의 의미하기에 걱정할 필요가 없습니다 Dialogue: 0,0:13:35.18,0:13:37.63,Default,,0000,0000,0000,,실제로 이 방식이 모두 낮을 레벨의 의미하기에 걱정할 필요가 없습니다 Dialogue: 0,0:13:37.63,0:13:38.70,Default,,0000,0000,0000,,여러분이 해야 할 것은 이 텍스트 필드에 액션을 생성할 수 도 있다고 알려주는 거죠 Dialogue: 0,0:13:38.70,0:13:40.20,Default,,0000,0000,0000,,여러분이 해야 할 것은 이 텍스트 필드에 액션을 생성할 수 도 있다고 알려주는 거죠 Dialogue: 0,0:13:40.20,0:13:42.84,Default,,0000,0000,0000,,그리고 다른 사람들에게 액션을 생성해 주었을 때를 알려주는 겁니다 Dialogue: 0,0:13:42.84,0:13:46.65,Default,,0000,0000,0000,,그래서 이걸 넘긴 거에요 Dialogue: 0,0:13:46.65,0:13:48.90,Default,,0000,0000,0000,,그래서 이걸 넘긴 거에요 Dialogue: 0,0:13:48.90,0:13:52.46,Default,,0000,0000,0000,,하지만 매번 텍스트 필드를 생성할 때마다 Dialogue: 0,0:13:52.46,0:13:53.97,Default,,0000,0000,0000,,모든 텍스트 필드에 이걸 해 줄 필요는 없습니다 Dialogue: 0,0:13:53.97,0:13:57.36,Default,,0000,0000,0000,,이 addActionListner의 메세지를 독립적으로 전해 주기 때문에요 Dialogue: 0,0:13:57.36,0:13:57.96,Default,,0000,0000,0000,,이 addActionListner의 메세지를 독립적으로 전해 주기 때문에요 Dialogue: 0,0:13:57.96,0:14:01.71,Default,,0000,0000,0000,,한 번만 해주면 됩니다. Dialogue: 0,0:14:01.71,0:14:03.48,Default,,0000,0000,0000,,하지만 기본적으로 우리는 이제 텍스트 필드도 이러한 액션이벤트를 생성할 수 있도록 만들어 준 것입니다 Dialogue: 0,0:14:03.48,0:14:05.25,Default,,0000,0000,0000,,하지만 기본적으로 우리는 이제 텍스트 필드도 이러한 액션이벤트를 생성할 수 있도록 만들어 준 것입니다 Dialogue: 0,0:14:05.25,0:14:08.93,Default,,0000,0000,0000,,하지만 기본적으로 우리는 이제 텍스트 필드도 이러한 액션이벤트를 생성할 수 있도록 만들어 준 것입니다 Dialogue: 0,0:14:08.93,0:14:13.28,Default,,0000,0000,0000,,러므로 이걸 생성한 뒤 이 줄을 설정하고 이걸 프로그램의 어딘 가에 add해 주어야 하는 데요 Dialogue: 0,0:14:13.28,0:14:17.47,Default,,0000,0000,0000,,프로그램 내에서, add TF를 해주어야 합니다 Dialogue: 0,0:14:17.47,0:14:18.77,Default,,0000,0000,0000,,프로그램 내에서, add TF를 해주어야 합니다 Dialogue: 0,0:14:18.77,0:14:22.65,Default,,0000,0000,0000,,add TF를 서쪽 영역에 해줍시다 Dialogue: 0,0:14:22.65,0:14:25.22,Default,,0000,0000,0000,,지금까지 그랬던 것처럼요 Dialogue: 0,0:14:25.22,0:14:29.80,Default,,0000,0000,0000,,누구간 TF에 대고 엔터키를 치면 액션이벤트에 대한 혹은 액션 이벤트를 넘겨주는 액션퍼폼드에 대한 호출이 생성됩니다 Dialogue: 0,0:14:29.80,0:14:34.67,Default,,0000,0000,0000,,누구간 TF에 대고 엔터키를 치면 액션이벤트에 대한 혹은 액션 이벤트를 넘겨주는 액션퍼폼드에 대한 호출이 생성됩니다 Dialogue: 0,0:14:34.67,0:14:37.28,Default,,0000,0000,0000,,자 이렇게 설정되었을 때 Dialogue: 0,0:14:37.28,0:14:39.98,Default,,0000,0000,0000,,이 이벤트를 생성한 텍스트 필드가 무엇인지 어떻게 알죠? Dialogue: 0,0:14:39.98,0:14:43.70,Default,,0000,0000,0000,,여러 개의 텍스트 필드가 있고 Dialogue: 0,0:14:43.70,0:14:47.03,Default,,0000,0000,0000,,그 중 하나에 사용자가 엔터를 쳐넣을 때요 Dialogue: 0,0:14:47.03,0:14:50.84,Default,,0000,0000,0000,,e.getSource를 해주면 되죠 Dialogue: 0,0:14:50.84,0:14:54.74,Default,,0000,0000,0000,,자 이 안에, e.getSource 가 TF와 equal한 지 알아보는 코드를 씁니다 Dialogue: 0,0:14:54.74,0:14:57.77,Default,,0000,0000,0000,,자 이 안에, e.getSource 가 TF와 equal한 지 알아보는 코드를 씁니다 Dialogue: 0,0:14:57.77,0:15:00.14,Default,,0000,0000,0000,,자 이 안에, e.getSource 가 TF와 equal한 지 알아보는 코드를 씁니다 Dialogue: 0,0:15:00.14,0:15:03.81,Default,,0000,0000,0000,,여기서, 모든 종류의 경고창이 뜹니다 Dialogue: 0,0:15:03.81,0:15:07.04,Default,,0000,0000,0000,,그러므로 여기서, 우리는 박스에 들어있는 텍스트와 hi를 합쳐서 println해 주고 싶은 건데요 Dialogue: 0,0:15:07.04,0:15:11.55,Default,,0000,0000,0000,,이걸 하는 방법을 이 텍스트 필드의 이름.getText를 해주면 됩니다 Dialogue: 0,0:15:11.55,0:15:15.36,Default,,0000,0000,0000,,이걸 하는 방법을 이 텍스트 필드의 이름.getText를 해주면 됩니다 Dialogue: 0,0:15:15.36,0:15:20.60,Default,,0000,0000,0000,,그럼 알아서 텍스트를 리턴해 줄 겁니다 Dialogue: 0,0:15:20.60,0:15:24.12,Default,,0000,0000,0000,,엔터를 치면 박스에 있던 문자열을 리턴해 주죠 Dialogue: 0,0:15:24.12,0:15:27.20,Default,,0000,0000,0000,,그럼 hi와 이 리턴된 텍스트를 출력해 줍니다 Dialogue: 0,0:15:27.20,0:15:30.44,Default,,0000,0000,0000,,프로그램에서 봤던 것과 같습니다 Dialogue: 0,0:15:30.44,0:15:32.79,Default,,0000,0000,0000,,그건 hi가 아니라 hello였다는 걸 제외하면요 Dialogue: 0,0:15:32.79,0:15:34.42,Default,,0000,0000,0000,,그건 hi가 아니라 hello였다는 걸 제외하면요 Dialogue: 0,0:15:34.42,0:15:37.86,Default,,0000,0000,0000,,하지만 경고음 사라져야 합니다 Dialogue: 0,0:15:37.86,0:15:43.82,Default,,0000,0000,0000,,이렇게 코드를 써서 생기는 문제는 뭘까요? Dialogue: 0,0:15:43.82,0:15:47.39,Default,,0000,0000,0000,,이건 인스턴스 변수가 아닙니다. 그렇죠? Dialogue: 0,0:15:47.39,0:15:50.96,Default,,0000,0000,0000,,그러므로 현재는 방도가 없어요 Dialogue: 0,0:15:51.84,0:15:56.61,Default,,0000,0000,0000,,여기 이게 init메소드고 이 밖에서 TF를 참조하려면요\N그래서 인스턴스 변수를 생성해야 하는 것입니다 Dialogue: 0,0:15:56.61,0:15:59.45,Default,,0000,0000,0000,,알겠죠? 이게 init메소드고요 이 앞은 public void고요 Dialogue: 0,0:15:59.45,0:16:04.11,Default,,0000,0000,0000,,이 TF를 클래스 어딘가에서 예를 들어 여기서요 Dialogue: 0,0:16:04.11,0:16:07.63,Default,,0000,0000,0000,,내가 l바를 선언한 곳이죠 Dialogue: 0,0:16:07.63,0:16:08.14,Default,,0000,0000,0000,,클래스 아래쪽 어딘가 입니다 Dialogue: 0,0:16:08.14,0:16:11.99,Default,,0000,0000,0000,,여기다 private JTextField TF를 해줍니다 Dialogue: 0,0:16:11.99,0:16:12.83,Default,,0000,0000,0000,,private JTextField TF Dialogue: 0,0:16:12.83,0:16:14.07,Default,,0000,0000,0000,,private JTextField TF Dialogue: 0,0:16:14.07,0:16:15.28,Default,,0000,0000,0000,,private JTextField TF Dialogue: 0,0:16:15.28,0:16:19.06,Default,,0000,0000,0000,,그리고 여기서는 선언은 안하고 tf를 new로 생성해 줍니다 Dialogue: 0,0:16:19.06,0:16:22.89,Default,,0000,0000,0000,,이렇게 인스턴스 변수를 선언했습니다 Dialogue: 0,0:16:22.89,0:16:25.65,Default,,0000,0000,0000,,이렇게 인스턴스 변수를 선언했습니다 Dialogue: 0,0:16:25.65,0:16:26.87,Default,,0000,0000,0000,,여기 버튼 예제에서 보시는 것처럼요. 이게 텍스트 필드라는 것만 빼면 동일합니다 Dialogue: 0,0:16:26.87,0:16:28.75,Default,,0000,0000,0000,,여기 버튼 예제에서 보시는 것처럼요. 이게 텍스트 필드라는 것만 빼면 동일합니다 Dialogue: 0,0:16:28.75,0:16:35.32,Default,,0000,0000,0000,,그럼 코드를 좀 보여드릴게요 Dialogue: 0,0:16:35.32,0:16:38.80,Default,,0000,0000,0000,,자 이게 텍스트 필드 예제입니다 Dialogue: 0,0:16:38.80,0:16:41.64,Default,,0000,0000,0000,,콘솔 프로그램을 확장시키려고 합니다 Dialogue: 0,0:16:41.64,0:16:43.73,Default,,0000,0000,0000,,아직 콘솔로 하고 있잖아요 Dialogue: 0,0:16:43.73,0:16:48.15,Default,,0000,0000,0000,,init메소드에서 name field를 만들게요 Dialogue: 0,0:16:48.15,0:16:51.67,Default,,0000,0000,0000,,nameField가 뭐냐고요? private JTextField입니다. Dialogue: 0,0:16:51.67,0:16:55.28,Default,,0000,0000,0000,,이렇게 nameField를 정장해놓고요. 이걸 new JTextFiedl(10)으로 초기화 하겠습니다 Dialogue: 0,0:16:55.28,0:16:57.76,Default,,0000,0000,0000,,저기서 썼던 거랑 똑같을 코드죠 Dialogue: 0,0:16:57.76,0:17:01.25,Default,,0000,0000,0000,,이제 추가적으로 좀 더 재밌는 걸 해보죠 Dialogue: 0,0:17:01.25,0:17:05.96,Default,,0000,0000,0000,,박스에 라벨을 붙이려고 합니다 Dialogue: 0,0:17:05.96,0:17:10.55,Default,,0000,0000,0000,,일단 박스를 컨트롤 바에 붙이고 Dialogue: 0,0:17:10.55,0:17:13.48,Default,,0000,0000,0000,,name이라는 new JLabel을 add해 줄 겁니다 Dialogue: 0,0:17:13.48,0:17:16.73,Default,,0000,0000,0000,,name이라는 new JLabel을 add해 줄 겁니다 Dialogue: 0,0:17:16.73,0:17:18.00,Default,,0000,0000,0000,,그 텍스트가 name이고요. 이걸 서쪽 콘트롤바에 add하겠습니다. Dialogue: 0,0:17:18.00,0:17:19.88,Default,,0000,0000,0000,,그 텍스트가 name이고요. 이걸 서쪽 콘트롤바에 add하겠습니다. Dialogue: 0,0:17:19.88,0:17:23.16,Default,,0000,0000,0000,,자 첫째로 이건 그냥 name이라고 써질 거고 Dialogue: 0,0:17:23.16,0:17:27.60,Default,,0000,0000,0000,,그리고 아까의 nameField를 add할게요 Dialogue: 0,0:17:27.60,0:17:30.39,Default,,0000,0000,0000,,즉 name텍스트 옆에 박스를 생성하는 거죠 Dialogue: 0,0:17:30.39,0:17:32.28,Default,,0000,0000,0000,,그리고 아까 말했던 것과 정확히 동일 하게 할겁니다 Dialogue: 0,0:17:32.28,0:17:35.16,Default,,0000,0000,0000,,액션리스너를 add해 주고 해서 Dialogue: 0,0:17:35.16,0:17:36.82,Default,,0000,0000,0000,,당신이 무엇인가 Dialogue: 0,0:17:36.82,0:17:38.26,Default,,0000,0000,0000,,상호작용을 하면 Dialogue: 0,0:17:38.26,0:17:41.80,Default,,0000,0000,0000,,그것을 알 수 있게 하는 겁니다 Dialogue: 0,0:17:43.81,0:17:46.61,Default,,0000,0000,0000,,. 이것은 즉 이제 actionPerformed가 호출되고 Dialogue: 0,0:17:46.61,0:17:50.21,Default,,0000,0000,0000,,액션리스너에 대한 이벤트를 생성하는 것이 Dialogue: 0,0:17:50.21,0:17:51.53,Default,,0000,0000,0000,,가능해진다는 이야기입니다 Dialogue: 0,0:17:51.53,0:17:55.11,Default,,0000,0000,0000,,actionPerformed에서 e.getSource를 해주고요\N이걸 nameField와 비교할 수 있습니다 Dialogue: 0,0:17:55.11,0:17:57.62,Default,,0000,0000,0000,,이걸 밑에 인스턴스 변수로 저장해 두었으니까요 Dialogue: 0,0:17:57.62,0:18:01.72,Default,,0000,0000,0000,,hello를 써주고 이걸 nameField의 텍스트와 연계시켜야죠 Dialogue: 0,0:18:03.75,0:18:06.11,Default,,0000,0000,0000,,텍스트 크기를 좀 더 키워볼게요 Dialogue: 0,0:18:06.11,0:18:09.31,Default,,0000,0000,0000,,자, 조금 더 크게요 어떻게 하는지 보세요 Dialogue: 0,0:18:09.31,0:18:11.03,Default,,0000,0000,0000,,제가 좋아하는 서체인Courier 24포인트로 할 게요 Dialogue: 0,0:18:11.03,0:18:14.64,Default,,0000,0000,0000,,제가 좋아하는 서체인Courier 24포인트로 할 게요 Dialogue: 0,0:18:14.64,0:18:17.09,Default,,0000,0000,0000,,좋아요 더 크게 Dialogue: 0,0:18:22.39,0:18:24.74,Default,,0000,0000,0000,,자 다시 한 번 Dialogue: 0,0:18:24.74,0:18:28.51,Default,,0000,0000,0000,,Mahran 하고 엔터치면 hello, Mehran이 뜹니다. 보이죠? \N엔터를 칠 때마다 이벤트가 일어나죠. Dialogue: 0,0:18:28.51,0:18:32.92,Default,,0000,0000,0000,,엔터, 엔터, 엔터. 보세요, 텍스트가 나오죠 Dialogue: 0,0:18:32.92,0:18:36.86,Default,,0000,0000,0000,,그리고 이건 또 다른 거. 재밌죠 Dialogue: 0,0:18:36.86,0:18:39.16,Default,,0000,0000,0000,,Sally... 스크롤을 움직여요. 많이 재미있진 않죠 Dialogue: 0,0:18:39.16,0:18:43.54,Default,,0000,0000,0000,,2분정도 하기에 딱 좋아요 Dialogue: 0,0:18:44.97,0:18:48.65,Default,,0000,0000,0000,,이런 식으로 하는 거에요 이제 텍스트 박스로부터 Dialogue: 0,0:18:48.65,0:18:49.74,Default,,0000,0000,0000,,정보(텍스트)를 얻는 방법을 아셨죠 Dialogue: 0,0:18:49.74,0:18:52.26,Default,,0000,0000,0000,,텍스트 박스에 대해 질문? Dialogue: 0,0:18:52.26,0:18:56.50,Default,,0000,0000,0000,,네, 뒤에 학생 Dialogue: 0,0:18:56.50,0:19:00.38,Default,,0000,0000,0000,,네, 기본적으로 레이아웃은 뭔가를 add해 줄 때마다 Dialogue: 0,0:19:03.32,0:19:06.88,Default,,0000,0000,0000,,왼쪽에서 오른 쪽으로 쭉 확장됩니다 Dialogue: 0,0:19:06.88,0:19:10.52,Default,,0000,0000,0000,,어떤 영역이던 간에요 이 경우에는, 서쪽영역이죠 Dialogue: 0,0:19:10.52,0:19:14.29,Default,,0000,0000,0000,,모든 게 가운데로 몰렸죠. 여기에 공간을 주고 싶다면 JLabel을 더해주면 됩니다 그러면 이것들 사이에 공간이 더 넓어지겠죠 Dialogue: 0,0:19:14.29,0:19:17.63,Default,,0000,0000,0000,,거기까지 못 던지겠네요. 여기 놔둘 테니, 수업 끝나고 집어가세요 Dialogue: 0,0:19:17.63,0:19:19.99,Default,,0000,0000,0000,,거기까지 못 던지겠네요. 여기 놔둘 테니, 수업 끝나고 집어가세요 Dialogue: 0,0:19:19.99,0:19:23.49,Default,,0000,0000,0000,,또 다른 재미있는 게 있습니다 Dialogue: 0,0:19:23.49,0:19:25.97,Default,,0000,0000,0000,,사실 텍스트 필드에 이름을 줄 수 있습니다 Dialogue: 0,0:19:25.97,0:19:29.09,Default,,0000,0000,0000,,이런 getSource하고 인스턴스 변수 만들고 하는 거 잘 모르겠어요 하시면 Dialogue: 0,0:19:29.09,0:19:31.58,Default,,0000,0000,0000,,이런 getSource하고 인스턴스 변수 만들고 하는 거 잘 모르겠어요 하시면 Dialogue: 0,0:19:31.58,0:19:35.40,Default,,0000,0000,0000,,이름을 줘서 그 이름으로 참조해 봅시다 Dialogue: 0,0:19:35.40,0:19:38.80,Default,,0000,0000,0000,,괜찮죠? 이름을 만들 수 있어요 Dialogue: 0,0:19:38.80,0:19:42.49,Default,,0000,0000,0000,,여기 완전히 똑같은 예제가 있습니다\N약간의 차이가 있지만 Dialogue: 0,0:19:42.49,0:19:43.16,Default,,0000,0000,0000,,조금 달라요 Dialogue: 0,0:19:43.16,0:19:47.54,Default,,0000,0000,0000,,전과 동일한 코드입니다 Dialogue: 0,0:19:47.54,0:19:50.23,Default,,0000,0000,0000,,내가 namefield를 생성했다는 걸 빼면요 Dialogue: 0,0:19:50.23,0:19:53.40,Default,,0000,0000,0000,,여기에 액션 코맨드를 주는데요 Dialogue: 0,0:19:53.40,0:19:57.54,Default,,0000,0000,0000,,그 액션 코맨드는 name일 것입니다 Dialogue: 0,0:19:57.54,0:20:02.00,Default,,0000,0000,0000,,그리고 이런 이벤트를 생성할 때마다 그 Dialogue: 0,0:20:02.00,0:20:04.62,Default,,0000,0000,0000,,이벤트의 근원이 얘인지 확인합니다 Dialogue: 0,0:20:04.62,0:20:06.11,Default,,0000,0000,0000,,혹은, 이름을 주고 Dialogue: 0,0:20:06.11,0:20:10.53,Default,,0000,0000,0000,,버튼에 했던 것과 똑같은 일을 할 수 있어요 Dialogue: 0,0:20:10.53,0:20:14.54,Default,,0000,0000,0000,,이 밑에서 getActionCommand를 하고요 이건 문자열을 반환하죠 Dialogue: 0,0:20:14.54,0:20:15.65,Default,,0000,0000,0000,,즉 이벤트를 생성하는 오브젝트의 이름을요 Dialogue: 0,0:20:15.65,0:20:20.56,Default,,0000,0000,0000,,이게 name과 equal하나 봅니다\N즉 내가 주었던 이름과요 Dialogue: 0,0:20:20.56,0:20:23.29,Default,,0000,0000,0000,,버튼에서 했던 걸 돌아볼 수 있어요 Dialogue: 0,0:20:23.29,0:20:26.72,Default,,0000,0000,0000,,버튼에서는 항상 이름을 주고 그 이름으로 확인하잖아요 Dialogue: 0,0:20:26.72,0:20:27.99,Default,,0000,0000,0000,,버튼에서는 항상 이름을 주고 그 이름으로 확인하잖아요 Dialogue: 0,0:20:27.99,0:20:29.52,Default,,0000,0000,0000,,혹은 버튼의 소스로도 확인 해 볼 수 있었죠 Dialogue: 0,0:20:29.52,0:20:31.97,Default,,0000,0000,0000,,혹은 버튼의 소스로도 확인 해 볼 수 있었죠 Dialogue: 0,0:20:31.97,0:20:35.23,Default,,0000,0000,0000,,JTextField. 이걸 거의 항상 getSource를 사용해 이용할 수 있어요 Dialogue: 0,0:20:35.23,0:20:38.53,Default,,0000,0000,0000,,하지만 이름으로도 참조할 수 있고요 Dialogue: 0,0:20:38.53,0:20:42.25,Default,,0000,0000,0000,,하지만 실제 화면상에 이 이름은 보이지 않습니다 Dialogue: 0,0:20:42.25,0:20:45.53,Default,,0000,0000,0000,,하지만 실제 화면상에 이 이름은 보이지 않습니다 Dialogue: 0,0:20:45.53,0:20:47.44,Default,,0000,0000,0000,,화면상에 뭔가 텍스트가 뜨길 바란다면 Dialogue: 0,0:20:47.44,0:20:50.91,Default,,0000,0000,0000,,여전히 분리된 라벨에 이름을 써서 만들어 줘야 합니다 Dialogue: 0,0:20:50.91,0:20:52.05,Default,,0000,0000,0000,,여전히 분리된 라벨에 이름을 써서 만들어 줘야 합니다 Dialogue: 0,0:20:52.05,0:20:59.05,Default,,0000,0000,0000,,여전히 분리된 라벨에 이름을 써서 만들어 줘야 합니다 Dialogue: 0,0:21:01.11,0:21:04.08,Default,,0000,0000,0000,,이게 최대치입니다 Dialogue: 0,0:21:04.08,0:21:09.37,Default,,0000,0000,0000,,이게 최대치입니다 Dialogue: 0,0:21:09.37,0:21:12.62,Default,,0000,0000,0000,,네, namefield는 l바에 있어요 Dialogue: 0,0:21:12.62,0:21:17.49,Default,,0000,0000,0000,,더 이상 참조하지 않으니까 필요 없어요 Dialogue: 0,0:21:17.49,0:21:21.36,Default,,0000,0000,0000,,이걸 복사해서 붙여 넣기 해볼 게요 Dialogue: 0,0:21:21.36,0:21:23.39,Default,,0000,0000,0000,,이걸 복사해서 붙여 넣기 해볼 게요 Dialogue: 0,0:21:28.22,0:21:33.31,Default,,0000,0000,0000,,아 이런. 이게 바로 이걸 여기 썼던 이유입니다 Dialogue: 0,0:21:33.31,0:21:36.69,Default,,0000,0000,0000,,아 이런. 이게 바로 이걸 여기 썼던 이유입니다 Dialogue: 0,0:21:36.69,0:21:40.36,Default,,0000,0000,0000,,이 텍스트를 얻기 위해 Dialogue: 0,0:21:40.36,0:21:41.10,Default,,0000,0000,0000,,이걸 참조할 필요가 있죠 Dialogue: 0,0:21:41.10,0:21:43.84,Default,,0000,0000,0000,,솔직히, 이걸 e.getSource로 처리해도 됩니다. 이 텍스트를 얻는 걸요 Dialogue: 0,0:21:43.84,0:21:45.16,Default,,0000,0000,0000,,그래서 꼭 필요하지 않지만, 이게 나아요 Dialogue: 0,0:21:45.16,0:21:49.06,Default,,0000,0000,0000,,이게 훨씬 깔끔한 방법이거든요 Dialogue: 0,0:21:49.06,0:21:49.94,Default,,0000,0000,0000,,이걸 없애 버리죠 Dialogue: 0,0:21:49.94,0:21:52.10,Default,,0000,0000,0000,,이걸 없애 버리죠 Dialogue: 0,0:21:53.33,0:22:00.33,Default,,0000,0000,0000,,JTextField에 대해 또 다른 질문? Dialogue: 0,0:22:01.95,0:22:03.98,Default,,0000,0000,0000,,어.. 네 Dialogue: 0,0:22:03.98,0:22:05.05,Default,,0000,0000,0000,,네, 할 수 있어요 Dialogue: 0,0:22:05.05,0:22:09.73,Default,,0000,0000,0000,,20분 뒤에 보여드릴게요 Dialogue: 0,0:22:09.73,0:22:12.91,Default,,0000,0000,0000,,세 자리 옆으로 날라갔네요..\N이걸 하기 전에 앞서 Dialogue: 0,0:22:12.91,0:22:15.12,Default,,0000,0000,0000,,지금까지와는 다른 걸 배워봅시다 Dialogue: 0,0:22:15.12,0:22:18.46,Default,,0000,0000,0000,,지금까지는 상호작용자들이 Dialogue: 0,0:22:18.46,0:22:19.91,Default,,0000,0000,0000,,스크린 아래쪽에서 Dialogue: 0,0:22:19.91,0:22:22.52,Default,,0000,0000,0000,,가운데 정렬되어 나와잖아요 Dialogue: 0,0:22:22.52,0:22:26.43,Default,,0000,0000,0000,,이걸 다른 식으로 배치할 수 있을까요\N그리고 이러한 걸 가능하게 해주는 것을 Dialogue: 0,0:22:26.43,0:22:30.45,Default,,0000,0000,0000,,그리고 이러한 걸 가능하게 해주는 것은 Dialogue: 0,0:22:30.45,0:22:34.97,Default,,0000,0000,0000,,이상하게도 레이아웃layout입니다 Dialogue: 0,0:22:34.97,0:22:39.32,Default,,0000,0000,0000,,즉 레이아웃이 특정 상호작용자들의 레이아웃을 컨트롤합니다 Dialogue: 0,0:22:39.32,0:22:42.62,Default,,0000,0000,0000,,지금까지 여러분이 여러분의 친구, 콘솔 프로그램 Dialogue: 0,0:22:42.62,0:22:45.09,Default,,0000,0000,0000,,혹은 그래픽 프로그램을 Dialogue: 0,0:22:45.09,0:22:48.53,Default,,0000,0000,0000,,쓰면서 봤던 것은 보더레이아웃입니다 Dialogue: 0,0:22:48.53,0:22:50.70,Default,,0000,0000,0000,,쓰면서 봤던 것은 보더레이아웃입니다 Dialogue: 0,0:22:50.70,0:22:54.82,Default,,0000,0000,0000,,사실 여러분은 이미 보더 레이아웃을 경험해 본거죠\N이렇게 생겼습니다 Dialogue: 0,0:22:54.82,0:22:58.60,Default,,0000,0000,0000,,가운데 영역이 있고요. 북쪽, 남쪽, 동쪽, 그리고 서쪽 보더border가 있습니다 Dialogue: 0,0:22:58.60,0:23:01.72,Default,,0000,0000,0000,,그래서 보더레이아웃이라 부르는 거죠 Dialogue: 0,0:23:01.72,0:23:02.76,Default,,0000,0000,0000,,그래서 보더레이아웃이라 부르는 거죠 Dialogue: 0,0:23:02.76,0:23:04.15,Default,,0000,0000,0000,,이 보더 레이아웃에서는 Dialogue: 0,0:23:04.15,0:23:07.37,Default,,0000,0000,0000,,이 보더 레이아웃에서는 Dialogue: 0,0:23:07.37,0:23:11.83,Default,,0000,0000,0000,,가운데 영역에서 액션이 일어났습니다 Dialogue: 0,0:23:11.83,0:23:14.44,Default,,0000,0000,0000,,가운데 영역에서 액션이 일어났습니다 Dialogue: 0,0:23:14.44,0:23:18.63,Default,,0000,0000,0000,,콘솔 프로그램에서는 자동으로 가운데에 콘솔을 add해 주었고요 Dialogue: 0,0:23:18.63,0:23:22.93,Default,,0000,0000,0000,,그게 콘솔 프로그램입니다\N그리고 그래픽 프로그램에서는 G캔버스를 자동으로 가운데에 add해주었습니다 Dialogue: 0,0:23:22.93,0:23:26.21,Default,,0000,0000,0000,,그리고 그래픽 프로그램에서는 G캔버스를 자동으로 가운데에 add해주었습니다\N여기서 여러분이 이것저것을 draw할 수 있었죠. Dialogue: 0,0:23:26.21,0:23:30.38,Default,,0000,0000,0000,,다른 영역은 오직 뭔가를 그곳에 add해 주었을 때부터 보이기 시작합니다 Dialogue: 0,0:23:30.38,0:23:32.44,Default,,0000,0000,0000,,초기에 오로지 그래픽을 위한 Dialogue: 0,0:23:32.44,0:23:36.04,Default,,0000,0000,0000,,그래픽프로그램을 만들 때 여러분은 Dialogue: 0,0:23:36.04,0:23:36.98,Default,,0000,0000,0000,,서쪽 영역을 보지 못했습니다 Dialogue: 0,0:23:36.98,0:23:39.39,Default,,0000,0000,0000,,그것은 거기에 아무런 상호작용자를 add해 주지 않았기 때문이죠 Dialogue: 0,0:23:39.39,0:23:43.86,Default,,0000,0000,0000,,이러한 상호작용자 영역은 무언가 거기에 얹혀주었을 때만 나타납니다 Dialogue: 0,0:23:43.86,0:23:47.10,Default,,0000,0000,0000,,이러한 것을 컨트롤바라고 부른다고 했었죠\N지난 시간에 봤잖아요 Dialogue: 0,0:23:47.10,0:23:50.94,Default,,0000,0000,0000,,그런 다른 종류의 레이아웃은 무엇이 있을까요?\N중요한 몇 가지 레이아웃을 공부해 봅시다 Dialogue: 0,0:23:50.94,0:23:55.05,Default,,0000,0000,0000,,첫째로 그리드 레이아웃이라는 게 있습니다 Dialogue: 0,0:23:55.05,0:23:59.94,Default,,0000,0000,0000,,그리드 레이아웃을 이용하려면 일단 이걸 생성해야 하고요 Dialogue: 0,0:23:59.94,0:24:04.22,Default,,0000,0000,0000,,또 그리드 레이아웃은 행과 열로 이루어져 있습니다 Dialogue: 0,0:24:04.22,0:24:06.30,Default,,0000,0000,0000,,또 그리드 레이아웃은 행과 열로 이루어져 있습니다 Dialogue: 0,0:24:06.30,0:24:10.22,Default,,0000,0000,0000,,예를 들어 2행3열로요 Dialogue: 0,0:24:10.22,0:24:14.13,Default,,0000,0000,0000,,그럼 이러한 레이아웃이 나옵니다\N이것은 2행 3열을 그리드grid입니다 Dialogue: 0,0:24:14.13,0:24:17.07,Default,,0000,0000,0000,,잠시 후에 세부적으로 설명할 때 이걸 만드는 코드를 보여드릴 게요 Dialogue: 0,0:24:17.07,0:24:17.80,Default,,0000,0000,0000,,잠시 후에 세부적으로 설명할 때 이걸 만드는 코드를 보여드릴 게요 Dialogue: 0,0:24:17.80,0:24:19.69,Default,,0000,0000,0000,,어쨌든 Conceptually개념적으론 이렇습니다 Dialogue: 0,0:24:19.69,0:24:24.11,Default,,0000,0000,0000,,자, 이제 아이템을 add할 때 레이아웃을 그리드레이아웃으로 설정해 주어야 합니다 Dialogue: 0,0:24:24.11,0:24:26.32,Default,,0000,0000,0000,,자, 이제 아이템을 add할 때 레이아웃을 그리드레이아웃으로 설정해 주어야 합니다 Dialogue: 0,0:24:26.32,0:24:31.06,Default,,0000,0000,0000,,그렇게 하면 이제 아이템, 여기서 아이템은 상호작용자를 뜻하고요 Dialogue: 0,0:24:31.06,0:24:32.03,Default,,0000,0000,0000,,그렇게 하면 이제 아이템, 여기서 아이템은 상호작용자를 뜻하고요 Dialogue: 0,0:24:32.03,0:24:37.17,Default,,0000,0000,0000,,아이템은 맨 위 왼쪽부터 차례로 추가가 됩니다 Dialogue: 0,0:24:37.17,0:24:37.69,Default,,0000,0000,0000,,아이템은 맨 위 왼쪽부터 차례로 추가가 됩니다 Dialogue: 0,0:24:37.69,0:24:42.03,Default,,0000,0000,0000,,매번 새 요소를 더할 때 마다 그 행의 맨 마지막 열에 찰 때 까지 차례로 채워지고 Dialogue: 0,0:24:42.03,0:24:45.88,Default,,0000,0000,0000,,자동으로 아래 행으로 내려갑니다\N순차적으로 채워집니다 Dialogue: 0,0:24:45.88,0:24:46.98,Default,,0000,0000,0000,,순차적으로 채워집니다 Dialogue: 0,0:24:46.98,0:24:49.66,Default,,0000,0000,0000,,그리드에 차근차근요 Dialogue: 0,0:24:49.66,0:24:52.71,Default,,0000,0000,0000,,그럼 그리드 레이아웃이 실제로 어떻게 생겼는지 보여줄게요 Dialogue: 0,0:24:52.71,0:24:56.09,Default,,0000,0000,0000,,그럼 그리드 레이아웃이 실제로 어떻게 생겼는지 보여줄게요 Dialogue: 0,0:25:00.05,0:25:04.33,Default,,0000,0000,0000,,그리드 레이아웃을 보여주는 심플한 프로그램입니다 Dialogue: 0,0:25:04.33,0:25:05.65,Default,,0000,0000,0000,,일단 init메소드에서 레이아웃을 생성해줍니다 Dialogue: 0,0:25:05.65,0:25:08.31,Default,,0000,0000,0000,,저는 원래 있던 레이아웃을 Dialogue: 0,0:25:08.31,0:25:11.92,Default,,0000,0000,0000,,다시 2,3을 인자로 가진 new GridLayout으로 만들어 주고 싶습니다 Dialogue: 0,0:25:11.92,0:25:16.42,Default,,0000,0000,0000,,다시 2,3을 인자로 가진 new GridLayout으로 만들어 주고 Dialogue: 0,0:25:16.42,0:25:19.87,Default,,0000,0000,0000,,즉 2행 3열의 그리드로요 Dialogue: 0,0:25:19.87,0:25:20.40,Default,,0000,0000,0000,,이 프로그램에서 흥미로운 점은 \N이 그리드 레이아웃 예제를 보시면요 Dialogue: 0,0:25:20.40,0:25:22.79,Default,,0000,0000,0000,,이건 콘솔 프로그램을 확장한 것이 아닙니다 Dialogue: 0,0:25:22.79,0:25:26.74,Default,,0000,0000,0000,,그래픽 프로그램을 확장한 것도 아닙니다 Dialogue: 0,0:25:26.74,0:25:29.42,Default,,0000,0000,0000,,그럼 뭘까요? 제가 한 것은 프로그램 자체를 확장한 것입니다 Dialogue: 0,0:25:29.42,0:25:31.23,Default,,0000,0000,0000,,그럼 뭘까요? 제가 한 것은 프로그램 자체를 확장한 것입니다 Dialogue: 0,0:25:31.23,0:25:35.16,Default,,0000,0000,0000,,콘솔을 생성하지 마라, G캔버스도 생성하지마 이렇게 한 거에요 Dialogue: 0,0:25:35.16,0:25:39.00,Default,,0000,0000,0000,,콘솔을 생성하지 마라, G캔버스도 생성하지마 이렇게 한 거에요 Dialogue: 0,0:25:54.95,0:25:56.60,Default,,0000,0000,0000,,제가 이걸 만든 이유는 Dialogue: 0,0:25:56.60,0:26:01.94,Default,,0000,0000,0000,,그냥 크고 뚱뚱한 버튼들이 보고 싶어서였어요 Dialogue: 0,0:26:04.72,0:26:07.97,Default,,0000,0000,0000,,보세요. 6개 버튼이 화면을 완전 차지했죠 Dialogue: 0,0:26:07.97,0:26:09.11,Default,,0000,0000,0000,,좋습니다 Dialogue: 0,0:26:09.11,0:26:11.69,Default,,0000,0000,0000,,이게 그리드 입니다. 상호작용자들이 그리드를 꽉 채웠어요 Dialogue: 0,0:26:11.69,0:26:16.03,Default,,0000,0000,0000,,이 레이아웃은 화면에서 가능한 한 많은 공간을 차지합니다 Dialogue: 0,0:26:16.03,0:26:20.16,Default,,0000,0000,0000,,더 중요한 것은 그리드 레이아웃의 각 칸을 차지한 Dialogue: 0,0:26:20.16,0:26:24.03,Default,,0000,0000,0000,,상호자용자들이 그 칸의 공간을 최대한 많이 차지한다는 것입니다 Dialogue: 0,0:26:24.74,0:26:29.40,Default,,0000,0000,0000,,그래서 이런 모양이 됩니다 이렇게 차리를 차지하죠 Dialogue: 0,0:26:29.40,0:26:34.05,Default,,0000,0000,0000,,이게 도대체 뭐지 하는 생각이 들 겁니다 Dialogue: 0,0:26:34.05,0:26:37.46,Default,,0000,0000,0000,,이게 도대체 뭐지 하는 생각이 들 겁니다 Dialogue: 0,0:26:37.46,0:26:39.66,Default,,0000,0000,0000,,이런 2인치x3인치만한 버튼 같은 거 필요 없다고요 Dialogue: 0,0:26:39.66,0:26:42.00,Default,,0000,0000,0000,,이 이유에 대해선 지금 이야기 하지 않겠어요 Dialogue: 0,0:26:42.00,0:26:43.29,Default,,0000,0000,0000,,아마 나중에요 Dialogue: 0,0:26:43.29,0:26:47.53,Default,,0000,0000,0000,,사운드 이펙트랑 비슷해요 Dialogue: 0,0:26:47.53,0:26:52.72,Default,,0000,0000,0000,,제가 창을 리사이즈 할 테니 한 번 보세요 Dialogue: 0,0:26:52.72,0:26:53.40,Default,,0000,0000,0000,,모든 버튼은 작고 귀여워요 Dialogue: 0,0:26:53.40,0:26:57.53,Default,,0000,0000,0000,,이게 바로 우리가 레이아웃 매니저를 이용하는 이유입니다 Dialogue: 0,0:26:57.53,0:26:59.27,Default,,0000,0000,0000,,레이아웃이 어떻게 나올지 알 수 있죠 Dialogue: 0,0:26:59.27,0:27:02.95,Default,,0000,0000,0000,,이걸로 사용자가 창을 리사이징할 때의 화면을 컨트롤 할 수 있습니다 Dialogue: 0,0:27:02.95,0:27:04.92,Default,,0000,0000,0000,,이걸로 사용자가 창을 리사이징할 때의 화면을 컨트롤 할 수 있습니다 Dialogue: 0,0:27:04.92,0:27:08.14,Default,,0000,0000,0000,,이러한 것들이 어떻게 놓일지는 알아야 합니다 Dialogue: 0,0:27:08.14,0:27:11.37,Default,,0000,0000,0000,,만약 필요한 것보다 더 많은 공간을 줘도 그리드 레이아웃에서는 그냥 차지해 버립니다 Dialogue: 0,0:27:11.37,0:27:15.05,Default,,0000,0000,0000,,만약 필요한 것보다 더 많은 공간을 줘도 그리드 레이아웃에서는 그냥 차지해 버립니다 Dialogue: 0,0:27:15.05,0:27:17.39,Default,,0000,0000,0000,,그리드 레이아웃은 그렇게 유용하진 않죠. 볼 만은 하죠. 책을 보면 알 거에요 Dialogue: 0,0:27:17.39,0:27:18.80,Default,,0000,0000,0000,,거기 보면 테이블 레이아웃이라는 Dialogue: 0,0:27:18.80,0:27:20.70,Default,,0000,0000,0000,,또 다른 종류의 레이아웃이 있습니다 Dialogue: 0,0:27:20.70,0:27:23.69,Default,,0000,0000,0000,,또 플로우 레이아웃이라는 것도 있죠\N이것은 이야기 하지 않을 거에요 Dialogue: 0,0:27:25.96,0:27:28.46,Default,,0000,0000,0000,,하지만 테이블 레이아웃이라는 게 있다는 거 정도 알아두세요 Dialogue: 0,0:27:28.46,0:27:34.10,Default,,0000,0000,0000,,테이블 레이아웃은 그리드 레이아웃과 거진 비슷합니다 Dialogue: 0,0:27:34.10,0:27:36.86,Default,,0000,0000,0000,,그리드 레이아웃에서처럼 행과 열을 설정해 주고 Dialogue: 0,0:27:36.86,0:27:40.23,Default,,0000,0000,0000,,거기에 차례로 상호작용자를 채워넣을 수 있습니다 Dialogue: 0,0:27:40.23,0:27:42.85,Default,,0000,0000,0000,,차이점은 한 칸에서 상호작용자가 자신이 필요한 만큼만의 공간을 차지한다는 것입니다 Dialogue: 0,0:27:42.85,0:27:46.80,Default,,0000,0000,0000,,차이점은 한 칸에서 상호작용자가 자신이 필요한 만큼만의 공간을 차지한다는 것입니다 Dialogue: 0,0:27:46.80,0:27:48.51,Default,,0000,0000,0000,,차이점은 한 칸에서 상호작용자가 자신이 필요한 만큼만의 공간을 차지한다는 것입니다 Dialogue: 0,0:27:48.51,0:27:50.16,Default,,0000,0000,0000,,무슨 뜻이냐고요 Dialogue: 0,0:27:50.16,0:27:53.61,Default,,0000,0000,0000,,즉 이 부분에 그리드 레이아웃이 아니고 Dialogue: 0,0:27:53.61,0:27:55.57,Default,,0000,0000,0000,,테이블 레이아웃을 대신 생성해서 프로그램을 돌리면요 Dialogue: 0,0:27:55.57,0:28:00.21,Default,,0000,0000,0000,,테이블 레이아웃을 대신 생성해서 프로그램을 돌리면요 Dialogue: 0,0:28:00.21,0:28:04.01,Default,,0000,0000,0000,,import할 게 더 생기네요 Dialogue: 0,0:28:04.01,0:28:06.01,Default,,0000,0000,0000,,이걸 import해줄게요 Dialogue: 0,0:28:06.01,0:28:11.87,Default,,0000,0000,0000,,이걸 import해줄게요 Dialogue: 0,0:28:30.79,0:28:33.80,Default,,0000,0000,0000,,자 나와라 테이블 레이아웃 Dialogue: 0,0:28:39.86,0:28:41.25,Default,,0000,0000,0000,,테이블 레이아웃의 더 좋을 예를 보여줄게요 Dialogue: 0,0:28:41.25,0:28:48.09,Default,,0000,0000,0000,,테이블 레이아웃의 더 좋을 예를 보여줄게요 Dialogue: 0,0:28:50.04,0:28:50.73,Default,,0000,0000,0000,,가끔은 코드가 이렇게 추해질 때가 있어요 Dialogue: 0,0:28:50.73,0:28:54.42,Default,,0000,0000,0000,,가끔은 코드가 이렇게 추해질 때가 있어요 Dialogue: 0,0:28:54.42,0:28:57.02,Default,,0000,0000,0000,,어쩔 수 없어요 Dialogue: 0,0:28:57.02,0:28:57.95,Default,,0000,0000,0000,,테이블 레이아웃? Dialogue: 0,0:28:57.95,0:29:00.07,Default,,0000,0000,0000,,나왔네요. Dialogue: 0,0:29:00.07,0:29:01.46,Default,,0000,0000,0000,,여전히 6개 버튼이 있죠 Dialogue: 0,0:29:01.46,0:29:04.66,Default,,0000,0000,0000,,윈도우도 리사이징 할 수 있고요 Dialogue: 0,0:29:04.66,0:29:07.19,Default,,0000,0000,0000,,하지만 이제 창의 사이즈가 바뀌어도 버튼 사이즈는 그대로 입니다 Dialogue: 0,0:29:07.19,0:29:10.20,Default,,0000,0000,0000,,영역을 꽉 채우지 않아요 Dialogue: 0,0:29:10.20,0:29:13.02,Default,,0000,0000,0000,,그래서 테이블 레이아웃이 그리드 레이아웃보다 아주 조금 더 유용하긴 합니다 Dialogue: 0,0:29:13.02,0:29:15.24,Default,,0000,0000,0000,,자 이제 문제는 버튼과 텍스트 필드를 연계시켜서 좀 더 멋진 걸 만들 수 있냐 이겁니다 Dialogue: 0,0:29:15.24,0:29:19.03,Default,,0000,0000,0000,,자 이제 문제는 버튼과 텍스트 필드를 연계시켜서 좀 더 멋진 걸 만들 수 있냐 이겁니다 Dialogue: 0,0:29:19.03,0:29:22.59,Default,,0000,0000,0000,,자 이제 문제는 버튼과 텍스트 필드를 연계시켜서 좀 더 멋진 걸 만들 수 있냐 이겁니다 Dialogue: 0,0:29:22.59,0:29:26.36,Default,,0000,0000,0000,,사실, 할 수 있죠 그리고 이걸 좀 더 재미지게 보여드릴게요 Dialogue: 0,0:29:26.36,0:29:29.41,Default,,0000,0000,0000,,이건 온도 전환 프로그램입니다 Dialogue: 0,0:29:29.41,0:29:31.99,Default,,0000,0000,0000,,책에 있는 거고요 코드를 따로 보여주진 않겠어요 Dialogue: 0,0:29:31.99,0:29:35.81,Default,,0000,0000,0000,,책에 있으니까. 따로 프린트물을 나눠주지 않아요 Dialogue: 0,0:29:35.81,0:29:39.33,Default,,0000,0000,0000,,기본적인 개념은 degree Fahrenheit라고 써진 라벨을 주고요 Dialogue: 0,0:29:39.33,0:29:40.53,Default,,0000,0000,0000,,또 degree Celsius라는 라벨도 만들어요 Dialogue: 0,0:29:40.53,0:29:44.30,Default,,0000,0000,0000,,그리고 이 안에 값을 주고요\NFahrenheit를 누르면 Celsiusfh 변환해 주는 겁니다 Dialogue: 0,0:29:44.30,0:29:44.68,Default,,0000,0000,0000,,Fahrenheit를 누르면 Celsiusfh 변환해 주는 겁니다 Dialogue: 0,0:29:44.68,0:29:46.24,Default,,0000,0000,0000,,Celsius에 자동으로 알맞는 값이 채워집니다 Dialogue: 0,0:29:46.24,0:29:50.54,Default,,0000,0000,0000,,32F는 0C고요 Dialogue: 0,0:29:50.54,0:29:52.82,Default,,0000,0000,0000,,또 다른 재밌는 건 굳이 버튼을 누르지 않아도 되게 하는 겁니다 Dialogue: 0,0:29:52.82,0:29:56.08,Default,,0000,0000,0000,,값을 쳐 주고 엔터를 누르면 버튼을 누른 것과 똑 같이 됩니다 Dialogue: 0,0:29:56.08,0:29:57.55,Default,,0000,0000,0000,,값을 쳐 주고 엔터를 누르면 버튼을 누른 것과 똑 같이 됩니다 Dialogue: 0,0:30:00.04,0:30:02.90,Default,,0000,0000,0000,,재밌죠. 이런 프로그램을 어떻게 만들까요 Dialogue: 0,0:30:02.90,0:30:07.22,Default,,0000,0000,0000,,첫째로 필요한 건 관리되 것들이 아닙니다 Dialogue: 0,0:30:07.22,0:30:10.50,Default,,0000,0000,0000,,다 그리드에 들어 있고요 Dialogue: 0,0:30:10.50,0:30:13.04,Default,,0000,0000,0000,,2행 3열의 테이블 레이아웃이 필요합니다 Dialogue: 0,0:30:14.39,0:30:17.36,Default,,0000,0000,0000,,여기 놓을 첫 번째 요소는 라벨입니다 Dialogue: 0,0:30:17.36,0:30:20.77,Default,,0000,0000,0000,,그리고 텍스트 필드를 넣습니다 Dialogue: 0,0:30:20.77,0:30:22.97,Default,,0000,0000,0000,,사실 특별한 텍스트필드를 넣어줄 겁니다 Dialogue: 0,0:30:22.97,0:30:25.42,Default,,0000,0000,0000,,두 개의 특성화된 텍스트 필드가 있는데요 인트필드와 더블필드라고 부르는 것이 그것입니다 Dialogue: 0,0:30:25.42,0:30:29.57,Default,,0000,0000,0000,,인티저integer 값 혹은 더블double 값을 얻는다는 보장이 있는 걸 제외하면 Dialogue: 0,0:30:29.57,0:30:32.84,Default,,0000,0000,0000,,일반 텍스트 필드와 다를 바 없습니다 Dialogue: 0,0:30:32.84,0:30:37.46,Default,,0000,0000,0000,,그럼 만약 A를 써넣고 이걸 기온으로 바꾸려고 하면 어떻게 될 지 궁금하시죠 Dialogue: 0,0:30:37.46,0:30:40.53,Default,,0000,0000,0000,,이런, 버튼을 잘못 눌렀습니다 Dialogue: 0,0:30:40.53,0:30:43.90,Default,,0000,0000,0000,,A를 기온으로 바꾸려고 해요 그럼 정수값을 넣으라는 팝업 창이 뜹니다 Dialogue: 0,0:30:43.90,0:30:45.88,Default,,0000,0000,0000,,그럼 여러분은 다시 정수 값을 제대로 넣어야 합니다 Dialogue: 0,0:30:45.88,0:30:48.72,Default,,0000,0000,0000,,그럼 여러분은 다시 정수 값을 제대로 넣어야 합니다 Dialogue: 0,0:30:48.72,0:30:51.69,Default,,0000,0000,0000,,그리고 버튼을 넣어주는데요\N어떻게든 저는 이 버튼과 텍스트 필드를 연결해 주어서 Dialogue: 0,0:30:51.69,0:30:53.83,Default,,0000,0000,0000,,같은 액션을 취하게 하고 싶어요 Dialogue: 0,0:30:53.83,0:30:56.42,Default,,0000,0000,0000,,이 코드를 보여 줄게요. 생각보다 훨씬 짧습니다 Dialogue: 0,0:30:56.42,0:30:57.56,Default,,0000,0000,0000,,이 코드를 보여 줄게요. 생각보다 훨씬 짧습니다 Dialogue: 0,0:30:57.56,0:31:01.39,Default,,0000,0000,0000,,첫째로 할 것은 레이아웃을 테이블 레이아웃으로 설정해 주는 겁니다 Dialogue: 0,0:31:01.39,0:31:05.10,Default,,0000,0000,0000,,콘솔이나 캔버스가 생성되는 것을 원치 않기 때문에 Dialogue: 0,0:31:05.10,0:31:05.86,Default,,0000,0000,0000,,프로그램을 확장한다는 것에 다시 한 번 주목해주세요 Dialogue: 0,0:31:05.86,0:31:08.30,Default,,0000,0000,0000,,저 전체 레이아웃을 명시하고 싶어요 Dialogue: 0,0:31:08.30,0:31:09.82,Default,,0000,0000,0000,,그래서 프로그램을 확장하는 겁니다 Dialogue: 0,0:31:13.54,0:31:16.38,Default,,0000,0000,0000,,TabelLayout(2,3)로 설정해 주고 그럼 요소가 차례로 들어가게 되죠 Dialogue: 0,0:31:16.38,0:31:18.76,Default,,0000,0000,0000,,TabelLayout(2,3)로 설정해 주고 그럼 요소가 차례로 들어가게 되죠 Dialogue: 0,0:31:18.76,0:31:19.57,Default,,0000,0000,0000,,TabelLayout(2,3)로 설정해 주고 그럼 요소가 차례로 들어가게 되죠 Dialogue: 0,0:31:19.57,0:31:23.06,Default,,0000,0000,0000,,다시 말하지만. 그리고 첫 번째 요소를 add해 주겠습니다 Dialogue: 0,0:31:23.06,0:31:25.85,Default,,0000,0000,0000,,. 제가 첫째로 add할 것은 Dialogue: 0,0:31:25.85,0:31:28.17,Default,,0000,0000,0000,,바로 degrees Fahrenheit를 라벨로 넣어주는 것입니다 Dialogue: 0,0:31:28.17,0:31:31.44,Default,,0000,0000,0000,,그리고 거기에 맞춰 Fahrenheit 필드를 넣어주고요 Dialogue: 0,0:31:31.44,0:31:33.81,Default,,0000,0000,0000,,그리고 거기에 맞춰 Fahrenheit 필드를 넣어주고요 Dialogue: 0,0:31:33.81,0:31:35.36,Default,,0000,0000,0000,,이걸 어떻게 만들죠? 이 위쪽에 일단 생성해 줍니다 Dialogue: 0,0:31:35.36,0:31:39.27,Default,,0000,0000,0000,,바로 인스턴스 변수로써 선언해 준거죠 Dialogue: 0,0:31:39.27,0:31:43.26,Default,,0000,0000,0000,,그리고 이건 인트필드입니다 Dialogue: 0,0:31:43.26,0:31:44.24,Default,,0000,0000,0000,,J텍스트 필드가 아니고요 Dialogue: 0,0:31:44.24,0:31:47.48,Default,,0000,0000,0000,,아까 말했듯이 정수를 써넣어주는 데 특성화된 필드입니다 Dialogue: 0,0:31:47.48,0:31:50.43,Default,,0000,0000,0000,,그것 빼고는 텍스트 필드랑 똑같고요 Dialogue: 0,0:31:50.43,0:31:54.55,Default,,0000,0000,0000,,일단 인트필드를 보여주고 싶네요 Dialogue: 0,0:31:54.55,0:31:55.98,Default,,0000,0000,0000,,자 new intfield를 해주고 이것의 초기 값을, 사이즈가 아니고요 Dialogue: 0,0:31:55.98,0:31:59.05,Default,,0000,0000,0000,,초기값은 32로 설정해 주겠습니다 Dialogue: 0,0:31:59.05,0:32:01.65,Default,,0000,0000,0000,,Fahrenheit필드를요 Dialogue: 0,0:32:01.65,0:32:03.77,Default,,0000,0000,0000,,그리고 액션 코멘드를 설정해 줄 건데요 Dialogue: 0,0:32:03.77,0:32:07.78,Default,,0000,0000,0000,,그래서 액션이 생성되면 처리해 줄 수 있게요 Dialogue: 0,0:32:07.78,0:32:08.79,Default,,0000,0000,0000,,그래서 액션이 생성되면 처리해 줄 수 있게요 Dialogue: 0,0:32:08.79,0:32:10.62,Default,,0000,0000,0000,,그래서 액션이 생성되면 처리해 줄 수 있게요 Dialogue: 0,0:32:10.62,0:32:14.08,Default,,0000,0000,0000,,이름과 연관 지어서 F -> C Dialogue: 0,0:32:14.08,0:32:17.10,Default,,0000,0000,0000,,이게 이름이 될 거고요 자 이제 이름도 설정했고요 Dialogue: 0,0:32:17.10,0:32:18.90,Default,,0000,0000,0000,,이제 액션 이벤트를 생성할 거라는 걸 알려줍시다 Dialogue: 0,0:32:18.90,0:32:21.87,Default,,0000,0000,0000,,이제 액션 이벤트를 생성할 거라는 걸 알려줍시다 Dialogue: 0,0:32:21.87,0:32:25.41,Default,,0000,0000,0000,,그리고 액션 리스너를 add해주죠 Dialogue: 0,0:32:25.41,0:32:28.26,Default,,0000,0000,0000,,전에 텍스트 필드에 했던 거랑 똑같죠. 이게 인트필드라는 거 빼고요 Dialogue: 0,0:32:28.26,0:32:30.62,Default,,0000,0000,0000,,Celsius 필드에도 이와 같은 일을 똑같이 해줍니다. 이것도 인트필드죠 Dialogue: 0,0:32:30.62,0:32:35.79,Default,,0000,0000,0000,,이건 처음엔 초기값0으로 시작하고요\N액션코맨드를 C에서 F가 되게 해놨습니다 Dialogue: 0,0:32:35.79,0:32:39.17,Default,,0000,0000,0000,,그러므로 약간 다른 이름을 주도록 하죠 Dialogue: 0,0:32:39.17,0:32:42.56,Default,,0000,0000,0000,,또한 액션이벤트를 listen하고 생성하도록 설정해 놓았습니다 Dialogue: 0,0:32:42.56,0:32:44.50,Default,,0000,0000,0000,,그런 후 그리드에 놓습니다 Dialogue: 0,0:32:44.50,0:32:47.53,Default,,0000,0000,0000,,그리드에 놓을 첫 번째 요소는 라벨입니다 Dialogue: 0,0:32:47.53,0:32:49.77,Default,,0000,0000,0000,,아까 이야기했듯이요 Dialogue: 0,0:32:49.77,0:32:52.98,Default,,0000,0000,0000,,다음 요소는 텍스트 박스고요 Dialogue: 0,0:32:52.98,0:32:54.60,Default,,0000,0000,0000,,실제로는 숫자로 된 값을 갖는 거고요 Dialogue: 0,0:32:54.60,0:32:58.29,Default,,0000,0000,0000,,그리드 첫째 줄의 마지막 요소는 버튼입니다 Dialogue: 0,0:32:58.29,0:33:02.08,Default,,0000,0000,0000,,이름은 F ->C고요 Dialogue: 0,0:33:02.08,0:33:05.74,Default,,0000,0000,0000,,여러분은 이렇게 같은 이름을 만들어 놓으면 논리적 충돌이 일어나지 않을까 궁금할 겁니다 Dialogue: 0,0:33:05.74,0:33:10.39,Default,,0000,0000,0000,,여러분은 이렇게 같은 이름을 만들어 놓으면 논리적 충돌이 일어나지 않을까 궁금할 겁니다 Dialogue: 0,0:33:10.39,0:33:13.57,Default,,0000,0000,0000,,여러분은 이렇게 같은 이름을 만들어 놓으면 논리적 충돌이 일어나지 않을까 궁금할 겁니다 Dialogue: 0,0:33:13.57,0:33:17.46,Default,,0000,0000,0000,,여러분은 이렇게 같은 이름을 만들어 놓으면 논리적 충돌이 일어나지 않을까 궁금할 겁니다 Dialogue: 0,0:33:17.46,0:33:21.67,Default,,0000,0000,0000,,네 이 두 요소는 같은 이름을 가지고요\N하지만 두 경우 다 같은 일을 해 주고 싶기 때문에 Dialogue: 0,0:33:21.67,0:33:24.94,Default,,0000,0000,0000,,별 차이가 없어요 Dialogue: 0,0:33:24.94,0:33:27.59,Default,,0000,0000,0000,,제가 원하는 건 누군가 버튼을 누르면 변환이 일어나는 것이니까요 Dialogue: 0,0:33:27.59,0:33:29.99,Default,,0000,0000,0000,,이렇게 변환이 일어나는 코드를 쓰고요 Dialogue: 0,0:33:29.99,0:33:30.90,Default,,0000,0000,0000,,이렇게 변환이 일어나는 코드를 쓰고요 Dialogue: 0,0:33:30.90,0:33:33.82,Default,,0000,0000,0000,,또 누군가 텍스트 필드에 뭔가를 쓰고 엔터를 치면 Dialogue: 0,0:33:33.82,0:33:35.62,Default,,0000,0000,0000,,버튼을 누른 것과 같은 일이 생깁니다 Dialogue: 0,0:33:35.62,0:33:38.48,Default,,0000,0000,0000,,이것은 여러분이 웹에서 많이 접했던 것과 다르지 않습니다 Dialogue: 0,0:33:38.48,0:33:41.74,Default,,0000,0000,0000,,어떠한 검색 엔진에서 창에 뭔가를 치고 클릭을 해서 Dialogue: 0,0:33:41.74,0:33:45.33,Default,,0000,0000,0000,,검색이 시작되거나 엔터를 쳐서 검색이 시작되는 거 기억나시죠\N하지만 몇이나 되는 사람이 버튼을 누릅니까 Dialogue: 0,0:33:45.33,0:33:48.49,Default,,0000,0000,0000,,없어요\N또 엔터를 치는 사람은 얼마나 되죠? Dialogue: 0,0:33:48.49,0:33:51.84,Default,,0000,0000,0000,,엔터를 치는 게 편하지 않나요? Dialogue: 0,0:33:51.84,0:33:54.27,Default,,0000,0000,0000,,어쨌든 이 프로그램에서도 그것과 같은 작업을 해주는 겁니다 Dialogue: 0,0:33:54.27,0:33:57.48,Default,,0000,0000,0000,,엔터를 치는 게 더 편할 때가 있기 때문에 Dialogue: 0,0:33:57.48,0:34:01.08,Default,,0000,0000,0000,,우리가 액션 코맨드에 추가적인 작업을 해 주는 거죠 Dialogue: 0,0:34:01.08,0:34:03.69,Default,,0000,0000,0000,,그리고 Celcius에도 똑같은 일을 해줍니다 Dialogue: 0,0:34:03.69,0:34:07.69,Default,,0000,0000,0000,,이게 전체 UI 혹은 GUI를 위한 설정입니다 Dialogue: 0,0:34:07.69,0:34:11.49,Default,,0000,0000,0000,,그리고 사용자가 버튼을 클릭하면 액션 코맨드를 가지고 옵니다 Dialogue: 0,0:34:13.02,0:34:16.65,Default,,0000,0000,0000,,그리고 액션리스너를 추가하여 Dialogue: 0,0:34:16.65,0:34:19.14,Default,,0000,0000,0000,,처리해 줍니다 Dialogue: 0,0:34:19.14,0:34:21.90,Default,,0000,0000,0000,,버튼을 클릭했을 때 넘어오는 Dialogue: 0,0:34:21.90,0:34:25.42,Default,,0000,0000,0000,,액션 코맨드가 F->C라면요 Dialogue: 0,0:34:25.42,0:34:28.38,Default,,0000,0000,0000,,Fahrenheit 필드에 뭔가 써넣고 엔터를 치거나 버튼을 클릭하면 Dialogue: 0,0:34:28.38,0:34:29.70,Default,,0000,0000,0000,,Fahrenheit 필드에 뭔가 써넣고 엔터를 치거나 버튼을 클릭하면 Dialogue: 0,0:34:29.70,0:34:32.71,Default,,0000,0000,0000,,값을 갖게 되고 Dialogue: 0,0:34:32.71,0:34:36.67,Default,,0000,0000,0000,,F필드는 인티저 필드니까 인티져 값을 반환합니다 Dialogue: 0,0:34:36.67,0:34:39.76,Default,,0000,0000,0000,,그리고 수학적인 계산을 좀 해주면 되는 데요 Dialogue: 0,0:34:39.76,0:34:41.54,Default,,0000,0000,0000,,그리고 수학적인 계산을 좀 해주면 되는 데요 Dialogue: 0,0:34:41.54,0:34:44.52,Default,,0000,0000,0000,,화씨에서 섭씨로 바꾸는 실을 몰라도 너무 걱정하지 마세요 Dialogue: 0,0:34:44.52,0:34:47.90,Default,,0000,0000,0000,,이렇게 하면 됩니다 F 곱하기 95를 하고 32를 빼주면 되요 Dialogue: 0,0:34:47.90,0:34:51.48,Default,,0000,0000,0000,,이제 알겠죠 Dialogue: 0,0:34:51.48,0:34:55.76,Default,,0000,0000,0000,,더 재미있는 것은 이제 C필드에 계산된 값이 들어가는 것입니다 Dialogue: 0,0:34:55.76,0:34:57.57,Default,,0000,0000,0000,,더 재미있는 것은 이제 C필드에 계산된 값이 들어가는 것입니다 Dialogue: 0,0:34:57.57,0:35:00.95,Default,,0000,0000,0000,,F필드에 값을 넣고 엔터를 치거나 버튼을 누르면 Dialogue: 0,0:35:00.95,0:35:02.49,Default,,0000,0000,0000,,화면의 C필드에 값이 업데이트 됩니다 Dialogue: 0,0:35:02.49,0:35:06.36,Default,,0000,0000,0000,,같은 것을 말할 때 얼마다 다양하게 표현할 수 있나요 Dialogue: 0,0:35:06.36,0:35:07.15,Default,,0000,0000,0000,,누군가 C->F라고 한다면 Dialogue: 0,0:35:07.15,0:35:10.42,Default,,0000,0000,0000,,섭씨에서 화씨로 변환하는 식이 필요할 겁니다 Dialogue: 0,0:35:10.42,0:35:14.20,Default,,0000,0000,0000,,섭씨에서 화씨로 변환하는 식이 필요할 겁니다 Dialogue: 0,0:35:14.20,0:35:15.79,Default,,0000,0000,0000,,섭씨에서 화씨로 변환하는 식이 필요할 겁니다 Dialogue: 0,0:35:15.79,0:35:17.92,Default,,0000,0000,0000,,섭씨에서 화씨로 변환하는 식이 필요할 겁니다 Dialogue: 0,0:35:17.92,0:35:20.21,Default,,0000,0000,0000,,섭씨에서 화씨로 변환하는 식이 필요할 겁니다 Dialogue: 0,0:35:24.08,0:35:27.39,Default,,0000,0000,0000,,이게 전체 프로그램입니다 이건 인스턴스 변수고요 Dialogue: 0,0:35:27.39,0:35:28.50,Default,,0000,0000,0000,,그럼 이제 기온 프로그램을 실행해 봅시다 Dialogue: 0,0:35:28.50,0:35:30.83,Default,,0000,0000,0000,,그럼 이제 기온 프로그램을 실행해 봅시다 Dialogue: 0,0:35:30.83,0:35:32.11,Default,,0000,0000,0000,,레이블이 있고 Dialogue: 0,0:35:32.11,0:35:36.14,Default,,0000,0000,0000,,초기 값이 있고 F->C버튼이 있고요 Dialogue: 0,0:35:36.14,0:35:38.67,Default,,0000,0000,0000,,그리고 100이란 값을 화씨에 넣어주면 Dialogue: 0,0:35:38.67,0:35:40.38,Default,,0000,0000,0000,,38 섭씨로 변화해 줍니다 Dialogue: 0,0:35:40.38,0:35:43.26,Default,,0000,0000,0000,,그리고 212를 화씨에 넣어주고 Dialogue: 0,0:35:43.26,0:35:44.69,Default,,0000,0000,0000,,마우스를 사용하지 않고, 엔터를 쳐도 마찬가지고 변환이 이루어지고요 Dialogue: 0,0:35:44.69,0:35:49.39,Default,,0000,0000,0000,,같습니다 Dialogue: 0,0:35:49.39,0:35:51.54,Default,,0000,0000,0000,,섭씨 온도 0. 32. 전체 프로그램을 GUI를 이용해 완성했습니다 Dialogue: 0,0:35:51.54,0:35:54.88,Default,,0000,0000,0000,,섭씨 온도 0. 32. 전체 프로그램을 GUI를 이용해 완성했습니다 Dialogue: 0,0:35:54.88,0:35:58.90,Default,,0000,0000,0000,,리사이징도 할 수 있고요. 어쨌든 계속 중앙에 위치합니다. Dialogue: 0,0:35:58.90,0:36:01.74,Default,,0000,0000,0000,,멋지지 않나요. 작게 하면 작아지진 않아요 Dialogue: 0,0:36:06.99,0:36:11.10,Default,,0000,0000,0000,,볼 수 없으니까. 질문 있나요? Dialogue: 0,0:36:11.10,0:36:12.72,Default,,0000,0000,0000,,마이크를 사용해서 말해줄래요 Dialogue: 0,0:36:12.72,0:36:18.32,Default,,0000,0000,0000,,여러분들도 마이크를 쓰게 해야겠네요 Dialogue: 0,0:36:18.87,0:36:20.66,Default,,0000,0000,0000,,그리드 각 셀의 넓이를 조정할 수 있나요 Dialogue: 0,0:36:20.66,0:36:24.94,Default,,0000,0000,0000,,그래서 테이블 레이아웃이 있죠 Dialogue: 0,0:36:24.94,0:36:26.06,Default,,0000,0000,0000,,각각의 사이즈를 특정할 수 있도록 만들 수 있어요 Dialogue: 0,0:36:26.06,0:36:29.57,Default,,0000,0000,0000,,각각의 사이즈를 특정할 수 있도록 만들 수 있어요 Dialogue: 0,0:36:29.57,0:36:31.62,Default,,0000,0000,0000,,. 여기서 하지 않았지만요. 책에는 있습니다 Dialogue: 0,0:36:31.62,0:36:36.11,Default,,0000,0000,0000,,그렇게 하고 싶다면요. 하지만 수업에서는 더 이상 깊게 들어가지 않겠습니다 Dialogue: 0,0:36:36.11,0:36:39.47,Default,,0000,0000,0000,,하지만 네 할 수 있는 방법은 있어습니다 Dialogue: 0,0:36:39.47,0:36:41.40,Default,,0000,0000,0000,,마지막으로 재밌는 걸 하나 하고 싶네요 Dialogue: 0,0:36:41.40,0:36:46.20,Default,,0000,0000,0000,,텍스트와 그래픽을 이용해서요 그리고 상호작용자도요 Dialogue: 0,0:36:46.20,0:36:47.37,Default,,0000,0000,0000,,다 이용해서요 Dialogue: 0,0:36:47.37,0:36:51.73,Default,,0000,0000,0000,,텍스트, 그래픽, 상호작용자. 옛날에 했던 거 생각이 나죠\N행맨(단어 맞추는 게임)이요 Dialogue: 0,0:36:51.73,0:36:53.88,Default,,0000,0000,0000,,행맨. 텍스트도 이용했고 그래픽도 이용했죠 Dialogue: 0,0:36:53.88,0:36:55.48,Default,,0000,0000,0000,,하지만 상호작용자는 쓰지 않았었죠. 이제 상호작용자에 대해 배웠으니 버튼 텍스트 등을 이용해서 다시 해봅시다. Dialogue: 0,0:36:55.48,0:36:58.68,Default,,0000,0000,0000,,하지만 상호작용자는 쓰지 않았었죠. 이제 상호작용자에 대해 배웠으니 버튼 텍스트 등을 이용해서 다시 해봅시다. Dialogue: 0,0:37:01.09,0:37:05.16,Default,,0000,0000,0000,,자 이제 모든 걸 합쳐서 해볼 시간이 돌아왔습니다 Dialogue: 0,0:37:07.19,0:37:09.24,Default,,0000,0000,0000,,텍스트와 그래픽에요 Dialogue: 0,0:37:09.24,0:37:11.76,Default,,0000,0000,0000,,자 이제 텍스트와 그래픽으로 할 것은 Dialogue: 0,0:37:11.76,0:37:15.81,Default,,0000,0000,0000,,프로그램에 콘솔을 만들고 그래픽 캔버스도 만들어야 되고요 Dialogue: 0,0:37:16.96,0:37:20.88,Default,,0000,0000,0000,,상호작용자도 만들어야 되요. Dialogue: 0,0:37:23.45,0:37:26.18,Default,,0000,0000,0000,,이걸 다 어떻게 할까요 Dialogue: 0,0:37:26.18,0:37:27.94,Default,,0000,0000,0000,,첫째로 할 것은 작은 텍스트를 칠판에 써주고요 Dialogue: 0,0:37:27.94,0:37:31.43,Default,,0000,0000,0000,,첫째로 할 것은 작은 텍스트를 칠판에 써주고요 Dialogue: 0,0:38:07.15,0:38:09.89,Default,,0000,0000,0000,,두 가지 멋진 맛이 합해지면 더 맛있어져요 Dialogue: 0,0:38:09.89,0:38:13.50,Default,,0000,0000,0000,,어떤걸 초콜렛으로 하고 어떤걸 땅콩 버터로 할 지만 정해주면 되요 Dialogue: 0,0:38:13.50,0:38:17.20,Default,,0000,0000,0000,,하지만 텍스트와 그래픽의 조합이니, 행맨이 됩니다. 상호작용자도 있고요 Dialogue: 0,0:38:21.17,0:38:25.09,Default,,0000,0000,0000,,우리가 할 것은 콘솔 창을 확장하는 것입니다 Dialogue: 0,0:38:25.09,0:38:29.06,Default,,0000,0000,0000,,우리가 할 것은 콘솔 창을 확장하는 것입니다 Dialogue: 0,0:38:29.06,0:38:30.22,Default,,0000,0000,0000,,우리가 여전히 (우리의 친구인)콘솔을 필요로 하기 때문입니다 Dialogue: 0,0:38:32.52,0:38:36.91,Default,,0000,0000,0000,,우리가 콘솔 프로그램을 사용할 때, 보더라는 게 있죠 Dialogue: 0,0:38:36.91,0:38:37.93,Default,,0000,0000,0000,,우리가 콘솔 프로그램을 사용할 때, 보더라는 게 있죠 Dialogue: 0,0:38:37.93,0:38:42.44,Default,,0000,0000,0000,,이것은 우리에게 동서남북 영역을 제공하고요 Dialogue: 0,0:38:42.44,0:38:47.51,Default,,0000,0000,0000,,이 영역들에 우리는 상호작용자를 올릴 수 있죠 Dialogue: 0,0:38:47.51,0:38:48.55,Default,,0000,0000,0000,,이 영역들에 우리는 상호작용자를 올릴 수 있죠 Dialogue: 0,0:38:48.55,0:38:51.99,Default,,0000,0000,0000,,흥미로운 것은 중앙 영역입니다 Dialogue: 0,0:38:51.99,0:38:54.90,Default,,0000,0000,0000,,전에 말했던 것처럼 콘솔 프로그램은 중앙 영역을 채우고요 Dialogue: 0,0:38:54.90,0:38:58.62,Default,,0000,0000,0000,,전에 말했던 것처럼 콘솔 프로그램은 중앙 영역을 채우고요 Dialogue: 0,0:38:58.62,0:38:59.80,Default,,0000,0000,0000,,거기에 텍스트를 쓸 수 가 있죠 그게 할 수 있는 전부이기도 하고요 Dialogue: 0,0:38:59.80,0:39:03.75,Default,,0000,0000,0000,,우리가 할 것은 콘솔 프로그램에게 중앙 영역을 주고 Dialogue: 0,0:39:03.75,0:39:07.64,Default,,0000,0000,0000,,거기에 다른 레이아웃을 줘서 텍스트나 Dialogue: 0,0:39:07.64,0:39:08.48,Default,,0000,0000,0000,,그래픽을 채워넣을 수 있게 만드는 것입니다 Dialogue: 0,0:39:08.48,0:39:11.49,Default,,0000,0000,0000,,그래픽을 채워넣을 수 있게 만드는 것입니다 Dialogue: 0,0:39:11.49,0:39:12.70,Default,,0000,0000,0000,,음 Dialogue: 0,0:39:12.70,0:39:14.69,Default,,0000,0000,0000,,이제 제가 뭘 할거냐고요 Dialogue: 0,0:39:14.69,0:39:19.17,Default,,0000,0000,0000,,첫째로 할 것은 레이아웃에 대해 고려하는 것입니다 Dialogue: 0,0:39:19.17,0:39:22.23,Default,,0000,0000,0000,,레이아웃은 이 중앙에 적용될 것이고요 Dialogue: 0,0:39:22.23,0:39:26.05,Default,,0000,0000,0000,,기억해야 할 것은 콘솔 프로그램입니다 Dialogue: 0,0:39:26.05,0:39:28.51,Default,,0000,0000,0000,,콘솔 프로그램은 영역을 꽉 채우고요 Dialogue: 0,0:39:28.51,0:39:34.13,Default,,0000,0000,0000,,이제 콘솔에 첫 요소를 추가해 주어야 합니다 Dialogue: 0,0:39:34.13,0:39:37.58,Default,,0000,0000,0000,,이것은 즉 레이아웃을 어떻게 정하든 이 안에 적용된다는 것입니다 Dialogue: 0,0:39:37.58,0:39:41.94,Default,,0000,0000,0000,,한 줄에 3개의 요소가 들어가는 그리드를 만든다고 하죠 Dialogue: 0,0:39:41.94,0:39:44.04,Default,,0000,0000,0000,,첫번째는 콘솔이 될 거고요 Dialogue: 0,0:39:44.04,0:39:45.45,Default,,0000,0000,0000,,첫번째는 콘솔이 될 거고요 Dialogue: 0,0:39:45.45,0:39:48.54,Default,,0000,0000,0000,,그리고 제어권이 없을 겁니다 \N그게 콘솔 프로그램이 원래 그러니까요 Dialogue: 0,0:39:48.54,0:39:51.77,Default,,0000,0000,0000,,여러분이 콘솔 프로그램을 확장하고 만들 레이아웃이 뭐던 간에 Dialogue: 0,0:39:51.77,0:39:55.39,Default,,0000,0000,0000,,첫 번째 요소는 텍스트입니다 Dialogue: 0,0:39:57.03,0:39:58.76,Default,,0000,0000,0000,,그럼 여러분은 궁금하겠죠 Dialogue: 0,0:39:58.76,0:40:01.82,Default,,0000,0000,0000,,. 아까 그래픽에 대해서도 언급했는데 콘솔 프로그램을 쓰면 그래픽은 어쩌냐고요 Dialogue: 0,0:40:01.82,0:40:04.09,Default,,0000,0000,0000,,. 아까 그래픽에 대해서도 언급했는데 콘솔 프로그램을 쓰면 그래픽은 어쩌냐고요 Dialogue: 0,0:40:04.09,0:40:08.08,Default,,0000,0000,0000,,우리는 행맨에 약간의 트릭을 사용할 겁니다 Dialogue: 0,0:40:08.08,0:40:08.75,Default,,0000,0000,0000,,G캔버스라는 게 있었잖아요 Dialogue: 0,0:40:08.75,0:40:13.27,Default,,0000,0000,0000,,이 G캔버스를 생성할 겁니다. 그리고 레이아웃을 줄거에요 Dialogue: 0,0:40:13.27,0:40:16.36,Default,,0000,0000,0000,,이 G캔버스를 생성할 겁니다. 그리고 레이아웃을 줄거에요 Dialogue: 0,0:40:16.36,0:40:20.79,Default,,0000,0000,0000,,그러니까 일단 콘솔 프로그램을 생성하고 레이아웃을 생성해 주고요 Dialogue: 0,0:40:20.79,0:40:23.33,Default,,0000,0000,0000,,그러니까 일단 콘솔 프로그램을 생성하고 레이아웃을 생성해 주고요 Dialogue: 0,0:40:23.33,0:40:29.60,Default,,0000,0000,0000,,예를 들어 인자가 1,3인 그리드 레이아웃을 만들죠 Dialogue: 0,0:40:29.60,0:40:30.79,Default,,0000,0000,0000,,이렇게 생길 거고요 Dialogue: 0,0:40:32.23,0:40:36.02,Default,,0000,0000,0000,,첫번째 칸은 이미 콘솔이 차지했고요 Dialogue: 0,0:40:36.02,0:40:37.90,Default,,0000,0000,0000,,G캔버스를 생성해서 두 번째 칸에 올려줍니다 Dialogue: 0,0:40:37.90,0:40:41.31,Default,,0000,0000,0000,,G캔버스를 생성해서 두 번째 칸에 올려줍니다 Dialogue: 0,0:40:41.31,0:40:44.28,Default,,0000,0000,0000,,그리고 또 G캔버스를 하나 더 생성해서 여기에 추가시켜 줍니다 Dialogue: 0,0:40:44.28,0:40:48.27,Default,,0000,0000,0000,,그리고 또 G캔버스를 하나 더 생성해서 여기에 추가시켜 줍니다 Dialogue: 0,0:40:48.27,0:40:54.08,Default,,0000,0000,0000,,이게 G캔버스 도스입니다 Dialogue: 0,0:40:55.71,0:40:59.82,Default,,0000,0000,0000,,그러므로 한 개의 콘솔과 두 개의 G캔버스가 생겼습니다 Dialogue: 0,0:40:59.82,0:41:02.78,Default,,0000,0000,0000,,추가로, 화면 주변에 상호작용작들을 add해 줄 수 있고요 Dialogue: 0,0:41:02.78,0:41:06.47,Default,,0000,0000,0000,,이 시점에서 여러분은 충격과 공포와 환희 등에 빠져야 합니다 Dialogue: 0,0:41:06.47,0:41:07.10,Default,,0000,0000,0000,,이 시점에서 여러분은 충격과 공포와 환희 등에 빠져야 합니다 Dialogue: 0,0:41:07.10,0:41:10.55,Default,,0000,0000,0000,,이제 5분만에 한 거에요 그것도 엄청 쉽게. Dialogue: 0,0:41:11.41,0:41:18.41,Default,,0000,0000,0000,,자 이게 그 모습입니다 Dialogue: 0,0:41:18.94,0:41:21.63,Default,,0000,0000,0000,,텍스트 그리고 그래픽. 콘솔 프로그램을 확장시켰고요 Dialogue: 0,0:41:21.63,0:41:23.77,Default,,0000,0000,0000,,그리고 init메소드로 레이아웃을 설정하는 데요 Dialogue: 0,0:41:26.36,0:41:30.72,Default,,0000,0000,0000,,저는 그리드 레이아웃으로 하고 싶어요 Dialogue: 0,0:41:30.72,0:41:33.04,Default,,0000,0000,0000,,기억하세요 그리드 레이아웃 Dialogue: 0,0:41:33.04,0:41:34.95,Default,,0000,0000,0000,,요소들이 공간을 준 만큼 차지해 버려요 Dialogue: 0,0:41:34.95,0:41:38.92,Default,,0000,0000,0000,,그게 이번 경우에는 제가 바라는 바고요 Dialogue: 0,0:41:38.92,0:41:42.27,Default,,0000,0000,0000,,그래서 그리드를 쓰는 거고요. 1행 3열의 그리드를 만들 거에요 Dialogue: 0,0:41:42.27,0:41:46.05,Default,,0000,0000,0000,,그리고 1/3에는 콘솔을 넣을 거고요 Dialogue: 0,0:41:46.05,0:41:49.97,Default,,0000,0000,0000,,나머지 두 개에는 캔버스르 넣는 데 하나는 최대한 크게 확장할 거에요 Dialogue: 0,0:41:49.97,0:41:52.02,Default,,0000,0000,0000,,나머지 두 개에는 캔버스르 넣는 데 하나는 최대한 크게 확장할 거에요 Dialogue: 0,0:41:52.02,0:41:54.14,Default,,0000,0000,0000,,그럼 캔버스 두 개를 생성해야겠죠 Dialogue: 0,0:41:54.14,0:41:57.82,Default,,0000,0000,0000,,RightCanvas와 LeftCanvas라고 부를게요 Dialogue: 0,0:41:57.82,0:42:01.48,Default,,0000,0000,0000,,RightCanvas와 LeftCanvas라고 부를게요 Dialogue: 0,0:42:01.48,0:42:05.69,Default,,0000,0000,0000,,그리고 재미를 위해 텍스트 필드도 하나 넣어주고요 Dialogue: 0,0:42:05.69,0:42:08.47,Default,,0000,0000,0000,,이게 상호작용자죠 Dialogue: 0,0:42:08.47,0:42:09.54,Default,,0000,0000,0000,,제가 원하는 프로그램은 상호작용자, 텍스트, 그래픽 세 가지요소가 들어가는 거였으니까 Dialogue: 0,0:42:09.54,0:42:10.82,Default,,0000,0000,0000,,제가 원하는 프로그램은 상호작용자, 텍스트, 그래픽 세 가지요소가 들어가는 거였으니까 Dialogue: 0,0:42:10.82,0:42:15.92,Default,,0000,0000,0000,,RightCanvas와 LeftCanvas라고 부를게요 Dialogue: 0,0:42:15.92,0:42:16.100,Default,,0000,0000,0000,,이제 뭘 할 거냐고요 Dialogue: 0,0:42:16.100,0:42:20.62,Default,,0000,0000,0000,,그리고 재미를 위해 텍스트 필드도 하나 넣어주고요 Dialogue: 0,0:42:20.62,0:42:24.42,Default,,0000,0000,0000,,일단 LeftCanvas에 new Canvas를 해줍니다 Dialogue: 0,0:42:24.42,0:42:27.74,Default,,0000,0000,0000,,그리고 add를 할 때 myLayout에 해주고요 Dialogue: 0,0:42:27.74,0:42:29.65,Default,,0000,0000,0000,,캔버스 전체를 더할 때는 그리드의 첫번째에 이미 콘솔을 넣기로 했으니 두번째에 넣어줍니다 Dialogue: 0,0:42:29.65,0:42:31.74,Default,,0000,0000,0000,,캔버스 전체를 더할 때는 그리드의 첫번째에 이미 콘솔을 넣기로 했으니 두번째에 넣어줍니다 Dialogue: 0,0:42:31.74,0:42:33.24,Default,,0000,0000,0000,,캔버스를 add했잖아요. 두번째 요소로 Dialogue: 0,0:42:33.24,0:42:36.93,Default,,0000,0000,0000,,그것을 다시 오른쪽 캔버스에 똑같이 해줍니다 Dialogue: 0,0:42:36.93,0:42:41.17,Default,,0000,0000,0000,,세번째 요소로 들어가는 오른쪽 캔버스에요 Dialogue: 0,0:42:41.17,0:42:42.95,Default,,0000,0000,0000,,그러므로 두 개의 큰 캔버스가 그리드의 두번째와 세번째에 있습니다 Dialogue: 0,0:42:42.95,0:42:44.68,Default,,0000,0000,0000,,이제 콘솔, 캔버스, 캔버스 이런 식이죠 Dialogue: 0,0:42:44.68,0:42:48.78,Default,,0000,0000,0000,,그럼 이제 상호작용자들을 add하겠어요 Dialogue: 0,0:42:48.78,0:42:53.06,Default,,0000,0000,0000,,일단 텍스트 필드를 만들거에요. new JTextField를 해줘야겠죠 Dialogue: 0,0:42:53.06,0:42:56.54,Default,,0000,0000,0000,,그리고 private인 인스턴스 변수로 선언할 거고요 Dialogue: 0,0:42:56.54,0:42:58.28,Default,,0000,0000,0000,,방금 보여줬고요. 최대 사이즈는 10으로 할 거에요 Dialogue: 0,0:42:58.28,0:43:02.34,Default,,0000,0000,0000,,라벨을 add하고요. 라벨은 some text라고 부를게요 Dialogue: 0,0:43:02.34,0:43:04.03,Default,,0000,0000,0000,,그리고 서쪽영역에 놓고요 Dialogue: 0,0:43:05.39,0:43:08.95,Default,,0000,0000,0000,,이 시점에서 이제 여러분이 잘 알고 사랑하는 액션리스너를 add해 줍니다 Dialogue: 0,0:43:08.95,0:43:13.04,Default,,0000,0000,0000,,이 시점에서 이제 여러분이 잘 알고 사랑하는 액션리스너를 add해 줍니다 Dialogue: 0,0:43:13.04,0:43:16.40,Default,,0000,0000,0000,,매우 흔히 일어나는 일인데요. 사람들은 텍스트 필드를 생성하고 프로그램에서 뭔가 칩니다 Dialogue: 0,0:43:16.40,0:43:19.33,Default,,0000,0000,0000,,그러고 이제 이게 안되요. 그럼 멘붕이 옵니다. Dialogue: 0,0:43:19.33,0:43:21.04,Default,,0000,0000,0000,,그러고 이제 이게 안되요. 그럼 멘붕이 옵니다. Dialogue: 0,0:43:21.04,0:43:24.79,Default,,0000,0000,0000,,머리를 쥐어 뜯으며 고민해요. 바로 액션 리스너를 add해 주는 걸 까먹은 겁니다 Dialogue: 0,0:43:24.79,0:43:25.96,Default,,0000,0000,0000,,머리를 쥐어 뜯으며 고민해요. 바로 액션 리스너를 add해 주는 걸 까먹은 겁니다 Dialogue: 0,0:43:25.96,0:43:27.85,Default,,0000,0000,0000,,머리를 쥐어 뜯으며 고민해요. 바로 액션 리스너를 add해 주는 걸 까먹은 겁니다 Dialogue: 0,0:43:27.85,0:43:31.45,Default,,0000,0000,0000,,알고 배우고 실천하고 사랑하세요 Dialogue: 0,0:43:31.45,0:43:34.89,Default,,0000,0000,0000,,그리고 버튼도 두 개 add할 건데요 Dialogue: 0,0:43:34.89,0:43:37.72,Default,,0000,0000,0000,,그럼 상호작용자는 텍스트 필드하고 버튼 두 개가 더 있는거죠 Dialogue: 0,0:43:37.72,0:43:40.29,Default,,0000,0000,0000,,버튼 하나는 왼쪽 캔버스에 그림을 그릴 거고\N다른 하나는 오른쪽에 그림을 그리게 만들 거에요 Dialogue: 0,0:43:40.29,0:43:42.13,Default,,0000,0000,0000,,그럼 나머지를 마저 만들기 전에 이게 어떻게 생겼나 보여드리죠 Dialogue: 0,0:43:42.13,0:43:46.33,Default,,0000,0000,0000,,텍스트와 그래픽까지 만들었죠 Dialogue: 0,0:43:46.33,0:43:48.48,Default,,0000,0000,0000,,콘솔을 만들었고 Dialogue: 0,0:43:48.48,0:43:50.18,Default,,0000,0000,0000,,콘솔을 만들었고 Dialogue: 0,0:43:50.18,0:43:54.77,Default,,0000,0000,0000,,현재 경계선은 없지만 두 개의 캔버스가 있습니다 Dialogue: 0,0:43:54.77,0:43:58.33,Default,,0000,0000,0000,,두 개의 다른 캔버스 창이 여기 있어요 Dialogue: 0,0:43:58.33,0:44:00.100,Default,,0000,0000,0000,,텍스트가 있고요. hi라고 칠 수 있죠 Dialogue: 0,0:44:00.100,0:44:02.73,Default,,0000,0000,0000,,hi. 재밌죠? Dialogue: 0,0:44:02.73,0:44:03.99,Default,,0000,0000,0000,,hi. 재밌죠? Dialogue: 0,0:44:03.99,0:44:07.49,Default,,0000,0000,0000,,Draw left는 외족 창에 그림을 그리게 Dialogue: 0,0:44:07.49,0:44:08.44,Default,,0000,0000,0000,,사각형을 그릴건데 좀 있다 보여드리기로 하고 Dialogue: 0,0:44:08.44,0:44:09.63,Default,,0000,0000,0000,,사각형을 그릴건데 좀 있다 보여드리기로 하고 Dialogue: 0,0:44:09.63,0:44:12.32,Default,,0000,0000,0000,,Draw right는 오른쪽 창에 그림을 그릴 수 있게 합니다. Dialogue: 0,0:44:12.32,0:44:15.89,Default,,0000,0000,0000,,이걸 어떻게 할까요? 나머지 프로그램을 만들면서 알아봅시다 Dialogue: 0,0:44:15.89,0:44:18.59,Default,,0000,0000,0000,,일단 모든 게 세팅되었어요. 콘솔, 캔버스 두 개. Dialogue: 0,0:44:18.59,0:44:20.80,Default,,0000,0000,0000,,일단 모든 게 세팅되었어요. 콘솔, 캔버스 두 개. Dialogue: 0,0:44:20.80,0:44:24.45,Default,,0000,0000,0000,,여기서 액션이 일어납니다\NactionPerformed가 호출되면 누군가가 상호작용자를 이용해 상호작용한 거죠 Dialogue: 0,0:44:24.45,0:44:27.42,Default,,0000,0000,0000,,actionPerformed가 호출되면 누군가가 상호작용자를 이용해 상호작용한 거죠 Dialogue: 0,0:44:27.42,0:44:30.71,Default,,0000,0000,0000,,하나의 상호작용자를 가지고 상호작용을 하는 것 외에는\N이 프로그램에서 할 수 있는 게 없습니다 Dialogue: 0,0:44:30.71,0:44:34.69,Default,,0000,0000,0000,,일단 텍스트 필드를 체크하고요 Dialogue: 0,0:44:34.69,0:44:38.60,Default,,0000,0000,0000,,텍스트 필드와의 상호작용이라면 Dialogue: 0,0:44:38.60,0:44:43.02,Default,,0000,0000,0000,,그럼상호작용은 근원지가 텍스트필드 였다면 텍스트 필드에 뭔가를 친 건 이제 콘솔에 나타날 겁니다 Dialogue: 0,0:44:43.02,0:44:46.65,Default,,0000,0000,0000,,. println을 하면 항상 콘솔에 나타나게 되어있으니까요 Dialogue: 0,0:44:46.65,0:44:49.57,Default,,0000,0000,0000,,여기선 아직 별 재미가 없죠 Dialogue: 0,0:44:49.57,0:44:52.67,Default,,0000,0000,0000,,양자택일적으로 텍스트필드에 타이핑을 하지 않았다면 Dialogue: 0,0:44:52.67,0:44:56.39,Default,,0000,0000,0000,,버튼을 클릭한 것인데. 이걸 getSource와 getActionCommand로 처리할 수 있습니다 Dialogue: 0,0:44:56.39,0:44:59.51,Default,,0000,0000,0000,,버튼을 클릭한 것인데. 이걸 getSource와 getActionCommand로 처리할 수 있습니다 Dialogue: 0,0:44:59.51,0:45:02.85,Default,,0000,0000,0000,,이걸 여러분이 원하는 대로 섞어 사용하면 됩니다 Dialogue: 0,0:45:02.85,0:45:06.03,Default,,0000,0000,0000,,코맨드(명령)가 뭐였냐 이러면 getActionCommand를 쓰면 되는데 Dialogue: 0,0:45:06.03,0:45:10.35,Default,,0000,0000,0000,,그 코맨드가 Draw left였다면 이제 색이 채워진 사각형이 새로 생성되겠죠. 보여드리죠 Dialogue: 0,0:45:10.35,0:45:13.52,Default,,0000,0000,0000,,새로운 사각형을 만듭니다 Dialogue: 0,0:45:14.42,0:45:17.57,Default,,0000,0000,0000,,간단하죠. 50x20의 크기로요. Dialogue: 0,0:45:17.57,0:45:20.04,Default,,0000,0000,0000,,상수여야 해요 Dialogue: 0,0:45:21.20,0:45:22.93,Default,,0000,0000,0000,,그리고 filled(채움)으로 설정해 주고 Dialogue: 0,0:45:22.93,0:45:26.64,Default,,0000,0000,0000,,사각형을 반환합니다. 그냥 색을 채운 사각형을 만들어서 옛다 가져라 이런 겁니다 Dialogue: 0,0:45:26.64,0:45:27.68,Default,,0000,0000,0000,,사각형을 반환합니다. 그냥 색을 채운 사각형을 만들어서 옛다 가져라 이런 겁니다 Dialogue: 0,0:45:27.68,0:45:31.52,Default,,0000,0000,0000,,그리고 이 사각형을 왼쪽 캔버스에 더해 줘야 하는데 Dialogue: 0,0:45:31.52,0:45:33.78,Default,,0000,0000,0000,,그리고 이 사각형을 왼쪽 캔버스에 더해 줘야 하는데 Dialogue: 0,0:45:33.78,0:45:38.03,Default,,0000,0000,0000,,그냥 그래픽 프로그램이 아니니까요 Dialogue: 0,0:45:38.03,0:45:42.12,Default,,0000,0000,0000,,그냥 add하란다고 add해 지지 않아요 Dialogue: 0,0:45:42.12,0:45:47.40,Default,,0000,0000,0000,,이걸 더해 주려면 어떤 캔버스에 더할지 명확히 해주어야 합니다 Dialogue: 0,0:45:47.40,0:45:51.90,Default,,0000,0000,0000,,왼쪽 캔버스에 더할 거니까 LetfCanvas 이걸 더해라. 이렇게 하고요 Dialogue: 0,0:45:51.90,0:45:54.64,Default,,0000,0000,0000,,x좌표 20 y좌표 leftY에 더해줍니다 Dialogue: 0,0:45:54.64,0:45:57.95,Default,,0000,0000,0000,,Left Y는 값이 10에서 시작하고요 Dialogue: 0,0:45:57.95,0:46:02.69,Default,,0000,0000,0000,,매번 뭔가를 더할 때 마다 원래 Y에서 자리가 아래로 내려갑니다 Dialogue: 0,0:46:02.69,0:46:06.77,Default,,0000,0000,0000,,매번 뭔가를 더할 때 마다 원래 Y에서 자리가 아래로 내려갑니다 Dialogue: 0,0:46:06.77,0:46:10.07,Default,,0000,0000,0000,,그럼 다음 사각형은 아래쪽에 그려지는 거죠 Dialogue: 0,0:46:10.07,0:46:12.48,Default,,0000,0000,0000,,그럼 다음 사각형은 아래쪽에 그려지는 거죠 Dialogue: 0,0:46:12.48,0:46:15.51,Default,,0000,0000,0000,,이걸 똑같이 오른쪽에도 해줍니다 Dialogue: 0,0:46:15.51,0:46:19.32,Default,,0000,0000,0000,,일단 색을 채운 사각형을 생성한 다음에요 Dialogue: 0,0:46:19.32,0:46:23.06,Default,,0000,0000,0000,,분리된 right Y좌표가 있고요 Dialogue: 0,0:46:23.06,0:46:23.95,Default,,0000,0000,0000,,계속해서 이 밑으로 그려집니다 Dialogue: 0,0:46:23.95,0:46:26.18,Default,,0000,0000,0000,,오른쪽 캔버스의 경우에는요 Dialogue: 0,0:46:26.18,0:46:27.90,Default,,0000,0000,0000,,이 차이죠 Dialogue: 0,0:46:27.90,0:46:30.30,Default,,0000,0000,0000,,그러므로 프로그램을 실행하면 Dialogue: 0,0:46:30.30,0:46:31.81,Default,,0000,0000,0000,,텍스트가 있고요 Dialogue: 0,0:46:31.81,0:46:34.40,Default,,0000,0000,0000,,다시 great 라고 쓰고 Dialogue: 0,0:46:34.40,0:46:35.87,Default,,0000,0000,0000,,엔터를 누르면 Dialogue: 0,0:46:35.87,0:46:39.93,Default,,0000,0000,0000,,이벤트가 발생합니다\N스크린에 println해서 출력을 해주고 Dialogue: 0,0:46:39.93,0:46:43.21,Default,,0000,0000,0000,,여기 이벤트를 생성하고요 Dialogue: 0,0:46:43.21,0:46:46.95,Default,,0000,0000,0000,,근원지는 텍스트 필드였고 화면에 텍스트를 출력합니다 Dialogue: 0,0:46:46.95,0:46:50.07,Default,,0000,0000,0000,,버튼 중 하나를 클릭하면 Dialogue: 0,0:46:50.07,0:46:53.42,Default,,0000,0000,0000,,예를 들어 Draw left를요\N그럼 사각형을 그려주고요 leftY좌표에서 시작하고요 Dialogue: 0,0:46:53.42,0:46:55.80,Default,,0000,0000,0000,,다음 번에 Draw left를 계속 누르면 Dialogue: 0,0:46:55.80,0:47:00.76,Default,,0000,0000,0000,,아래쪽으로 아래쪽으로 계속해서 똑같이 사각형을 그려줍니다. Dialogue: 0,0:47:00.76,0:47:03.32,Default,,0000,0000,0000,,두 캔버스다 x좌표는 20이라는 것에 주목해 주세요 Dialogue: 0,0:47:03.32,0:47:08.02,Default,,0000,0000,0000,,두 캔버스다 x좌표는 20이라는 것에 주목해 주세요 Dialogue: 0,0:47:08.02,0:47:10.91,Default,,0000,0000,0000,,그런데도 서로 다른 장소에 그림이 그려지는 이유는 Dialogue: 0,0:47:10.91,0:47:14.64,Default,,0000,0000,0000,,여기에 보이지 않는 경계선이 있기 때문입니다 Dialogue: 0,0:47:14.64,0:47:17.30,Default,,0000,0000,0000,,이렇게 해서 Dialogue: 0,0:47:17.30,0:47:22.27,Default,,0000,0000,0000,,텍스트, 그래픽, 상호작용자를 모두 포함한 프로그램을 만들어 보았습니다. \N질문 있나요? Dialogue: 0,0:47:22.27,0:47:23.69,Default,,0000,0000,0000,,좋아요, 그럼 수요일날 봅시다