자바 캡슐화



객체 지향 프로그래밍 방법에서 캡슐화(영어: Encapsulation)는 추상 기능 인터페이스의 구현 세부 사항을 부분적으로 패키징하고 숨기는 방법을 말합니다.

캡슐화는 외부 클래스에서 정의한 코드가 클래스의 코드와 데이터에 무작위로 액세스하는 것을 방지하는 보호 장벽으로 생각할 수 있습니다.

이 클래스의 코드와 데이터에 액세스하려면 엄격한 인터페이스 제어를 통과해야 합니다.

캡슐화의 주요 기능은 코드를 호출하는 프로그램 조각을 수정하지 않고도 자체 구현 코드를 수정할 수 있다는 것입니다.

올바른 캡슐화는 프로그램 코드를 더 쉽게 이해하고 유지 관리할 수 있게 하며 프로그램 코드의 보안도 강화할 수 있습니다.

Example

Java 캡슐화된 클래스의 예를 살펴보겠습니다.

/* 文件名: EncapTest.java */
public class EncapTest{

   private String name;
   private String idNum;
   private int age;

   public int getAge(){
      return age;
   }

   public String getName(){
      return name;
   }

   public String getIdNum(){
      return idNum;
   }

   public void setAge( int newAge){
      age = newAge;
   }

   public void setName(String newName){
      name = newName;
   }

   public void setIdNum( String newId){
      idNum = newId;
   }
}

위의 예에서 공용 메소드는 외부 클래스가 이 클래스의 멤버 변수에 액세스하는 입구입니다.

일반적으로 이러한 메서드를 getter 및 setter 메서드라고 합니다.

따라서 클래스의 비공개 멤버 변수에 액세스하려는 모든 클래스는 이러한 getter 및 setter 메서드를 거쳐야 합니다.

다음 예제에서는 EncapTest 클래스의 변수에 액세스하는 방법을 보여줍니다.

/* F文件名 : RunEncap.java */
public class RunEncap{

   public static void main(String args[]){
      EncapTest encap = new EncapTest();
      encap.setName("James");
      encap.setAge(20);
      encap.setIdNum("12343ms");

      System.out.print("Name : " + encap.getName()+ 
                             " Age : "+ encap.getAge());
    }
}

위 코드의 컴파일 및 실행 결과는 다음과 같습니다.

Name : James Age : 20