class MyMath2 {
long a, b;
long add() {
return a + b;
}
static long add(long a, long b) {
return a + b;
}
}
인스턴스 메서드
- 인스턴스 생성 후, '참조변수.메서드이름()'으로 호출
- 인스턴스 멤버(iv, im)와 관련된 작업을 하는 메서드
- 메서드 내에서 인스턴스 변수(iv) 사용가능
static 메서드(클래스메서드)
- 객체생성없이, '클래스이름.메서드이름()'으로 호출
- 인스턴스 멤버(iv, im)와 관련없는 작업을 하는 메서드
- 메서드 내에서 인스턴스 변수(iv) 사용불가
인스턴스 메서드 vs static 메서드의 가장 큰 차이
class MyMathTest2 {
public static void main(String[] args) {
System.out.println(MyMath2.add(200L, 100L));
MyMath2 mm = new MyMath2();
mm.a = 200L;
mm.b = 100L;
System.out.println(mm add());
}
}
static을 언제 붙여야 할까?
- 속성(멤버 변수)중에서 공통 속성에 static을 붙인다.
class Card {
String kind;
int number;
static int width = 100;
static int height = 250;
}
- 인스턴스 멤버(iv, im)을 사용하지 않는 메서드에 static을 붙인다.
class MyMath2 {
long a, b;
long add() { return a + b; }
static long add(long a, long b) { return a + b; }
}
메서드 간의 호출과 참조
- static 메서드는 인스턴스 변수(iv)를 사용 할 수 없다.
class TestClass2 {
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 메서드는 인스턴스 메서드도 호출할 수 없다.
- Q. static 메서드는 static 메서드 호출 가능?
- Q. static 메서드는 인스턴스 변수 사용가능?
- 아니요 (인스턴스 변수는 객체를 생성해야 사용 가능하기 때문에)
- Q. static 메서드는 인스턴스 메서드 호출 가능?
- Q. 왜? static 메서드는 인스턴스 멤버(iv, im)를 쓸 수 없나요?
- static메서드 호출 시 객체(iv묶음)가 없을 수도 있어서