캡슐화: 정보 은닉
2022. 11. 15. 15:47ㆍ책 공부/스프링 입문을 위한 자바 객체 지향의 원리와 이해
반응형
자바에서 정보 은닉이라고 하면 접근 제어자인 private, [default], proteced, public 과
접근자 및 설정자 메서드도 생각날 것이다.
접근 제어자가 객체 멤버( 인스턴스 멤버 ) 와 쓰일 때와 정적 멤버( 클래스 멤버 )와 함께 쓰일 때를 비교해서 살펴보자.
객체 멤버의 접근 제어자
ClassA가 정적 속성인 priSt, defSt, proSt, pubSt를 가지고 있다고 가정해보고 아래표를 작성해 보자.
package main01;
public class ClassA {
private static String priSt;
static String defSt;
protected static String proSt;
public static String pubSt;
void runSomething() {}
static void runStaticThing() {}
}
public class ClassB {
void runSomething() {}
static void runStaticThing() {}
}
public class ClassAA extends ClassA {
void runSomething() {}
static void runStaticThing() {}
}
package main02;
import main01.ClassA;
public class ClassAB extends ClassA {
void runSomething() {}
static void runStaticThing() {}
}
public class ClassC {
void runSomething() {}
static void runStaticThing() {}
}
classA의 정적 멤버 | ||||||
priSt | defSt | proSt | pubSt | |||
main01 | ClassA | runSomething() | ||||
runStaticThing() | ||||||
ClassA | runSomething() | |||||
runStaticThing() | ||||||
ClassAA | runSomething() | |||||
runStaticThing() | ||||||
main02 | ClassAB | runSomething() | ||||
runStaticThing() | ||||||
ClassC | runSomething() | |||||
runStaticThing() |
만약 어렵다면 아래 파일을 이용해서 사용하고 있는 IDE로 직접하면서 작성해보자!
( 아래 파일은 이클립스 기준이다. 만약 다른 IDE를 사용한다면 프로젝트를 만들고 main01, mian02 폴더만 복사해서 넣자! )
접근제어자는 위의 그림처럼 절대 단순하지 않다.
평소에 습관적으로 private, public, 아무 표시도 않는 [default]만 사용했겠지만
어떤 멤버( 멤버 or 정적 )에 대한 접근인가에 따라 생각할 것이 많고 proteced 같은 경우에도 자신과 상속 관계에 있는 서브 클래스뿐만 아니라 같은 패키지라면 접근 가능하다.
반응형
'책 공부 > 스프링 입문을 위한 자바 객체 지향의 원리와 이해' 카테고리의 다른 글
abstract 키워드 - 추상 메서드와 추상 클래스 (0) | 2022.11.18 |
---|---|
자바가 확장한 객체 지향 (0) | 2022.11.15 |
다형성 (1) | 2022.11.15 |
상속성 (0) | 2022.11.14 |
추상화 ( Abstracion ) (0) | 2022.11.14 |