- 어떠한 작업을 수행하기 위한 명령문의 집합
- 주로 어떤 값을 입력받아서 수행 후 그 결과를 돌려준다.
- 입력받는 값이 없을 수도 결과를 반환하지 않을수도 있다.
- 반복적으로 수행되는 코드를 줄이기 위해서 사용한다.
메서드 작성
반환타입 메서드명(변수타입 변수명,...){
수행될 문장
return 반환값;
}
int add(int a, int b){
int rusult = a + b;
return result;
}
- 메서드의 선언부는 후에 변경사항이 발생하지 않도록 주의
- 변경시, 그 메서드가 호출되는 모든 곳이 함께 변경되어야하기 때문
return문
- 메서드가 정상적으로 종료되는 경우
- 메서드의 마지막 문장까지 실행된 경우
- return문을 만났을 때 (switch-case문과 반복문의 break같은 아이)
★ 메소드 중괄호 닫힐때까지 안가고 반환값 돌려주고 바로 종료됨
반환값이 있는 경우
- return 반환값; => 반환값과 반환타입의 타입은 일치해야 한다
반환값이 없는 경우
- return;
- 반환타입이 void가 되어야한다.
- 생략가능 (중간에 return하는건 써줘야됨, 마지막에만 생략 가능)
메서드 호출
방법
클래스명.메서드명(인자);
int 변수명 = 클래스명.add(3,5);
규칙
- 인자의 개수와 순서 = 호출된 메서드에 선언된 매개변수
- 인자의 타입: 매개변수의 타입과 일치 OR 자동 형변환이 가능한 것
순서
- 누구 친구세요?
- 원하는 입력값(매개변수)이 있으신가요?
- 반환값(리턴)이 있나요 -> 네 : 변수에 저장해서 쓰세요
- ---------------------------------아뇨: 걍 호출만하세요
기본형 매개변수와 참조형 매개변수
- 메서드가 호출되었을 때 매개변수로 지정한 값(인자값)을 메서드의 매개변수에 "복사"하여 넘겨준다.
기본형 매개변수
- 단순히 값만을 복사해 준다.
- 변수의 값을 "읽기"만 할 수 있다.
참조형 매개변수
- 인스턴스의 주소를 복사해 준다.
- 변수의 값을 "읽기 또는 변경"이 가능하다
class Data{
int x;
}
public class DataTest {
public static void main(String[] args) {
Data d1 = new Data();
d1.x = 10;
System.out.println(d1.x);
change(d1.x);
System.out.println(d1.x);
Data d2 = new Data();
d2.x = 10;
System.out.println(d1.x);
change(d2);
System.out.println();
}
static void change(int x){
x = 1000;
System.out.println("change() 기본형 : " + x);
}
static void change(Data d1){
d1.x = 1000;
System.out.println("change() 참조형 : " + d1.x);
}
}
재귀호출(Recursive Call)
- 메서드 내에서 자기자신 메서드를 다시 호출하는 것
- 호출한 메서드와는 관계없이 독립적인 작업을 수행
- 무한반복 -> 조건문 필수
메서드의 종류
클래스메서드
- 객체생성없이 '클래스명.메서드명()'
- 인스턴스 멤버와 관련없는 작업을 수행 (p.110)
- 클래스메서드 내에서는 인스턴트멤버를 사용할 수 없다.
- 메서드 생성시 그 메서드 내에서 인스턴스멤버를 사용하지 않고 있다면 클래스메서드로 만드는 것을 고려해야한다.
- 항상 클래스멤버들이 인스턴스멤버들보다 먼저 메모리에 올라간다
- 클래스멤버가 로드된 시점에는 인스턴스 멤버들이 없다
- 클래스멤버는 인스턴스 멤버를 호출할 수 없다.
인스턴스메서드
- 인스턴스를 생성 후, '참조변수명.메서드명()'으로 호출
- 인스턴스멤버와 관련된 작업을 주로 수행한다.
- 클래스멤버와 관련된 작업을 수행할 수도 있다.
- 인스턴스메서드 내에서는 '모든 멤버'를 호출할 수 있다.