Backend
home
📘

[개념 정리] 캡슐화

생성 일시
2025/02/23 09:37
태그
Java
게시일
2025/02/23
최종 편집 일시
2025/02/23 09:52

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
복사