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. 인스턴스 멤버의 경우
- 클래스 변수, 클래스 메서드 사용 가능
- 인스턴스 변수, 인스턴스 메서드 사용 가능
실제로 같은 클래스 내에서 클래스멤버가 인스턴스멤버를 참조 또는 호출하는 일은 거의 드물다.
만일 그런 경우가 발생했다면, 인스턴스 메서드로 작성해야할 메서드를 클래스메서드로 한 것은 아닌지 다시 한번 고려해야 한다.
'JAVA > JAVA 기본정리' 카테고리의 다른 글
생성자에서 다른 생성자 호출하기/ 참조변수 this와 생성자 this() (0) | 2022.04.26 |
---|---|
생성자 ( Constructor) / 기본생성자/ 매개변수가 있는 생성자 (0) | 2022.04.25 |
오버로딩 (overloading) / 가변인자(varargs) : 매개변수 개수를 동적으로 사용할 수 있는 기능 (0) | 2022.04.25 |
클래스의 정의/ 변수와 메서드/ 클래스변수/ 인스턴스 변수/ 지역변수 (0) | 2022.03.01 |
객체지향 언어 OOP ( object oriented programming) (0) | 2022.03.01 |