클래스 메서드(static 메서드)와 인스턴스 메서드
[ static 메서드 ]
-객체 생성없이 '클래스이름.메서드명()'으로 호출
-인스턴스 멤버(iv,im)와 관련없는 작업하는 메서드
-메서드 내 인스턴스 변수(iv) 사용불가
iv 사용x
[ 인스턴스 메서드 ]
-객체 생성 후 '참조변수.메서드명()'으로 호출
-인스턴스 멤버(iv,im)와 관련있는 작업하는 메서드
-메서드 내 인스턴스 변수(iv) 사용가능
iv 사용o
*변수 : 공통 값 유지 -> static 붙임
메서드 : 인스턴스 변수,메서드 사용하지 않음 ->static 고려
클래스 멤버와 인스턴스 멤버간 호출
public class Test {
int iv; //인스턴스 변수
static int cv; //클래스 변수
void im() {}; //인스턴스 메서드
static void sm() {}; //static 메서드
void im2() {
im();
sm();
System.out.println(iv);
System.out.println(cv);
}
static void sm2() { //static메서드
im(); //에러. 인스턴스메서드 호출불가
sm();
System.out.println(iv); //에러. 인스턴스변수 사용불가
System.out.println(cv);
}
}
*간단 정리
| 인스턴스 멤버 | 클래스 멤버 | |
| 인스턴스 변수, 메서드 | O | X |
| 클래스 변수, 메서드 | O | O |
클래스 멤버가 인스턴스 멤버 사용하고자 할 경우 먼저 객체 생성해야 함.
why?인스턴스 멤버가 아직 존재하지 않을 수 있어서 (인스턴스 멤버 존재시점엔 클래스 멤버는 항상 존재)
public class Test {
int iv = 1;
static int cv = iv; //에러.
static int cv2 = new Test().iv; //객체 생성 후 사용가능
}
+)참고
TestClass tc = new TestClass();
int result = tc.im();
→int result = new TestClass().im(); //한줄로'Java' 카테고리의 다른 글
| [Java] 생성자(Constructor) (0) | 2023.12.18 |
|---|---|
| [Java] 오버로딩(overloading) (0) | 2023.12.17 |
| [Java] 변수와 메서드 (0) | 2023.12.17 |
| [Java] 객체 지향 언어, 클래스와 객체 (0) | 2023.12.10 |
| [Java] 배열 비교, 출력, 복사, 정렬 (Arrays) (0) | 2023.12.09 |