Java/Java의 정석 - 객체지향프로그래밍

클래스 메서드(static메서드)와 인스턴스 메서드

결국 이기는 사마의 2022. 2. 3. 14:08

클래스 메서드와 인스턴스 메서드

  클래스 메서드는 해당 클래스 메서드가 포함된 인스턴스를 생성하지 않아도 '클래스명.메서드명();'으로 호출할 수 있는 반면, 인스턴스 메서드는 반드시 해당 메서드가 포함된 인스턴스를 생성해야 사용할 수 있다. 이는 프로그램 실행 시 클래스 메서드는 메서드 영역에 우선 저장되는 반면, 인스턴스 메서드는 인스턴스를 생성해야 힙(heap)에 생성되기 때문이다. 즉 프로그램 실행 시 클래스 메서드는 인스턴스 메서드와 비교하여 항상 우선적으로 만들어지므로 클래스 메서드는 인스턴스 메서드(그리고 인스턴스 변수)를 사용할 수 없다. 반대로 인스턴스 메서드에서 클래스 메서드나 클래스 변수를 사용하는 것에는 문제가 없다.

  어떤 메서드에 static을 붙이는가는 해당 메서드가 어떤 값을 사용하는가에 따른다. 메서드의 작업에 인스턴스 변수나 인스턴스 메서드를 사용하지 않는다면 해당 메서드를 클래스 메서드로 정의하는 것을 고려해야 한다. 클래스 변수의 경우, 해당 클래스로 만든 모든 인스턴스가 공통적으로 사용해야 하는 변수를 클래스 변수로 정의한다.