[Java] 정보 은닉, 캡슐화

YoungMinKim·2020년 11월 8일
0
post-thumbnail

Goal

자바의 객체지향 원칙에 포함되 있는 정보 은닉, 캡슐화에 대해 정리 해보자.

정보 은닉 (Stealth Information)

외부의 접근은 제한하고, 내부에서의 접근만을 허용하여 정보 은닉의 원칙을 수행 한다.

  • 클래스 내부에서만 접근을 허용하겠다는 것이 정보 은닉(Stealth Information)라 한다.
  • 데이터Private로 선언 하고 Method를 통해 데이터에 접근.
  • Method를 통해 Member변수에 접근 시 안정성이 높아진다.
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());

} 

Encapsulation

캡슐

타이레놀 캡슐 알약은 들어봤는데..

  • 하나의 Class에 필요한 부분을 다 담는 것을 의미함.
  • Car라는 클래스에 적절한 부분을 담아 내는 것.

static 선언을 붙여 선언하는 Class 변수

Class 변수 (static 변수)

class Calculator {
	private static int cnt; // 클래스 변수 혹은 static 변수
}
  • 클래스 변수, static 변수는 인스턴스의 생성과는 무관하게 클래스가 자바 가상 머신에 의해 해당 클래스컴파일되어 메모리에 올라가는 순간 또 다른 공간(데이터영역)에 저장 되어 공유하는 용도로
    사용이 되는 변수를 의미한다.
  • 변수 앞에 static을 선언 해 모든 클래스에서 접근 할 수 있는 클래스 변수로 만든다.
  • static 선언 시 인스턴스 변수와 무관하며 공유의 목적을 갖는다.
  • 별도의 메모리 공간에 딱 하나만 생성이 된다.
  • 해당 클래스 내에서의 접근 지시자 수준을 따라야 한다.

클래스 내부 접근

  • static 변수가 선언된 클래스 내에서는 이름만으로 직접 접근 가능.

클래스 외부 접근

  • private로 선언되지 않으면 클래스 외부에서도 접근 가능.
  • 접근 수준 지시자가 허용하는 범위에서 접근 가능.
  • 클래스 이름 또는 인스턴스의 이름을 통해 접근.
  • 인스턴스별로 유지될 필요가 없는 값은 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변수의 값은 소멸 되지 않는다.
profile
https://ym1085.github.io

0개의 댓글