객체 지향 프로그래밍(OOP)에서 메서드는 static 메서드와 non-static 메서드 크게 두 가지로 나눌 수 있다. 이 두 가지 메서드는 사용되는 방식과 목적이 다른데 이에 대해서 알아보도록 하자.
1. Non-Static Method (인스턴스 메서드)
정의
Non-static 메서드는 클래스의 인스턴스(객체)에 속하는 메서드이다. 이러한 메서드는 특정 객체와 연관되어 있으며, 객체의 상태(인스턴스 변수)를 변경하거나 그 상태를 기반으로 작업을 수행할 수 있다.
특징
- 객체 인스턴스 필요: Non-static 메서드를 호출하려면 먼저 해당 클래스의 객체를 생성해야 한다.
- 객체 상태 접근 가능: 이 메서드는 객체의 인스턴스 변수와 다른 인스턴스 메서드에 접근할 수 있다.
- 호출 방식: object.methodName()
예시
class Dog {
String name;
// Constructor
Dog(String name) {
this.name = name;
}
// Non-static method
void bark() {
System.out.println(name + " is barking");
}
}
public class Main {
public static void main(String[] args) {
Dog myDog = new Dog("Buddy");
myDog.bark(); // 출력: Buddy is barking
}
}
2. Static Method (정적 메서드)
정의
Static 메서드는 클래스 자체에 속하는 메서드이다. 이 메서드는 클래스의 인스턴스와 독립적으로 동작하며, 객체를 생성하지 않고도 호출할 수 있다.
특징
- 객체 인스턴스 불필요: Static 메서드는 객체를 생성하지 않고 클래스 이름으로 직접 호출할 수 있다.
- 객체 상태 접근 불가: 이 메서드는 인스턴스 변수나 인스턴스 메서드에 접근할 수 없다. 단, static 변수와 다른 static 메서드에만 접근할 수 있다.
- 호출 방식: ClassName.methodName()
예시
class MathUtil {
// Static method
static int add(int a, int b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
int result = MathUtil.add(5, 3); // 출력: 8
System.out.println("Result: " + result);
}
}
3. Static 메서드와 Non-static 메서드 비교
특성 | Static 메서드 | Non-Static 메서드 |
객체 인스턴스 필요 여부 | 필요하지 않음 | 필요함 |
인스턴스 변수 접근 | 불가능 (static 변수만 접근 가능) | 가능 |
호출 방식 | ClassName.methodName() | object.methodName() |
사용 목적 | 클래스 수준의 기능 제공 (유틸리티 메서드 등) | 객체의 상태를 변경하거나 객체와 관련된 작업 수행 |
4. 결론
Static 메서드는 클래스 자체와 관련된 기능을 제공하거나 유틸리티 기능을 제공할 때 유용하며, Non-static 메서드는 객체의 상태와 직접적으로 상호작용할 필요가 있을 때 사용된다.