- 메서드의 구조
// 메서드의 선언부
접근제한자 반환타입 메서드이름(변수타입 변수명, 변수타입 변수명, . . .) {
// 메서드의 구현부
수행문;
수행문;
수행문;
}
반환타입 메서드이름(매개변수) {
수행문;
}
예)
int add(int x, int y) {
int result = x + y;
return result;
}
메서드의 작업수행 결과인 반환값의 타입을 적는다.
void
- 반환타입이 void면 메소드 실행 후 반환값(획득되는 값)이 없다는 뜻이다.
- 값을 추가, 변경, 삭제하는 수행문을 실행하는 경우는 반환타입이 void다.
int multiply(int x, int y) {
if(a>b) {
return a;
}
}
- if문의 조건식이 true일 때만 retrun문이 실행되기 때문에 오류가 발생한다.
- if문 바깥에도 return문을 추가해주어야 한다.
void plus(int x, int y) {
retutn 0;
}
- 오류
void plus(int x, int y) {
retutn;
}
- 오류 아님
- Object는 모든 자바 클래스의 부모 클래스다.
- main 메소드는 항상 먼저 생성된다.
- 인스턴스 변수 혹은 멤버 변수는 객체 안에서 생성되고 매개변수 혹은 지역 변수는 메서드 안에서 생성된다.
메서드의 종류
1) 필드와 상호작용 하는 메서드
- 해당 클래스의 필드 값을 변경하거나 가져오는 등의 작업을 수행한다.
- 이러한 메서드는 주로 객체의 상태를 변경하거나 필드 값을 조작하는 데 사용된다.2) 필드와 상호작용 하지 않는 메서드
- 클래스의 기능을 수행하거나 값을 반환하는 등의 작업을 수행한다.
- 이런한 메서드는 주로 객체의 상태를 변경하지 않고 단순히 정보를 반환하거나 다른 메서드를 호출하는 등의 작업을 수행한다.
메서드 작업에 필요한 메모리 공간을 제공한다.
호출스택의 흐름

메서드가 호출되면 수행에 필요한 만큼의 메모리를 스택에 할당받는다.
메서드가 수행을 마치고 나면 사용했던 메로리를 반환하고 스택에서 제거된다.
호출스택의 제일 위에 있는 메서드가 현재 실행 중인 메서드이다.
아래에 있는 메서드가 바로 위의 메서드를 호출한 메서드다.
1) 기본형 매개변수
2) 참조형 매개변수
인스턴스 변수나 인스턴스 메서드를 사용하지 않는 메서드를 클래스 메서드로 정의한다.
클래스변수처럼 객체를 생성하지 않고도 '클래스이름.메서드이름(매개변수)'와 같은 식으로 호출이 가능하다.
클래스 메서드는 인스턴스 변수를 사용할 수 없다. 클래스 메서드는 인스턴스 생성 없이 호출이 가능하므로 클래스 메서드가 호출되었을 때 인스턴스가 존재하지 않을 수도 있기 때문이다.
메서드 작업을 수행하는데 인스턴스 변수를 필요로 하는 메서드다.
인스턴스 변수는 인스턴스(객체)를 생성해야만 만들어지므로 인스턴스 메서드는 반드시 객체를 생성해야만 호출할 수 있다.
인스턴스 변수나 인스턴스 메서드에서는 static이 붙은 멤버들을 사용하는 것이 자유롭다. 인스턴스 변수가 존재한다는 것은 static변수가 이미 메모리에 존재한다는 것을 의미하기 때문이다.
static을 붙이는 기준
- 클래스를 설계할 때, 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것에 static을 붙인다.
- 메서드 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙이는 것을 고려한다.
long add(int a, long b) {...}
long add(int a, int b) {...}
오버로딩의 조건
- 메서드의 이름이 같아야 한다.
- 매개변수의 개수 또는 데이터타입이 달라야 한다.
- 반환 타입은 관계없다.
System.out.println(1)
System.out.println("안녕")
System.out.println(3.14)
- PrintStream 클래스에 어떤 종류의 매개변수를 지정해도 출력할 수 있도록 오버로딩된 println메서드를 정의해두었다.