자바 캡슐화: 안전한 데이터 은닉과 제어
캡슐화(Encapsulation)는 네 가지 기본 OOP 개념 중 하나입니다. 나머지 세 가지는 상속, 다형성, 추상화입니다.
자바에서 캡슐화는 데이터(변수)와 데이터를 다루는 코드(메서드)를 단일 단위로 감싸는 메커니즘입니다. 캡슐화에서 클래스의 변수들은 다른 클래스들로부터 숨겨지며, 오직 자신의 클래스 메서드를 통해서만 접근할 수 있습니다. 따라서 데이터 은닉(data hiding)이라고도 합니다.
자바에서 캡슐화를 달성하려면:
- 클래스의 변수들을 private으로 선언
- 변수 값을 수정하고 조회할 수 있는 public setter와 getter 메서드 제공
예제: 자바 캡슐화 달성
/* File name: 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; }
}
public setXXX()와 getXXX() 메서드들은 EncapTest 클래스의 인스턴스 변수들에 대한 접근 지점입니다. 보통 이 메서드들을 게터(getter)와 세터(setter)라고 부릅니다. 따라서 변수에 접근하려는 모든 클래스는 이 게터와 세터를 통해 접근해야 합니다.
EncapTest 클래스의 변수들은 다음 프로그램으로 접근할 수 있습니다.
/* File name: 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
캡슐화의 이점
- 클래스의 필드를 읽기 전용(read-only) 또는 쓰기 전용(write-only)으로 만들 수 있음
- 클래스가 자신의 필드에 저장되는 내용을 완전히 제어할 수 있음