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

sim·2023년 3월 10일

자바의 정석

목록 보기
17/20
  1. 인스턴스 메서드
  • 인스턴스 생성 후, '참조변수.메서드이름()'으로 호출
  • 인스턴스 멤버(iv, im)와 관련된 작업을 하는 메서드
  • 메서드 내에서 인스턴스 변수(iv) 사용가능
  • 개별속성
  1. static 메서드 (클래스메서드)
  • 객체생성없이 '클래스이름.메서드이름()'으로 호출
  • 인스턴스 멤버(iv, im)와 관련없는 작업을 하는 메서드.
  • 매서드 내에서 인스턴스 변수(iv) 사용불가
  • 공통속성에 붙임.

@@ 객체 = iv 묶음!
인스턴스 메서드는 iv 사용가능 - 객체가 필요함
클래스메서드는 객체생성 안함. - iv 필요없음.

ex.

class MyMath2 {
	long a, b; //인스턴스 변수(iv)
    
    long add() {	// 인스턴스 메서드 - iv사용, 객체있음/ iv사용하니까 매개변수 필요없음. 
    	return a+b; 
    }
    
    static long add(long a, long b) {	// static메서드 - iv 말고 lv사용 매개변수 / 객체생성X
    	return a+b; 
    }
}

class MyMathTest2 {
	public static void main(String[] args) {
    	System.out.println(MyMath2.add(200L, 100L); 	// static메서드 - '클래스이름.메서드이름(매개변수)' 형식따름, 객체생성 없음. 
        MyMath2 mm = new MyMath2(); 	// 인스턴스 객체 생성. iv생성
        mm.a = 200L;
        mm.b = 100L; 	//인스턴스 대입 
        System.out.println(mm.add()); 	//인스턴스 메서드 호출 - '참조변수.메서드이름()' 형식따름, 객체생성 필요함. 
        
  1. static 언제 붙일까?
    1) 클래스 설계시, 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것
    2) 인스턴스를 생성하지 않아도 사용가능 (객체 생성X)
    3) 인스턴스 변수(iv) 사용 불가
    4) 메서드 내에서 인스턴스 변수(iv)를 사용하지 않는다면, static 붙이는 것을 고려.
  2. 메서드 간의 호출과 참조
  • 메서드 간의 호출 : 같은 클래스 내의 메서드는 서로 객체의 생성이나 참조변수 없이 직접 호출이 가능하지만 static메서드는 인스턴스 메서드를 호출할 수 없다.!!
    ex.

    class TestClass {
    	void instanceMethod() {}
    	static void staticMethod() {}
    	void instanceMethod2() {
    		instanceMethod();
    		staticMethod();
    	}
    	static void staticMethod() {
    		instanceMethod(); //에러!!! 인스턴스 메서드 호출 불가능
       		staticMethod(); //가능 항상 
        }
     }
  • 변수와 메서드간의 호출 : 인스턴스메서드는 iv 사용가능, static메서드는 iv 사용불가능.

    ex.

    class TestClass2 {
    		int iv; //인스턴스 변수 --> 객체 생성 후 사용가능
    		static int cv; //클래스 변수 --> 언제나 사용가능
           
           	void instanceMethod() { //인스턴스 메서드
               	System.out.println(iv); //iv사용 가능
                System.out.println(cv); //cv도 사용 가능
            }
            
            static void staticMethod() { //static메서드
            	System.out.println(iv); //XXX iv사용불가능.
                System.out.println(cv); //OOO cv 사용 가능.
           }
     }    
profile
sim

0개의 댓글