1. 객체 간 간섭 최소화, 정보은닉(Information Hiding)의 개요
가. 정보은닉의 정의
객체의 내부 상세 구현(데이터 구조 및 로직)을 외부로부터 감추고, 미리 정의된 제한된 인터페이스를 통해서만 객체와 상호작용하게 하는 설계 원칙입니다.
데이비드 파나스(David Parnas)가 제안하였으며, 변경의 영향도를 국소화하는 것이 주된 목적입니다.
나. 정보은닉의 필요성
유지보수성 향상: 내부 구현을 변경해도 외부 인터페이스가 동일하면 이를 사용하는 다른 객체에 영향을 주지 않음.
데이터 보호 및 무결성: 객체 내부 데이터에 직접 접근을 차단하여 잘못된 값의 할당이나 의도치 않은 변조를 방지.
복잡도 감소: 사용자는 내부의 복잡한 동작 방식을 알 필요 없이 제공된 기능(Method)만 사용하면 되므로 인지적 부하 감소.
2. 정보은닉과 캡슐화(Encapsulation)의 관계
많은 경우 혼용되지만, 기술사적 관점에서는 명확히 구분하여 기술해야 합니다.
| 구분 | 캡슐화 (Encapsulation) | 정보은닉 (Information Hiding) |
| 개념 | 데이터(속성)와 기능(메서드)을 하나의 단위로 묶는 것 | 캡슐 내부의 요소를 외부에 감추는 것 |
| 목적 | 객체의 응집도(Cohesion) 향상 | 객체 간 결합도(Coupling) 감소 |
| 수단 | Class, Module, Package | Access Modifier (접근 제어자) |
3. 정보은닉의 구현 매커니즘: 접근 제어자(Access Modifier)
프로그래밍 언어(Java, C++ 등)에서 제공하는 가시성 제어 도구를 통해 정보은닉을 실현합니다.
| 제어자 | 가시성 범위 (Visibility) | 은닉 수준 |
| private | 클래스 내부에서만 접근 가능 | 최고 (Strict) |
| protected | 동일 패키지 및 상속받은 하위 클래스까지 허용 | 중간 |
| default | 동일 패키지 내의 클래스들만 허용 | 보통 |
| public | 모든 클래스에서 자유롭게 접근 가능 | 없음 (Open) |
4. 정보은닉을 위한 구체적 설계 기법
Private 필드와 Public 메서드: 데이터를
private으로 선언하고,getter/setter메서드를 통해 유효성 검증 후 데이터에 접근하도록 설계.인터페이스 기반 설계: 구체적인 클래스 타입이 아닌 인터페이스(Interface)를 통해 기능을 호출함으로써 구현체의 세부 사항을 은닉.
추상화(Abstraction): 복잡한 로직을 추상화된 메서드 뒤로 숨겨 사용자가 고수준의 기능에만 집중하게 함.
5. 기술사적 제언: 정보은닉이 소프트웨어 아키텍처에 미치는 영향
정보은닉은 단순한 코딩 기법을 넘어 전체 아키텍처의 견고함을 결정짓는 요소입니다.
변경 영향도 최소화: 특정 모듈의 데이터 구조가 변경되더라도 정보은닉이 잘 된 시스템은 여파가 해당 모듈 내부에 머무는 '파급 효과 차단' 기능을 수행합니다.
보안 코딩(Secure Coding): 민감한 정보(암호화 키, 사용자 개인정보 등)를 객체 내부에 은닉하고 엄격한 인터페이스로만 관리하는 것은 시큐어 코딩의 기본 원칙입니다.
디자인 패턴과의 연계: 퍼사드(Facade) 패턴이나 프록시(Proxy) 패턴 등 많은 디자인 패턴이 정보은닉 원칙을 기반으로 복잡성을 관리하고 제어권을 확보합니다.
기술사는 설계 단계부터 **'최소 권한의 원칙'**을 적용하여 모든 데이터를 기본적으로 은닉(private)하고, 반드시 필요한 기능만을 선별적으로 노출하는 엄격한 거버넌스를 유지해야 합니다.
댓글 없음:
댓글 쓰기