static 메서드와 인스턴스 메서드
- instance variable의 사용 여부로 갈림
인스턴스 메서드
- 인스턴스 생성 후, '참조변수.메서드이름()'으로 호출
- 인스턴스 멤버(instacne variable, instance method)와 관련된 작업을 하는 메서드
- 메서드 내에서 인스턴스 변수(iv) 사용 가능
static 메서드
- 객체 생성 없이 '클래스이름.메서드이름()'으로 호출
- 인스턴스 멤버(iv, im)와 관련없는 작업을 하는 메서드
- 메서드 내에서 인스턴스 변수(iv) 사용 불가
public class EX5_11 {
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());
}
}
class MyMath2
{
long a, b;
long add()
{
return a+b;
}
static long add(long a, long b)
{
return a+b;
}
}
왜 static 메서드는 인스턴스 멤버를 쓸 수 없나?
- static 메서드 호출시 객체(iv 묶음)가 없을 수 있기 때문이다.
정리 : static을 언제 붙여야 할까?
- 속성(instance variable) 중에서 공통 속성에 static을 붙인다.
- 인스턴스 멤버(iv, im)을 사용하지 않는 메서드에 static을 붙인다.
메서드 간 호출과 참조
- static 메서드는 인스턴스 변수(iv)를 사용할 수 없다.
class TestClass{
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);
}
}