검수요청.png검수요청.png

"정보은닉"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
(목적)
(캡슐화와의 차이점)
 
(사용자 2명의 중간 판 16개는 보이지 않습니다)
1번째 줄: 1번째 줄:
'''정보 은닉'''(Information Hiding)이란 다른 객체에게 자신의 정보를 숨기고 자신의 연산만을 통해 접근을 허용하는 것으로, 클래스 외부에서 특정 정보에 접근을 막는다는 의미이다. <ref name="성숙지향">〈[https://photojin.tistory.com/93 JAVA PROGRAMMING-객체지향 특징(캡슐화, 정보은닉)]〉, 《개인블로그》, 2014-05-01</ref>
+
'''정보은닉'''<!--정보 은닉-->(information hiding)이란 다른 객체에게 자신의 정보를 숨기고 자신의 연산만을 통해 접근을 허용하는 것으로, 클래스 외부에서 특정 정보에 접근을 막는다는 의미이다.<ref name="성숙지향">〈[https://photojin.tistory.com/93 JAVA PROGRAMMING-객체지향 특징(캡슐화, 정보은닉)]〉, 《개인블로그》, 2014-05-01</ref> '''은닉성'''(隱匿性)이라고도 한다.
  
 
== 개요 ==
 
== 개요 ==
 +
정보은닉(Information hiding)은 모든 객체지향 언어적 요소를 활용하여 객체에 대한 구체적인 정보를 노출시키지 않도록 하는 기법으로 객체지향프로그램밍에서 중요한 개념이다. <ref name="Effective Programming"></ref> 정보은닉의 개념은 캡슐화와 유사한 부분이 많아 같은 개념이라고 많이들 오해하지만 시스템 처리 원리를 기준으로 본다면 다른 개념이다. 하지만 유사하다고 생각해도 큰 문제는 없으나 처리 원리에 대해 각각의 차이점을 알아두는 것이 좋다.
  
 
== 목적 ==
 
== 목적 ==
정보 은닉(Information hiding)의 목적 첫번째, 기능의 교체나 변경이 쉽도록 한다. 코드가 구체적인 것들 예를들면 타입이나 메소드, 구현등에 의존하는 것을 막아줌으로써 객체 간의 구체적인 결합도를 약화시킨다. 결합도가 약화되면 기능을 변경하거나 다른 기능으로 교체하는게 쉬워진다. 두번째, 동일한 타입의 다른 구현 객체들을 교체함으로써 동적 기능 변경이 가능하다. 세번째, 연동할 구체적인 구현이 없는 상태 즉, 인터페이스만으로도 정확한 연동 코드의 생성이 가능하다. <ref name="Effective Programming">〈[https://effectiveprogramming.tistory.com/entry/%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%EC%A0%95%EB%B3%B4-%EC%9D%80%EB%8B%89information-hiding%EC%97%90-%EB%8C%80%ED%95%9C-%EC%98%AC%EB%B0%94%EB%A5%B8-%EC%9D%B4%ED%95%B4 객체지향의 올바른 이해: 5. 정보 은닉(information hiding)]〉, 《개인사이트》, 2016-09-24</ref>
+
정보은닉(information hiding)의 목적 첫번째, 기능의 교체나 변경에 대한 유연성을 제공하는 것이다. 코드가 타입이나 메소드, 구현등에 의존하는 것을 막아줌으로써 객체 간의 구체적인 결합도를 약화시킨다. 결합도가 약화되면 기능을 변경하거나 다른 기능으로 교체하는게 쉬워진다. 두번째, 동일한 타입의 다른 구현 객체들을 교체함으로써 동적 기능 변경이 가능하다. 세번째, 연동할 구체적인 구현이 없는 상태 즉, 인터페이스만으로도 정확한 연동 코드의 생성이 가능하다. <ref name="Effective Programming">〈[https://effectiveprogramming.tistory.com/entry/%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%EC%A0%95%EB%B3%B4-%EC%9D%80%EB%8B%89information-hiding%EC%97%90-%EB%8C%80%ED%95%9C-%EC%98%AC%EB%B0%94%EB%A5%B8-%EC%9D%B4%ED%95%B4 객체지향의 올바른 이해: 5. 정보 은닉(information hiding)]〉, 《개인사이트》, 2016-09-24</ref> 네번째, 코드를 적절히 모듈화하여 주어진 코드의 일부를 이해하기 위해 필요한 정보의 양이 적기 때문에 코드를 이해하기가 더 쉽다. 다섯번째, 상호 교환이 필요한 정보의 양을 최소화하면서 독자적으로 각 모듈에 대한 작업을 진행할 수 있기에 개발 기간을 단축시킬 수 있다. <ref name="egloos">〈[http://egloos.zum.com/aeternum/v/1232020 Information Hiding]〉, 《개인블로그》</ref>
  
 
== 특징 ==
 
== 특징 ==
=== 장단점 ===
+
=== 장점 ===
*'''장점'''
+
캡슐화를 통한 정보은닉(Information hiding)의 장점은 첫번째, 객체에 포함된 정보의 손상과 오용을 막을 수 있다. 정보은닉은 단어 자체로 정보를 숨기는 것이기 때문에 권한이 없는 외부의 객체가 접근할 수 없기 때문에 정보 손상이 발생하지않는다. 두번째, 객체의 사용방법은 바뀌지않는다. 정보은닉된 객체의 인터페이스만으로 접근하기 때문에 내부 조작 방법이 바뀌어도 접근방법이 변경되진않는다. 세번째, 데이터가 바뀌어도 다른 객체에 영향을 주지않아서 독립성이 유지된다. 네번째, 객체의 이식성이 좋다. 객체의 정보에 직접적인 접근이 아닌, 연산만을 통한 접근이다. 그렇기에 연산으로 출력된 결과물만 사용하므로써 객체의 이식성이 높아진다. 다섯번째, 객체를 시스템 구성에서 부품처럼 사용할 수 있다. 연산으로 인해 출력된 결과물만 사용하기 때문에 객체를 부품화 할 수 있다. 부품화된 객체를 새로운 시스템 구성에서 부품처럼 사용이 가능하다. <ref name="DongChul">〈[https://slowlywalk1993.tistory.com/entry/Java-%EC%9E%90%EB%B0%94%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5%EA%B0%9C%EB%85%90-%EC%BA%A1%EC%8A%90%ED%99%94-%EC%A0%95%EB%B3%B4%EC%9D%80%EB%8B%89 (Java)자바객체지향개념 캡슐화,정보은닉]〉, 《개인사이트》, 2014-05-01</ref>
  
*'''단점'''
+
=== 캡슐화와의 차이점 ===
 +
정보은닉(Information hiding)과 캡슐화(Encapsulation)는 개념에 유사한 부분이 많긴하지만 다른 개념이다. 캡슐화는 데이터를 공용 메소드를 통해서만 접근할 수 있도록 허용하는 방법이다. 데이터 캡슐화라고도 하는데 정보 은닉은 데이터 캡슐화가 아닌 외부에 감춰야하는 비밀에 따라 시스템을 분할하는 모듈 분할의 원리이다. 모듈은 변경될 가능성이 있는 비밀을 내부로 감추고 잘 정의되고 쉽게 변경되지않는 공용 인터페이스를 외부에 제공하여 내부의 비밀에 함부로 접근할 수 없도록 하는 것이다. <ref name="egloos"></ref> 캡슐화는 관련된 요소들을 묶음으로써 캡슐 내부와 외부를 구별 짓기 때문에 캡슐 내에 속한 부분과 캡슐 외에 속한 부분들에 대해 구분이 명확하게 되있다. 즉, 특정 객체 속에 있는 데이터와 함수들을 다른 객체 속에 있는 데이터와 함수들과 구별이 이뤄진다는 의미이다. 하지만 정보은닉은 캡슐 내의 요소들에 대한 세부 구현사항들을 외부로부터 숨기는 것이다. 즉, 캡슐화가 되어있는 데이터와 함수에 대해서 외부에 해당 함수가 어떻게 구현되어 있는지에 대한 세부 사항을 숨기는 것이다. 정보은닉의 개념이 캡슐화 개념안에 포함되긴 하지만, 캡슐화가 되어있다고 해서 반드시 정보은닉이 되는 것은 아니다. <ref name="살수다">〈[https://frontierdev.tistory.com/93 캡슐화와 정보은닉]〉, 《개인사이트》, 2018-04-13</ref>
 +
 
 +
:{|class=wikitable cellpadding="10" cellspacing="0" border="1""
 +
|+ < 정보은닉 vs 캡슐화 >
 +
!width ="80px"|\
 +
!width ="350px"| 정보은닉(Information hiding)
 +
!width ="350px"| 캡슐화(Encapsulation)
 +
|-
 +
!|개념
 +
|width ="350px"| '''*''' 데이터 캡슐화가 아닌 외부에 감춰야하는 비밀에 따라 시스템을 분할하는 모듈 분할의 원리
 +
'''*''' 잘 정의되고 쉽게 변경되지않는 공용 인터페이스를 외부에 제공하여 내부의 비밀에 함부로 접근할 수 없도록 하는 것
 +
|width ="350px"| '''*''' 데이터를 공용 메소드를 통해서만 접근 허용(= 데이터 캡슐화)
 +
|-
 +
!|숨기는 내용
 +
|width ="350px"|캡슐 내의 요소들에 대한 세부 구현사항들을 외부로부터 숨김
 +
|width ="350px"|관련된 요소들을 묶음으로써 캡슐 내부와 외부를 구별지어 특정 객체 속에 있는 데이터와 함수들을 다른 객체 속에 있는 데이터와 함수들과 구별이 이뤄짐
 +
|-
 +
!|결론
 +
|width ="350px" colspan="2" |정보은닉의 개념이 캡슐화 개념안에 포함되기 하지만, 캡슐화가 되어있다고 해서 반드시 정보은닉이 되는 것이 아니다.
 +
|}
  
 
{{각주}}
 
{{각주}}
19번째 줄: 40번째 줄:
 
== 같이 보기 ==
 
== 같이 보기 ==
 
* [[캡슐화]]
 
* [[캡슐화]]
 +
* [[객체]]
 +
* [[멤버변수]]
 +
 +
{{프로그래밍|검토 필요}}

2020년 8월 19일 (수) 11:33 기준 최신판

정보은닉(information hiding)이란 다른 객체에게 자신의 정보를 숨기고 자신의 연산만을 통해 접근을 허용하는 것으로, 클래스 외부에서 특정 정보에 접근을 막는다는 의미이다.[1] 은닉성(隱匿性)이라고도 한다.

개요[편집]

정보은닉(Information hiding)은 모든 객체지향 언어적 요소를 활용하여 객체에 대한 구체적인 정보를 노출시키지 않도록 하는 기법으로 객체지향프로그램밍에서 중요한 개념이다. [2] 정보은닉의 개념은 캡슐화와 유사한 부분이 많아 같은 개념이라고 많이들 오해하지만 시스템 처리 원리를 기준으로 본다면 다른 개념이다. 하지만 유사하다고 생각해도 큰 문제는 없으나 처리 원리에 대해 각각의 차이점을 알아두는 것이 좋다.

목적[편집]

정보은닉(information hiding)의 목적 첫번째, 기능의 교체나 변경에 대한 유연성을 제공하는 것이다. 코드가 타입이나 메소드, 구현등에 의존하는 것을 막아줌으로써 객체 간의 구체적인 결합도를 약화시킨다. 결합도가 약화되면 기능을 변경하거나 다른 기능으로 교체하는게 쉬워진다. 두번째, 동일한 타입의 다른 구현 객체들을 교체함으로써 동적 기능 변경이 가능하다. 세번째, 연동할 구체적인 구현이 없는 상태 즉, 인터페이스만으로도 정확한 연동 코드의 생성이 가능하다. [2] 네번째, 코드를 적절히 모듈화하여 주어진 코드의 일부를 이해하기 위해 필요한 정보의 양이 적기 때문에 코드를 이해하기가 더 쉽다. 다섯번째, 상호 교환이 필요한 정보의 양을 최소화하면서 독자적으로 각 모듈에 대한 작업을 진행할 수 있기에 개발 기간을 단축시킬 수 있다. [3]

특징[편집]

장점[편집]

캡슐화를 통한 정보은닉(Information hiding)의 장점은 첫번째, 객체에 포함된 정보의 손상과 오용을 막을 수 있다. 정보은닉은 단어 자체로 정보를 숨기는 것이기 때문에 권한이 없는 외부의 객체가 접근할 수 없기 때문에 정보 손상이 발생하지않는다. 두번째, 객체의 사용방법은 바뀌지않는다. 정보은닉된 객체의 인터페이스만으로 접근하기 때문에 내부 조작 방법이 바뀌어도 접근방법이 변경되진않는다. 세번째, 데이터가 바뀌어도 다른 객체에 영향을 주지않아서 독립성이 유지된다. 네번째, 객체의 이식성이 좋다. 객체의 정보에 직접적인 접근이 아닌, 연산만을 통한 접근이다. 그렇기에 연산으로 출력된 결과물만 사용하므로써 객체의 이식성이 높아진다. 다섯번째, 객체를 시스템 구성에서 부품처럼 사용할 수 있다. 연산으로 인해 출력된 결과물만 사용하기 때문에 객체를 부품화 할 수 있다. 부품화된 객체를 새로운 시스템 구성에서 부품처럼 사용이 가능하다. [4]

캡슐화와의 차이점[편집]

정보은닉(Information hiding)과 캡슐화(Encapsulation)는 개념에 유사한 부분이 많긴하지만 다른 개념이다. 캡슐화는 데이터를 공용 메소드를 통해서만 접근할 수 있도록 허용하는 방법이다. 데이터 캡슐화라고도 하는데 정보 은닉은 데이터 캡슐화가 아닌 외부에 감춰야하는 비밀에 따라 시스템을 분할하는 모듈 분할의 원리이다. 모듈은 변경될 가능성이 있는 비밀을 내부로 감추고 잘 정의되고 쉽게 변경되지않는 공용 인터페이스를 외부에 제공하여 내부의 비밀에 함부로 접근할 수 없도록 하는 것이다. [3] 캡슐화는 관련된 요소들을 묶음으로써 캡슐 내부와 외부를 구별 짓기 때문에 캡슐 내에 속한 부분과 캡슐 외에 속한 부분들에 대해 구분이 명확하게 되있다. 즉, 특정 객체 속에 있는 데이터와 함수들을 다른 객체 속에 있는 데이터와 함수들과 구별이 이뤄진다는 의미이다. 하지만 정보은닉은 캡슐 내의 요소들에 대한 세부 구현사항들을 외부로부터 숨기는 것이다. 즉, 캡슐화가 되어있는 데이터와 함수에 대해서 외부에 해당 함수가 어떻게 구현되어 있는지에 대한 세부 사항을 숨기는 것이다. 정보은닉의 개념이 캡슐화 개념안에 포함되긴 하지만, 캡슐화가 되어있다고 해서 반드시 정보은닉이 되는 것은 아니다. [5]

< 정보은닉 vs 캡슐화 >
정보은닉(Information hiding) 캡슐화(Encapsulation)
개념 * 데이터 캡슐화가 아닌 외부에 감춰야하는 비밀에 따라 시스템을 분할하는 모듈 분할의 원리

* 잘 정의되고 쉽게 변경되지않는 공용 인터페이스를 외부에 제공하여 내부의 비밀에 함부로 접근할 수 없도록 하는 것

* 데이터를 공용 메소드를 통해서만 접근 허용(= 데이터 캡슐화)
숨기는 내용 캡슐 내의 요소들에 대한 세부 구현사항들을 외부로부터 숨김 관련된 요소들을 묶음으로써 캡슐 내부와 외부를 구별지어 특정 객체 속에 있는 데이터와 함수들을 다른 객체 속에 있는 데이터와 함수들과 구별이 이뤄짐
결론 정보은닉의 개념이 캡슐화 개념안에 포함되기 하지만, 캡슐화가 되어있다고 해서 반드시 정보은닉이 되는 것이 아니다.

각주[편집]

  1. JAVA PROGRAMMING-객체지향 특징(캡슐화, 정보은닉)〉, 《개인블로그》, 2014-05-01
  2. 2.0 2.1 객체지향의 올바른 이해: 5. 정보 은닉(information hiding)〉, 《개인사이트》, 2016-09-24
  3. 3.0 3.1 Information Hiding〉, 《개인블로그》
  4. (Java)자바객체지향개념 캡슐화,정보은닉〉, 《개인사이트》, 2014-05-01
  5. 캡슐화와 정보은닉〉, 《개인사이트》, 2018-04-13

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 정보은닉 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.