경계의 경계

자바의 캡슐화 본문

Java

자바의 캡슐화

gigyesik 2024. 2. 6. 03:06

캡슐화 (Encapsulation) 란 무엇인가

캡슐화 또한 OOP 의 주요한 특징으로, 클래스 내에서 필드와 메서드들을 하나로 묶는 과정이다.

접근 제어자를 통해서 구현하며, 데이터 숨기기 (Data Hiding) 을 실현하게 해준다.

구현 예시

public class EncapsulationClass {
    int a;
    int b;

    public EncapsulationClass(int a, int b) {
        this.a = a;
        this.b = b;
    }

    public void getAPlusB() {
        System.out.println(a + b);
    }

    public static void main(String[] args) {
        EncapsulationClass ec = new EncapsulationClass(2, 3);
        ec.getAPlusB(); // 5
    }
}

위 코드에서, 우리는 a와 b 각 필드의 값에는 접근할 수 없고 getAPlusB() 메서드를 통해 a + b 값에만 접근할 수 있다.

이로써 각 필드 데이터가 감춰지고, 필드와 메서드를 한 클래스에 모아서 관리하는 캡슐화가 구현된다.

왜 캡슐화하는가?

  • 연관성 있는 필드와 메서드를 한 클래스에서 관리하므로 코드가 깔끔해지고 가독성이 향상된다.
  • private 접근자로 설정한 필드에 안전하게 getter, setter 메서드를 사용해 접근하게 된다.
  • 코드의 접근을 나눠서 관리하므로 필요한 관심사에 따라 코드를 분리한다.
  • private 접근자로 설정하는 경우 외부 클래스에서 접근이 제한된다. 데이터 숨김 (Data Hiding)으로 명명된다.

데이터 숨김 (Data Hiding)

public class EncapsulationClass {
    int a;
    int b;
    private int c;

    public EncapsulationClass(int a, int b) {
        this.a = a;
        this.b = b;
    }

    public void getAPlusB() {
        System.out.println(a + b);
    }

    public void setC(int c) {
        if (c > 0) this.c = c;
    }

    public void getC() {
        System.out.println(c);
    }

    public static void main(String[] args) {
        EncapsulationClass ec = new EncapsulationClass(2, 3);
        ec.setC(4);
        ec.getC(); // 4
    }
}

Data Hiding은 데이터의 접근을 따로 구현하여 접근을 통제하는 것을 말한다. 캡슐화는 그 구현의 한 예이다.

접근 제어자가 private 이므로 외부 클래스에서 접근할 수 없다.

이 경우 변수 c 에 접근하려면 public 메서드인 getC(), setC() 를 사용해야 한다. 이 둘을 getter, setter라 한다.

다른 클래스에서 변수 c에 접근하려 하면 에러가 발생한다.

References

'Java' 카테고리의 다른 글

자바의 파일 입출력  (0) 2024.02.09
자바의 객체 지향 프로그래밍  (0) 2024.02.06
자바의 추상화  (1) 2024.02.06
자바의 다형성  (0) 2024.02.04
자바의 상속  (0) 2024.02.04