본문 바로가기
Programming Language/Java

[자바의 정석] ch7-21 ~ ch7-23 객체지향 개념 정리 (접근제어자, 캡슐화, 다형성)

by Baest 2021. 7. 24.

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. 아니다. 허용되지 않음

 

 

 

============================================================================

https://youtu.be/Qm08p4Vk2sw