U E D R , A S I H C RSS

Hardcore Cpp Study/�번째숙제/Characteristic OfOOP/변준�

캡�화 (encapsulation)


�반�으로 우리 �활�서 어떤 정보와 어떤 종류� 작업� 개��으로 서로 연관�어 있�� 많� 접한다. �러한 연관� 정보와 작업 �는 기능� 하나로 묶는 것� �연스런 과정�다. 예를 들어 대학�� �사관리�서는 학�들� �름, 주소, 학번, 전공 들� 정보를 유지하며 학�들� 관해 가능한 작업� �� 계산, 주소변경, 과목신청 들� 기능들� ��할 수 있다. �러한 정보와 정보 처리� 필요한 작업, 즉 기능들� 모� 학�� 관한 것�므로 학���는 테�리로 묶어�는 것� �연스러운 것�다. �렇게 연관� 사항들� 하나로 묶는 것� 캡�화(encapsulation)�고 한다.
프로그램��서� 캡�화� �미는 프로그램 분��나 설계�가 주어진 문제를 ��타와 함수들� 세부사항들� 개발� 차후단계�서 정�하고, �체�는 �어리 단위로 문제� 대해 ��하게 하는 추�화� 수단� 제공하는 � 있다.

�성 ��(inheritance)


�성 ����는 개� 역시 우리� �� �활�서 �히 사용하는 개�� 프로그램으로 표현하기 위한 편리한 수단�다. 어떤 �체� 종류, 즉 �래스는 좀 � 세분화하여 분류할 수가 있는� �렇게 세분화� 종류나 유형� subtype 혹� subclass�고 한다.
�체지향 프로그래��서 "�성 ��"� 새로운 �래스를 정�할 때 모든 것� 처�부터 다 정�하는 것� 아니� �미 존재하는 유사한 �래스를 바탕으로 하여 필요한 �성만 추가하여 정�하는 경제�� 방법� �미한다. � 때 새로� �기는 �래스를 subclass� 하고 그 바탕� �는 �래스를 superclass� 한다. �렇게 하면 �래스들 사��서 공통으로 가지는 특성, 즉 ��타 구조나 함수들� 중복하여 정�하는 �� 줄� 수 있� � 아니�, 특성� 수정하거나 추가시� superclass� 정�만 고치면 그 subclass들� 변경� �성� ���으로 ��받게 �므로 매우 편리하다.



다형성(Polymorphism)


�체 지향 프로그램� 중요한 특징으로 하나� 함수 �름�나 심볼� 여러 목�으로 사용� 수 있는 다형성(Polymorphism)� 들 수 있다. �체 지향�서� 다형성�란, 복수� �래스가 하나� 메세지� 대해 � �래스가 가지고 있는 고유한 방법으로 �답할 수 있는 능력� �한다. 즉, 별개로 정�� �래스들� ㅌ� �름� 함수를 별�로 가지고 있어 하나� 메세지� 대해 �기 다른 방법으로 그 메세지를 수행할 수 있는 것� �미한다. 예를 들어, 여러 가지 화�(file)들� 프린트 하는 함수를 ��해 보�. 화��는 간단한 �스트 화�(text file), 문서 편집기로 만든 �멧 화�(format file), 그래픽� �함하는 화�(file with graphics) 등 여러 가지가 있다. �들 ��� 화�들� 프린트 하는 방법� 모� 다르다, �체 지향�서는 아래처럼 � 종류� 화�� 별�� �래스로 정�하고, ��� 화� 종류별로 Print�는 함수를 화�� 형태� 맞게 구현한다.
~cpp 
Text file -> Print();
Formatted file -> Print();
File with graphics -> Print();

�렇게 �성� 화� �체들� 모� Print�는 메세지를 �해하며, � 화�� 종류� 알맞게 프린트 할 수 있다. �렇듯 다형성� 같� �름� 함수를 여러 �래스가 � �래스� 알맞게 달리 정�하고 같� �름� 메세지� �답할 수 있게 해준다.




정보 �� (infomation hiding)


