WEBVTT 00:00:00.420 --> 00:00:05.037 이것저것 해보려고 이 페이지를 만들었어요 00:00:05.757 --> 00:00:07.578 그런데 좀 지루하네요 00:00:08.038 --> 00:00:10.163 내용도 없고 00:00:10.891 --> 00:00:15.134 이 버튼은 눌러도 아무 반응이 없어요 00:00:16.174 --> 00:00:18.387 이 버튼을 인터랙티브하게 만들어 볼거에요 00:00:18.842 --> 00:00:20.248 사용자가 버튼을 클릭하면 00:00:20.248 --> 00:00:23.428 버튼 안의 문구가 바뀌게 할거에요 00:00:24.416 --> 00:00:27.301 첫번째는 요소를 찾는거에요 00:00:27.301 --> 00:00:29.630 우리가 이벤트에 반응할 요소 말이에요 00:00:30.062 --> 00:00:32.378 이 경우엔 그 요소는 버튼이죠 00:00:32.846 --> 00:00:35.117 그리고 버튼은 클릭이 가능해요 00:00:35.443 --> 00:00:39.483 그래서 우리는 clickerButton변수를 만들고 00:00:40.004 --> 00:00:44.991 document.getElementById 를 이용해서 00:00:45.552 --> 00:00:48.405 값을 받아오고 이 변수에 저장할 거에요 00:00:49.399 --> 00:00:53.068 다음 단계는 함수를 정의해서 00:00:53.068 --> 00:00:56.071 클릭이 발생하면 호출되게 하는 거에요 00:00:58.046 --> 00:01:02.010 이 함수는 onButtonClick이라고 하고 00:01:03.535 --> 00:01:06.893 비어있는 함수를 여기 정의해둘게요 00:01:07.233 --> 00:01:09.711 당연히 뭔가를 채워야해요 00:01:09.711 --> 00:01:11.963 아니면 별로 재미없는 함수가 될테니까요 00:01:12.319 --> 00:01:14.101 이 버튼의 문구를 바꾸려면 00:01:14.101 --> 00:01:18.632 clickerButton의 값을 이용해 textContent에 넣어주면 돼요 00:01:19.777 --> 00:01:22.836 "Oh wow, you clicked me" 라고 해보죠 00:01:23.495 --> 00:01:25.590 와 행복한 버튼이에요! 00:01:27.369 --> 00:01:30.028 많은 코드는 아니지만 더 복잡하게 만들 수 있어요 00:01:30.166 --> 00:01:31.256 이게 작동된다면요 00:01:32.970 --> 00:01:37.226 우리가 쓴 코드가 한 건 변수를 정의한 것 뿐이에요 00:01:37.638 --> 00:01:41.345 그래서 버튼을 눌렀을 때 아직 아무것도 일어나지 않아요 00:01:42.236 --> 00:01:44.777 마지막 단계는 모든 걸 합치는 거에요 00:01:45.149 --> 00:01:50.028 그래서 브라우저에게 우리가 만든 함수를 호출하라고 00:01:50.028 --> 00:01:54.292 우리가 찾아둔 버튼이 클릭이 될 때마다 말이죠 00:01:55.051 --> 00:02:00.519 이건 이벤트 리스너를 버튼에 추가해서 구현할 수 있어요 00:02:00.716 --> 00:02:05.898 clickerButton.addeventlistener 처럼요 00:02:06.452 --> 00:02:10.528 그리고 이 방법에는 두 가지의 인자를 전달해야해요 00:02:10.975 --> 00:02:14.023 첫번째는 이벤트의 이름 'click' 00:02:14.443 --> 00:02:17.845 두번째는 우리가 호출하려는 함수의 이름이에요 00:02:18.255 --> 00:02:21.670 클릭할 때 호출되는 함수죠 'onButtonClick' 00:02:23.209 --> 00:02:26.657 이걸 잠시 멈추고 버튼을 한번 클릭해보세요 00:02:28.707 --> 00:02:30.081 동작하나요? 00:02:30.081 --> 00:02:31.983 그랬으면 좋겠네요 전 동작하거든요 00:02:33.226 --> 00:02:36.378 이 함수가 어떻게 작동되는 지에 대해 얘기해보죠 00:02:36.378 --> 00:02:37.608 약간 어려울 수 있거든요 00:02:37.937 --> 00:02:41.102 이 함수를 이벤트 리스너 함수라고 하거나 00:02:41.102 --> 00:02:46.685 콜백 함수라고 해요 그게 사용되고 있는 방법이니까요 00:02:47.157 --> 00:02:50.265 이 함수가 이벤트가 일어나면 호출(콜)되길 원해요 00:02:51.229 --> 00:02:55.317 보통 페이지 로드될 때 이게 호출되길 원하진 않잖아요 00:02:56.057 --> 00:02:58.323 만약에 페이지가 로드될 때 호출되게 하고 싶다면 00:02:58.323 --> 00:03:01.991 여기 아래에 한 줄을 이렇게 추가해야 할거에요 00:03:03.819 --> 00:03:06.287 함수이름 뒤에 괄호를 쓰는걸 기억하세요 00:03:06.671 --> 00:03:09.611 이 괄호로 함수를 호출하는 거에요 00:03:10.029 --> 00:03:13.760 이걸 내버려두면 함수를 호출하는게 아니라 00:03:13.760 --> 00:03:15.550 그냥 참조하는 거에요 00:03:15.895 --> 00:03:19.172 그건 이렇게 인자를 전달하고 싶을 때 하는 거에요 00:03:19.172 --> 00:03:20.585 이건 그냥 브라우저에게 이렇게 말해주는 거에요 00:03:20.585 --> 00:03:25.608 "여기 나중에 호출할 함수가 있어. 지금은 말고" 00:03:27.360 --> 00:03:30.638 그러니까 괄호를 여기에는 적지 않도록 해요 00:03:30.983 --> 00:03:32.595 이 함수 이름 뒤에요 00:03:32.721 --> 00:03:37.336 왜냐하면 함수 자체가 아니라 함수의 리턴값을 전달하는 거니까요 00:03:38.234 --> 00:03:39.628 실수로 그렇게 했다면 00:03:39.628 --> 00:03:44.149 이 버튼은 페이지가 로드될 때 바뀌고 다음엔 바뀌지 않을 거에요 00:03:44.727 --> 00:03:47.418 고치려면 여기 괄호만 지우면 돼요 00:03:47.418 --> 00:03:49.167 실수로 추가했던 것을요 00:03:49.167 --> 00:03:52.418 이제 이 함수는 클릭될 때만 호출될 거에요 00:03:54.012 --> 00:03:56.470 한 가지 다른 방법은 00:03:56.496 --> 00:04:02.658 여기 익명의 함수를 넣어주는 거에요 00:04:02.658 --> 00:04:05.705 익명 함수는 미리 정의된 이름은 없지만 00:04:06.530 --> 00:04:10.164 명령어 안에 구현된 함수에요 00:04:10.530 --> 00:04:15.146 이 addEventListener부분을 복사해서 붙여넣기 할게요 00:04:15.146 --> 00:04:18.127 그리고 이 방법을 하나씩 보여줄게요 00:04:18.127 --> 00:04:20.410 그럼 무슨 뜻인지 알 수 있을 거에요 00:04:20.648 --> 00:04:22.986 이 함수 이름을 지우고 00:04:22.986 --> 00:04:25.604 함수 정의로 대체할게요 00:04:26.051 --> 00:04:29.144 여기 붙여넣고 00:04:31.474 --> 00:04:32.144 좋아요 00:04:32.144 --> 00:04:37.256 이 두 라인의 코드는 정확히 똑같은 일을 해요 00:04:37.777 --> 00:04:39.134 음 거의 같게요 00:04:39.708 --> 00:04:41.837 두 개 모두 함수를 전달해요 00:04:41.837 --> 00:04:43.955 같은 내용의 함수를요 00:04:44.285 --> 00:04:46.052 차이점은 첫번째 것은 00:04:46.052 --> 00:04:50.117 위에 미리 정의해 둔 함수를 전달하는 것이고 00:04:50.117 --> 00:04:53.284 두번째 것은 익명 함수를 00:04:53.284 --> 00:04:57.551 명령어 속에 정의함과 동시에 전달하는 거에요 00:04:58.438 --> 00:04:59.724 두 방법 모두 작동해요 00:04:59.958 --> 00:05:02.777 많은 개발자들은 미리 정의된 함수를 선호해요 00:05:02.966 --> 00:05:04.750 왜냐하면 코드가 읽기 쉽고 00:05:04.750 --> 00:05:06.465 디버깅도 쉽고 00:05:06.465 --> 00:05:11.176 미리 정의된 함수를 여러 번 호출하고 00:05:11.176 --> 00:05:12.605 다른 이벤트에서도 호출할 수 있으니까요 00:05:13.277 --> 00:05:15.220 어떤 방법을 쓰든지 여러분 마음이에요 00:05:15.663 --> 00:05:17.734 두 개를 동시에 사용하지는 마세요 00:05:17.734 --> 00:05:21.955 브라우저는 클릭이 발생할 때 두 개 모두를 호출할 것이고 00:05:21.955 --> 00:05:25.119 두 번 부를 이유가 없으니까요 00:05:26.154 --> 00:05:29.118 앞으로 가서 익명 함수를 지울게요 00:05:29.118 --> 00:05:30.937 전 첫번째 방법이 더 좋으니까요 00:05:31.994 --> 00:05:33.780 이제 여러분은 많은 것을 할 수 있게 되었어요 00:05:33.780 --> 00:05:35.274 이벤트 리스너를 추가할 수있게 되었으니까요 00:05:35.274 --> 00:05:37.806 페이지의 더 많은 부분에 추가해 볼 수도 있고 00:05:38.019 --> 00:05:39.656 다른 이벤트를 사용해 볼 수도 있고 00:05:39.914 --> 00:05:41.075 다음 시간에 다뤄볼 거에요 00:05:41.455 --> 00:05:43.209 DOM을 수정해 볼 수도 있어요 00:05:43.209 --> 00:05:45.435 전에 배운 방법들로요 00:05:45.849 --> 00:05:49.287 그리고 반응했던 요소 말고도 00:05:49.308 --> 00:05:52.215 페이지의 다른 것들도 수정할 수 있어요 00:05:52.562 --> 00:05:53.561 한번 해보세요 00:05:53.561 --> 00:05:55.455 여러분이 할 수 있는 것을 찾아봐요