📚 참고
자바의 정석 기초편 (객체지향개념만)

 

 

 

 

 

 

 

Instance 메서드

 

  • 인스턴스 생성 후, 참조변수.메서드명() 방식으로 호출
  • 인스턴스 멤버(iv, im)를 사용해 작업하는 메서드
  • 메서드 내에서 인스턴스 변수(iv) 사용 가능

 

 

 

 

 

 

 

Static 메서드

 

  • 객체 생성없이 클래스명.메서드명() 방식으로 호출
    • ex) Math.random();
  • 인스턴스 멤버(iv, im)를 사용할 수 없는 메서드
  • 메서드 내에서 인스턴스 변수(iv) 사용 불가
    • 인스턴스 변수는 객체(iv 묶음)가 생성되어야지만 사용할 수 있음

 

 

 

 

 

 

 

static 사용 시점

 

  • static 메서드 : 인스턴스 멤버(iv, im)를 사용하지 않는 메서드에 static을 붙인다.
  • static 변수 : 속성(멤버 변수) 중에서 공통 속성에 static을 붙인다.
    • ex) Card 클래스의 공통 속성인 width, height 생각

 

 

 

 

 

 

 

예제

 

class MyMath2 {
    // iv
    long a, b;
    
    // im (iv 사용)
    long add() {
    	return a + b;
    }
    
    // static method (iv 사용 X, lv 사용 O)
    // 작업에 필요한 값들은 지역변수로 해결함
    static long add(long a, long b) {
    	return a + b;
    }
}
class MyMathTest2 {
	public static void main(String args[]) {
        // 클래스 메서드 => iv 필요없음 => iv 묶음이 객체 => 객체 필요없음
    	System.out.println(MyMath2.add(200L, 100L));
        
        // 1. 인스턴스 생성 (iv 생성)
        MyMath2 mm = new MyMath2();
        mm.a = 200L;
        mm.b = 100L;
        
        // 2. 인스턴스 메서드(iv로 작업) 호출
        System.out.println(mm.add());
    }
}

 

 

 

 

 

 

 

메서드 간 호출과 참조

 

  • static 메서드는 인스턴스 변수 사용불가

 

class Test {
    int iv;
    static int cv;
    
    // 객체 생성 후, 호출 가능
    void instanceMethod() {
    	System.out.println(iv);		// 사용가능
        System.out.println(cv);		// 사용가능
    }

    static void staticMethod() {
    	System.out.println(iv);		// 에러🚩 사용불가능
        System.out.println(cv);		// 사용가능
    }
}

 

 

 

 

  • static 메서드는 인스턴스 메서드 호출불가

 

class Test {
    void instanceMethod() {}		// 인스턴스 메서드
    static void staticMethod() {}	// static 메서드
    
    void instanceMethod2() {
    	instanceMethod();
        staticMethod();
    }
    
    static void staticMethod2() {
        instanceMethod();		// 에러🚩 호출불가 (iv를 사용해 작업하는 메서드이므로 객체 필요)
        staticMethod();
    }
}

 

 

 

 

 

 

 

복습

 

Q. static 메서드는 static 메서드 호출가능?

A. OK

Q. static 메서드는 인스턴스 변수 사용가능?

A. NO

Q. static 메서드는 인스턴스 메서드 호출가능?

A. NO

Q. 왜 static 메서드는 인스턴스 멤버를 쓸 수 없을까?

A. static 메서드 호출 시, 객체가 없을 수도 있어서

 

 

 

 

 

 

 

 

 

 

'JAVA > 객체지향개념' 카테고리의 다른 글

생성자 (Constructor)  (0) 2021.03.11
오버로딩 (Overloading)  (0) 2021.03.11
기본형 매개변수, 참조형 매개변수 차이점  (0) 2021.03.09
호출 스택 (Call Stack)  (0) 2021.03.07
메서드 (Method)  (0) 2021.03.06