ch7-21 접근제어자
<7-21 접근 제어자>
private: 같은 클래스 내에서만 접근이 가능하다
(default): 같은 패키지 내에서만 접근이 가능하다
protected: 같은 패키지 내에서, 그리고 다른 패키지의 자손클래스에서 접근이 가능하다
public: 접근 제한이 전혀 없다
--> 4개 중에서 1개만 사용 가능하다
***) 자손 패키지는 다른 패키지의 자손 클래스를 말한다.
public 패키지와 소스파일의 이름이 일치해야 하기 때문이다.
한 패키지 안에선 각 접근제어자를 한개씩만 사용가능하기 때문에 밑의 public을 (default)로 바꾸어주었다
---------------------------------------------------
<ch7-22 캡슐화>
캡슐화와 접근 제어자
- 접근 제어자를 사용하는 이유: 외부로부터 데이터를 보호하기 위해서
외부에는 불필요한, 내부적으로만 사용되는, 부분을 감추기 위해서
hour, minute, second들 다 각자의 범위가 있다. 그런데 그걸 대입연산자로 직접 접근해버리면 거기에 들어갈 수 있는 범위를 제어하지 못한다. 그래서 접근제어자를 사용해 외부에서 직접 접근하지 못하도록 막는다.
public메서드를 통해 간접접근을 허용한다.
--> 내부에서만 쓰는 메서드를 굳이 public으로 쓰지 않아도 된다. public으로 하면 외부에서 접근이 가능하니까.
private으로 해주면 된다
------------------------------------------------
<ch7-23 다형성>
다형성이 진짜 중요하다...
다형성(polymorphism)
- 여러 가지 형태를 가질 수 있는 능력
- 조상 타입 참조 변수로 자손 타입 객체를 다루는 것 --> 이렇게 외우면 된다
--> 여태까지는 서로 타입이 일치 했다
이렇게 일치했다.
그런데 다형성이란 뭐냐? 타입 불일치가 허용된다.
즉 Tv 리모콘으로 Smart Tv로 다룬다는 의미. --> 이게 바로 다형성이다.
2가지 장점이 있다 (나중에 배울 예정)
- 객체와 참조변수의 타입이 일치할 때와 일치하지 않을 때의 차이?
--> 오른쪽의 경우 멤버를 5개 밖에 못 쓴다. 일부만 사용 가능
- 자손 타입의 참조변수로 조상 타입의 객체를 가리킬 수 없다.
--> 리모컨 버튼이 7개인데 실제 기능은 5개다. 이건 안 된다...
Q. 참조변수의 타입은 인스턴스의 타입과 반드시 일치해야 하나요?
- 아닙니다. 일치하는 것이 보통이지만 일치하지 않을 수도 있습니다. (다형성인 경우)
Q. 참조변수가 조상타입일 때와 자손타입일 때의 차이?
- 참조변수로 사용할 수 있는 멤버의 갯수가 달라집니다
Q. 자손 타입의 참조변수로 조상 타입의 객체를 가리킬 수 있나요?
- 아니요. 허용되지 않습니다.