JAVA/정리한 것

[ JAVA ] 객체지향언어의 특징 - 캡슐화

따갓 2022. 5. 15. 00:10

캡슐화 (Encapsulation)

  • 연관된 목적을 가지는 변수와 함수를 하나의 클래스로 묶어 외부에서 쉽게 접근하지 못하도록 은닉하는 것이다.
    캡슐화는 중요한 데이터를 쉽게 바꾸지 못하도록 할 때 사용한다.
  • 캡슐화를 하는 가장 큰 이유는 정보 은닉에 있다. 캡슐화를 통해 외부에서 내부의 정보에 접근하거나 변경할 수 없게 직접적인 접근을 막고 객체가 제공하는 필드와 메소드를 통해서만 접근이 가능하다.
  • 이렇게 접근을 제한함으로써 유지보수나 확장 시 오류의 범위를 최소화할 수 있고
    객체 내의 정보 손상과 오용을 방지하고 데이터가 변경되어도 다른 객체에 영향을 주지 않아 독립성이 좋다.
  • 캡슐화는 접근제어자를 통해 이루어진다. 접근제어자는 멤버변수 앞에 붙으며 로컬변수 앞에는 붙을 수 없다.
  1. private ( 공개X, 상속X )
  2. protected( 공개X, 상속O ) 
  3. public ( 공개O, 상속O ) 
class A{
	private int drug = 0;
	protected int vijagum = 1;
	public int budongsan = 2;
    
	void picnic(){
		System.out.println(this.drug);       //ok
		System.out.println(this.vijagum); 	 //ok
		System.out.println(this.budongsan);	 //ok
		//같은 클래스에 존재하므로 접근지정자 상관없이 얼마든지 접근 가능
	}
}
class B extends A{	// 상속된 경우
	void print(){
		// System.out.println( this.drug ); << 에러 ( private 는 상속 x )
		System.out.println(this.vijagum);      //ok
		System.out.println(this.budongsan);    //ok
	}
}
public class Main{
	public static void main(String[] args){   
		// private int i = 0; << 에러 
		A t = new A();
		System.out.println(t.budongsan);
		System.out.println(t.vijagum); // C++ 등에서는 접근안됨, 하지만 java에서는 package 개념이
		// 있어서 가능할 수도 있음.		
		// 같은 패키지에 속한 클래스는 protected 멤버에 접근가능.
		// 다른 패키지에 속한 클래스는 protected 멤버에 접근 불가능.
		// System.out.println(t.drug); : 외부에서 포인터로 직접 접근x
	}
}
  • private 로 선언된 변수에 접근하거나 변수의 값을 변경하려면 get, set 메서드를 클래스 내에 선언해야한다.