본문 바로가기
개발 노트/기초 지식

[java] 접근제어자

by tokkiC 2022. 4. 22.

접근제어자가 나타내는 접근가능 (=데이터를 가져올수있는 지) 여부는 아래와 같다

  같은 클래스 같은 패키지 다른 패키지 지만
상속된 클래스
상속되지 않은다른 패키지
public O O O O
protect O O O X
default O O X X
private O X X X

이를 스타크래프트로 비유해보자

테란 유닛 메딕은 지상 생체 유닛이라면 타 종족의 유닛이라도 체력을 회복시켜준다

메딕의 회복 스킬

패키지를 종족별 유닛으로 구분한다고 치면 메딕의 데이터는 아래와 같다고 하자


테란 유닛.pakage    

    ↘ 지상생체유닛.class 

          ↘ 회복.method     를 가짐


우리의 메딕은 메딕영웅이라 우리가 아는 것과 달리 치료 대상의 범위를 멋대로 조정가능하다고 가정하자

  new
메딕영웅
테란
지상생체유닛
(같은 클래스)
테란 유닛
(같은 패키지)
다른 종족 유닛
extend 지상생체유닛
(다른 패키지 지만
상속된 클래스)
다른 종족 유닛
(상속되지 않은
다른 패키지)
public 메딕영웅1 O O O O
protect 메딕영웅2 O O O X
default 메딕영웅3 O O X X
private 메딕영웅4 O X X X

메딕영웅 class는 회복.method 를 가지고 있다

접근제어자의 회복 메소드의 작동 여부를 통해 이해하자 

public 을 사용한 메딕영웅1 의 경우 모든 종족, 모든유닛에게 회복을 사용가능하다 (커세어 회복가능)

protect 를 사용한 메딕영웅2의 경우 테란 지상유닛, 테란 유닛, 지상생체유닛 클래스를 상속한 다른 종족 유닛까지 회복 가능하다 (질럿 회복가능 / 커세어 회복불가)

default 를 사용한 메딕영웅3의 경우 테란 지상생체유닛, 테란 유닛에서만 사용 가능하였다 (레이스 회복가능 / 질럿, 커세어 회복불가)

privat를 사용한 메딕영웅4의 경우 테란 지상생체유닛에만 사용 가능하였다 (마린 회복가능 / 레이스, 질럿, 커세어 회복불가)

 

뭔가 어거지로 설명했지만 그래도 이해가 되면 좋겠다

내가 뭘 모르는지 뭘 아는지 모르겠는 초보다

댓글