❗ static 메서드 : 메서드 앞에 static 메서드가 붙은 것(=클래스 메서드)

 

👀 인스턴스메서드

- 인스턴스 생성 후, '참조변수.메서드이름()'으로 호출

- 인스턴스 멤버(iv, im)와 관련된 작업을 하는 메서드

- 메서드 내에서 인스턴스 변수(iv) 사용가능

 

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

- 객체생성없이 '클래스 이름.메서드이름()'으로 호출

- 인스턴스 멤버(iv,im)와 관련없는 작업을 하는 메서드

- 메서드 내에서 인스턴스 변수(iv) 사용불가

 

=>  iv(인스턴스 변수) 사용여부에 따라 구분

class MyMath2 {
 	  long a, b;
      
      long add() { //인스턴스 메서드(iv사용)
           return a + b; // a,b -> 인스턴수변수(iv)
     
     }
     
     static long add(long a, long b){ //클래스메서드(static메서드) // long a,long b->지역변수
      	  return a + b; // a,b -> lv(지역변수)
     }
     
  }   
  
  class MyMathTest2{
    public static void main(String args[1]}]
     	   System.out.println(MyMath2.add(200L,100L); //클래스메서드 호출 // 클래스이름.메서드이름
           MyMath2 mm = new MayMath2(); //인스턴스 생성
           mm.a = 200L;
           mm.b = 200L;
           System.out.prinln(mm.add()); //인스턴스 메서드 호출 // 객체생성 후 호출할 수 있음
     }
}

 

 

❓ static을 언제 붙여야 할까?

 

▶static 메서드는 인스턴스 변수(iv)를 사용할 수 없다.

Class TestClass2{
	int iv;   			//인스턴스 변수, 객체 생성 후 사용가능
    static int cv;		//클래스 변수, 언제나 사용가능
    
    void instanceMethod(){ 			// 인스턴스 메서드, 객체 생성후 호출가능
    	System.out.println(iv); 	// 인스턴스 변수를 사용할 수 있다.
        System.out.println(cv); 	// 클래스 변수를 사용할 수 있다.
    }
    void instanceMethod(){ 			// static 메서드 
    	System.out.println(iv); 	// 인스턴스 변수를 사용할 수 없다. why? 인스턴스 변수는 객체 생성후 호출 가능하기 때문
        System.out.println(cv); 	// 클래스 변수를 사용할 수 있다.
    }    
}// end of class

 

▶static 메서드는 인스턴스 메서드(iv)를  호출할 수 없다.

 

+ Recent posts