활동/호기심

아니 자바에서 static이 도대체 뭔데 (클래스와 메소드)

ByeongJun 2023. 8. 29. 14:08
반응형

 

class Foo {
	public static String classVar = "I class var";   // 정상
	public String instanceVar = "I instance var";    // Error
}

public class StaticApp {
	public static void main(String[] args) {
		System.out.println(Foo.classVar);        // 정상
		System.out.println(Foo.instanceVar);     // Error
	}
}

클래스를 통해서 클래스 변수에 접근이 가능하지만, 

인스턴스는 인스턴스를 통해 사용해야하므로 에러가 발생한다. 

 

 

 

 

 

다음은 static 메소드와 instance 메소드를 만드는 예시이다. 

static을 사용하면 객체를 생성해주지 않아도 다른 클래스에서 사용할 수 있다.

 

class Foo {
	public static String classVar = "I class var";
	public String instanceVar = "I instance var";

	public static void classMethod() {
		System.out.println(classVar);      // OK
		System.out.println(instanceVar);   // Error
	}
    
	public void instanceMethod() {
		System.out.println(classVar);      // OK
		System.out.println(instanceVar);   // OK
	}
}

 

주석에 결과가 나와 있는 그대로 

classMethod 내에서 instanceVar(인스턴스 변수)는 에러가 발생하지만,

instanceMethod 내에서는 둘 다 정상 작동한다.

 

 

 

 

 public static String classVar = "I class var";  에서는  static 이 있지만

 public String instanceVar = "I instance var"; 에선  static 이 없다.

 

 

 

 static 이 있는 classMethod 안에서는 { static이 없는 Instance 변수 }는 접근할 수 없다.

 

 

 

 

반면에  public void 는 에러가 나지 않고 접근 가능하다는 것을 볼 수 있다.  

void는 리턴 값이 없다는 것을 의미한다.

 

 

 


 

 

StaticApp 클래스에서 Foo 클래스의 메소드를 호출려고 하는데 classMethod() 만 호출 가능하다. 

Foo.instanceMethod() 는 class를 통해서 접근이 불가하기 때문에 객체를 새로 생성해야만 한다. 

 

instanceVar(인스턴스 변수)instanceMethod(인스턴스 메소드)에 접근이 금지되어 있다.

 

 

 

Static이 있을 경우 Class 소속이고 없는 경우는 Instance 소속이다.
반응형