int add(int a, int b){ // 선언부
int result = a+ b;
return result; // 호출한 메서드로 결과를 반환한다.
}
선언부를 제외하면 모두 구현부이다.
int add (int x, int y){
int result = x + y;
return result;
}
int add (int x, int y)
가 선언부이다. int add (int x, int y) {~~~~} // ok.
int add (int x, y) {~~~~} // 에러.
return 반환값;
이 반드시 포함되어 있어야 한다. 작업을 수행한 결과인 반환값을 호출한 메서드로 전달하는데, 이 값의 타입은 반환타입과 일치하거나 적어도 자동 형변환이 가능한 것이어야 한다. int add (int x, int y){ // 반환타입은 int
int result = x + y; // 출력 result 역시 int
return result;
}
메서드 이름(값1, 값2, ....); // 메서드를 호출하는 방법.
print99danAll(); // void print99danAll()을 호출.
int result = add (3, 5); // int add(int x, int y)를 호출하고 결과를 result에 저장.
int result = add(1, 2, 3); // 에러 발생. 메서드에 선언된 매개변수의 개수가 다름.
int result = add(1.0, 2.0); // 에러 발생. 메서드에 선언된 매개변수의 타입이 다름.
1. class MyMath를 생성한다.
2. 메서드를 생성한다.
add, subtract, multiply, divede를 각각 메서드로 생성했으며, a와 b는 매개변수로 공통되게 사용되었지만, 같은 값이 아닌 각기 다른 값이다.
long result = a + b;
return result; 는
return a+b; 로 간략화 할 수 있다.
Mymath mm = new MyMath
long result1 = mm.add(x, y);
System.out.println("~~~" + result);
return;
을 자동으로 추가해준다. int add (int x, int y){
int result = x + y;
return result; // 반환타입이 void가 아니므로 생략 불가.
}
int add (int x, int y){
int result = x + y;
return result;
}
int add (int x, int y){
return x + y;
}
result
은 x + y
과 같으니 치환할 수 있다고 생각하면 간단하다.
1. 프로그램 실행 전.
2. 프로그램이 실행되면 main메서드가 실행되고 호출 스택에 쌓이게 된다.
3. main메서드가 println()메서드를 호출하게 되고 main위에 println() 메서드가 main위에 쌓인다. main메서드는 대기상태가 되고 println()메서드가 실행된다.
4. println()메서드가 작업을 종료하면 메모리를 반환하고 스택에서 사라진다. main메서드가 다시 동작한다.
5. 더이상 실행할 작업이 없어지면 main메서드도 종료되고 스택은 완전히 비워지며, 프로그램 역시 종료된다.
호출스택을 조사해보면 메서드 간의 호출 관계와 수행 중인 메서드가 어느 것인지 알 수 있다. 아래에 쌓인 메서드가 위에 있는 메서드를 호출하기 때문이다.
특징
메서드가 호출되면 수행에 필요한 만큼의 메모리를 스택에 할당받음.
메서드가 수행을 마치고 나면 사용했던 메모리를 반환하고 스택에서 제거됨.
호출스택의 제일 위에 있는 메서드가 현재 실행 중인 메서드.
아래에 있는 메서드가 바로 위의 메서드를 호출한 메서드.
반환타입(return type)이 있는 메서드는 종료되면서 결과값을 자신을 호출한 메서드(caller)에게 반환한다. 대기상태에 있던 호출한 메서드는 넘겨받은 결과값으로 수행을 계속하게 된다.