Java

[Java, 객체지향] static 메서드, 인스턴스 메서드 비교

15호의 개발자 2021. 8. 10. 15:22
반응형

[Java, 객체지향] static 메서드, 인스턴스 메서드 비교

 

 

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

  • static으로 시작
  • 객체 생성 없이 '클래스이름.메서드이름()'으로 호출
  • 메서드 내에서 인스턴스 변수 사용 불가능 (매개변수만으로 사용 가능)
  • ★ 인스턴스 메서드 호출 불가능
  •  언제 static을  붙이는가? 인스턴스 변수를 사용하지 않을 때 (≒ 지역 변수를 사용할 때)
ex) static long add(long a, long b) { return a+b; }

     매개변수만으로 사용 가능하다.

 

ex) Math.random()

*지역 변수: 메서드 내에 선언한 변수

*static 메서드에 인스턴스 변수를 사용하면 에러 발생

 

 

 

인스턴스 메서드

  • static이 안 붙음
  • 인스턴스 생성 후, '참조변수.메서드이름()'으로 호출
  • 메서드 내에서 인스턴스 변수 사용 가능 (매개변수는 필요 없음)
  • static 메서드 호출 가능

ex) long a, b;

     long add() { return a+b; }

     인스턴스 변수 a, b로 작업하므로 매개변수는 필요 없다.

 

인스턴스 메서드는 인스턴스 변수를 사용하는 것이기 때문에 당연히 인스턴스를 생성해야 한다.

 

 

 

static 메서드와 인스턴스 메서드의 차이?

둘의 차이는 인스턴스 변수 사용 여부이다.

인스턴스 변수를 메서드 내에 사용하지 않으면, static 메서드(클래스 메서드)이고

인스턴스 변수를 메서드 내에 사용하면, 인스턴스 메서드이다. 

 

cf) 객체 = 인스턴스 변수의 묶음

 

 

 

메서드 내에서 인스턴스 변수를 사용하지 않는 경우,

인스턴스 메서드보다는 static 메서드로 만드는 것이 더 낫다.

 

인스턴스 메서드의 경우

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

그렇기 때문에 성능 향상을 위해서는

인스턴스 변수를 사용하지 않는다면 static 메서드로 정의하는 것이 낫다.

 

 

 

 

(출처: 유튜브 남궁성의 정석코딩)

반응형