Hello

Java 인스턴스 메서드 vs 클래스 메서드, static을 언제 붙이나?

by 볼빵빵오춘기

인스턴스 메서드

  • 메서드 앞에 static이 붙지 않은 메서드이다.
  • 인스턴스 생성 후 ‘참조변수.메서드이름();’으로 호출한다.
  • 인스턴스변수/메서드와 관련있는 작업을 하는 메서드이다.
  • 메서드 내에서 인스턴스 변수 사용가능하다.

 

static 메서드(클래스 메서드)

  • 메서드 앞에 static이 붙은 메서드이다.
  • Math.random(), Math.round()와 같이 객체 생성없이 ‘클래스이름.메서드이름()’으로 호출한다.
    ⇒ 객체생성을 하지않아 참조변수가 없다.
  • 인스턴스 변수/메소드와 관련없는 작업을 하는 메서드이다.
  • 메서드 내에서 인스턴스 변수는 사용불가능하다.

 

static을 언제 붙여야 하나

  • 클래스를 설계할 때, 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것에 static을 붙인다. 
더보기

why?
생성된 각 인스턴스는 서로 독립적이기 때문에 각 인스턴스 변수는 서로 다른 값을 유지한다.

그러나 모든 인스턴스에서 같은 값이 유지되어야 하는 변수는 static을 붙여서 클래스 변수로 정의해야한다.

  • 클래스 변수는 인스턴스를 생성하지 않아도 사용할 수 있다.
더보기

why? 
static이 붙은 변수는 클래스가 메모리에 올라갈 때 이미 자동적으로 생성되기 때문이다.

  • 클래스 메서드는 인스턴스 변수를 사용할 수 없다.
더보기

why? 
인스턴스 변수는 인스턴스가 반드시 존재해야만 사용할 수 있는데

클래스메서드는 인스턴스 생성없이 호출가능하므로

클래스메서드가 호출되었을 때 인스턴스가 존재하지 않을 수 있다.

반면에 인스턴스변수/메서드에서는 static이 붙은 변수/메서드를 언제나 사용가능하다.

  • 메서드 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙이는 것을 고려한다.
더보기

why? 
메서드 호출시간이 짧아지므로 성능이 향상된다.

static을 안붙인 메서드는 실행 시 호출되어야 할 메서드를 찾는 과정이 추가적으로 필요하기 때문에 시간이 더 길다.

 

2023.11.28 - [About Programming/Java] - Java 인스턴스 변수 vs 클래스 변수 vs 지역변수

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기