
자바의 객체지향 원칙에 포함되 있는 정보 은닉, 캡슐화에 대해 정리 해보자.
외부의 접근은 제한하고, 내부에서의 접근만을 허용하여 정보 은닉의 원칙을 수행 한다.
클래스 내부에서만 접근을 허용하겠다는 것이 정보 은닉(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변수의 값은 소멸 되지 않는다.