자바에는 모두 4개의 접근제어가 있다.
public, protected, default, private 입니다.
privat 접근제어는 가장 업격한 제어로 자신의 클래스 내에서만 접근가능 하며
접근하려면 get set같은걸 이용해야한다
public 은 가장 엄격하지 않으며, 어디에서나 접근할 수 있는 제어를 말하고, 퍼블릭 클래스를 이용하려면 다른 패키지에서 import도 필요하지만, 클래스 생성자 메소드가 모두 public으로 선언되어야한 다른 패키지에서 이용가능하다.
private : 같은 클래스 내에서만 접근 가능
default : 같은 패키지 내에서만 접근 가능함.
protected :
다른 패키지에 있는 자식 클래스에서 접근 가능함.
-- 부모 클래스와 자식 클래스가 같은 패키지에 있다면 문제가 없지만, 다른 패키지에 있다면 자식 클래스가 부모 클래스에 접근할 수 있도록 해야합니다. protected 접근 제어는 이 경우 의미가 있다. 즉, protected 접근 제어는 서로 다른 패키지에 있는 자식 객체가 부모 클래스 멤버에 접근할 수 있도록 합니다.
디폴트는 상속 관계 상관없이 무조건 같은 패키지에서만
protected는 제어는 같은 패키지 또는 다른패키지라도 상속 관계에만 있다면 접근 가능,
따라서 디폴트제어가 protected 접근 보다 엄격
public 어디에서나 접근가능
퍼블릭은 가장 편한 접근제어이며, 클래스, 인스턴스 변수, 생성자, 메소드 앞에 모두 public 키워드를 붙이면 접근 제어 때문에 에러가 발생하는 일이 없음. 하지만 자바의 기본철학에 모두 퍼블릭으로 하면 맞지 않기 때문에, 자바는 데이터보호를 매우 중요하게 여김 그래서 인스턴스변수 는 private접근 제어로 인스턴스 변수를 밖에서 함부로 접근하지 않도록 하는걸 권장함.
이에따라 되도록 가장 엄격한 제어로 코드를 구성하는게 좋음
public 접근 제어가 중요한 경우에는 다른 패키지에 있는 클래스의 객체를 생성하려고 할 때임
이때는 반드시 해당 클래스 앞에도 public 키워드가 붙어야하고ㅡ, 생성자 앞에도 public 키워드를 붙어야한다. 그래야 다른 패키지에서 접근하여 객체를 생성할 수가 있다. 디폴트와 public 제어의 차이가 아주 많다는 것도 이해하자