참고 도서
Do it 자바 완전정복
자바 제어자는 클래스, 필드, 메서드, 생성자 등에게 어떠한 특징을 부여하는 문법 요소다.
멤버 및 생성자에는 public, protected, default, private라는 4가지의 종류의 접근 지정자를
사용할 수 있다
만약 아무것도 사용하지 않으면 default 접근 지정자가 자동으로 설정된다
class Test{
public int a;
protected int b;
int c // default
private int d;
public void a(){}
protected void b(){}
void c(){}
private void d(){}
}
사용 범위 : public > protected > default > private
접근 지정자 | 사용 가능 범위 |
---|---|
public | 동일 클래스의 모든 클래스 + 다른 패키지의 모든 클래스에서 사용 가능 |
protected | 동일 패키지의 모든 클래스 + 다른 패키지의 자식 클래스에서 사용 가능 |
default | 동일 패키지의 모든 클래스에서 사용 가능 |
private | 동일 클래스에서 사용 가능 |
static은 클래스의 멤버(필드, 메서드, 이너 클래스)에 사용하는 제어자다.
인스턴스 멤버는 멤버 앞에 static이 부터 있지 않은 것을 말하고
앞에 static이 붙어 있는 멤버를 정적 멤버 라고 한다
calss A{
int m = 3; // 객체를 생성한 후 사용 가능
static int n = 5; // 객체 생성 없이 사용 가능
}
인스턴스 메서드와 정적 메서드도 인스턴스 메서드는 반드시 객체를 생성한 후 사용할 수 있지만
정적 메서드는 클래스명으로도 바로 접근할 수 있고, 인스턴스 메서드처럼 객체로도 호출할 수 있다.
class A{
void abc(){
System.out.println("instance 메서드");
}
void bcd(){
System.out.println("static 메서드");
}
}
A a = new A();
a.abc // 인스턴스 메서드
A.bcd() // 정적 메서드
a.bcd // 정적 메서드
정적 메서드 내에서는 정적 필드 또는 정적 메서드만 사용할 수 있다.
인스턴스 메서드 내에서는 인스턴스 멤버와 정적 멤버 모두 사용할 수 있다.