ê°�체지향ì�´ëž€? ¶
ê°�ì²´ ¶
- ê°�ì²´ = 소프트웨어를 êµ¬ì„±í•˜ê³ ì‹¤ì œ 소프트웨어를 ìž‘ë�™ì‹œí‚¤ëŠ” 실체들
즉, 논리와 ë�°ì�´íƒ€ê°€ 분리ë�˜ì–´ 있는 기존ì�˜ 구조ì � ì‚¬ê³ ì—�서 ê³¼ê°�히 탈피하여 논리와 ë�°ì�´íƒ€ê°€ ê²°í•©ë�œ ê°�체들ì�´ 시스템ì�„ ì�´ë£¬ë‹¤ëŠ” 것ì�´ë‹¤.
- �체 = �성 + 행�
ê°�ì²´ì�˜ ì†�성 ¶
- Identity(ì‹�별) - ê°� ê°�체는 다른 ê°�체로부터 분리ë�˜ê³ ìžˆê³ , 분별 가능해야 한다.
- Classification(분류) - 같� �료구조와 행위를 가진 �체들� ��한 �래스(class)로 분류�다.
ìƒ�대ì �으로 ê°� ê°�체는 소ì†� í�´ëž˜ìФì�˜ ì�¸ìŠ¤í„´ìŠ¤(instance)ê°€ ë�œë‹¤.
ê°™ì�€ í�´ëž˜ìФì—�서 ìƒ�성ë�œ ê°�체들ì�€ 모ë‘� ê°™ì�€ ì—°ì‚°(operation) 기능ì�„ ê°–ê³ ìžˆìœ¼ë©°, ìž�료구조가 ê°™ê³ ë�™ì�¼í•œ 행위를 하게 ë�œë‹¤.(ìž�료구조는 ê°�체들ì�´ 갖는 ë�°ì�´íƒ€ì™€ ì†�성(attribute)들ì�˜ ì§‘í•©ì�´ë‹¤. 그러나 ë�°ì�´í„°ì™€ ì†�성ì�˜ ê°’ì�€ ë¬¼ë¡ ë‹¤ë¥´ë‹¤.)
- Polymorphism(다형성) - ê°™ì�€ ì—°ì‚° 기능ì�´ 부여ë�˜ì–´ë�„ ê·¸ 기능ì�„ 수행하는 í�´ëž˜ìФì—� ë”°ë�¼ 다른 행위로 ë‚˜íƒ€ë‚ ìˆ˜ 있다.
예를 들어 'ì�´ë�™(move)' ì�´ë�¼ëŠ” 기능ì�´ 'êµ�수'ë�¼ëŠ” í�´ëž˜ìФì—� ì �ìš©ë� 때는 ìž�íƒ�ì�˜ ì�´ì‚¬ê°€ ë� 수 있으나, '승용차'ë�¼ëŠ” í�´ëž˜ìФì—� ì �ìš©ë�˜ë©´ íŠ¹ì • 목ì �지로 ì�¼ì •한 시ê°�ì—� ì •í•´ì§„ ì†�ë�„로 움ì§�ì�´ëŠ” 행위가 ë� 수ë�„ 있다.
- Inheritance(ìƒ�ì†�) - 계층(hierarchy)관계ì—� 놓여 있는 í�´ëž˜ìŠ¤ë“¤ ê°„ì—� ì†�성ì�´ë‚˜ ì—°ì‚° 기능들ì�„ ê³µìœ í•œë‹¤.
즉, 주어진 í�´ëž˜ìФì—� 서브í�´ëž˜ìФ(subclass)ê°€ 있다면 서브í�´ëž˜ìФì�˜ ëª¨ë“ ê°�체들ì�€ 소ì†� í�´ëž˜ìФì�˜ ëª¨ë“ ì†�성ì�´ë‚˜ 연산기능ì�„ ìƒ�ì†�받게 ë�œë‹¤. ë”°ë�¼ì„œ, 서브í�´ëž˜ìŠ¤ë¥¼ ì •ì�˜í• 때ì—�는 수í�¼í�´ëž˜ìФ(super class) 로부터 ìƒ�ì†�받는 ë‚´ì—들ì�„ 중복하여 ì •ì�˜í• 필요가 없게 ë�œë‹¤.
ê°�체지향ì�˜ ê°œë…� ¶
- �체지향�란 프로그래�� 좀� 현실�활과 비슷하게 하기 위해 나온 개��다.
- ëª¨ë“ í”„ë¡œê·¸ëž¨ì�˜ 요소를 ê°�ê°�ì�˜ ë�…립ì �ì�¸ ê°�체로 ìƒ�ê°�한다.
-- black boxì�˜ ê°œë…� : ê·¸ ê°�체들ì�´ ì–´ë””ì—� ì“°ì�´ëŠ” 것ì�¸ì§€ëŠ” 알아ë�„ ê·¸ ê°�체들ì�´ ì–´ë–¤ 구조로 ë�˜ì–´ 있으며 ì–´ë–¤ ë�°ì�´íƒ€ë¥¼ ìœ í†µì‹œí‚¤ë©° ì–´ë–¤ ì•Œê³ ë¦¬ì¦˜ìœ¼ë¡œ 움ì§�ì�´ëŠ”ê°€ 하는것ì�€ 모른다는 것ì�´ë‹¤.
ì ˆì°¨ì � 프로그래ë°�ê³¼ì�˜ 비êµ� ¶
| ì ˆì°¨ì � 프로그래ë°� | ê°�체지향 프로그래ë°� |
| 함수로 �루어� | �래스로 �루어� |
| 구조ì � 프로그래ë°� | ê°�체지향 프로그래ë°� |
| 프로그램� 기능단위로 세분 | 프로그램� object 단위로 세분 |
| 소,중형 프로그램ì—� ì �í•© | 대형 프로그램 작성ì—� ì �í•© |
ê°�체지향ì�˜ 특성 ¶
- ��터 추�화(data abstraction) : �료 �체(data entity)들� 중요한 특성� 모형화한다. � 모형� �체� �성� �다.
��성� 설계 � 코드� 재사용(reuse)� �와주는 중요한 개��다.
서브í�´ëž˜ìŠ¤ê°€ 수í�¼í�´ëž˜ìФì�˜ 변수와 메소드들ì�„ ìƒ�ì†�ë°›ì�„ 때 í•„ìš”ì—� ë”°ë�¼ ì •ì�˜ê°€ 구체화(specification)ë�˜ë©°, ìƒ�대ì �으로 ìƒ�위층ì�˜ í�´ëž˜ìФ ì�¼ìˆ˜ë¡� ì�¼ë°˜í™”(generalization) ë�œë‹¤ê³ ë§�한다.
겉ì—�서 ê·¸ê°�체를 사용하기 위한 사용ìž� ì�¸í„°íŽ˜ì�´ìŠ¤ëŠ” ì œê³µí•˜ë‚˜ ë�°ì�´íƒ€ë¥¼ 검색, ìˆ˜ì • ê·¸ë¦¬ê³ í•¨ìˆ˜ì�˜ ì�´ìš©ì�„ 위해서는 ì�´ ì�¸í„°íŽ˜ì�´ìŠ¤ë¥¼ ê¼ ê±°ì³�야 ë�˜ê²Œ 하는것ì�´ë‹¤.
즉 함수나 ë�°ì�´í„°ê°€ 그것ì�´ ì†�해있는 ê°�ì²´ì „ìš©ìœ¼ë¡œ ë�œë‹¤ëŠ”ê²ƒì�„ ë§�한다. 좋ì�€ 예로 ìž�ë�™ì°¨ë¥¼ 들수있다.
ìž�ë�™ì°¨ë�¼ëŠ” ê°�ì²´ í�´ëž˜ìŠ¤ë¥¼ 우리가 사용하기 위해서는 ì•Œì•„ì•¼í• ê²ƒì�´ ìš´ì „í•˜ëŠ” 방법ë¿�ì�¸ 것ì�´ë‹¤. 표지 íŒ�ì�´ë‚˜ êµ�í†µì‹ í˜¸ë“±ì�€ 관계는 있으나 ìž�ë�™ì°¨ë¥¼ 움ì§�ì�´ê¸° 위한 ê°�ì²´ ì�¸í„°íŽ˜ì�´ìŠ¤ì™€ëŠ” 아무런 관계가 없는것ì�´ë‹¤. 캡ìŠ�화는 기능ì�˜ ì¡°ì§�성과 논리성ì�„ 연관시킨다.
ê·¸ë ‡ë‹¤ë©´ ê°�체를 사용하여 ìƒ�기는 마지막 목ì �ì§€ì�˜ ì°¨ì�´ëŠ” 어디서 ìƒ�기는 것ì�¼ê¹Œ? 바로 ìœ ì €ê°€ 머릿ì†�ì—� ìƒ�ê°�한 목ì �ì§€ì�˜ ì°¨ì�´, 즉 주어진 ë�°ì�´íƒ€ì�˜ ì°¨ì�´ì—�서 오는것ì�´ë‹¤.
즉 ì–´ë– í•œ ë�°ì�´íƒ€í˜•ì�„ ê°€ì§€ê³ ì›�하는 ë§Œí�¼ì�˜ 여러가지 ì�¸ìŠ¤í„´ìŠ¤ë¥¼ 만들수 있다는 얘기ì�´ë‹¤.
분명히 ìƒ�ê°�ë§Œ 틀리면 ìž�ë�™ì°¨ê°�체로 ì�´ë�™ì�´ë�¼ëŠ” 공통성 ì†�ì—�서 무수히 ë§Žì�€ 목ì �ì§€ ì�¸ìŠ¤í„´ìŠ¤ë¥¼ 만들어 낼수 있는것ì�´ë‹¤.
ë˜� ìž�ë�™ì°¨ë‹¤. 가진 ìž�ë�™ì°¨ì�˜ 엔진ì�´ ì¶œë ¥ì�´ 150ë§ˆë ¥ì�´ë‹¤. 여기다 똑같ì�€ 엔진ì�„ 하나ë�” 달아 300ë§ˆë ¥ì�´ ë�˜ì—ˆë‹¤. 즉 앞ì�˜ 150ë§ˆë ¥ì�´ë�¼ëŠ” í�´ëž˜ìФì—� ë‘�개로서 300ë§ˆë ¥ì�„ ë§Œë“ ë‹¤ëŠ” ê°œë…�ì�´ í�¬í•¨ 즉 ìƒ�ì†�ë�˜ì–´ìžˆëŠ”ê²ƒì�´ë‹¤. ì—”ì§„ë ¥ì�˜ í–¥ìƒ�ì�´ ì†�쉽게 ì�´ë£¨ì–´ì¡Œë‹¤. 만약 새 300ë§ˆë ¥ì—”ì§„ì�„ 단 차를 ì‚°ë‹¤ê³ í•˜ë©´ ë�” 힘들것ì�´ë�¼ëŠ”ê²ƒì�„ 알것ì�´ë‹¤.
150ë§ˆë ¥ì§œë¦¬ 엔진ì�„ ë‘�ê°œ 단차와 300ë§ˆë ¥ì§œë¦¬ 엔진ì�„ 하나 단 차나 ë‘�ì°¨ì�˜ ì¶œë ¥ì�€ 같다. ì�´ê²ƒì�´ 다형ì�´ë‹¤. 즉 í�´ëž˜ìŠ¤ê°€ 같다는 뜻ì�´ë‹¤. ì¡°ìƒ�ê°�체로 볼때는 분명히 ê°™ì�€ ì�´ë¦„ì�´ì§€ë§Œ( ì¶œë ¥ì�´ 300ë§ˆë ¥ì�´ë‹¤) ì „í˜€ 실행방법ì�´ 다른 í�´ëž˜ìФì�¸ê²ƒì�´ë‹¤( 하나는 150ë§ˆë ¥ì—”ì§„ì�˜ ì›�리로 움ì§�ì�´ê³ 하나는 300ë§ˆë ¥ 엔진ì�˜ ì›�리로 움ì§�ì�¸ë‹¤ëŠ”ê²ƒ).
다형� 기본 �래스를 바탕으로 ��한 메모리 개�� � 다양성� 부여하는 것�다.
ê°�체지향 개발 단계 ¶
1. �체지향 분�(object-oriented anaysis : OOA)
ë¬¸ì œë¥¼ ì •ì�˜í•˜ê³ ì�´ ì •ì�˜ë¡œë¶€í„° 모형(model)들ì�„ ì œìž‘í•˜ì—¬ 실세계(real-world)ì�˜ 중요한 특성들ì�„ 보여주는 단계ì�´ë‹¤. 다ì�Œê³¼ ê°™ì�€ 모형 들ì�´ 만들어 질 수 있다.
ê°�ì²´ 모형(object model) : ê°�체들과 ê·¸ 특성ì�„ ì‹�별하여 ê°�체들ì�˜ ì •ì � 구조(static structure)와 그들간ì�˜ 관계(interface)를 보여주는 ê°�ì²´ 다ì�´ì–´ê·¸ëž¨(object diagram)ì�„ 작성한다.
ë�™ì � 모형(dynamic model) : 시간 í��름ì—� 따른 시스템ì�˜ 변화를 보여주는 ìƒ�태 다ì�´ì•„그램(state diagram)ì�„ 작성한다. 실시간(real-time) 시스템ì—�서는 반드시 필요하다.
기능 모형(fuction model) : 시스템 ë‚´ì—�서 ë�°ì�´íƒ€ ê°’ì�´ 변하는 ê³¼ì •ì�„ 보여주는 것으로 잘 ì•Œë ¤ì§„ ìž�료 í��름ë�„(DFD)ê°€ 사용ë�œë‹¤.
2. �체지향 설계(object-oriented design : OOD)
�체지향 설계는 시스템 설계와 �체 설계로 �게 나뉘어진다.
시스템 설계(system design) : 시스템ì�˜ 구조를 서브시스템으로 분해한다. ì�´ ê³¼ì •ì¤‘ì—�서 성능 최ì � 방안, ë¬¸ì œ í•´ê²° ì „ëžµ, ìž�ì›� ë¶„ë°° 등ì�´ í™•ì •ë�œë‹¤.
ê°�ì²´ 설계(object design) : 구현ì—� 필요한 ìƒ�세한 ë‚´ì—ì�„ 설계 모형으로 ì œìž‘í•˜ê³ ìƒ�세화ë�œë‹¤. 구체ì �ì�¸ ìž�료구조와 ì•Œê³ ë¦¬ì¦˜ 들ì�´ ì •ì�˜ë�œë‹¤.
3. �체지향 구현(object-oriented programming : OOP)
설계 모형ì�„ íŠ¹ì • 프로그램 언어로 번ì—하는 작업ì�´ë‹¤. ê°�ì²´, í�´ëž˜ìФ, ìƒ�ì†�ì�˜ ê°œë…�ì�„ 다 í�¬ìš©í•˜ëŠ” ê°�체지향 언어(object-oriented programming language : C++, Smalltalk 등)ê°€ 가장 좋지만 ê°�ì²´ì�˜ ê°œë…�ë§Œ ì�¸ì •í•˜ê³ í�´ëž˜ìФ, ìƒ�ì†� 등ì�€ ê³ ë ¤í•˜ì§€ 않ì�€ ê°�체기반 언어(object-oriented based programming language : Ada 등)ë�„ 좋다.
ë˜�한, ì�¼ë°˜ì �ì�¸ 구조ì � 프로그래ë°� 언어(structured programming language : C, Pascal 등)ë�„ ê°�체지향 개발ì—� 활용ë� 수 있는가 하면 ê°�ì²´ 지향 ë�°ì�´íƒ€ë² ì�´ìФ 관리시스템(OODBMS)ì�´ 개발ì�˜ ë�„구로 ì�´ìš©ë� 수ë�„ 있다.
ê°�체지향ì�˜ 초기개ë…�ì�€ 프로그래ë°� 언어로부터 시작ë��으나, ì�´ì 실세계를 ë°”ë�¼ë³´ëŠ” 새로운 시ê°�으로 ê·¸ 중요성ì�´ ë³€í™”í•˜ê³ ìžˆìœ¼ë©°, 개발언어ì—� 너무 종ì†�ë� 필요는 없다.
ë¬¸ì œë¥¼ ì •ì�˜í•˜ê³ ì�´ ì •ì�˜ë¡œë¶€í„° 모형(model)들ì�„ ì œìž‘í•˜ì—¬ 실세계(real-world)ì�˜ 중요한 특성들ì�„ 보여주는 단계ì�´ë‹¤. 다ì�Œê³¼ ê°™ì�€ 모형 들ì�´ 만들어 질 수 있다.
ê°�ì²´ 모형(object model) : ê°�체들과 ê·¸ 특성ì�„ ì‹�별하여 ê°�체들ì�˜ ì •ì � 구조(static structure)와 그들간ì�˜ 관계(interface)를 보여주는 ê°�ì²´ 다ì�´ì–´ê·¸ëž¨(object diagram)ì�„ 작성한다.
ë�™ì � 모형(dynamic model) : 시간 í��름ì—� 따른 시스템ì�˜ 변화를 보여주는 ìƒ�태 다ì�´ì•„그램(state diagram)ì�„ 작성한다. 실시간(real-time) 시스템ì—�서는 반드시 필요하다.
기능 모형(fuction model) : 시스템 ë‚´ì—�서 ë�°ì�´íƒ€ ê°’ì�´ 변하는 ê³¼ì •ì�„ 보여주는 것으로 잘 ì•Œë ¤ì§„ ìž�료 í��름ë�„(DFD)ê°€ 사용ë�œë‹¤.
2. �체지향 설계(object-oriented design : OOD)
�체지향 설계는 시스템 설계와 �체 설계로 �게 나뉘어진다.
시스템 설계(system design) : 시스템ì�˜ 구조를 서브시스템으로 분해한다. ì�´ ê³¼ì •ì¤‘ì—�서 성능 최ì � 방안, ë¬¸ì œ í•´ê²° ì „ëžµ, ìž�ì›� ë¶„ë°° 등ì�´ í™•ì •ë�œë‹¤.
ê°�ì²´ 설계(object design) : 구현ì—� 필요한 ìƒ�세한 ë‚´ì—ì�„ 설계 모형으로 ì œìž‘í•˜ê³ ìƒ�세화ë�œë‹¤. 구체ì �ì�¸ ìž�료구조와 ì•Œê³ ë¦¬ì¦˜ 들ì�´ ì •ì�˜ë�œë‹¤.
3. �체지향 구현(object-oriented programming : OOP)
설계 모형ì�„ íŠ¹ì • 프로그램 언어로 번ì—하는 작업ì�´ë‹¤. ê°�ì²´, í�´ëž˜ìФ, ìƒ�ì†�ì�˜ ê°œë…�ì�„ 다 í�¬ìš©í•˜ëŠ” ê°�체지향 언어(object-oriented programming language : C++, Smalltalk 등)ê°€ 가장 좋지만 ê°�ì²´ì�˜ ê°œë…�ë§Œ ì�¸ì •í•˜ê³ í�´ëž˜ìФ, ìƒ�ì†� 등ì�€ ê³ ë ¤í•˜ì§€ 않ì�€ ê°�체기반 언어(object-oriented based programming language : Ada 등)ë�„ 좋다.
ë˜�한, ì�¼ë°˜ì �ì�¸ 구조ì � 프로그래ë°� 언어(structured programming language : C, Pascal 등)ë�„ ê°�체지향 개발ì—� 활용ë� 수 있는가 하면 ê°�ì²´ 지향 ë�°ì�´íƒ€ë² ì�´ìФ 관리시스템(OODBMS)ì�´ 개발ì�˜ ë�„구로 ì�´ìš©ë� 수ë�„ 있다.
ê°�체지향ì�˜ 초기개ë…�ì�€ 프로그래ë°� 언어로부터 시작ë��으나, ì�´ì 실세계를 ë°”ë�¼ë³´ëŠ” 새로운 시ê°�으로 ê·¸ 중요성ì�´ ë³€í™”í•˜ê³ ìžˆìœ¼ë©°, 개발언어ì—� 너무 종ì†�ë� 필요는 없다.










