자바의정석/Chapter 7

ch7-21 접근제어자

suniverse 2022. 12. 9. 22:48

 <7-21 접근 제어자> 

private: 같은 클래스 내에서만 접근이 가능하다

(default): 같은 패키지 내에서만 접근이 가능하다 

protected: 같은 패키지 내에서, 그리고 다른 패키지의 자손클래스에서 접근이 가능하다 

public: 접근 제한이 전혀 없다 

--> 4개 중에서 1개만 사용 가능하다 

***) 자손 패키지는 다른 패키지의 자손 클래스를 말한다. 

 

같은 클래스라 4가지 전부 쓸 수 있다

 

 

접근제어자가 default다. 그래서 다른 패키지에 가면 에러가 발생

 

pkg2에서 상속받기 위해서 pkg1의 접근제어자 (defalult)를 public으로 바꿔준 후 이름도 바꿔주었다.

public 패키지와 소스파일의 이름이 일치해야 하기 때문이다. 

한 패키지 안에선 각 접근제어자를 한개씩만 사용가능하기 때문에 밑의 public을 (default)로 바꾸어주었다 

 

import문을 추가해주면 에러가 잡힌다

 

public은 접근제한이 없으니 오류가 안 생긴다

 

---------------------------------------------------

<ch7-22 캡슐화> 

 

캡슐화와 접근 제어자 

 

- 접근 제어자를 사용하는 이유: 외부로부터 데이터를 보호하기 위해서

      외부에는 불필요한, 내부적으로만 사용되는, 부분을 감추기 위해서 

 

 

hour, minute, second들 다 각자의 범위가 있다. 그런데 그걸 대입연산자로 직접 접근해버리면 거기에 들어갈 수 있는 범위를 제어하지 못한다. 그래서 접근제어자를 사용해 외부에서 직접 접근하지 못하도록 막는다. 

public메서드를 통해 간접접근을 허용한다. 

 

이렇게 아무런 제약이 없다. 그래서 접근제어자가 필요하다

 

 

private 접근제어자 작성해준 뒤 public메서드 만들어 줌

 

 

 

 

--> 내부에서만 쓰는 메서드를 굳이 public으로 쓰지 않아도 된다. public으로 하면 외부에서 접근이 가능하니까.

private으로 해주면 된다 

 

 

------------------------------------------------

<ch7-23 다형성> 

 

다형성이 진짜 중요하다...

 

다형성(polymorphism)

- 여러 가지 형태를 가질 수 있는 능력 

- 조상 타입 참조 변수로 자손 타입 객체를 다루는 것  --> 이렇게 외우면 된다 

 

 

자손의 멤버는 총 7개다

--> 여태까지는 서로 타입이 일치 했다 

이렇게 일치했다.

그런데 다형성이란 뭐냐? 타입 불일치가 허용된다. 

즉 Tv 리모콘으로 Smart Tv로 다룬다는 의미. --> 이게 바로 다형성이다. 

2가지 장점이 있다 (나중에 배울 예정) 

 

- 객체와 참조변수의 타입이 일치할 때와 일치하지 않을 때의 차이? 

차이

 

--> 오른쪽의 경우 멤버를 5개 밖에 못 쓴다. 일부만 사용 가능 

 

- 자손 타입의 참조변수로 조상 타입의 객체를 가리킬 수 없다. 

--> 리모컨 버튼이 7개인데 실제 기능은 5개다. 이건 안 된다... 

 

 

Q. 참조변수의 타입은 인스턴스의 타입과 반드시 일치해야 하나요? 

- 아닙니다. 일치하는 것이 보통이지만 일치하지 않을 수도 있습니다. (다형성인 경우) 

 

Q. 참조변수가 조상타입일 때와 자손타입일 때의 차이? 

- 참조변수로 사용할 수 있는 멤버의 갯수가 달라집니다 

 

Q. 자손 타입의 참조변수로 조상 타입의 객체를 가리킬 수 있나요? 

- 아니요. 허용되지 않습니다.