Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java) 정적 메소드 vs 비정적 메소드, 핵심 차이점 완벽 정리

자바에서 메소드(method)란 특정 작업을 수행하기 위해 하나로 묶인 문장(statement)들의 집합을 의미합니다. 예를 들어 System.out.println() 메소드를 호출하면, 시스템은 실제로 여러 문장을 순서대로 실행하여 콘솔 화면에 메시지를 출력하게 됩니다.

정적 메소드(Static Method)란?

정적 메소드는 클래스 메소드(class method)라고도 불리며, 해당 클래스의 모든 객체가 공유하는 메소드입니다. 가장 큰 특징은 객체를 생성하지 않고도 클래스 이름만으로 직접 호출할 수 있다는 점입니다.

비정적 메소드(Non-Static Method)란?

클래스 내에서 static 키워드 없이 선언된 모든 메소드를 비정적 메소드, 즉 인스턴스 메소드(instance method)라고 합니다. 이 메소드는 반드시 객체를 생성한 뒤 참조 변수를 통해서만 호출할 수 있습니다.

그렇다면 두 메소드는 어떤 점에서 다를까요? 아래 표에서 핵심적인 차이점을 확인해 보세요.

번호구분 기준정적 메소드 (Static)비정적 메소드 (Non-Static)
1멤버 접근정적 멤버만 접근할 수 있으며, 비정적 멤버에는 접근할 수 없습니다.정적 멤버와 비정적 멤버 모두 자유롭게 접근할 수 있습니다.
2바인딩 방식컴파일 타임 바인딩(초기 바인딩, early binding) 방식을 사용합니다.런타임 바인딩(동적 바인딩, dynamic binding) 방식을 사용합니다.
3오버라이딩컴파일 타임에 바인딩되기 때문에 오버라이딩(재정의)할 수 없습니다.동적 바인딩 방식이므로 오버라이딩이 가능합니다.
4메모리 할당상대적으로 적은 공간을 차지하며, 메모리 할당은 단 한 번만 발생합니다.더 많은 공간을 차지할 수 있으며, 메소드가 호출될 때 메모리가 할당되고 실행이 완료되면 해제됩니다.
5선언 키워드static 키워드를 사용하여 선언합니다.별도의 특수 키워드 없이 일반적인 방식으로 선언합니다.

정적 메소드 vs 비정적 메소드 예제 코드

아래 예제는 정적 메소드와 비정적 메소드가 각각 어떻게 호출되는지 보여줍니다. 정적 메소드 roar()는 클래스 이름으로 바로 호출되는 반면, 비정적 메소드 eat()는 객체를 생성한 후에야 호출할 수 있는 것을 확인할 수 있습니다.

JavaTester.java

public class JavaTester {
    public static void main(String args[]) {
        // 정적 메소드: 클래스 이름으로 직접 호출
        Tiger.roar();
        
        // 비정적 메소드: 객체 생성 후 호출
        Tiger tiger = new Tiger();
        tiger.eat();
    }
}
class Tiger {
    public void eat(){
        System.out.println("Tiger eats");
    }
    public static void roar(){
        System.out.println("Tiger roars");
    }
}

실행 결과

Tiger roars
Tiger eats

마무리 정리

정적 메소드는 객체 생성 없이 유틸리티 성격의 기능을 제공할 때 유용하며, 비정적 메소드는 각 객체의 상태(인스턴스 변수)에 따라 동작해야 하는 경우에 적합합니다. 두 메소드의 특성과 차이를 정확히 이해하면 더 효율적이고 구조화된 자바 코드를 작성할 수 있습니다.