클래스 메소드란?
클래스 변수는 인스턴스가 아닌 클래스에 속한 변수이다.
마찬가지로, 클래스 메소드는 인스턴스가 아닌 클래스에 속한 메소드이다.
클래스 메소드는 언제 사용할까?
'인스턴스 메소드'는 인스턴스에 속한 것이기 때문에, 반드시 인스턴스를 생성해야 사용할 수 있다.
하지만 '클래스 메소드'는 클래스에 속한 것이기 때문에, 인스턴스를 생성하지 않고도 바로 실행할 수 있다.
인스턴스를 생성하지 않는 클래스, 어떤 것이 있을까? 두 가지 예를 살펴보자.
+ 22.01.16 클래스 메소드 사용할 때는 언제인가?
- 각각 다른 값을 보관하는 인스턴스가 필요하지 않을 때
- 필요할 때 매개변수(인자)를 이용하여 한 번만 사용할 때
Math 클래스
수학 관련 기능을 모아둔 Math 클래스를 import해서 확인해보자.
import java.lang.Math;
public class Driver {
public static void main(String[] args) {
System.out.println(Math.abs(-10)); // 절댓값
System.out.println(Math.max(3, 7)); // 두 값 중 최댓값
System.out.println(Math.random()); // 0.0과 1.0 사이의 랜덤값
}
}
10
7
0.40910432549890663
이렇게 Math.abs(), Math.max() 등을 사용하면, 자바에서 미리 만들어 둔 수학 관련 기능을 활용할 수 있다.
하지만, Math 클래스의 인스턴스는 필요하지 않기 때문에 생성하지 않는다. 단지 Math 클래스의 기능(메소드)만 활용하면 된다. 이렇게 인스턴스의 생성 없이 메소드만 모아서 사용하고 싶을 때, 클래스 메소드를 사용할 수 있다.
Math 클래스에 있는 abs(), max(), random() 등의 메소드가 바로 '클래스 메소드'이다.
main 메소드
사실 공부하면서 가장 먼저 접한 '클래스 메소드'는 바로 main 메소드이다.
public static void main(String[] args) {
...
}
main은 자바 프로그램의 시작점이다. 첫 번째로 실행되는 코드이니, 어떤 인스턴스도 생성되어 있지 않다.
main 메소드 역시 인스턴스를 생성하지 않고 실행하는 '클래스 메소드'이다.
클래스 변수를 정의하기 위해서는 static이라는 키워드를 사용했었다. 클래스 메소드도 동일하게 static이라는 키워드로 정의할 수 있다. main 앞에 static 키워드가 있는 걸 보니, 클래스 메소드가 확실하다.
클래스 변수를 다룰 때
이 외에도, 앞서 살펴본 '클래스 변수'를 다룰 때 사용할 수 있다.
만약 인스턴스와 직접적인 관계가 없는 클래스 변수를 바꾸려면, 아래와 같이 클래스 메소드를 사용할 수도 있다.
count라는 클래스 변수를 increment()라는 클래스 메소드로 바꿔보자.
public class Counter {
static int count;
public static void increment() {
count++;
}
public static void main(String[] args) {
System.out.println(Counter.count);
Counter.increment();
System.out.println(Counter.count);
Counter.increment();
System.out.println(Counter.count);
Counter.increment();
System.out.println(Counter.count);
}
}
0
1
2
3
언제 클래스 메소드를 써야할지 판단하기 어렵다면, 아래와 같은 질문을 해보자.
"생성된 인스턴스가 하나도 없더라도 이 메소드를 호출하는 게 말이 되는가?"
정답이 'Yes'라면 클래스 메소드, 즉 static 메소드를 사용하면 된다.
'TIL > Java' 카테고리의 다른 글
[Java] String 클래스(대소문자 변환, 문자열비교_equals) (0) | 2022.01.10 |
---|---|
[Java] 단위 변환기 (0) | 2022.01.08 |
[Java] 인스턴스 변수 vs 클래스 변수 (0) | 2022.01.07 |
[Java] 예외(Exception) - 코드 안전하게 만들기(try-catch 예외 처리) (0) | 2022.01.07 |
[Java] 변수를 안전하게 만드는 법: final (0) | 2022.01.07 |