-
학원 DAY9. 메소드의 매개변수, 반환타입, 메소드 중복정의(오버로딩)기록 2022. 9. 17. 21:49
메소드의 매개변수(Parameter)
- 매개변수는 메소드가 작업을 수행하는데 필요한 입력값을 저장하기 위한 변수다.
- 매개변수는 0개 이상 정의할 수 있다.
- 매개변수의 타입은 기본자료형(정수, 실수, 불린, 문자)과 참조자료형(문자열, 배열, 객체)이 모두 가능하다.
- 메소드를 호출하는 측에서는 반드시 매개변수에 맞게 인자(Argument)값을 전달해야 한다.
call by value
값만 전달했을 때는 사본을 전달한 것이기 때문에 원본 객체의 속성을 변경할 수 없다.
Call by value라는 것은 그대로 해석하면 '값에 의한 호출'이다. 메소드로 인자값을 넘길때 그 값을 복사하여 넘기는 형태이다. 따라서 이 방식으로 메소드 호출을 하면 메소드 내에서는 복사된 값으로 작업을 하기 때문에 원래의 값을 변경시키지 않는다.
call by reference
주소값을 전달했을 때는 사본을 전달하기는 하지만 바라보는 것이 같기 때문에 test3에서 원본 객체의 속성도 변경될 수 있다.
Call by reference는 '참조에 의한 호출'이다. 인자값을 메소드로 넘겨 줄때 그 객체를 참조하는 주소를 넘겨주는 형태이다. 따라서 메소드 내에서도 원래의 값에 접근이 가능하다.
주소값 전달의 이점 : 객체를 온전히 사용할 수 있고, 정보를 쉽게 주고받을 수 있다.
전달해야할 값이 많을 때는 값보다는 객체를 사용하면 쉽다.
메소드의 반환타입과 반환값
- 반환값은 메소드를 호출한 측에게 제공되는 메소드 구현부의 최종 결과값(출력값)이다.
- 메소드 선언부에는 해당 메소드의 반환값에 대한 반환타입이 지정되어 있어야 한다.
- 메소드는 오직 한 개의 반환값(출력값)만 호출한 측에게 제공할 수 있다.
- 메소드의 반환타입은 기본자료형값(정수값, 실수값, 불린값, 문자값)과 참조형값(문자열, 배열, 객체) 모두 가능하다.
- 메소드의 반환타입이 기본자료형인 경우는 값이 반환된다.
- 메소드의 반환타입이 참조형인 경우는 해당 객체의 주소값이 반환된다.
- 반환값이 존재하지 않는 메소드의 반환타입은 void다.
- 반환값이 존재하는 메소드의 구현부에는 반드시 return 반환값; 수행문이 정의되어 있어야 한다.
- 반대로 void타입의 메소드에서 return y;를 쓰면 안된다. (그냥 return;은 됨. 값을 반환하지는 않고 프로그램을 끝내는 거니까.)
- 반환타입이 void가 아닌 메소드를 호출하는 경우 호출하는 코드에서는 그 메소드가 반환하는 값을 저장할 변수가 필요하다.
- 반환값을 저장할 변수의 타입은 메소드의 반환타입을 참고해서 결정한다.
참조자료형 타입의 매개변수
- 메소드의 매개변수가 참조자료형 타입이면 객체의 주소값을 요구하는 것이다.
- 해당 메소드를 호출하기 위해서는 매개변수에서 지정한 타입에 해당하는 객체의 주소값을 이미 가지고 있어야 한다.
- 객체의 주소값을 매개변수의 인자로 전달하면, 주소값을 전달받은 그 메소드도 같은 객체를 참조하게 된다.
반환타입이 참조자료형(객체, 배열)인 경우 - 반환타입으로 지정된 객체의 주소값이 반환된다.
메소드의 중복 정의 (메소드 오버로딩)
- 메소드 중복정의는 하나의 클래스안에 같은 이름의 메소드를 여러 개 정의하는 것이다.
- 하나의 클래스에 동일한 이름의 메소드를 여러 개 정의하기 위해서는 매개변수들이 서로 달라야 한다.
- 매개변수의 개수가 다르거나 타입이 다를 경우, 똑같은 이름의 메소드로 정의할 수 있다.
- 매개변수의 이름을 서로 다르게 정의하는 것은 메소드 중복정의의 조건이 아님
메소드 중복정의의 목적
: 유사한 기능은 일관되게 하나의 이름으로 실행하기 위함.
: 유사한 기능이 동일한 이름을 가지기 때문에 해당 기능을 사용하기 쉬워진다.
- 우리는 이미 메소드 중복정의의 혜택을 보고 있다. (ex. println)
'기록' 카테고리의 다른 글
학원 DAY10. 생성자 (0) 2022.09.18 학원 DAY9. 메소드(2) (0) 2022.09.17 학원 DAY8. 메소드 (0) 2022.09.17 학원 DAY7. 객체지향 프로그래밍 (0) 2022.09.17 DAY6. 향상된 FOR문 (Enhanced-for문) (0) 2022.09.09