이때 정보(데이터)는 인스턴스 변수를 의미한다.
따라서 정보를 은닉한다는 것은 인스턴스 변수를 숨긴다는 뜻이다.
즉, 클래스 외부에서 정보(데이터)에 직접 접근하는 것을 막는다는 것이다.
인스턴스 변수로의 직접 접근을 허용하지 않고,
접근할 수 있는 별도의 메소드를 제공하는 것이 좋은 객체지향을 기반으로 한 클래스 설계의 기본 원칙이다.
public : 접근을 제한하지 않음, 어디서든 접근 가능default : 아무 선언도 되지 않은 상태, 동일패키지 내에서만 외부 접근 허용protected : 상속 관계일 때 외부 접근 허용private : 접근을 제한, 클래스 내부에서만 접근 가능🔎 접근 지시자 언제 무엇을 사용할까?
public, defaultpublic, protected, default, privatepublic : 어디서든 인스턴스 생성이 가능default : 동일 패키지로 묶인 클래스 내에서만 인스턴스 생성 허용이때 public으로 선언된 클래스는 파일명이 클래스 이름과 동일해야 한다.
public은 외부에 노출시키는 접근 수준 지시자이기 때문에 외부에서 확인이 쉽도록 파일명을 클래스명과 동일하게 사용하는 것이다.
🔎 클래스의 public, default 선언 예시

- public 클래스 : Cat, Dog
- default 클래스 : Duck
Duck은 default 클래스로 동일 패키지 내에서만 인스턴스가 생성 가능하다.
위 예제를 보면 Duck과 Dog의 패키지가 각각 zoo, animal로 패키지가 다르기 때문에 에러가 발생하는 것을 확인할 수 있다.
public : 어디서든 접근 가능(.으로 접근)default : 동일 패키지로 묶인 클래스 내에서만 접근 가능protected : 상속관계에 있는 클래스 내에서만 접근 가능private : 외부에서 접근 불가능
🔎 인스턴스 멤버의 public, default 선언

- public 메소드 : makeSound(), welcome() :
- default 메소드 : makeHappy()
makeHappy()는 default메소드로,
동일 패키지가 아니기 때문에 에러가 발생하는 것을 확인 할 수 있다.
🔎 인스턴스 멤버의 protected 선언 (상속개념)

위 예제를 보면, num 인스턴스 변수가 protected로 선언되었다.
AAA클래스와 ZZZ클래스는 서로 다른 패키지이지만, AAA클래스와 ZZZ클래스가 서로 상속관계이기 때문에 ZZZ클래스에서도 num으로의 접근이 가능하다.
🔎 디폴트 패지키란?