-
다시 Winston을 그리는 프로그램으로 돌아왔습니다
하지만 이번에는 그림에 text 문자를 추가해 보았습니다
-
Winston을 text 라벨 아래에 위치할 건데요
그 라벨은 인생의 각 단계를 표시하고 있어요
-
하지만 지금 Winston은 엉망으로 놓여있죠
-
왜냐하면 faceX와 faceY값을
함수 내부에서 임의의 값으로 설정하고 있기 때문입니다
-
하지만 우리는 이런 것이 아닌
정확히 바로 이 장소에 Winston이 그려지기를 원하죠
-
그리고 특히 저는 매번 함수가 불릴때마다
그 특정 위치를 지정하는 것을 원해요
-
우리가 이전에 ellipse()와 rect()함수를 사용할 때 처럼요
-
그러므로 저는 여기, 그리고 여기
다음은 여기, 그리고 여기에 Winston이 그려지기를 바랍니다
-
그리고 더 이상 함수를 부를때마다 Winston이
무작위로 임의의 영역에 그려지지 않기를 원해요
-
그러기 위해서는 그 함수에 파라미터를 지정해 주어야 합니다
-
여기 맨 위에 함수 정의 부분에서도 그렇고요
-
그러므로 drawWinston함수에 faceX와 faceY를 전달해서
이 값을 임의의 수를 생성하는 대신에 사용하기를 바랍니다
-
지금부터 여기 함수를 부르는(call) 부분에서
어떻게 원하는 것을 함수로 전달할지 생각해보죠
-
일단 Winston에 대해 설명하는 글자들의 바로 아래의 위치가 필요합니다
-
아마 우리가 원하는 각 Winston 위치의 x, y값은
글자를 쓰기 위해 사용한 text함수에 전달한 값과 매우 비슷할 것입니다
-
대충 y값에서 10 픽셀 정도 아래가 될겁니다
그러므로 맨 처음 위치는 10, 30이고 그 다음 위치는 200, 230이고
-
10, 230... 200,230 이는 아마 text의 좌표와 같을 것이고
각각의 글자들보다 조금 아래에 위치 하므로 각 y좌표값에 10을 더했어요
-
좋아요 하지만 Winston은 움직이지 않네요
-
왜냐하면 위쪽의 함수 선언부에 이러한 파라미터를 넘겨준다고
이야기하지 않았기 때문에 여전히 임의의 수를 사용하고 있기 때문입니다
-
그러므로 우리는 함수에게 이렇게 이야기해주어야 해요
"우리가 이러한 정보를 줄테니 이것을 대신 사용해봐"
-
그리고 괄호들 안에 파라미터들의 이름을 건네주어야만 해요
-
그것을 faceX와 faceY로 부르고 콤마(,)로 구분합니다
-
이름을 그렇게 부른 이유는, 이미 함수안에서 그 이름을
사용하고 있기 때문에 다시 다른 이름으로 쓸 필요가 없기 때문이죠
-
하지만 여전히 아무일도 일어나지 않고 Winston은 온갖 곳에 가 있어요
-
아마 맨 위쪽에 함수부분을 보면 전달받은 faceX와 faceY를
여전히 임의의 수로 다시 설정하고 있는 것을 볼 수 있을거에요
-
그러면 이 코드들을 모두 삭제해보도록 합시다
-
그러면 함수가 우리가 전달한 faceX와 faceY를 이용하여
그림을 그리는 것을 볼 수있습니다
-
하지만 Winston이 우리가 원하는 정확한 위치에 있지는 않아요
왜냐하면 문자는 화면에서 좌측 상단을 기준으로 위치가 정해지고
-
그림은 중심으로 기준으로 하기 때문입니다
숫자들을 조금 손볼 필요가 있겠죠?
-
아마 x축 방향으로 조금 더 옮겨야 할 거에요
조금 옮겨서 여기 'Toddler Winston'아래로 옮겨볼게요
-
이런 과정을 통해서 함수에 넘겨줄 값을 바꿀 수 있어요
하지만 함수의 정의부분을 바꿀 필요가 전혀 없습니다
-
왜냐면 함수는 언제나 우리가 전달해주는 값만 받기 때문이죠
마치 ellipse()나 rect() 처럼요
-
좋아요 적당한 위치로 옮겼습니다
하지만 Winston의 얼굴이 너무 크다는 것을 알수있네요
-
서로 겹치고 크기가 맞지 않아요
-
우리는 함수에 그를 그리기 위한 코드를 넣어놨었고
타원을 그리는 한 줄을 수정해서 모든 얼굴들의 크기를 바꿀 수 있습니다
-
그러면 190으로 값을 바꾸어서 Winston을 다이어트시켜줘 볼까요?
-
아주 보기 좋네요. 조금 더 조정을 해서 저 안에
정말 넣을 수 있겠네요, 멋집니다
-
마지막으로 작성한 코드에 대해서 리뷰(review)해봅시다
여기에 drawWinston() 함수를 정의하였고
-
이 함수는 faceX와 faceY라는 두개의 값을 받습니다
-
그리고 이 값들은 변수(variable)처럼
함수 안의 어디에서든 사용할 수 있습니다
-
그러니까 이 변수들을 미리 위에서
선언(declare)했던것처럼 사용할 수 있다는 말이지요
-
그리고 이 함수를 선언한 후 언제든지 부를 수 있습니다
-
그리고 다른 값들을 전달할수도 있고요
그러면 그 새로운 값들을 사용할 겁니다
-
지금까지 함수의 정말로 멋진점을 살펴보았습니다
우리는 정말로 재사용이 가능하다고 생각할 수 있는 코드를 제안할 수있으며
-
또한 파라미터를 사용하는 것으로 이 코드에서 약간씩 바꾸어야 하는 부분은
이것을 사용해서 개인에 맞도록 수정(customize)하라고 할 수도 있어요
-
이것은 마치 레시피(recipe)와 같습니다. 일반적인 명령어들을 작성해 놓았고
갑자기 Winston을 하나가 아닌 넷을 먹여야 하게 되었다면
-
처음부터 다시 할 필요가 없이 원래의 명령어를
조금 수정하여 모든 것에 4를 곱해주면 되는 것이지요
-
그러면 지금부터는 여러분의 코드의 레시피에 대해서 생각해보도록 해봅시다!