캡슐이라고 하면 알약을 쉽게 떠올릴 수 있다. 캡슐 형태의 알약을 보면 내부에 가루약이 존재하고 그 겉을 껍질로 감싸고 있다.
객체 지향 프로그래밍에서 말하는 캡슐화 도 똑같은 개념이라고 볼 수 있다.
캡슐화 란 객체 지향 프로그래밍에서 클래스의 세부 구현 내용인 필드와 메서드 등을 객체로 묶어 숨기고
외부에서 알 수 없게 감추는 방법을 말한다.
내부 구현 내용은 제한된 방법으로만 접근 가능하기 때문에 데이터의 무결성을 보장할 수 있다.
캡슐화 를 코드 상에서 구현하기 위해서는 어떤 방법을 사용해야 할까?
Java 에서 캡슐화 를 구현하기 위한 방법으로 접근 제어자 가 있다.
접근 제어자 는 클래스 멤버에 대한 접근 권한 조건을 부여하는 것이다.
접근 제어자 종류
public: 어떤 클래스에서도 접근 가능하다.
protected: 같은 패키지 내의 클래스 또는 자식 클래스에서만 접근 가능하다.
default: 같은 패키지 내의 클래스에서만 접근 가능하다.
private: 같은 클래스 내에서만 접근이 가능하다.
접근 제어자 를 활용한다면 제한적인 접근 권한을 통해 클래스 멤버의 안정성을 향상시킬 수 있다.
접근 권한을 제한 받는다면 클래스 내 데이터를 제공받기 위한 별도의 방법이 필요하다.
이때 필요한 것이 Getter 와 Setter 이다.
Getter 와 Setter 는 캡슐화를 적용하면서 데이터를 안전하게 관리하기 위해서 사용되는 메서드이다.
직접 데이터에 접근하는 것이 아니라, Getter 메서드를 통해 데이터를 불러오고 Setter 메서드를 통해 데이터를 설정한다.
public class Person {
private int age; // private 멤버 변수
public int getAge() { // age 변수에 대한 Getter 메서드
return age;
}
public void setAge(int age) { // age 변수에 대한 Setter 메서드
if (age >= 0) {
this.age = age;
} else {
System.out.println("잘못된 값 입력");
}
}
}
public class Main {
public static void main(String[] args) {
Person person = new Person();
person.setAge(28); // Setter 메서드를 사용하여 age 변수 설정
System.out.println(person.getAge()); // Getter 메서드를 사용하여 age 변수 불러오기
}
}
캡슐화 의 가장 큰 장점은 앞서 언급한 바와 같이 클래스 내 데이터를 은닉함으로써,
외부에서는 세부 내용을 알 필요 없이 객체를 사용할 수 있다는 것이다.
은닉을 통해 안정성을 향상시킬 수 있고, 데이터 무결성을 지키는 데 큰 도움을 줄 수 있다.
캡슐화 되어있는 객체를 사용하면 외부에서 영향을 받지 않기 때문에,
수정이 필요한 경우에도 클래스 내 변경이 필요한 부분만 수정하면 된다.
이렇게 함으로써 유지보수성, 확장성 등이 향상된다는 점이 중요한 이점이다.
캡슐화는 객체 지향 프로그래밍에서 매우 중요한 역할을 수행한다.
클래스를 설계할 때 캡슐화의 다양한 특성들을 반드시 고려해야겠다는 생각이 들었다.