Ch6-26_static 메서드와 인스턴스 메서드
1. 인스턴스 메서드
- 인스턴스 생성 후, '참조변수.메서드이름()'으로 호출
- 인스턴스 멤버(iv, im)와 관련된 작업을 하는 메서드
- 메서드 내에서 인스턴스 변수(iv) 사용가능
2. static 메서드(클래스 메서드)
- 객체생성없이 '클래스이름.메서드이름()'으로 호출
- 인스턴스 멤버(iv, im)와 관련없는 작업을 하는 메서드
- 메서드 내에서 인스턴스 변수(iv) 사용불가
class MyMath2 {
long a, b;
long add() { // 인스턴스 메서드
return a + b;
}
static long add(long a, long b) { // 클래스 메서드(static 메서드)
return a + b;
}
}
class test [
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()); // 인스턴스 메서드 호출
}
}
Ch6-28_static을 언제 붙여야 할까?
1. 속성(멤버 변수) 중에서 공통 속성에 static 을 붙인다.
class Card {
String kind; // 무늬, 개별 속성
int number; // 숫자
static int width = 100; // 폭, 공통 속성
static int height = 250; // 높이
}
2. 인스턴스 멤버(iv, im)을 사용하지 않는 메서드에 static을 붙인다.
class MyMath2 {
long a, b;
long add() { return a + b} // a, b는 인스턴스 변수
static long add(long a, long b) { return a + b;} // a, b는 지역변수
}
Ch6-29_메서드 간의 호출과 참조
1. static 메서드는 인스턴스 메서드(im)를 호출할 수 없다.
class Test {
void instanceMethod() {} // 인스턴스 메서드
static void staticMethod() {} // static 메서드
void instanceMethod2() { // 인스턴스 메서드
instanceMethod(); // 다른 인스턴스 메서드를 호출한다.
staticMethod(); // static 메서드를 호출한다.
}
static void staticMethod2() { // static 메서드
instanceMethod(); // 에러! 인스턴스 메서드를 호출할 수 없다.
staticMethod(); // static 메서드는 호출할 수 있다.
}
}
Q. static 메서드는 static 메서드 호출 가능 ?
A : Yes
Q. static 메서드는 인스턴스 변수 사용가능?
A : No
Q. static 메서드는 인스턴스 메서드 호출가능?
A : No
Q. 왜? static 메서드는 인스턴스 멤버를 사용하지 못하나요?
A : static 메서드 호출 시 객체(iv묶음)가 없을 수도 있어서
'JAVA > Chapter6' 카테고리의 다른 글
Ch6-32_생성자(constructor) (0) | 2022.02.13 |
---|---|
Ch6-30_오버로딩(overloading) (0) | 2022.02.13 |
Ch6-24_참조형 매개변수 (0) | 2022.02.13 |
Ch6-22_호출스택(call stack) (0) | 2022.02.12 |
Ch6-17_메서드의 호출 (0) | 2022.02.11 |