캡슐화(Encapsulation)
1. 데이터 캡슐화란?
데이터 캡슐화는 객체지향 프로그래밍의 네 가지 주요 특성 중 하나로,
객체 내부의 데이터를 외부에서 직접 접근하지 못하도록 하는 것을 의미합니다.
즉, 데이터와 그 데이터를 다루는 메서드를 하나로 묶어 캡슐화함으로써,
외부에서 직접 접근하는 것을 방지하고 객체의 무결성을 보호하는 개념입니다.
2. 데이터 캡슐화의 이점
2 - 1. 정보 은닉(Information Hiding)
데이터 캡슐화는 객체의 내부 구현을 외부에 숨기는 데 큰 도움을 줍니다.
즉, 객체의 사용자들은 객체가 제공하는 공개된 메서드를 통해서만 객체와 상호작용할 수 있으며, 내부의 세부 구현은 알 필요가 없습니다.
이는 객체 간의 결합도를 낮추고, 코드 수정이나 유지보수 시에도 더욱 유연하고 안정적인 코드를 작성할 수 있게 해줍니다.
2 - 2. 데이터 보호와 유효성 검사
캡슐화를 통해 데이터를 외부로부터 감추면서, 객체 내부에서 데이터에 대한 유효성 검사를 수행할 수 있습니다.
즉, 데이터의 무결성을 보장하고 잘못된 데이터의 삽입이나 수정을 방지할 수 있습니다.
2 - 3. 캡슐화된 데이터의 재사용성
객체 내부의 데이터가 캡슐화되어 있으면, 해당 객체를 다른 프로젝트나 모듈에서도 쉽게 재사용할 수 있습니다.
외부에서는 해당 객체의 공개된 메서드를 사용하여 객체와 상호작용하며,
내부 구현은 신경 쓰지 않아도 되기 때문에 객체를 더 쉽게 활용할 수 있습니다.
3. 데이터 캡슐화 구현하기
자바에서 데이터 캡슐화를 구현하는 방법은 주로 접근 제어자(Access Modifiers)를 이용하는 것입니다.
자바에서는 다음과 같은 네 가지 접근 제어자를 제공합니다.
- public
- 모든 곳에서 접근 가능
- protected
- 같은 패키지 내부 또는 해당 클래스를 상속받은 자식 클래스에서 접근 가능
- default (package-private)
- 같은 패키지 내부에서만 접근 가능 (접근 제어자를 명시하지 않았을 때의 기본 값)
- private
- 같은 클래스 내부에서만 접근 가능
일반적으로 데이터 필드(멤버 변수)는 `private`로 선언하고,
데이터에 접근할 수 있는 메서드인 `getter`와 `setter`를 `public`으로 제공하여 데이터에 접근하도록 합니다.
public class EncapsulationExample {
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
if (age >= 0) {
this.age = age;
} else {
System.out.println("나이는 0보다 작을 수 없습니다.");
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
위의 예제에서 `age`와 `name` 필드는 `private`로 선언되어 외부에서 직접 접근할 수 없습니다.
대신 `getAge()`, `setAge()`, `getName()`, `setName()`과 같은 공개된 메서드를 통해 데이터에 접근하고 설정할 수 있습니다.
이렇게 자바의 데이터 캡슐화에 대해 알아보았습니다.
데이터 캡슐화는 객체지향 프로그래밍의 핵심 개념 중 하나로, 객체의 내부 데이터를 보호하고 사용자들에게 안정적으로 인터페이스를 제공하는 데 큰 도움을 줍니다.
데이터 캡슐화를 통해 유지보수성 높은 프로그램을 작성하고, 코드의 재사용성을 높일 수 있습니다.
잘못된 정보는 댓글로 알려주시면 감사하겠습니다.
'Java' 카테고리의 다른 글
Java - 20. 자바의 패키지(Package) (0) | 2023.07.22 |
---|---|
Java - 19. 자바의 Getter, Setter 메서드 (0) | 2023.07.21 |
Java - 17. 자바의 import문 (0) | 2023.07.19 |
Java - 16. 자바에서의 null이란? (0) | 2023.07.18 |
Java - 15. 자바의 클래스(Class) (0) | 2023.07.17 |