자바, 입문하기!

자바, 입문하기!

프로그래밍 기초, 입문자를 위한 자바!

10 메소드와 파라미터

# 메소드와 파라미터 --- <div class="embed-responsive embed-responsive-16by9"> <iframe src="https://www.youtube.com/embed/DsG9q9MJK5o" frameborder="0" allowfullscreen></iframe> </div> <a name="parameters"></a> ## 파라미터(매개변수)란? 이어서 파라미터(매개변수)란 무엇인지 알아봅시다. 파라미터란 메소드 수행에 필요한 입력값을 저장하는 변수 입니다. 예를들어 전화를 거는 메소드를 만든다고 할 때, 우리는 전화를 걸 대상에 대한 입력값이 필요합니다. 이러한 입력값을 기억해두는 변수가 바로 파라미터 입니다. 이러한 파라미터는 메소드의 구조상에서 소괄호 사이에 위치합니다. ![Imgur](https://i.imgur.com/6rVtKPs.png) ## 단일 파라미터 메소드 파라미터가 1개인 메소드를 예로 파라미터를 이해해 봅시다. 단일 파라미터는 다음과 같은 형식으로 만듭니다. 메소드의 구조상에서 타입의 위치에 void를 넣습니다. 다음으로 메소드 이름을 지어줍니다. 마지막으로 입력값을 저장하기위한 파라미터를 입력값의 형식에 맞게 타입을 정하고 변수명을 설정합니다. (타입의 위치에 void가 아닌 경우도 올 수 있으나, 아직 메소드의 리턴값을 배우지 않은 관계로 계속 타입위치에 void만 사용하겠습니다.) ``` // 단일 파라미터 메소드 정의 public static void NAME(TYPE VAR) { ... } ``` 이렇게 정의된 단일 파라미터는 아래와 같은 형식으로 호출 됩니다. 메소드의 이름을 적고 입력값을 소괄호 사이에 넣어서 말이죠. 이렇게 입력된 X값은 파라미터, 즉 입력 변수인 VAR에 대입이 됩니다. ``` // 단일 파라미터의 호출 // 입력값 X는 파라미터 VAR로 대입됨 NAME(X); ``` ## 단일 파라미터 메소드의 실행 흐름 예제를 통해, 단일 파라미터의 실행 흐름을 이해해 봅시다. ``` class Square { // 타입: void(반환값 없음) // 메소드명: printSquare // 파라미터: int x public static void printSquare(int x) { System.out.println(x * x); } // 프로그램의 시작점 public static void main(String[] arguments) { int value = 2; printSquare(value); printSquare(3); printSquare(value * 2); } } ``` 위 코드는 main 메소드로부터 실행이 시작됩니다. 제일먼저 value라는 변수에 2라는 정수값을 대입합니다. 다음으로 printSquare(value)를 호출합니다. 이때 실행흐름은 printSquare 메소드로 넘어가게 되고 파라미터인 x에 value의 값이 대입됩니다. 즉 다음과 같은 코드가 수행이 됩니다. `int x = value;` 이렇게 값을 전달받은 파라미터 x를 printSquare 메소드의 첫행에서 제곱하여 출력합니다. 따라서 4가 출력 됩니다. 더 이상 수행할 내용이 없는 printSquare 메소드는 종료가 되고, 실행의 흐름은 main 메소드로 돌아와 다음 행인 printSquare(3) 메소드를 수행합니다. 여기서 다시한번 printSquare 메소드로 실행의 흐름이 넘어가게 되고 파라미터 x에는 입력 값 3이 대입 됩니다. 따라서 x * x 즉, 9라는 값이 출력됩니다. 다시 printSquare 메소드는 종료가 되고, 실행흐름은 main 메소드로 넘어와 마지막 행인 printSquare(value * 2)가 호출 됩니다. 현재 value 변수에는 2라는 값이 저장되어있으므로, 4가 파라미터 x로 전달되고, 최종적으로 x * x 의 결과값인 16이라는 값이 출력 됩니다. (위 내용을 우측 링크를 통해 다시한번 확인할 수 있어요: https://youtu.be/PjiRLH5RJIg?t=5m51s) 지금까지 단일 파라미터 메소드를 예로 공부해 보았습니다. ### Quiz 01: 다음 소스코드의 에러원인을 찾아주세요. (힌트: [타입 불일치](http://cloudstudying.kr/lectures/49#mismatched-types)) ``` public class Square2 { public static void printSquare(int x) { System.out.println(x * x); } public static void main(String[] args) { printSquare("hello"); // Compile Error printSquare(5.5); // Compile Error } } ``` ### Quiz 02: 아래 코드는 컴파일이 가능한가요? 가능하다면 그이유와 결과값을 알려주세요. (힌트: [자료형 변환](http://cloudstudying.kr/lectures/49#casting)) ``` public class Square3 { public static void printSquare(double x) { System.out.println(x * x); } public static void main(String[] args) { printSquare(3); } } ``` --- <a name="multiple-parameters"></a> ## 다중 파라미터(Multiple Parameters) 이제 파라미터에 대한 내용을 마무리 지어볼까 합니다. 여러 입력값을 받아서 수행하는 메소드의 경우, 즉 파라미터가 2개 이상인 메소드는 아래와 같이 정의 합니다. ``` public static void NAME(TYPE VAR1, TYPE VAR2) { … } ``` 단일 파라미터 메소드와 비교해 보면, 단지 파라미터가 한개 더 추가되었을 뿐입니다. 3개, 4개, 그 이상의 경우도 마찬가지로 파라미터만 추가로 선언해주면 됩니다. 이렇게 정의된 메소드는 아래와 같이 호출합니다. 여기서 입력값 X는 위에 정의된 파라미터 VAR1로 대입되고, Y 또한 VAR2로 대입 됩니다. ``` NAME(X, Y); ``` ## 다중 파라미터 메소드의 실행흐름 다시한번 예제를 통해 다중 파라미터 메소드의 실행흐름을 분석해 봅시다. ``` class Multiply { public static void times(double a, double b) { System.out.println(a * b); } public static void main(String[] arguments) { times(2, 2); times(3, 4); } } ``` 먼저 main 메소드가 수행되고, times(2, 2)가 호출됩니다. 실행의 흐름은 times 메소드로 넘어가게 되고 입력값은 각각 파라미터 a와 b로 대입 됩니다. 따라서 a의 값은 2.0, b의 값 또한 2.0을 갖게 됩니다. 그 다음 a * b의 결과값 4.0을 출력 합니다. times 메소드는 종료가 되고, 실행의 흐름은 다시 main 메소드로 돌아와 times(3, 4)를 수행합니다. 때문에 파라미터 a에 3.0, b에 4.0 값이 대입되고, 최종적으로 12.0이 출력되어 프로그램이 종료 됩니다. (동영상을 통해 실행흐름을 확인 할 수 있어요: https://youtu.be/PjiRLH5RJIg?t=17m9s) 여기까지 다중 파라미터 메소드에 대해 알아보았습니다. --- ## 확인하기 1. 파라미터란? 2. 다음 메소드를 호출하는 방법은? ``` public static void cube(int x) { System.out.println(x * x * x); } ``` 3. 다음 메소드를 호출하는 방법은? ``` public static void div(int a, int b) { System.out.println(a / b); } ```

Challenge

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