정보 ��란 캡��� 쌓여진 항목� 대한 정보를 외부� �추는 것� �미한다. 즉, 처리하려는 ��타 구조와 함수� 사용� 알고리즘 들� 외부�서 �접 접근하지 못하�� 하고 캡� 내부� 함수들만� 접근하게 �다. �체지향� 관한 서��나 논문�서 � �가지 개�� 중요시 소개�는 것� 바로 �체�는 것� 캡�화와 정보 ��� �리를 실제� 프로그래� 언어�서 실현한 것�기때문�다.
�체와 �체 사�� 정보 �환� 외부� 공개하고� 하는 �련� 정보를 public interface로 정�해 외부� �체들� � Interface를 통해서 그 �체와 정보를 �환하�� 한다. 즉, 한 �체� Public Interface를 그 �체가 "무슨 �� 할 수 있다. 혹� � 정보는 공개할 수 있다."�고 외부� 선언하는 것�다.
ì�´ Public Interface는 언어ì—� ë”°ë�¼ 표현 ì–‘ì‹�ì�´ 다른ë�°, C++ì—�서는 "public"ì�´ëž€ 특별 구문ì�„ ë‘�ì–´ "public"란ì—� 들어간 항목들만 외부ì—� 공개ë�œë‹¤. Effelì�´ëž€ 언어ì—�서는 "export"ë�¼ëŠ” 란ì—� 지정ë�œ 항목들만 외부ì—� 공개ë�œë‹¤. 앞ì—�서 ì •ì�˜í•œ POINTë�¼ëŠ” ê°�ì²´ ì •ì�˜ë¥¼ ë³´ë©´ move와 setcolorì�˜ 함수들ì�´ 외부ì—�서 관찰ë�  수 있는 public interfaceìž„ì�„ 알 수 있다. 여기서 한가지 유ì�˜í•  ì �ì�€ move와 setcolorë�¼ëŠ” 함수들ì�´ 외부ì—� 보여져 불리워질 수 있는 함수들ì�´ë�¼ëŠ” 것ì�´ë©° ê°� 함수가 가지고 있는 코드나 알고리즘까지 보여지는 것ì�€ 아니ë�¼ëŠ” 것ì�´ë‹¤. 한 함수가 외부ì—� 보여지는 부분ì�„ signatureë�¼ê³  하며 하나ì�˜ signature는 함수ì�˜ ì�´ë¦„, ìž…ë ¥ 매개변수(input parameter)와 ìœë ¥ 매개변수(output parameter)로 구성ë�˜ì–´ 있다.
위�서 살펴볼 캡�화와 정보 ��� ��� 우선 �체 내부� ��� ��타 구조가 변하��� 주변 �체들�게 �향� 주지 않는다는 것�다. 예로서, 어떤 변수� 구조를 배열(array)구조�서 리스트(list) 구조로 바꾸��� 프로그램� 다른 부분� 전혀 �향� 미치지 않는다. �한 어떤 함수� 사용� 알고리즘� 바꾸��� signature만 바꾸지 않으면 외부 �체들�게 �향� 주지 않는다. 예를 들어, sorting 함수� 경우 처� 사용� sequence sorting 알고리즘�서 quick sorting 알고리즘으로 바뀔때 외부� 어떤 �향� 주지 않는다. �러한 장�� 유지보수 용�성(maintainability) 혹� 확장성(extendability)�� 한다.



추� �래스(Abstract Class)


í�´ëž˜ìФ 중ì—�는 ì�¸ìŠ¤í„´ìŠ¤(instance)를 만들어 낼 목ì �ì�´ 아니ë�¼ subclass들ì�˜ 공통ë�œ 특성ì�„ ì¶”ìœí•˜ì—¬ 묘사하기 위한 í�´ëž˜ìŠ¤ê°€ 있는ë�°, ì�´ë¥¼ ì¶”ìƒ� í�´ëž˜ìФ(Abstract class, Virtual class)ë�¼ 한다. 변수들ì�„ ì •ì�˜í•˜ê³  함수중 ì�¼ë¶€ëŠ” 완전히 구현하지 않고, Signatureë§Œì�„ ì •ì�˜í•œ 것들ì�´ 있다. ì�´ë“¤ì�„ ì¶”ìƒ� 함수(Abstract function)ë�¼ 부르며, ì�´ë“¤ì�€ 후ì—� subclass를 ì •ì�˜í•  때ì—� ê·¸ í�´ëž˜ìФì�˜ 목ì �ì—� 맞게 완전히 구현ë�œë‹¤. ì�´ 때 ì¶”ìƒ� í�´ëž˜ìФì�˜ 한 subclassê°€ ìƒ�ì†�ë°›ì�€ 모든 ì¶”ìƒ� 함수들ì�„ 완전히 구현했ì�„ 때, ì�´ë¥¼ 완전 í�´ëž˜ìФ(Concrete class)ë�¼ê³  부른다. ì�´ 완전 í�´ëž˜ìŠ¤ëŠ” ì�¸ìŠ¤í„´ìŠ¤ë¥¼ 만들어 낼 수 있다.
추� �래스� 예로서 프린터 소프트웨어를 ��해 보�. 우선 모든 종류� 프린터들� 공통으로 가지는 특성� 정�한 추� �래스 "Printer"가 있다고 한다면, 여기�는 프린터� �태를 나타내는 변수, 프린터� �� 등� 변수가 있으며 함수로는 프린팅� 수행하는 Print 등� ��할 수 있다. 그러나 프린터마다(Dot matrix printer, Laser printer, Ink jet printer) 프린팅 하는 방법� 다르므로 � 추� �래스 안�서는 Print�는 함수를 완전히 구현할 수 없다. 다만, 여기�는 Print 추� 함수� Signature만 가지고 있으며, 실제� 구현� 여러 subclass�서 � 프린터 종류� 알맞게 하면 �다.
"Printer"ë�¼ëŠ” í�´ëž˜ìŠ¤ëŠ” ì¶”ìƒ� í�´ëž˜ìŠ¤ë¡œì„œ 실존ì�˜ ì–´ë–¤ 프린터 기능ì�„ 가지고 있지 않고, dot matrix printer나 laser printer 등ì�˜ 완전 í�´ëž˜ìŠ¤ë“¤ ê°„ì�˜ 공통ë�œ 특성만 지정하고 있으므로, ê·¸ ì�¸ìŠ¤í„´ìŠ¤ë¥¼ 만드는 것ì�€ 무ì�˜ë¯¸í•˜ë‹¤. ì¶”ìƒ� í�´ëž˜ìŠ¤ëŠ” ì �ì§„ì � 개발 방법(Incremental Development)ì—� 유용하게 사용ë�  수 있으며, 공통 ì†�성(attribute)ì�˜ ì¶”ìœ ë°� ì •ì�˜ì—� 유용하므로 문제를 모ë�¸ë§�하는ë�° 편리함ì�„ ë�”해준다.
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:21
Processing time 0.0062 sec