01. Object-Oriendted
OOP/OOAD/UML에 대해 알아보자
OT
- 총 3개의 파트를 다를 예정(OOP, OOAD, UML)
- OO(Object Orineted) C++/Java에 대한 개발 방법론을 배울 예정
- 소프트웨어 공학론을 Part1에서 배움
- 최종적으로 소프트웨어 공학론 OO UP(Unified Process) 기반 iterative OOAD 방법론을 Part3 에서 최종적으로 배울 예정이며, 이를 위한 UML을 Part2 에서 배울 예정
OOP
- C++, Javascript Language를 활용해서 Object가 무엇이고 Object Oriented(OO)가 무엇인지 배움
- OO : 디자인 철학 Composition/ Encapsulation을 배움
- OOD : 배운것들로 개발에 어떻게 적용는지 개발 방법론 학습
UML
- OOA / OOD를 수행하기 전에 설계 도구를 배움 (13가지 다이어그램을 다 배움)
OOAD
- 분석 및 개발 수행
+ 교안은
APPLYING UML AND PATTERNS
: OOAD 수업때 사용
- Object-Oriented Programming
- 1.1 Object-Oriented
- 1.2 Object-Oriented Pricipal
- 1.3 Object-Oriented Development
UML(Unified Model Language)
- An Introduction to UML
- 2.1 Use Case Diagram
- 2.2 Class Diagram / Sequence Diagram
- 2.3 Statechart Diagram / Activity Diagram / Component Diagram
Object-Oriented Analysis and Design
- Introduction
- 3.1 Inception
- 3.2 Elaboration
- 3.3 OOAD Summary
Chapter 1. OOP(Object-Oriented Programming)
1.1.1 Ojbect Define
-
Object란 SW에서만 쓰이는게 아니라 포괄적인 의미로 여러 분야에서 사용됨
-
여러 분야에서 실재단위(entity)로 쓰이나 우리의 주요 Focus는 SW 실재 단위다
-
(Informal한 용어로) oject들을 구성하여 Class를 만로 구성될수 있음
- SW 관점에서 Object를 아래와 같은 요소를 다 가지고 있는 것을 말함
State(Attribute)
Behavior(Operation, Function, Method)
- 명확한
Boundary
- 고유한
Identity(ID)
정리하면, State와 behavior를 캡슐화해서 내부적으로 명확한 바운더리를 가지고 고유한 ID를 가진 개체 (PPT에 나와있는 그림을 연상시켜라!)
-
예를 들어 유 교수님을 빗대어 말하면 6가지 정보에 대한 state(Attribute)가 있고, 이를 접근하기 위한 behavior(function/Method)가 있음. 이때 기본적으로 Encapsulation을 통해 정보들을 숨기고 public behavior를 통한 접근을 허용하는 방식으로 설계를 진행하며 이는
Object-Oriented basic principle(Encapsulation을 통한 Information Hiding)
이다. -
Object가 할수 있는 행동들을 behavior(opertion)으로 표현하며, behavior를 message로도 표현을 함
- 주로 attribute를 접근하기 위한 get/set을 operation으로 사용함
1.1.2 Ojbect Collaborate
- Object는 Collaborate가 필요하며 객체지향은 절차지향과 다르게 data manipulation 관점 이 다름
-
절차지향의 언어의 경우(함수 기반)
Data(Attritue)/Behabior(Operation)가 있을때 타이밍만 맞으면 아무나 가져다 쓸수 있음 -
객체 지향의 경우
, 타이밍이 맞아도 아무나 가져다 쓰는게 아니라 Data/Operation에 해당하는 객체만 가져다가 사용할수 있음
-
-
객체 지향에서 다른 Object에 data/operation을 사용하고자 한다면 해당 객체에 public한 getter/setter를 두고 핸들링 할수 있도록 해야하며, 이를 Message Passing/Oject Collaboration/Object Communication이라고 함
- UML에서 Sequence Diagram을 그릴 때 시스템에 대한 전반적인 동작 Msg를 그릴 텐데 Object Collaboration/Object Communicatioin이 사용되지 안으면 녹색 다이어그램처럼 자기 자신 콜 형태가 많음(system efficienct도 떨어짐), 반대로 OO 철학을 잘 지켰을 경우에는 빨간색 처럼 잘 나오게 됨
1.1.3 Class Define
-
Class
란 Object를 만드는 틀(=템플릿)이라 생각하면 됨- Object들의 공통적인 특성들을 Attribue/Operation으로 묶는 것이고, Class를 통해 공통의 Attribue을 가지나 data가 다른 Instace를 만들어 냄
- Class의 Instance가 Object이다.
- Class에도 Data(attribue)/Behavior(Operation)이 있음
-
Attribue(Data)
: 클래스에 이름이 있는 프로퍼티를 말하며, 인스턴스화 수행시 동일한 프로퍼티를 같으나 값이 다른 object들을 여러개 생성함 -
Behavior(Operation)
: 프로퍼티에 접근해서 getting/setting할수 있는 것을 말함. Object Diagram(Object 관계 설명하는 다이어그램)에서 Operation은 표현하지 않음(모든 오브젝트들은 같은 클래스에서 인스턴스화[생성] 시 다 같은 오퍼레이션을 갖기 때문임)
-
1.1.4 Class와 Obejct 관계
- Class와 Objects의 관계
- Class는 Object를 만드는 템플릿이고, Object는 Class에서 인스턴스화 된 것이다. -실제세상-SW world-Operating 위에서 실제로 돌아가는 인스턴스 관계 - 실제세상의 물체를 보고 공통의 프로퍼티/오퍼레이션을 묶어 SW의 Class화를
OOA/OOD, Analsys/Design
라고 하며, 실제 인스턴스화하여 사용하는 단게를OOI
(Object Oriented Implemnetation)로 말함. (ob : Class)로 표현함(Class를 인스턴스하여 ob를 만들었다 라는 의미임)
- Class는 Object를 만드는 템플릿이고, Object는 Class에서 인스턴스화 된 것이다. -실제세상-SW world-Operating 위에서 실제로 돌아가는 인스턴스 관계 - 실제세상의 물체를 보고 공통의 프로퍼티/오퍼레이션을 묶어 SW의 Class화를
-
지금까지의 내용을 코드레벨에서 확인해보면,
- 3개의 Attribute/Operation이 있을때 (- 는 private, +는 public)
- object는 basic이 자기 property는 숨기는게 원칙이라 다 private로 설계
-
구현은 New에 생성자를 활용하여 Implementation을 수행하며, 오브젝트다이어그램에서 Operation은 다 같기 때문에 표현하지 않음을 확인 가능
-
위 그름은 OOAD이고 밑은 OOI 단계다.
-
밑 Obj diagram을 보면 동일한 class로 찍어낸 obj는 동일한 operation을 갖음으로 별다른 표기가 안되어 있는것 또한 확인 가능!
1.1.5 Message Passing(= Ojbect Communication/Collaboration)
- Object간에 Communication/Collaboration을 고려하여 객체에 바인딩된 data/behaivor에만 접근하도록 작업을 해야함(class 내 getter/setter를 두다 생각하면 될듯함)
- 정답은 4
- object은 state/behavior 2개 다 있어야함
- 2 object는 값이 같더라도 서로 다른 object이다
- object은 state/behavior 2개 다 있어야함
- 정답은 1번
- 다양한을 뺴야함. 동일한 속성을 갖는 a set of object을 하나로 묶는 desciription이다.