JAVA/JAVA 기본정리

클래스메서드(static 메서드) 와 인스턴스 메서드 / 클래스멤버와 인스턴스멤버간의 참조와 호출

hyun-1200 2022. 4. 25. 22:06

1. 인스턴스 메서드

  • 인스턴스 생성 후, '참조변수.메서드이름()' 으로 호출
  • 인스턴스 멤버(iv,im)와 관련된 작업을 하는 메서드
  • 메서드의 작업을 수행하는데 인스턴스 변수를 필요로 하는 메서드.
  • 메서드 내에서 인스턴스 변수(iv) 사용 가능

2. static 메서드(클래스메서드) : 메서드 앞에 static이 붙은 것

  • 객체생성 없이 '클래스이름.메서드이름()'으로 호출
    • ex. Math.random() 또는 Math.round() 
  • 인스턴스 멤버(iv,im)와 관련없는 작업을 하는 메서드
  • 인스턴스와 관계없는 메서드를 클래스메서드로 정의한다. 
  • 메서드 내에서 인스턴스 변수(iv) 사용 불가 

 

 

* 가장 큰 차이점은, static 메서드는 객체 생성없이 호출 가능하고 인스턴스메서드는 인스턴스 생성 후 호출 해야 한다는 점이다.

* 하지만 중요한 점은, static 메서드는 인스턴스 멤버를 사용할 수 없다는 점이다.  

-> 인스턴스 멤버는 객체를 생성 후에 사용가능하기 때문이다. 

 

 

 

클래스 메서드로 정의할까? 인스턴스 메서드로 정의할까?

1. 클래스를 설계할 때, 멤버변수 중 공통으로 사용하는 것에 static 을 붙인다.

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

3. 클래스 메서드는 인스턴스 변수를 사용할 수 없다.

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


 

클래스 멤버와 인스턴스 멤버간의 참조와 호출 

  • 클래스 멤버는 인스턴스 멤버를 바로 참조/호출 할 수 없음.
  • 클래스 멤버가 인스턴스 멤버를 참조하는 경우에는, 인스턴스를 생성해야 한다.
    • 인스턴스 멤버가 존재하는 시점에 클래스 멤버는 항상 존재하지만, 클래스멤버가 존재하는 시점에 인스턴스 멤버가 존재하지 않을 수도 있기 때문이다.
  • 클래스 메서드는 클래스 메서드 호출 가능
  • 클래스 메서드는 인스턴스 변수/ 인스턴스 메서드 호출 불가능
  • 인스턴스 멤버간의 호출에는 아무 문제가 없다. 하나의 인스턴스 멤버가 존재한다는 것은 인스턴스가 이미 생성되어있다는 것을 의미하며, 즉 다른 인스턴스멤버들도 모두 존재하기 때문이다.

 

1. 클래스 멤버의 경우

- 클래스 변수 사용 가능, 클래스 메서드 호출 가능

- 인스턴스 변수 또는 인스턴스 메서드 호출 원하는 경우, 객체 생성 후 사용해야함.

 

2. 인스턴스 멤버의 경우

- 클래스 변수, 클래스 메서드 사용 가능

- 인스턴스 변수, 인스턴스 메서드 사용 가능 

 

 

 

 실제로 같은 클래스 내에서 클래스멤버가 인스턴스멤버를 참조 또는 호출하는 일은 거의 드물다.

만일 그런 경우가 발생했다면, 인스턴스 메서드로 작성해야할 메서드를 클래스메서드로 한 것은 아닌지 다시 한번 고려해야 한다.