캡슐화

sun·2024년 4월 1일
0

java

목록 보기
34/38

캡슐화 은닉화의 차이

캡슐화란 쉽게 말하면 변수나 메소드들을 캡슐로 감싸서 안보이게 하는 정보 은닉 개념 중 하나이다.
우리가 먹는 알약을 생각하면 알약의 실제 내용은 가루약이지만, 이것을 캡슐로 감싸면서 맛을 은닉하여 사람이 먹기 편하게 만들었으며 또한 복잡한 재료들의 배합을 캡슐로 포장하여 다루기 편하게 하였다

이처럼 캡슐화는 객체의 속성(Field)과 행위(Method)를 하나로 묶고, 외부로 부터 내부를 감싸 숨겨 은닉한다. 또한 외부의 잘못된 접근으로 값이 변하는 동작을 방지하는 보호 효과도 가지고 있다.

자바에서는 대표적으로 protected, default, private 의 접근 제어자를 통해 구현이 가능하다.

스트링 값이 불변의 데이터라고 불리우는 이유는
JAVA자체 String 클래서 내부의 필드가 private 제어자로 선언 되어 있기 때문데, 직접적으로 문자열 값에 접근해서 변경할 수 없는 것이다.

자바 프로그래밍의 정보은닉 기법은 대표적으로 3가지가 있다.
1. 객체의 구체적인 타입 은닉 (=업캐스팅)
2. 객체의 필드 및 메소드 은닉 (=캡슐화)
3. 구현 은닉 (=인터페이스 & 추상 클래스)

정보은닉과 캡슐화는 같은 것이 아니라,
정보은닉의 기법중 하나가 캡슐화 인 것이다.

객체지향의 설계원칙(SOLID)과 객체지향 설계에 관련된 격언들도 역시 정보 은닉에 기반은 두었다고 해도 과언이 아니라고 합니다.


객체의 타입 은닉 (업캐스팅)

자식 객체의 타입을 부모 객체의 타입으로 형변환 하는 UpCasting도 일종의 정보 은닉이다.
왜냐하면 구체적인 자식 객체의 타입을 은닉함으로써 얻는 효과가 있기 때문이다.(다형성)

정보 은닉이되면 될수록, 객체의 교체나 변경이 쉬워지게 되어 결과적으로 개발 생산성이 향상되게 된다.

class Process{
    private void init(){} // 은닉 메서드

    private void process(){} // 은닉 메서드

    private void release(){} // 은닉 메서드

    public void work(){ // 공개 메서드
        init(); // 은닉한 메서드 실행
        process();
        release();
    }
}

출처: https://inpa.tistory.com/entry/OOP-캡슐화Encapsulation-정보-은닉의-완벽-이해 [Inpa Dev 👨‍💻:티스토리]

이렇게 공개 메서드와 은닉 메서드를 구분하고 공개 메소드의 갯수를 최소화 시키는 이유가 바로 다음에 이어질 구현 은닉을 위한 설계이며 자바에서 인터페이스 라는 것을 사용하는 이유이기도 하다.

구현은닉(인터페이스)

위의 정보 은닉 멘토를 잘 받아들여, 변수를 private으로 선언하고 꼭 필요한 공개 메소드를 잘 구축한 좋은 클래스를 구성했다고 가정하자.

이렇게 클래스 구성을 해 놓으면 객체 간의 의존성이 오직 공개 메소드에 의해서만 발생하게 된다.

그리고 이러한 공개 메소드를 은닉 메소드들과 구분하고 통합적으로 관리하기 위해서, 자바에서는 클래스와 유사하게 상속 가능한 타입이면서 구체적인 구현을 배제한 인터페이스(Interface)를 만들어 메소드 추상화를 통해 상속 시킬 공새 메서드를 통합적으로 관리하게 하였다.

이것이 왜 인터페이스를 구현하여 추상 메소드를 정의하여 implements를 통해 재정의 규약을 설정하는, 우리가 지금까지 배우고 써먹었던 객체 지향적 프로그래밍의 이유가 바로 이것이다.

참고 :
OOP-캡슐화 정보은닉의 완벽 이해

0개의 댓글