public
public은 접근제어자이다. 어느 클래스에서든 해당 객체를 참조 할 수있다는 뜻
JVM이 접근하기 위해 public을 사용해야만 한다. 다른 접근 제어자를 사용하면 실행되지 않음
static
static은 뭔가를 선언하게 되는 경우, 자바가 컴파일 되는 시점에 정의
그리고 static 요소를 non-static 요소에서 호출하는 것은 불가능
main method는 프로그램의 시작점, 프로그램이 실행되면 제일 먼저 호출되는 method이기에 객체를 생성하지 않은 채로 바로 작업을 수행해야 하기 때문에 static이어야 한다
void
타입이 void 라는 것은 return할 것이 없다는 의미.
즉, 메인 method를 호출하는 JVM에서 return값을 요구하지 않으니 void 타입을 사용
static method
method를 선얼할 때 static을 사용하면 객체를 생성하지 않아도 그 method를 호출할 수 있다.
public class Car {
public final static String MANUFACTURE_NAME = "BMW";
public final static String CAR_NAME = "BMW 320D";
public int year = 2018;
public Car() {
}
public static void printCarName() {
System.out.println("{ Brand : " + MANUFACTURE_NAME + ", Name : " + CAR_NAME + " }");
}
}
printCarName()는 클래스와 객체를 통해서 모두 호출이 가능합니다. 하지만 객체의 메소드를 호출하는 것인지 static 메소드를 호출하는 것인지 구분이 안되기 때문에 클래스를 통해서만 호출되어야 합니다.
※static method는 객체를 생성하지 않아도 호출할 수 있다. 이것은 method가 객체와 분리되어 있다는 의미
그래서 method 내부에서 super,this와 같은 키워드를 사용할 수 없고, 클래스의 멤버 변수에 접근할 수도 없다.
static class
static 키워드를 이용하여 class를 선언하면, 상위 클래스와 분리를 해준다.
public class Car {
public int year = 2018;
public Car() {
}
public class Wheel {
public Wheel() {
year = 10;
}
}
}
위와 같은 특성 때문에 Inner class는 상위 클래스에서만 생성할 수 있습니다. 상위 클래스를 통하지 않고 외부에서 직접 Inner class를 생성할 수 없습니다.
만약 다음과 같이 static으로 Wheel클래스를 선언하면 Car 클래스와 분리가 됩니다. 분리되었다는 것은 Wheel 클래스에서 Car 클래스의 멤버변수에 접근할 수 없다는 의미입니다. 이렇게 static으로 선언된 하위 클래스를 Static nested class라고 합니다.
public class Car {
public int year = 2018;
public Car() {
}
public static class Wheel {
public Wheel() {
// year = 10; // compile error!
}
}
}
Static nested class는 상위 클래스가 생성되지 않아도, 외부에서 직접 객체를 생성할 수 있습니다.
※static class는 하위 클래스를 선언할 때만 가능, 상위 클래스를 static으로 선언하려고 하면 컴파일 에러가 발생
static class를 사용하는 이유는 static class로 inner class를 생성하면 장점은 grouping입니다.
어떤 클래스와 연관된 클래스들을 하위에서 선언하여 관련있는 클래스들을 모아둘 수 있다.
'Java > Java' 카테고리의 다른 글
[Java]타입 변환과 다형성 (0) | 2022.11.30 |
---|---|
[Java] 상속 (0) | 2022.11.30 |
[Java]오버라이딩 (Override) (0) | 2022.11.27 |
[Java] 클래스의 구성 (0) | 2022.11.22 |
[Java] 클래스 선언 (0) | 2022.11.22 |
댓글