TIL #9 캡슐화

HYEON JIN CHOI·2024년 5월 1일

1. 캡슐화 기본 개념

캡슐이라고 하면 알약을 쉽게 떠올릴 수 있다. 캡슐 형태의 알약을 보면 내부에 가루약이 존재하고 그 겉을 껍질로 감싸고 있다.
객체 지향 프로그래밍에서 말하는 캡슐화 도 똑같은 개념이라고 볼 수 있다.

캡슐화 란 객체 지향 프로그래밍에서 클래스의 세부 구현 내용인 필드와 메서드 등을 객체로 묶어 숨기고
외부에서 알 수 없게 감추는 방법을 말한다.
내부 구현 내용은 제한된 방법으로만 접근 가능하기 때문에 데이터의 무결성을 보장할 수 있다.

2. 캡슐화 구현 방법

2.1. 접근 제어자

캡슐화 를 코드 상에서 구현하기 위해서는 어떤 방법을 사용해야 할까?

Java 에서 캡슐화 를 구현하기 위한 방법으로 접근 제어자 가 있다.
접근 제어자 는 클래스 멤버에 대한 접근 권한 조건을 부여하는 것이다.

접근 제어자 종류

public : 어떤 클래스에서도 접근 가능하다.
protected : 같은 패키지 내의 클래스 또는 자식 클래스에서만 접근 가능하다.
default : 같은 패키지 내의 클래스에서만 접근 가능하다.
private : 같은 클래스 내에서만 접근이 가능하다.

접근 제어자 를 활용한다면 제한적인 접근 권한을 통해 클래스 멤버의 안정성을 향상시킬 수 있다.

2.2. Getter와 Setter

접근 권한을 제한 받는다면 클래스 내 데이터를 제공받기 위한 별도의 방법이 필요하다.
이때 필요한 것이 GetterSetter 이다.

GetterSetter 는 캡슐화를 적용하면서 데이터를 안전하게 관리하기 위해서 사용되는 메서드이다.
직접 데이터에 접근하는 것이 아니라, 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 변수 불러오기
    }
}

3. 캡슐화 장점

3.1. 은닉

캡슐화 의 가장 큰 장점은 앞서 언급한 바와 같이 클래스 내 데이터를 은닉함으로써,
외부에서는 세부 내용을 알 필요 없이 객체를 사용할 수 있다는 것이다.
은닉을 통해 안정성을 향상시킬 수 있고, 데이터 무결성을 지키는 데 큰 도움을 줄 수 있다.

3.2. 유지보수성 향상

캡슐화 되어있는 객체를 사용하면 외부에서 영향을 받지 않기 때문에,
수정이 필요한 경우에도 클래스 내 변경이 필요한 부분만 수정하면 된다.
이렇게 함으로써 유지보수성, 확장성 등이 향상된다는 점이 중요한 이점이다.

4. 회고

캡슐화는 객체 지향 프로그래밍에서 매우 중요한 역할을 수행한다.
클래스를 설계할 때 캡슐화의 다양한 특성들을 반드시 고려해야겠다는 생각이 들었다.

0개의 댓글