*본 게시물은 개인 공부를 기록하기 위해 작성하였으며, 내용에 오류가 있을 수 있음을 밝힙니다.
메서드 (Method)
메서드는 객체의 기능을 구현하기 위해 클래스 내부에 작성하는 함수이다. 즉, 특정한 기능을 수행하는 코드들을 하나로 묶은 것이라고 할 수 있다. 메서드는 크게 선언부(Head)와 구현부(Body)로 나뉘고, 호출하여 사용한다. 메서드는 입력값, 출력값이 있을 수도 있고 없을 수도 있다.
자바에서는 메서드를 선언할 때, public static void 메서드 명 { 메서드 내용 }, void 메서드 명 { 메서드 내용 }과 같이 선언한다. 여기서 선언부의 메서드 명 앞에 붙어 있는 public, static, void와 같은 것들이 무엇인지 대충은 알고 있었지만, 이 개념에 대해 누가 물어봤을 때 설명할 수 있을 정도로 정확히 아는 정도는 아니었기에, 지금부터라 정확히 알고 써야겠다는 생각으로 메서드에 대해 학습한 후 정리하였다.
메서드 형식
(접근자) + (static 여부) + 반환 타입 + 메서드 명(매개 변수) { 메서드 내용 }
예를 들어, protected static void volumeUp() { ~ } 과 같은 메서드가 있다면 접근자는 protected, static여부 (O), 아무것도 반환하지 않음, 메서드 명 : volumeUp, 매개 변수 없음.으로 이해할 수 있다. 이어지는 내용에서는 접근자, static, 반환 타입에 대해 자세히 정리해 보겠다.
접근자
접근자에는 접근 가능 범위가 넓은 순으로 public, protected, (default), private이 있고, 접근자 생략하면 default에 해당한다.
각 접근자의 접근 가능 범위를 표로 정리하면

위와 같이 나타낼 수 있다. 예를 들어, 접근자를 쓰지 않은 경우, 다른 패키지에 있는 클래스에서는 메서드가 정의된 클래스를 상속받았더라도 해당 메서드에 접근할 수 없다는 의미이다.
static 여부
먼저, static이 있는 경우에는 해당 메서드를 호출할 때, 객체 생성 없이 호출이 가능하다.
<예시 코드>
public class Utils {
public static void printHello() {
System.out.println("Hello!");
}
}
// 호출
Utils.printHello(); // O (객체 생성 없이 호출 가능)
반면, static이 없는 경우에는 해당 메서드를 호출할 때, 객체를 생성해야만 호출이 가능하다.
<예시 코드>
public class Person {
public void sayName() {
System.out.println("My name is Jung.");
}
}
// 호출
Person p = new Person();
p.sayName(); // O (객체 생성 필요)
**참고) main 메서드는 객체가 생성되기도 전에 먼저 실행돼야하므로 main 메서드 내에서는 static 메서드만 호출 가능하다!
반환 타입
반환 타입으로는 아무것도 반환하지 않는 void, int, String, boolean와 같은 기본형도 있고, 배열이나 객체도 반환이 가능하다.
<예시 코드>
1. void
public void printHello() {
System.out.println("Hello");
}
2. int
public int add(int a, int b) {
return a + b;
}
이 경우처럼 반환값이 있는 경우에는 그 반환값을 담을 변수를 선언하여 변수 안에 반환값을 담거나 바로 써도 된다.
- 반환값을 담을 변수를 선언한 경우
// add 메서드가 static이 아닌 경우 (인스턴스 생성 후 호출)
Calculator calculator = new Calculator();
int result = calculator.add(3, 5);
System.out.println("결과: " + result);
- 바로 쓴 경우
System.out.println(calculator.add(3, 5));