1. 캡슐화란 무엇인가?
•
캡슐화는 객체지향 프로그래밍의 핵심 개념 중 하나이다.
•
캡슐화는 객체 상태가 외부로부터 숨겨진 상황에서 이 상태에 접근하는 일련의 공개 메서드만 노출하는 기법이다.
•
캡슐화는 각 객체가 클래스 내에서 객체의 상태를 비공개(private)로 유지할 때 성립한다.
•
캡슐화는 정보 은닉(information-hiding) 메커니즘이라고도 한다.
•
캡슐화는 느슨한 결합(loosely coupled), 재사용성, 보안 및 테스트하기 쉬운 코드와 같은 여러가지 중요한 이점을 제공한다.
•
자바에서 캡슐화는 접근 제어자(public, private, protected)로 구현할 수 있다.
정리
캡슐화는 객체지향 프로그래밍의 핵심 개념 중 하나이다. 캡슐화는 주로 코드와 데이터를 하나의 작업 단위인 클래스로 결합하고 외부 코드가 이 데이터에 직접 접근하지 못하게 하는 방어막 역할을 한다. 또한 객체 상태를 외부로부터 숨기고 이 상태에 접근하기 위한 일련의 public 메서드를 노출하는 기법이다. 각 객체가 클래스 안에서 상태를 private으로 유지할 때 캡슐화가 성립되었다고 말할 수 있다. 캡슐화를 이용하는 코드는 몇 가지 장점이 있다. 먼저 코드의 느슨한 결합이 가능하다. 예를 들어 클라이언트 코드와 어긋나지 않는 상태에서 클래스 변수의 이름을 변경할 수 있다. 또한 재사용이 가능하며 클래스 내에서 데이터가 어떻게 조작되는지 클라이언트가 인식하지 못하므로 안전하다. 마지막으로 필드를 테스트하는 것보다 메서드를 테스트하는 편이 더 쉽기 때문에 캡슐화를 이용한 코드는 테스트하기 쉽다는 장점이 있다. 자바에서 캡슐화는 public, private, protected와 같은 접근 제어자로 구현할 수 있다.
Cat 클래스는 mood(기분), hungry(배고픔), energy(에너지)와 같은 필드로 구성할 수 있다. Cat 클래스의 외부 코드는 이러한 필드는 직접 수정할 수는 없지만 play, feed, sleep과 같이 클래스 상태를 내부적으로 수정하는 public 메서드를 호출할 수 있다. Cat 클래스는 meow와 같이 클래스 외부에서 접근할 수 있는 private 메서드도 가질 수 있다. 이것이 캡슐화이다.
2. 코드
public class Cat {
private int mood = 50;
private int hungry = 50;
private int energy = 50;
public void sleep() {
System.out.println("Sleep ...");
energy++;
hungry++;
}
public void play() {
System.out.println("Play ...");
mood++;
energy--;
meow();
}
public void feed() {
System.out.println("Feed ...");
hungry--;
mood++;
meow();
}
public void meow() {
System.out.println("Meow!");
}
public int getMood() {
return mood;
}
public int getHungry() {
return hungry;
}
public int getEnergy() {
return energy;
}
}
Java
복사
public class Main {
public static void main(String[] args) {
Cat cat = new Cat();
cat.feed();
cat.play();
cat.feed();
cat.sleep();
System.out.println("Energy : " + cat.getEnergy());
System.out.println("Mood : " + cat.getMood());
System.out.println("Hungry : " + cat.getHungry());
}
}
== 출력 결과 ==
Feed ...
Meow!
Play ...
Meow!
Feed ...
Meow!
Sleep ...
Energy : 50
Mood : 53
Hungry : 49
Java
복사