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
복사했습니다!