ch7-21 접근 제어자(access modifier)
private : 같은 클래스 내에서만 접근이 가능함
(default) : 같은 패키지 내에서만 접근이 가능함
protected : 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근이 가능함
public : 접근 제한이 전혀없음
접근제한없음 같은 패키지 + 자손 같은 패키지 같은 클래스
public > protected > (default) > private
제어자 | 같은 클래스 | 같은 패키지 | 자손 클래스 | 전체 |
public | O | O | O | O |
protected | O | O | O | |
(default) | O | O | ||
private | O |
*쉽게 생각하면, private 는 같은 파일 내부이고 default는 같은 폴더 내부이며, protected는 같은폴더 + 자손이라고 볼 수 있음
상단의 스크린샷을 통해 접근제어자의 접근 범위를 알 수 있음.
ch7-22 캡슐화와 접근 제어자
- 접근 제어자를 사용하는 이유
(1) 외부로부터 데이터를 보호하기 위해서
(2) 외부에는 불필요한, 내부적으로만 사용되는 부분을 감추기 위해서
ch7-23 다형성(polymorphism) -> 매우 중요!!
- 여러 가지 형태를 가질 수 있는 능력
- 조상 타입 참조 변수로 자손 타입 객체를 다루는 것
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
Tv t = new SmartTv(); //타입 불일치 -> 하지만 다형성으로 인하여 사용 가능
//타입
Tv t = new Tv();
SmartTv s = new SmartTv();
class Tv{
boolean power; //전원상태(on/off)
int channel; //채널
void power() { power = !power; }
void channelUp() { ++channel; }
void channelDown() { --channel; }
}
class SmartTv extends Tv {
String text; //캡션(자막)을 보여 주기 위한 문자열
void caption() { /*내용생략*/}
}
|
cs |
- 자손 타입의 참조변수로 조상 타입의 객체를 가리킬 수 없음
(예를 들어, 스마트Tv 리모콘으로 Tv의 기능을 모두 사용할 수 있으나 Tv 리모콘으로 SmartTv의 기능을 모두 사용할 수 없다는 것과 비슷한 맥락임)
<-------------------------------------------------------------정리------------------------------------------------------------->
Q. 참조변수의 타입은 인스턴스의 타입과 반드시 일치해야 하는지?
A. 아니다. 일치하는 것이 보통이지만 일치하지 않을 수도 있음
Q. 참조변수가 조상타입일 때와 자손타입일 때의 차이?
A. 참조변수로 사용할 수 있는 멤버의 갯수가 달라짐
Q. 자손 타입의 참조변수로 조상 타입의 객체를 가리킬 수 있나?
A. 아니다. 허용되지 않음
============================================================================