프로그래밍 기초 입문 with 자바

준비중..

프로그래밍 기초 입문 with 자바

프로그래밍 입문자들을 위한 Java

11 메소드와 리턴 값

# 메소드와 리턴 값 ## 리뉴얼 <div class="embed-responsive embed-responsive-16by9"> <iframe src="https://www.youtube.com/embed/EcdPQ49fP6c" frameborder="0" allowfullscreen></iframe> </div> ## 구버전 <div class="embed-responsive embed-responsive-16by9"> <iframe src="https://www.youtube.com/embed/wbZepDsjoYE" frameborder="0" allowfullscreen></iframe> </div> ## 들어가며 --- 이전 시간, **타입 관련 주의점**과 `printf()`의 사용법에 대해 알아보았습니다. 이번 시간에는 여러 줄의 코드를 압축하는 방법에 대해 알아보도록 하죠. ![클라우드스터딩-자바-우보천리](https://i.imgur.com/IBVtIc3.gif) ## 메소드란 --- 메소드란, *일련의 코드를 단순화*하는 문법으로서, 일반적인 경우 *입력에 따른 결과값을 반환*합니다. 이해를 돕기 위해 햄버거 주문을 예로 한번 들어보도록 하죠. 여러분들 중 혹시 이렇게 주문하시는 분 계십니까? > 참깨 빵 위에 순 쇠고기 패티 올려주시고, 치즈 한 장 올린 후 다시 패티를 얹은 뒤, 그 위에 소스, 양상추, 피클, 양파를 올려서 윗빵을 덮고 포장해서 하나 주시겠어요? 아마 없을 겁니다. 이렇게 구구절절이 주문하는 것보다는 그냥 “1번 메뉴 주세요” 라고 하는 게 더 편할 겁니다. ![클라우드스터딩-자바-메소드-예](https://i.imgur.com/pqfDPLM.png) 마찬가지로 프로그램의 코드 또한 햄버거 매뉴얼처럼 잘 정의해서 필요할 때 사용하는 게 더 편리합니다. 이렇게 일련의 코드를 하나로 묶는것을 **메소드 정의**라 하고, 이를 사용하는 것은 **메소드 호출**이라 합니다. > 메소드를 사용하면, 수많은 코드를 단순화하여 편리하게 프로그램을 만들 수 있습니다. 그럼 계속해서 메소드의 정의와 호출에 대한 내용을 알아봅시다. ![클라우드스터딩-자바-메소드-정의와-호출](https://i.imgur.com/4qad4Fe.png) ## 메소드 정의 --- 메소드를 만들기 위해서는 먼저 그 구조를 알아야 합니다. ![클라우드스터딩-자바-메소드의-구조](https://i.imgur.com/HAjNH22.png) 메소드는 크게 4가지의 요소로 이루어져있는데, 이는 위 코드의 대문자 부분 즉, 타입-메소드명-파라미터-리턴값이 되겠습니다. public static은 뭐일까 하는분들 계시죠? 이놈들은 객체지향 파트에서 다루도록 하겠습니다. 다시 돌아와서 4가지 구성요소를 정리하면 아래와 같습니다. - TYPE → 메소드의 최종 결과값의 형태 - NAME → 메소드의 이름 - PARAMETERS → 입력 값을 저장할 변수 - return VALUE → 반환할 최종 결과 값 실제 “제곱 값을 반환하는 메소드”를 만들며 이해를 도와봅시다. 먼저 **메소드명**을 `square`라 하고, 이를 이름 영역에 넣어줍니다. ![클라우드스터딩-자바-메소드명](https://i.imgur.com/V4rsrnR.gif) 여기에 값을 입력해야겠죠? 예를들어 2를 입력한다면 2의 제곱인 4를 반환해야 할 텐데, 여기서 입력값 2를 저장할 변수가 필요합니다. 따라서 **파라미터** 영역에 정수형 변수 `n`을 만들어줘야겠네요. ![클라우드스터딩-자바-메소드-파라미터](https://i.imgur.com/4MlXtPk.gif) 이제 결과 값을 만들어야 합니다. 제곱값을 반환해야 하므로, **리턴값**의 위치에 파라미터 `n * n`을 넣어주세요. ![클라우드스터딩-자바-메소드-리턴값](https://i.imgur.com/dpSqWkF.gif) 마지막으로 리턴값의 타입을 정해야겠죠? 리턴값이 정수의 제곱이므로, **타입**의 위치에 `int`를 넣어줍니다. 어때요, 쉽죠? ![클라우드스터딩-자바-메소드-타입](https://i.imgur.com/fNQzmWG.gif) > 한번 정의된 메소드는 쉽게 재사용될 수 있습니다. ## 메소드 호출 --- 위에서 만든 sqaure() 메소드를 이제 사용해봅시다. 아래 코드로 7의 제곱을 출력해 볼까요? ``` public class CallMethod { public static void main(String[] args) { int inputNum = 7; int resultNum = square(inputNum); System.out.printf("%d의 제곱은 %d입니다.", inputNum, resultNum); } } ``` 아직 실행되지 않습니다. 왜 그렇죠? 맞습니다. 위에서 정의한 square() 메소드가 코드상에 추가되지 않았기 때문이죠. 그럼 메소드를 추가해서 다시 실행해 봅시다. ``` public class CallMethod { public static void main(String[] args) { int inputNum = 7; int resultNum = sqaure(inputNum); System.out.printf("%d의 제곱은 %d입니다.", inputNum, resultNum); } // 정수 n을 입력하면 그 제곱을 반환 public static int sqaure(int n) { return n * n; } } ``` 위 코드의 실행결과는 아래와 같습니다. ``` 7의 제곱은 49입니다. ``` 그럼 실행결과가 어떠한 과정을 거쳐 나오게 되는지 분석해보도록 합시다. ## 메소드의 실행 흐름 --- 가장 먼저 main() 메소드의 첫 줄이 수행됩니다. ``` int inputNum = 7; ``` 다음으로 square() 메소드가 호출되죠. ``` square(inputNum); ``` 메소드 호출이 일어나면, 먼저 *전달값(arguments)이 파라미터(parameters)로 대입*됩니다. 따라서 파라미터 n의 값은 전달된 변수 inputNum과 동일한 7이 됩니다. ``` public static int sqaure(int n) { // n = 7 return n * n; } ``` 파라미터의 대입이 끝나면 본격적으로 메소드 내부의 코드가 수행되는데, 다행히도 이번 square() 메소드는 단 한 줄뿐이네요. n의 값이 7이므로, 리턴값은 `49`가 되고 `int`의 형태로 *메소드가 호출된 위치로 반환*됩니다. 이로써 square() 메소드의 호출이 종료됨과 동시에 실행의 흐름 또한 메소드의 호출위치로 넘어갑니다. ``` public static int sqaure(int n) { return n * n; // (int) 49 } ``` 계속해서 square() 메소드로부터 반환된 49가 변수 resultNum에 대입되고, ``` int resultNum = 49; // 49는 메소드의 반환값 ``` main() 메소드의 마지막 라인을 끝으로, 프로그램이 종료되게 됩니다. ``` System.out.printf("%d의 제곱은 %d입니다.", inputNum, resultNum); #=> 7의 제곱은 49입니다. ``` ## 요약 --- #### 메소드 정의 - 메소드란, 일련의 코드를 단순화하는 문법으로 입력에 따른 결과값을 반환한다. - 메소드 정의란, 일련의 코드를 하나로 묶어 정하는 것이다. - 메소드는 타입, 이름, 파라미터, 리턴값으로 구성된다. #### 메소드 호출 - 메소드 호출이란, 정의된 메소드를 사용하는 것이다. - 메소드 호출 시 전달값은 파라미터로 대입된다. - 메소드 호출 종료되면 리턴값은 메소드의 호출 위치로 반환된다. ## 확인하기 --- <div class="interact_responsive_padding" style="padding:100% 0 0 0;position:relative;margin-bottom:5px;"><div class="interact_responsive_wrapper" style="height:100%;left:0;position:absolute;top:0;width:100%;"><iframe id="interactApp5cb49ff3449a47001474b34e" width="100%" height="100%" style="border:none;max-width:100%;margin:0;" allowTransparency="true" frameborder="0" src="https://quiz.tryinteract.com/#/5cb49ff3449a47001474b34e/q/1?method=iframe"></iframe></div></div>

Challenge

개념 실습! 학습 내용을 진짜 내 것으로 만들기!