자바의 객체지향 원칙에 포함되 있는 정보 은닉
, 캡슐화
에 대해 정리 해보자.
외부의 접근은 제한하고, 내부에서의 접근만을 허용하여 정보 은닉의 원칙을 수행 한다.
클래스 내부에서만 접근을 허용
하겠다는 것이 정보 은닉
(Stealth Information)라 한다.데이터
는 Private
로 선언 하고 Method
를 통해 데이터에 접근.class Circle {
double rad = 0; //원의 반지름
final double PI = 3.14;
public Circle(double r){
setRad(r);
}
public void setRad(dobule r){
if(r < 0){
rad = 0;
return;
}
rad = r;
}
}
//Exmaple02
public static void main(String args[]){
Circle c = new Cirecle(1.5);
System.out.println(c.getArea());
c.setRad(2.5);
System.out.println(c.getArea());
c.setRad(-3.5);
System.out.println(c.getArea());
**c.rad = -4.5;** //컴파일 오류 발생 안함.
System.out.println(c.getArea());
}
캡슐
타이레놀 캡슐 알약은 들어봤는데..
Class 변수 (static 변수
)
class Calculator {
private static int cnt; // 클래스 변수 혹은 static 변수
}
클래스 변수
, static 변수
는 인스턴스의 생성과는 무관하게 클래스가 자바 가상 머신
에 의해 해당 클래스
가 컴파일
되어 메모리에 올라가는 순간 또 다른 공간(데이터영역
)에 저장 되어 공유하는 용도로static
을 선언 해 모든 클래스에서 접근 할 수 있는 클래스 변수
로 만든다.인스턴스 변수와
무관하며 공유의 목적
을 갖는다.별도의 메모리 공간에
딱 하나만 생성이 된다
.클래스 내부 접근
클래스 외부 접근
Class InstCnt{
static int instNum = 0;
InstCnt(){
instNum++;
System.out.println("인스턴스 생성 " + instNum);
}
}
class ClassVar {
InstCnt cnt1 = new InstCnt();
InstCnt cnt2 = new InstCnt();
InstCnt cnt3 = new InstCnt();
}
초기화 시점
JVM
에 의해 해당 클래스 정보가 읽히는 순간
static 변수도 함께 초기화 된다.static변수
의 값은 소멸 되지 않는다.