[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:01.25,0:00:03.31,Default,,0000,0000,0000,,객체에 대해 뭘 할 수 있는지 더 알아봅시다 Dialogue: 0,0:00:04.11,0:00:08.00,Default,,0000,0000,0000,,저번 함수에 대해 배울 때 사용했던 프로그램을 가지고 왔어요 Dialogue: 0,0:00:08.68,0:00:14.27,Default,,0000,0000,0000,,이 프로그램은 XY 좌표를 입력받아서 그리는\NdrawWinston 함수를 갖고 있어요 Dialogue: 0,0:00:14.27,0:00:21.10,Default,,0000,0000,0000,,그리고 밑에서는 drawWinston이 네 번 호출되었네요\N각각 서로 다른 XY좌표를 가지고요 Dialogue: 0,0:00:21.89,0:00:28.01,Default,,0000,0000,0000,,이제 뭘 할지 알겠죠?\N네번의 drawWinston을 불렀으니깐 Dialogue: 0,0:00:28.79,0:00:39.19,Default,,0000,0000,0000,,루프를 사용해서 한 문장으로 줄이면 조금 더 편리해 질 것 같아요\N루프마다 XY 좌표만 바꾸어서 말이지요 Dialogue: 0,0:00:39.19,0:00:47.04,Default,,0000,0000,0000,,그러기 위해 이 XY 좌표를 배열에 저장할 방법을 생각해야 돼요 Dialogue: 0,0:00:47.04,0:00:55.82,Default,,0000,0000,0000,,2개의 값이 있으니까 2개의 배열을 준비해야 겠죠?\N하나는 X좌표 하나는 Y좌표를 위해서요 Dialogue: 0,0:00:55.82,0:01:08.65,Default,,0000,0000,0000,,X좌표는 {99,294,101,294}이고\NY좌표는 {117,117,316,316}입니다 Dialogue: 0,0:01:08.65,0:01:18.40,Default,,0000,0000,0000,,이것들로 for - 루프를 돌리면\N{\i1}var i=0; i{\i0} Dialogue: 0,0:01:18.40,0:01:29.73,Default,,0000,0000,0000,,이제 xPositions 안에 있는 원소들에 접근할 수 있겠죠?\N{\i1}drawWinston(xPositions[i], yPositions[i]);{\i0} Dialogue: 0,0:01:29.73,0:01:33.93,Default,,0000,0000,0000,,앞의 코드를 지우고 실행시켜보면 Dialogue: 0,0:01:33.93,0:01:36.20,Default,,0000,0000,0000,,잘 되는군요 Dialogue: 0,0:01:36.20,0:01:44.64,Default,,0000,0000,0000,,한 라인의 코드로 {\i1}drawWinston{\i0}에\N{\i1}Positions{\i0} 배열의 모든 원소를 대입시켰어요 Dialogue: 0,0:01:44.64,0:01:57.89,Default,,0000,0000,0000,,이제 각각의 배열에 (10,1) 그리고 (1,1)\N그리고 (100,1)을 넣어 볼게요 Dialogue: 0,0:01:57.89,0:02:20.93,Default,,0000,0000,0000,,약간 더러워 보이고요 뭐가 X인지 Y인지 보기도 힘드네요\N알아보려면 이렇게 띄어쓰기 해서 줄을 맞춰줘야 겠네요 Dialogue: 0,0:02:22.41,0:02:26.73,Default,,0000,0000,0000,,그래서 위치를 저장하는 다른 방법을 알아봐야 겠어요 Dialogue: 0,0:02:26.73,0:02:30.79,Default,,0000,0000,0000,,그들을 이제 객체로서 저장하는 거예요 Dialogue: 0,0:02:30.79,0:02:44.06,Default,,0000,0000,0000,,생각해보세요 X와 Y 쌍을 하나의 객체로 생각한다면\NXY 좌표가 저장된 객체 배열을 만들 수 있을 거예요 Dialogue: 0,0:02:44.06,0:02:45.76,Default,,0000,0000,0000,,이렇게 해요 Dialogue: 0,0:02:45.76,0:02:51.40,Default,,0000,0000,0000,,새로운 배열 {\i1}var positions{\i0}는 Dialogue: 0,0:02:51.40,0:02:55.85,Default,,0000,0000,0000,,각각의 원소는 숫자가 아닌 객체여야 하므로 Dialogue: 0,0:02:55.85,0:03:04.69,Default,,0000,0000,0000,,중괄호를 이용해 {\i1}{x:99, y:117}{\i0}라고 써줍시다 Dialogue: 0,0:03:04.69,0:03:13.39,Default,,0000,0000,0000,,이제 한 개의 좌표를 입력했고요, 다른 것도 넣을 게요 Dialogue: 0,0:03:13.39,0:03:30.90,Default,,0000,0000,0000,,{\i1}{x:294, y:117}, {x:101, y:316}, {x:294, y:316}{\i0} Dialogue: 0,0:03:30.90,0:03:37.52,Default,,0000,0000,0000,,이제 우리는 객체 배열을 갖게 되었으며\N각각의 객체는 XY 좌표 속성을 갖고 있어요 Dialogue: 0,0:03:37.52,0:03:44.23,Default,,0000,0000,0000,,밑에 for 루프 조건에 {\i1}positions.length{\i0}로 바꿔주고요 Dialogue: 0,0:03:44.23,0:03:48.99,Default,,0000,0000,0000,,객체로 바꿔줍니다 Dialogue: 0,0:03:48.99,0:03:58.85,Default,,0000,0000,0000,,이러면 객체일 뿐이므로 X좌표 Y좌표를 알아내기 위해서\N{\i1}positions[i].x{\i0} 하고 {\i1}positions[i].y{\i0}로 쓸게요 Dialogue: 0,0:03:58.85,0:04:00.23,Default,,0000,0000,0000,,짜잔! Dialogue: 0,0:04:00.23,0:04:03.97,Default,,0000,0000,0000,,전에 것들은 지워주고요 Dialogue: 0,0:04:04.88,0:04:12.69,Default,,0000,0000,0000,,훨씬 더 좋아보이고요 가독성이 높아졌어요\N읽기 쉬운 코드일 수록 좋겠죠? Dialogue: 0,0:04:13.26,0:04:24.80,Default,,0000,0000,0000,,이제 항목을 추가할 때 조금 더 쉽게 할 수 있어요\NX는 200, Y는 200을 넣으면 윈스턴이 가운데 생기네요 Dialogue: 0,0:04:26.53,0:04:27.30,Default,,0000,0000,0000,,굳 Dialogue: 0,0:04:27.30,0:04:31.27,Default,,0000,0000,0000,,이제는 이것보다 더 세련된 방법을 알려줄게요 Dialogue: 0,0:04:31.27,0:04:38.64,Default,,0000,0000,0000,,지금 우리 함수는 두 가지 숫자를 전달 받아서 쓰고 있어요 Dialogue: 0,0:04:38.64,0:04:44.66,Default,,0000,0000,0000,,그럼 우리는 함수가 객체를 전달 받을 수 있도록 하고\NX와 Y를 객체로부터 뽑아쓰도록 할게요 Dialogue: 0,0:04:44.66,0:04:49.23,Default,,0000,0000,0000,,다시 말해서 여기에서 객체를 전달한다는 말이예요 Dialogue: 0,0:04:49.23,0:04:50.85,Default,,0000,0000,0000,,한 번 해보죠 Dialogue: 0,0:04:50.85,0:04:53.60,Default,,0000,0000,0000,,객체를 보내고요\N근데 오류가 나네요 Dialogue: 0,0:04:53.60,0:05:00.18,Default,,0000,0000,0000,,그건 우리 함수가 두 값을 전달받아야 하기 때문이죠\N이제 바꿀게요 Dialogue: 0,0:05:00.18,0:05:07.43,Default,,0000,0000,0000,,{\i1}facePosition{\i0}이라고 하면 {\i1}faceX{\i0}가 정의되지 않으니까 오류가 나네요 Dialogue: 0,0:05:07.43,0:05:12.90,Default,,0000,0000,0000,,저번엔 {\i1}faceX{\i0}로 전달 받으니깐 오류가 나지 않았는데\N이제는 객체를 전달 받으니 {\i1}faceX{\i0}가 사라졌기 때문이죠 Dialogue: 0,0:05:12.90,0:05:20.90,Default,,0000,0000,0000,,그래서 이제 X 좌표를 객체로부터 뽑아서 {\i1}faceX{\i0} 변수에 저장할게요 Dialogue: 0,0:05:20.90,0:05:27.60,Default,,0000,0000,0000,,이 객체가 X 좌표 속성을 가지고 있다는 것을 알기 때문에\N그 값을 {\i1}faceX{\i0}에 저장할게요 Dialogue: 0,0:05:27.68,0:05:33.34,Default,,0000,0000,0000,,Y좌표에서도 똑같이 진행하고요\N{\i1}faceY = facePosition.y{\i0} Dialogue: 0,0:05:33.64,0:05:34.85,Default,,0000,0000,0000,,짜잔 Dialogue: 0,0:05:34.85,0:05:38.17,Default,,0000,0000,0000,,아래쪽은 앞에서 정의된 변수를 사용하겠죠 Dialogue: 0,0:05:38.17,0:05:43.97,Default,,0000,0000,0000,,제대로 입력하지 않을 경우, 만약\N{\i1}x{\i0}대신 {\i1}xx{\i0}라고 쓰면 오류가 납니다 Dialogue: 0,0:05:43.97,0:05:48.12,Default,,0000,0000,0000,,객체의 속성이 아니기 때문이죠 Dialogue: 0,0:05:48.94,0:05:52.76,Default,,0000,0000,0000,,객체 배열을 쓰면 상당히 깔끔해 집니다\N객체를 이용한 함수도 쓸 수 있고요 Dialogue: 0,0:05:55.68,0:06:00.16,Default,,0000,0000,0000,,당신의 프로그램이 강력해 질 수 있다는 것을 알 수 있어요\N데이터를 구조화시킨다면 말이죠 Dialogue: 0,0:06:00.16,0:06:05.18,Default,,0000,0000,0000,,특히 그림을 그리거나 애니매이션 프로그램을 만들 때 Dialogue: 0,0:06:05.18,0:06:08.93,Default,,0000,0000,0000,,XY좌표를 엮어서 쓰는 경우가 많으니 편해지겠죠? Dialogue: 0,0:06:09.36,0:06:11.37,Default,,0000,0000,0000,,이제 즐겨보세요!