우리는 변수(variables), 반복문(loops), 배열(arrays)을 사용하여 코드에 다양한 동작을 만드는 방법을 배웠습니다. 하지만 지금까지 우리가 한 모든 것은 위에서 아래로 작성되었습니다. 거의 모든 프로그램에서 몇 개의 변수를 만들고, 입력을 받아 처리한 다음 결과를 출력하는 식입니다. 이 방법만으로도 상당한 작업을 할 수 있지만, 코드를 재사용할 수 있게 되기 전까지는 프로그래밍이 정말 흥미진진해지기 어렵습니다. 그리고 바로 여기에 메서드(methods)가 등장합니다. 메서드는 특정 작업을 수행하는 코드를 그룹화할 수 있도록 해줍니다.
이는 데스크톱(desktop), Android, iOS 모두에서 사용 가능하여 다음 아이디어가 언제 떠오를지 알 수 없기 때문에 매우 편리합니다. 저희는 실제로 프로젝트에 Milanote을 사용합니다. 따라서 Milanote이 작동하는 모습을 더 자세히 보고 싶다면 해당 비디오를 꼭 확인해 보세요. 마지막으로 Milanote은 무료입니다. 그러니 설명란의 링크를 클릭하여 친구들과 정리하고 협업을 시작하세요. 예를 들어, 콘솔에 임의의 숫자를 출력하는 코드가 필요하다고 가정해 봅시다. 그러면 이것을 수행하는 메서드를 만들 수 있습니다.
그리고 메서드를 다룰 때 우리가 해야 할 두 가지가 있습니다. 첫째는 메서드를 정의(define)하고, 둘째는 그것을 호출(call)하는 것입니다. 이게 무슨 뜻일까요? 저는 메서드를 기계처럼 생각합니다. 메서드를 정의할 때는 이름을 선택하고 무엇을 하기를 원하는지 결정합니다. 여기서는 이 기계를 만들고 어떻게 작동해야 하는지 알려주는 것입니다. 이 경우, PrintNumber라는 이름의 기계를 만들고 임의의 숫자를 표시하는 코드를 부여하려고 합니다. C#에서 이것을 해보는 것을 살펴보겠습니다. 지금까지 우리는 모든 코드를 Main 안에 작성해 왔습니다.
하지만 메서드를 정의하고 싶을 때, 우리는 이것을 외부에서 수행합니다. Main 내부가 아니기만 하다면 그 위치가 앞에 있든 뒤에 있든 상관없습니다. 따라서 메서드를 정의하기 위해, 우리는 void를 작성한 다음 (이 경우 PrintNumber) 이름을 쓰고, 괄호 두 개를 열고 닫은 후, 중괄호를 사용합니다. 그리고 이 중괄호 안에 우리가 메서드가 수행하길 원하는 내용을 작성합니다. 즉, 난수 생성기(random number generator)를 사용하여 난수를 얻고 그 결과를 출력하는 것입니다. 이것이 메서드를 정의하는 전부입니다. 하지만 지금 프로그램(programme)을 실행하면 아무 일도 일어나지 않을 텐데, 왜냐하면 우리는 이 메서드를 호출해야 하기 때문입니다.
메서드를 호출한다는 것은 내부의 코드가 실행되도록 지시하는 것을 의미합니다. 마치 기계를 켜는 것과 같다고 생각할 수 있습니다. 이를 수행하기 위해, 우리는 코드에서 메서드를 호출하고 싶은 위치를 선택합니다. 이 부분이 프로그램이 시작하자마자 실행되었으면 좋겠습니다. 그래서 저는 Main 내부의 첫 번째 줄에 이렇게 작성하겠습니다. 여기서는 메서드 이름 뒤에 괄호와 세미콜론을 붙입니다. 이것으로 끝입니다. 만약 지금 프로그램을 실행하면, 시스템은 우리가 PrintNumber 메서드를 호출하기를 원한다는 것을 감지하고, 그 메서드 안으로 들어가서 내부의 모든 코드를 실행하며, 결과적으로 난수를 얻게 됩니다.
물론 우리는 이 부분을 원하는 곳 어디에서든, 그리고 원하는 만큼 여러 번 호출할 수 있습니다. 여기서는 몇 번 연속으로 호출해 보겠습니다. 보시다시피, 동일한 코드 조각을 재사용하여 이제 세 개의 난수를 얻었습니다. 일부 분들은 여기서 만든 메서드가 Main과 매우 비슷하다는 것을 알아차렸을 수도 있습니다. 그 이유는 Main 역시 단지 하나의 메서드일 뿐이지만, 우리가 그것을 호출할 필요가 없다는 점에서 특별하기 때문입니다. Main은 프로그램이 시작될 때 항상 호출되기만 합니다. 또한 메서드는 종종 함수(function)라고도 불린다는 점에 유의하십시오.
C#에서는 이 두 용어가 같습니다. 따라서 제가 '함수(function)'라는 말을 들어도 당황하지 마세요. 같은 것입니다. 좋습니다. 이러한 설명과 함께 우리 스스로 몇 가지 메서드를 만들어 보겠습니다.
사용자가 새로운 사람들을 만나는 스피드 데이팅 프로그램을 만든다고 상상해 봅시다. 하지만 지루할 수 있는 다른 인간을 만나는 대신, 사용자가 외계인을 만나게 해봅시다. 실제로, 무작위 이름과 나이를 가진 외계인을 생성하고 사용자에게 "안녕하세요(Hi)"라고 말하는 메서드를 만들어 보겠습니다.
메서드를 만드는 법을 배웠던 것처럼, 우리는 Main 함수 바깥으로 나갑니다. 여기 아래에 있습니다. 여전히 클래스(class) 안에는 있지만, Main 밖입니다. 그리고 여기서 void를 작성하고, 그 다음 우리 메서드의 이름을 작성하는 것으로 시작합니다. 제 경우에는 MeetAlien이라고 부르겠습니다. 저는 몇 개의 소괄호와 중괄호를 열고 닫을 것입니다. 또한 이 중괄호를 가져와서 여기에 놓을 것이며, 이는 if 문에서 하는 것과 같습니다. 단지 읽기 쉽게 하기 위함입니다. 우리는 실제로 이제 이 함수를 정의했지만, 무언가를 하도록 하려면 물론 안에 코드를 넣어야 합니다.
외계인을 위한 이름과 나이를 만드는 것부터 시작하겠습니다. 그리고 이것을 무작위 숫자(random numbers)를 기반으로 하고 싶습니다. 먼저, 우리는 난수 생성기(random number generator)를 만들어야 합니다. 그래서 random을 사용하고, 우리의 생성기를 numberGen이라고 부르고, 이를 new random에 같게 설정할 것입니다. 다시 한번 말씀드리지만, 이것은 이전 비디오에서 했던 내용입니다. 이 구문(syntax)은 여전히 조금 이상하니 저를 따라 적어주세요. 이제 우리는 이 난수 생성기를 사용하여 무작위 숫자를 얻을 수 있습니다. 만약 외계인을 위한 이름을 만들고 싶다면, string name을 사용하고, 이를 같게 설정할 수 있는데, 저는 모든 외계인이 꽤 이상한 이름을 가지길 원합니다.
저는 이것들을 X-대시(dash)와 무작위 숫자가 붙는 형태로 호출되기를 원합니다. 따라서 저는 X-대시 그리고 plus numberGen.Next를 사용하여 범위 내의 무작위 숫자를 생성할 것입니다. 여기서는 10과 9,999를 넣겠습니다. 이것은 외계인 이름처럼 보일 겁니다. 다음으로 나이(age)에 대해서도 거의 같은 작업을 할 것입니다. 'age'라는 정수형(integer)을 만들고, 무작위 숫자로 설정합니다. 즉, numberGen.Next between 10 and 500입니다. 이 외계인들이 상당히 오래 살 수 있다고 가정해 봅시다. 그리고 이 정보 중 일부를 화면에 출력할 수 있습니다. 따라서 Console.WriteLine으로 "안녕하세요, 저는 [이름]이고"라고 작성하겠습니다. 다음은 또 다른 하나로, Console.WriteLine으로 "저는 [나이]세입니다." 라고 작성합니다. 세 번째는 "아, 그리고 저는 외계인입니다." 로 하겠습니다. 이 메서드가 다소 이상하다고 인정하지만, 실제로 작동할 것입니다.
우리가 확실히 해야 할 유일한 것은 이 경우에 우리의 메서드 앞에 static 키워드를 추가하는 것입니다. 여기서 제가 무슨 뜻인지 설명하자면요? 이것이 작동하도록 만들기 위해 우리가 해야 할 일은 바로 여기에 있는 void 앞, 즉 메서드의 맨 위로 가서 static 키워드를 추가하는 것입니다. 보시다시피 main 함수에도 이것이 있습니다. 이 이유에 대해서는 다음 비디오에서 클래스(classes)를 깊이 파고들 때 다룰 것이지만, 지금 당장은 포함시켜야 합니다. 그렇지 않으면 코드에 오류가 발생할 것입니다. 그리고 이것으로 저희 함수의 정의가 끝납니다.
이제 우리는 원하는 곳 어디서든 이 함수를 호출할 수 있습니다. 저는 여기 Main으로 가서 호출을 시도해 보겠습니다. 자, MeetAlien이라는 메서드를 실행해 봅시다. 지금 실행하면 "안녕하세요, 저는 X-8203입니다. 저는 154세입니다. 아, 그리고 저는 외계인입니다." 라고 표시되는 것을 볼 수 있습니다. 정말 멋지네요. 물론 우리 코드에서 일어나고 있는 일은 우리가 프로그램 시작 시 호출되는 main 함수로 이동한다는 것입니다. 이 함수는 MeetAlien을 호출해야 한다는 것을 감지하고, 아래쪽의 MeetAlien 함수 안으로 들어가서 모든 코드를 실행한 후 다시 돌아와 계속 진행합니다.
따라서 원하신다면, 다른 외계인을 만나기 위해 MeetAlien을 몇 번 더 호출할 수 있습니다. 여기 사이에 약간의 간격을 넣겠습니다. 콘솔에 출력하고, 우리가 만나는 두 외계인을 명확하게 구분하기 위해 대시를 몇 개 넣어보겠습니다. 그리고 이 프로그램을 다시 실행하면, 이제는 나이와 이름이 다른 두 외계인을 만나고 있다는 것을 알 수 있습니다. 멋지네요! 이것이 메서드의 가장 기본적인 예제입니다. 하지만 메서드가 진정으로 빛을 발하는 곳은 매개변수(parameters)와 반환 값(return values)을 추가할 때입니다.
하지만 정확히 이게 무슨 뜻일까요? 지금까지 우리의 프로그램은 상당히 폐쇄적으로 돌아왔습니다. 실행할 수 있고, 어떤 일들을 수행하며, 그게 거의 전부입니다. 하지만 만약 우리가 프로그램을 실행할 때 기계에 사용할 입력값(input)을 줄 수 있다면 어떨지 상상해 보세요. 좋은 예시가 숫자를 제곱하는 메서드를 만들고 싶을 때입니다. 이 경우, 우리는 기계가 제곱해야 할 숫자를 입력받을 수 있기를 원합니다. 이것을 매개변수라고 합니다. 그리고 작성하기는 매우 간단합니다. 메서드를 정의할 때, 괄호 안으로 들어가서 자료형(type)과 매개변수의 이름(parameter name)을 작성합니다. 여기서는 정수형(integer)이 될 것이고, 저는 이 이름을 'number'라고 부르겠습니다. 그런 다음 중괄호 안에서는 이것을 다른 변수처럼 사용할 수 있습니다.
여기서는 number를 자기 자신과 곱하여 결과를 계산할 것입니다. 이제 우리는 매개변수로 정수를 받는 기계를 만들었습니다. 그리고 메서드를 호출하고 기계를 실행하면, 우리가 사용하길 원하는 어떤 숫자든 전달하기만 하면 됩니다. 물론 이 기계가 결과도 출력해 줄 수 있다면 좋을 겁니다. 이것을 반환 값(return value)이라고 합니다. 우리의 경우, 계산의 결과인 정수형을 반환하고 싶습니다. 이를 위해 아무것도 반환하지 않는다는 의미의 void를 int로 대체합니다.
그리고 중괄호 내부에서 원하는 모든 작업을 마쳤다면, return 키워드 뒤에 출력하고 싶은 값을 작성하여 메서드를 종료할 수 있습니다. 이 경우, 그 값은 결과(result)입니다. 이렇게 하면 메서드를 호출할 때 값을 돌려받을 수 있게 됩니다. 물론 이 값을 다른 변수에 저장하여 원하는 대로 사용할 수도 있습니다. 따라서 우리는 정수형(integer)을 매개변수로 받아 이를 제곱하고 결과를 출력하는 'Square'라는 기능을 만들고 있습니다. 다양한 코드로 이것을 재미있게 사용해 봅시다.
예를 들어, 두 숫자를 곱하는 메서드를 만들고 싶다고 가정해 보겠습니다. 이 경우에도 다시 main 함수 바깥으로 나가서 void 키워드를 사용하여 메서드를 생성할 것입니다. 이름은 Multiply와 같이 지정합니다. 괄호와 중괄호를 열고 닫습니다. 만약 이 메서드가 두 숫자를 곱하려면, 우리가 원하는 두 숫자를 입력받을 방법이 필요합니다. 따라서 이것들을 매개변수(parameter)로 추가해야 합니다. 이를 위해 괄호 안으로 들어갑니다. 여기서 먼저 입력받고자 하는 데이터의 타입을 지정합니다.
이 경우 정수형(integer)이 될 것이고, 저는 이것을 num1이라고 부르겠습니다. 그리고 좋은 점은 하나 이상의 값을 입력받도록 허용할 수 있다는 것입니다. 여기에 쉼표만 추가하면 또 다른 매개변수를 만들 수 있습니다. 따라서 이것은 첫 번째 숫자(number one)로 정수형(integer)이 될 것이고, 저는 이것을 number2라고 부르겠습니다. 자, 이제 이 두 숫자를 메서드 내부에서 실제로 다룰 수 있게 되었습니다. 따라서 이 경우, 우리는 아마도 결과를 계산하여 변수에 저장하고 싶을 것입니다.
자, 'result'라는 정수형(integer)을 만들고 여기에 숫자 1에 숫자 2를 곱한 값을 할당해 보겠습니다. 실제로 정말 쉽습니다. 원한다면 물론 결과를 출력할 수도 있습니다. 따라서 Console.WriteLine을 사용하여 "The result is"와 그 뒤에 결과 값인 'result'를 출력할 수 있습니다. 됐습니다.
물론 이전에 했던 것처럼, 여기 메서드 앞에 static 키워드를 추가해야 합니다. 지금은 모든 메서드에 이것을 적용해야 합니다. 왜 그런지 여부는 다음 영상에서 다루겠습니다. 그리고 이제 함수를 찾아야 합니다.
그리고 여기 main으로 가서 호출할 수 있습니다. 'Multiply'를 입력하고, 괄호 안에 몇 개의 숫자를 넣을 수 있습니다. 숫자 3과 8도 넣어보겠습니다. 7과 13으로 하는 것도 하고, 11과 5로 하는 것도 해보겠습니다. 멋지네요.
그리고 이것을 실행하면 3 곱하기 8의 결과가 24이고, 7 곱하기 13의 결과가 91이며, 11 곱하기 5의 결과가 55인 것을 볼 수 있습니다. 굉장합니다. 하지만 지금은 단순히 콘솔(console)에 결과를 표시하고 있을 뿐입니다. 만약 두 숫자를 곱한 다음 그 결과를 가지고 무언가를 하고 싶다면 어떨까요?
어쩌면 그 결과가 짝수인지 홀수인지 확인할 수 있을 것입니다. 이를 위해 반환 값(return value)을 추가합니다. 여기 'multiply' 함수 코드를 일부 제거하고, 아래쪽에서 void라고 쓰는 대신 (이는 다시 말해 아무것도 반환하지 않는다는 의미입니다), 우리가 반환하려는 숫자의 타입을 작성합니다. 이 경우 결과 변수(result variable)를 반환하고 싶기 때문에 정수형(integer)을 사용합니다. 그런 다음 이것을 콘솔에 직접 출력하는 대신, 단순히 return result;와 세미콜론을 작성해 보겠습니다.