[Java] 정보 은닉, 접근 수준 지시자

정보구니·2021년 12월 24일
0

Java

목록 보기
23/39
post-thumbnail

정보 은닉


클래스는 정보(데이터)와 메소드로 구성된다고 했다.

이때 정보(데이터)는 인스턴스 변수를 의미한다.
따라서 정보를 은닉한다는 것은 인스턴스 변수를 숨긴다는 뜻이다.

즉, 클래스 외부에서 정보(데이터)에 직접 접근하는 것을 막는다는 것이다.

인스턴스 변수로의 직접 접근을 허용하지 않고,
접근할 수 있는 별도의 메소드를 제공
하는 것이 좋은 객체지향을 기반으로 한 클래스 설계의 기본 원칙이다.









접근 수준 지시자


  • public : 접근을 제한하지 않음, 어디서든 접근 가능
  • default : 아무 선언도 되지 않은 상태, 동일패키지 내에서만 외부 접근 허용
  • protected : 상속 관계일 때 외부 접근 허용
  • private : 접근을 제한, 클래스 내부에서만 접근 가능

🔎 접근 지시자 언제 무엇을 사용할까?

  • 클래스 정의 대상 : public, default
  • 인스턴스 변수와 메소드 대상 : public, protected, default, private






클래스 정의 대상의 접근 수준 지시자 선언

  • public : 어디서든 인스턴스 생성이 가능
  • default : 동일 패키지로 묶인 클래스 내에서만 인스턴스 생성 허용

이때 public으로 선언된 클래스는 파일명이 클래스 이름과 동일해야 한다.

public은 외부에 노출시키는 접근 수준 지시자이기 때문에 외부에서 확인이 쉽도록 파일명을 클래스명과 동일하게 사용하는 것이다.

🔎 클래스의 public, default 선언 예시

- public 클래스 : Cat, Dog
- default 클래스 : Duck

Duckdefault 클래스로 동일 패키지 내에서만 인스턴스가 생성 가능하다.
위 예제를 보면 DuckDog의 패키지가 각각 zoo, animal로 패키지가 다르기 때문에 에러가 발생하는 것을 확인할 수 있다.







인스턴스 멤버 대상의 접근 수준 지시자 선언

  • public : 어디서든 접근 가능(.으로 접근)
  • default : 동일 패키지로 묶인 클래스 내에서만 접근 가능
  • protected : 상속관계에 있는 클래스 내에서만 접근 가능
  • private : 외부에서 접근 불가능


🔎 인스턴스 멤버의 public, default 선언

- public 메소드 : makeSound(), welcome() :
- default 메소드 : makeHappy()

makeHappy()default메소드로,
동일 패키지가 아니기 때문에 에러가 발생하는 것을 확인 할 수 있다.



🔎 인스턴스 멤버의 protected 선언 (상속개념)

위 예제를 보면, num 인스턴스 변수가 protected로 선언되었다.

AAA클래스와 ZZZ클래스는 서로 다른 패키지이지만, AAA클래스와 ZZZ클래스가 서로 상속관계이기 때문에 ZZZ클래스에서도 num으로의 접근이 가능하다.


🔎 디폴트 패지키란?

  • 패키지 선언이 되어있지 않은 클래스들을 하나의 패키지(디폴트 패키지)로 묶어준다.






참고
열혈 자바 chapter09

0개의 댓글