Instance 메서드 vs Static 메서드

📚 참고
자바의 정석 기초편 (객체지향개념만)
Instance 메서드
- 인스턴스 생성 후, 참조변수.메서드명() 방식으로 호출
- 인스턴스 멤버(iv, im)를 사용해 작업하는 메서드
- 메서드 내에서 인스턴스 변수(iv) 사용 가능
Static 메서드
- 객체 생성없이 클래스명.메서드명() 방식으로 호출
- ex) Math.random();
- 인스턴스 멤버(iv, im)를 사용할 수 없는 메서드
- 메서드 내에서 인스턴스 변수(iv) 사용 불가
- 인스턴스 변수는 객체(iv 묶음)가 생성되어야지만 사용할 수 있음
static 사용 시점
- static 메서드 : 인스턴스 멤버(iv, im)를 사용하지 않는 메서드에 static을 붙인다.
- static 변수 : 속성(멤버 변수) 중에서 공통 속성에 static을 붙인다.
- ex) Card 클래스의 공통 속성인 width, height 생각
예제
class MyMath2 {
// iv
long a, b;
// im (iv 사용)
long add() {
return a + b;
}
// static method (iv 사용 X, lv 사용 O)
// 작업에 필요한 값들은 지역변수로 해결함
static long add(long a, long b) {
return a + b;
}
}
class MyMathTest2 {
public static void main(String args[]) {
// 클래스 메서드 => iv 필요없음 => iv 묶음이 객체 => 객체 필요없음
System.out.println(MyMath2.add(200L, 100L));
// 1. 인스턴스 생성 (iv 생성)
MyMath2 mm = new MyMath2();
mm.a = 200L;
mm.b = 100L;
// 2. 인스턴스 메서드(iv로 작업) 호출
System.out.println(mm.add());
}
}
메서드 간 호출과 참조
- static 메서드는 인스턴스 변수 사용불가
class Test {
int iv;
static int cv;
// 객체 생성 후, 호출 가능
void instanceMethod() {
System.out.println(iv); // 사용가능
System.out.println(cv); // 사용가능
}
static void staticMethod() {
System.out.println(iv); // 에러🚩 사용불가능
System.out.println(cv); // 사용가능
}
}
- static 메서드는 인스턴스 메서드 호출불가
class Test {
void instanceMethod() {} // 인스턴스 메서드
static void staticMethod() {} // static 메서드
void instanceMethod2() {
instanceMethod();
staticMethod();
}
static void staticMethod2() {
instanceMethod(); // 에러🚩 호출불가 (iv를 사용해 작업하는 메서드이므로 객체 필요)
staticMethod();
}
}
복습
Q. static 메서드는 static 메서드 호출가능?
A. OK
Q. static 메서드는 인스턴스 변수 사용가능?
A. NO
Q. static 메서드는 인스턴스 메서드 호출가능?
A. NO
Q. 왜 static 메서드는 인스턴스 멤버를 쓸 수 없을까?
A. static 메서드 호출 시, 객체가 없을 수도 있어서
'JAVA > 객체지향개념' 카테고리의 다른 글
| 생성자 (Constructor) (0) | 2021.03.11 |
|---|---|
| 오버로딩 (Overloading) (0) | 2021.03.11 |
| 기본형 매개변수, 참조형 매개변수 차이점 (0) | 2021.03.09 |
| 호출 스택 (Call Stack) (0) | 2021.03.07 |
| 메서드 (Method) (0) | 2021.03.06 |
댓글
이 글 공유하기
다른 글
-
생성자 (Constructor)
생성자 (Constructor)
2021.03.11 -
오버로딩 (Overloading)
오버로딩 (Overloading)
2021.03.11 -
기본형 매개변수, 참조형 매개변수 차이점
기본형 매개변수, 참조형 매개변수 차이점
2021.03.09 -
호출 스택 (Call Stack)
호출 스택 (Call Stack)
2021.03.07