Programming Language/Java

[JAVA] static 메서드와 인스턴스 메서드

BS Kwak 2021. 7. 16. 20:32

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

메서드 앞에 static이 붙으면 static 메서드라 함 (클래스 메서드라고도 함)

static이 안 붙으면 인스턴스 메서드라 함

두 메서드를 구별하는 기능적인 차이는 인스턴스 멤버의 사용 여부이다. 

 

인스턴스 메서드

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

인스턴스 변수(iv), 인스턴스 멤버(im)와 관련된 작업을 함

메서드 내에서 iv 사용 가능

 

static 메서드

객체 생성 X

'클래스 이름.메서드 이름()'으로 호출함

인스턴스 변수(iv), 인스턴스 멤버(im)와 관련되지 않은 작업을 함

메서드 내에서 iv 사용 불가능

 

 

예시1

class mymath{
	long a,b; //인스턴스 변수
    
    long add(){	//인스턴스 메서드
    	return a+b;
    }
    
    static long add(long a, long b){ 	//클래스 메서드(static 메서드)
    	return a+b; //지역변수 a,b
    }   
}

static메서드와 인스턴스 메서드 호출은 다음과 같다. 

class example{
	public static void main(Stringp[] args){
    
    	System.out.println(mymath.add(200L,100L); //클래스(static)메서드 호출
 
 
    	mymath mm = new mymath();	//인스턴스 생성
        mm.a = 200L;
        mm.b = 100L;
        System.out.println(mm.add()); // 인스턴스 메서드 호출
   }
}

 

예시2

class Test{
	int iv;	//인스턴스 변수
   	 static int cv; //클래스 변수
    
    void instanceMethod1(){}
    static void staticMethod1(){}
    
    void instanceMethod(){
    	System.out.println(iv);
        System.out.println(cv);
        //iv,cv 모두 사용 가능
        
        instanceMethod1();
        staticMethod1();
        //인스턴스 메서드와 static메서드 모두 호출 가능
    }
    
    static void staticMethod(){
    	//System.out.println(iv);	//iv 사용 불가능!!
        System.out.println(cv);
        
       //instanceMethod1();			//인스턴스 메서드 호출 불가능!!
        staticMethod1();
        
    }
    
}

즉!! static 메서드는 인스턴스 변수와 인스턴스 메서드 모두 호출 불가능!! 나머지는 가능