TIL | JAVA static 메서드 / 인스턴스 메서드

김윤희·2022년 8월 1일
0

static 메서드와 인스턴스 메서드

static 메서드와 인스턴스 메서드


✔static 메서드와 인스턴스 메서드는 인스턴스 변수 사용 가능 여부로 나뉜다

class MyClass{
	long a, b;
    
    long add() {	//인스턴스 메서드
    	retrun a + b;
    }
    
    static long add(long a, long b){	//클래스 메서드 (static 메서드)
    	return a + b;
    }
}
class MyClass2{
	public static void main(String args[]){
    	System.out.println(MyClass.add(200L,100L));	//클래스 메서드 호출
        
        MyClass mm = new MyClass();
        mm.a = 200L;
        mm.b = 100L;
        System.out.println(mm.add());	//인스턴스 메서드 호출
    }
    
}

📌인스턴스 메서드

  • 인스턴스 생성 후, '참조변수.메서드이름()'으로 호출
  • 인스턴스 멤버(iv, im)와 관련된 작업을 하는 메서드
  • 메서드 내에서 인스턴스 변수(iv) 사용가능

📌static 메서드(클래스메서드)

ex) Math.random();

  • 객체생성없이 '클래스이름.메서드이름()'으로 호출
  • 인스턴스 멤버(iv, im)와 관련없는 작업을 하는 메서드
  • 메서드 내에서 인스턴스 변수(iv) 사용불가

❗❗ 내가 개발자로 메서드를 만들고 나면 그 다음에는 static을 붙일지 말지 고민해야한다 그렇다면 static은 언제 붙여야할까?

👉 인스턴스 변수(iv)를 사용하지 않을때 붙이면 된다(iv를 사용하면 static을 붙이지 못한다)
✔위에 있는 코드를 보면 static이 붙은 클래스 메서드는 자기 작업에 필요한 매개변수를 지역변수로(lv) 해결하고 있지만, 인스턴스 메서드는 입력값이 없고 인스턴스 변수를 사용한다.



static을 언제 붙여야 할까?


📌속성(멤버 변수) 중에서 공통 속성에 static을 붙인다

	class Card{
    	String kind;
        int number;
        
        static int width = 300;
        static int height = 250;
    }

📌인스턴스 멤버(iv, im)을 사용하지 않는 메서드에 static을 붙인다

	class MyMath{
    	long a, b;
        
            long add(){return a + b;}  //a, b는 인스턴스 변수
     static long add(long a, long b){return a + b;}	//a, b는 지역변수
    }


메서드 간의 호출과 참조


  • static 메서드는 인스턴스 변수(iv)를 사용할 수 없다
class TestClass{
	int iv;			//인스턴스 변수
    static int cv;	//클래스 변수
    
    void instanceMethod(){		//인스턴스 메서드
    	System.out.println(iv);	//인스턴스 변수를 사용할 수 있다
        System.out.println(cv);	//클래스 변수를 사용할 수 있다
    }
    
    static void staticMethod(){	//static 메서드
    	System.out.println(iv);	//에러!! 인스턴스 변수를 사용할 수 없다
        System.out.println(cv);	//클래스 변수는 사용활 수 있다
    }
}
  • static 메서드는 인스턴스 메서드(im)를 사용할 수 없다
class TestClass{
	void instanceMethod(){}			//인스턴스 메서드
    static void staticMethod(){}	//static 메서드
    
    void instanceMethod2(){		//인스턴스 메서드
    	instanceMethod;	//다른 인스턴스 메서드를 호출한다
        staticMethod;	//static 메서드를 호출한다
    }
    
    static void staticMethod2(){	//static 메서드
    	instanceMethod	//에러!! 인스턴스 메서드를 호출할 수 없다
        staticMethod;	//static 메서드는 호출할 수 있다
    }
}

0개의 댓글