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 메서드는 인스턴스 변수와 인스턴스 메서드 모두 호출 불가능!! 나머지는 가능