메서드란 :
1) 특정 작업을 수행하는 일련의 문장들을 {}로 묶어서 이름 붙인 것.
2) 값(입력)을 받아서 처리하고, 결과를 반환(출력) (클래스 안에 있어야함. (cf. 함수- 클래스에 독립적임)), 상자에서 어떤 과정을 거치는지 알 필요 없음 (블랙박스)
3) 장점 : 코드 중복 줄일 수 있음, 코드 관리가 쉬움, 코드 재사용 가능, 코드 간결해서 이해하기 쉬워짐.
메서드의 작성 : 반복적으로 수행되는 여러 문장을 메서드로 작성/ 하나의 메서드는 한 가지 기능만 수행하도록 작성.
메서드 = 선언부 + 구현부
선언부 : 반환타입 메서드이름 (타입 변수명, 타입 변수명, ...)
a. 반환타입 (return type) : 출력. 반환값이 없는 경우 void
b. 메서드 이름
c. 매개변수 입력 (parameter declaration) : 입력(작업에 필요한 값들). 필요한 값의 개수만큼 변수 선언/ 변수의 타입이 같아도 변수의 타입 생략 불가능
구현부 : 메서드 선언부 다음에 오는 {} 안에 메서드 호출시 수행될 코드를 넣는다.
a. return문 : void가 아닌 경우 구현부{} 안에 'return 반환값;'이 반드시 포함되어야함. / 반환값의 타입은 선언부의 반환타입과 일치하거나, 적어도 자동 형변환이 가능한 것이어야 함. / 출력은 최대 하나만 허용!
b. 지역변수(local variable) : 메서드 내에 선언된 변수 (매개변수도 lv), 다른 메서드 영역에 속해있으면 이름이 같아도 OK.
ex.
int add (int a, int b)
{
int result = a+b;
return result;
}
인수(argument)와 매개변수(parameter)
a. 인수 or 인자: 메서드를 호출할 때 괄호()안에 지정해준 값들. 인자의 개수와 순서는 호출된 메서드에 선언된 매개변수와 일치해야 함. / 인수는 메서드가 호출되면서 매개변수에 대입되므로, 인자의 타입은 매개변수의 타입과 일치하거나 자동 형변환이 가능해야 함.
ex.
public static void main(String[] args) {
int result = add(3,5); //메서드를 호출
int add (int x, int y) {
int result = x+y;
return result; // --> 짧게 return x+y;
}
메서드의 실행 흐름
1) 먼저 인스턴스 생성 -> 2) 메서드를 호출 -> 3) 메서드 안에 문장들 수행 -> 4) 작업을 마치면 호출한 곳으로 돌아와서 이후의 문장들 실행
return문 : 실행 중인 메서드를 종료하고 호출한 곳으로 되돌아간다.
반환값 : 반환타입이 void가 아닐 때 return문 반환값과 타입이 일치해야 함. (or 자동형변환 가능한 값)
호출 스택(call stack)