1. staic 메서드 (클래스 메서드), 인스터스 메서드 -> iv 사용여부의 차이
인스턴스 메서드
- 인스턴스 생성 후, '참조변수. 메서드이름()' 으로 호출
- 인스턴스 멤버(iv, im)와 관련된 작업을 하는 메서드
- 메서드 내에서 인스턴스 변수(iv) 사용가능
static 메서드( 클래스 메서드)
- 객체생성없이 '클래스이름. 메서드이름()' 으로 호출 ex) Math.random(), Math.round()
- 인스턴스 멤버(iv,im)와 관련없는 작업을 하는 메서드
- 메서드 내에서 인스턴스 변수(iv) 사용불가
class MyMath2 {
long a,b; // iv 인스턴스 변수
long add() { // 인스턴스메서드
return a + b;
}
static long add(long a, long b)// lv 지역변수 { // 클래스메서드(static 메서드)
return a + b;
}
}
class MathTest2 {
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을 붙일지 말지 생각해야 함
-> iv를 사용하면 인스턴스 메서드, iv를 사용하지 않으면 static 메서드!
static을 언제 붙여야 할까?
- 속성(멤버 변수)중에서 공통 속성에 static을 붙인다.
- 인스턴스 멤버(iv,im)을 사용하지 않는 메서드에 static을 붙인다.
static 메서드는 인스턴스 변수(iv)를 사용할 수 없다.
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); // 에러!!!! 인스턴스 변수를 사용할 수 없다.
Syetem.out.println(cv); // 클래스 변수는 사용할 수 있다.
}
} // end of class
Q. static 메서드는 static 메서드 호출가능?
A. 네
Q. static 메서드는 인스턴스 변수 사용가능?
A. 아니요
Q. static 메서드는 인스턴스 메서드 호출가능
A. 아니요
Q. 왜? static 메서드는 인스턴스 멤버를 쓸 수 없나요?
A. static 메서드 호출시 객체(iv묶음)가 없을 수도 있어서
'JAVA' 카테고리의 다른 글
JAVA #23 생성자 this() , 참조 변수 this , 변수의 초기화 , 멤버변수의 초기화 (0) | 2021.07.08 |
---|---|
JAVA #22 오버로딩(overloading), 생성자(constructor) (0) | 2021.07.07 |
JAVA #20 호출 스텍(call stack) , 기본형 매개변수 (0) | 2021.07.03 |
JAVA #19 메서드 호출, return 문 (0) | 2021.06.20 |
JAVA #18 객체의 생성과 사용 (0) | 2021.06.20 |