객체 = 속성(변수) + 기능(메서드)
이렇게도 표현 가능하다
Tv[] tvArr = { new Tv(), new Tv(), new Tv()};
반환타입 메서드이름 (타입 변수명, 타입 변수명, ...) {
//메서드 호출시 수행될 코드
}
따라서 아래 있는 main 메서드가 위의 println()메서드를 호출 → 맨 위의 메서드 하나만 실행 중, 나머지는 대기 중으로 변한다.
생각해보면, im은 iv를 사용한 메서드인데 인스턴스 생성을 안하면 당연히게도 iv를 사용못한다.
▲ iv를 사용여부에 따라 갈림 ▼
static 메서드
6-27)
따라서, 언제 static 메서드를 붙이고 안붙이느냐를 결정하는건 인스턴스 멤버를 관련없는 작업을 하면 static 을 붙여준다.
이것처럼 static 메서드의 파라미터는 로컬변수고 인스턴스 변수가 아니다!
-그럼 static 메서드는 무조건 파라미터가 필요한건가?
class TestClass2 {
int iv; // 인스턴스 변수 // 객체 생성 후 사용가능.
static int cv; // 클래스 변수 // 언제나 사용 가능.
void instanceMethod() { // 인스턴스 메서드 // 객체 생성 후 호출가능.
System.out.println(iv); // 인스턴스 변수를 사용할 수 있다.
System.out.println(cv); // 클래스 변수를 사용할 수 있다.
}
static void staticMethod() { // static 메서드
System.out.println(iv); // Error!!! 인스턴스 변수를 사용할 수 없다.
System.out.println(cv); // 클래스 변수를 사용할 수 있다.
}
} // end of class
class TestClass{
void instanceMethod() {} // 인스턴스메서드
static void staticMethod() {} // static 메서드
void instanceMethod2() { // 인스턴스메서드
instanceMethod(); // 다른 인스턴스메서드를 호출한다.
staticMethod(); // static메서드를 호출한다.
}
static void staticMethod2() { // static 메서드
instanceMethod(); // Error!! 인스턴스메서드를 호출할 수 없다. // iv로 작업을 하는 메서드고, 객체가 필요하므로.
staticMethod(); // static메서드는 호출할 수 있다.
}
} end of class
Q. static 메서드는 static 메서드를 호출 가능한가요?
A. 네.
Q. static 메서드는 인스턴스 변수 사용 가능한가요?
A. 아니요!!!
Q. static 메서드는 인스턴스 메서드 사용 가능한가요?
A. 아니요!!!!!!!!!
Q. 왜 static 메서드는 인스턴스 멤버(iv, im)를 쓸 수 없나요?
A. static 메서드를 호출했을 때 객체(iv묶음)가 없을 수도 있기 때문입니다.