티스토리 뷰
#. 매개변수
> 매개변수
- 메서드를 호출해서 객체 간 메시지가 전달될 때 부가 정보가 필요한 경우 매개변수 형태로 전달
- 메서드 매개변수로 전달되는 데이터가 기본형인지 참조형인지에 따라 동작 방식이 달라짐
-----------------------------------------------------------------------------------------
> 값 복사
- 다른 위치에 두 개의 변수가 동일한 값을 가짐
- 특정 변수의 값을 수정해도 다른 변수에는 영향을 미치지 않음
1 2 3 4 5 | int score = 90; System.out.println(score); int copyScore = score; System.out.println(copyScore ); | cs |
> 값에 의한 호출(Call by value) : 매개변수의 타입이 기본 데이터 타입인 경우
* 객체가 다른 객체의 메서드를 호출할 때 단순히 메서드 수행에 필요한 값만 넘기고자 하는 경우 사용
1. 메서드를 호출할 때 넘어가는 실 매개변수(매개변수 값)
2. 호출되는 메서드의 인자(형식 매개변수)에 복사
3. 실 매개변수 값은 영향을 받지 않음
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public class Test { public static void main(String[] args) { int score = 10; // print : score = 10 changeScore(score); // result_print : score = 10 } private static int changeScore(int score) { score = 100; // method_print : score = 100 return score; } | cs |
-----------------------------------------------------------------------------------------
> 주소 복사
- 같은 위치에 두 개의 변수가 참조
- 특정 변수로 배열의 값을 수정하면, 동일한 객체를 참조하는 다른 변수도 수정된 값을 인식
1 2 3 4 5 | int[] list = {90, 85, 100}; System.out.println(list[0]); int[] copyList = list; System.out.println(copyList [0]); | cs |
> 주소에 의한 호출(Call by reference) : 매개변수의 타입이 참조 데이터 타입인 경우
* 메서드 수행 이후에도 수행 결과를 지속적으로 유지하고자 하는 경우 사용
- 참조형 매개변수는 참조하는 객체의 주소 값이 복사되어 전달
- 같은 객체의 주소를 가지기 때문에 하나의 객체를 두 개의 참조변수가 공유
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public class Test { public static void main(String[] args) { int scoreList = {90, 85, 100}; // print : score = 90, 85, 100 changeScore(scoreList); // result_print : score = 100, 100, 100 } private static int[] changeScore(int[] scoreList) { scoreList[0] = 100; scoreList[1] = 100; // method_print : score = 100, 100, 100 return score; } | cs |
-----------------------------------------------------------------------------------------
> 가변적 매개변수
- 매개변수의 숫자를 컴파일이나 실행 시에 미리 지정하지 않는 방식
- 하나의 메서드만 정의하여 매개변수의 개수를 가변적으로 사용하는 방식
- 여러개의 매개변수와 같이 사용 가능.
단, 메서드 선언부의 매개변수 리스트 마지막 위치에서 딱 한 번만 사용 가능
1 2 3 | int add(String s, int... i) { ... } | cs |
> 사용 예
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class Test { public static int Sum(int... num) { // 가변적 매개변수를 사용한 메서드 int sum = 0; for(int i=0; i<num.length; i++) { // 가변적 매개변수로 넘어온 값들은 반복문으로 sum += num[i] } return sum; } public static void main(String[] args) { System.out.println(Sum(1)); System.out.println(Sum(1, 2)); System.out.println(Sum(1, 2, 3)); } | cs |
출처 : SW Expert Academy
'Web > JAVA' 카테고리의 다른 글
[JAVA] 자바의 Modifier (static, final, abstract) (0) | 2019.08.05 |
---|---|
[JAVA] Eclipse에서 JAVA로 디버깅하기 (2) | 2019.07.26 |
[JAVA] this()의 의미와 사용 (0) | 2019.07.26 |
[JAVA] 생성자 Overloading (0) | 2019.07.26 |
[JAVA] 메서드 Overloading (0) | 2019.07.26 |