Java : 메서드, return , 호출 스택
메서드란?
- 문장들을 묶어놓은 것
- 값(입력)을 받아서 처리하고, 결과를 반환(출력)
코드의 중복을 줄이기 위해서 메서드를 사용한다.
만약에 반복문이 있으면 그거를 두번 작성하는 것이 아닌 메서드를 이용해서 한번 작성하고 메서드를 호출하는 방법으로 사용한다.
int add (int x, int y) {
int result = x + y;
return result;
}
메서드 이름은 add가 된다.
매개변수가 int x , int y (입력 부분)이 된다.
return으로 결과를 반환한다.
메서드의 장점
- 코드의 중복 줄임
- 코드의 관리 쉽다
- 코드 재사용
- 코드 간결해서 이해 쉽다
메서드의 작성
- 반복적으로 수행되는 여러 문장을 메서드로 작성
- 하나의 메서드는 한 가지 기능만 수행하도록 작성
메서드 = 선언부 + 구현부
int add (int x, int y) // 선언부{
int result = x + y; // 구현부
return result; // 구현부
} // 구현부
지역 변수(lv) : 메서드 내에 선언된 변수
위의 코드에서는 x,y 그리고 result가 모두 지역 변수가 된다. 메서드가 종료되면 사라짐!
메서드 호출
메서드 이름 (값1, 값2, ... ); // 메서드를 호출하는 방법
void는 그냥 써주면 됨.
메서드의 값을 받아와서 함수를 실행하고 작업을 마치면 다시 호출한 곳으로 돌아간다.
메서드는 클래스 영역에만 정의 가능하다!
return문, 반환값
실행 중인 메서드를 종료하고 호출한 곳으로 되돌아간다.
void testMethod(int num){
if(!(2 <= num && num <= 10))
return;
for(int i=1; i<=9; i++){
System.out.printf("%d * %d = %d%n", num, i, num * i);
}
return;
}
반환 타입이 void가 아니면, 반드시 return문이 필요하다.
호출 스택(call stack)
스택(stack):밑이 막힌 상자. 차곡차곡 쌓임.
메서드 수행에 필요한 메모리가 제공되는 공간
메서드가 호출되면 호출스택에 메모리 할당, 종료되면 해제
프로그램 실행과정이 중요함.
엄청 간단한 코드로 해석해보자.
class Test{
public static void main(String[] args){
System.out.println("Hello");
}
}
처음에는 스택이 비어있음.
그리고 이제 main메서드가 올라가고, 그 다음에 main이 println을 호출함(이때 main은 대기상태로 변함),
println을 작업을 완료하고 메모리를 반환하고 종료함. 그러면 다시 main으로 가고 main도 실행상태에서 이제 더 이상 실행할 문장이 없으므로 메모리 반환하고 프로그램이 종료된다.