Algorithm Study
데이터 구조 및 분석 : Object-oriented paradigm and Software design
sara2601
2022. 10. 2. 12:41
본 게시글은 Edwith 문일철 교수님의 데이터 구조 및 분석: Linear Structure and Dynamic Programming을 듣고 정리한 내용입니다.
1. Program을 설계하는 방법.
- 좋은 소프트웨어 설계란?
- Correctness : 개발 목적에 맞아야 한다. + 에러없이
- Robustness : 예상되는 overload, 잘못된 입력, 습관에 대해선 잘 동작.
- Flexibility : 시간이 지나 변경해야 할 경우 유연하게 미래의 수정을 반영할 수 있어야 함.
- Usability and Reusability : Designed purpose에 대해 좋은 지원. 인터페이스 등 / 다른 목적, 다른 환경에서도 맞춰 쓸 수 있도록 설계
- Efficiency : 1. 빠르게 실행되며 작은 사이즈 2. 개발상황에서 implement하기 쉽도록 구현
2. Object-Oriented Design
- real world concepts 를 추상화 해 프로그램으로 만들 수 있는 설계가 좋은 설계이다. (현실에서의 개념 -> 프로그램의 모듈로 변경)
- ex) 은행 system : user, transaction, 그리고 계좌.
- 사용자(고객)이라는 현실에 존재하는 개념을, 다음과 같이 프로그램상의 개념으로 변환. 개념 이름, 개념 특징, 그리고 고객이 할 수 있는 행동 (def - login, requestWithdrawal, confirmSecurityCard)
- 거래 : 거래(Transaction)이름, 거래의 특징 : 금액(amount), 어느 ATM에서 일어나는가(거래 지점 번호), 거래가 현실에서 실행 될 때 행동 (def - releaseMoney())
- Banking System 이름 (Banking), 특징 : amountInAccount, 행동 : reduceMoney, sendNotice() ...
- Class and Instance :
위 예제에서 고객은 여러명 존재 가능. 여러개의 instance로 표현 가능함. Class와 Instance의 개념이 다시 등장.
class - 하나의 design implementation (일종의 정의) / 미리 설계하고 구현해둠.
Instance - 실행함으로써 만들어지는 것. Result of execution, Realization (class라는 추상적인 설계도로 몇개의 실제 instance를 만들어내는가)
3. UML(Unified Modeling Language)
- Software 설계 표준.
- Member Variable (= Attribute, Property), Methods(= member function)
4. Encapsulation
- class를 설계할 때, class 내부에 모든 내용이 쌓여있어야 하고, 외부에서는 Method만으로 건드릴 수 있어야 한다.
- Object = Data + Behavior.
Data : field, member variable, attribute
Behavior : method, member function, operation - Behavior에서 제공하는 function만을 이용해 데이터를 변형하라.
- 구현에 대한 책임을 Delegating하는 방법!
- Utilizing the visibility
private, protected, public 을 통해 visibility를 조절.
method => public, data => private로 하여 관리. - Python은 기본적으로 visibility 옵션을 제공하지는 않음. 하지만 __var1__ 라 기재하면 다른 사람들이 안썼으면 좋겠다라고 기입해 둔 것. 구현한사람들의 약속으로써 visibility를 조정.
5. Inheritance
- 본인의 attribute를 descendants에게 상속.
class의 attribute : member variables, methods. - descendants는 새로운 attribute를 스스로 가질수도 있음.
- descendants는 과거 attribute를 mask해서 자신의 특성을 가질 수도 있음.
- 새로 정의하지 않았다면 위의 상속된 값을 따른다.
- 2개의 역할이 생김.
- Superclass
- 조상역할(ancestors), generalized view. 상위에 있을수록 모든 사람이 다 가진 attribute만 보유
- 여러 개의 상위 class에서부터 상속받을 수도 있음. (Multiple Inheritance)
- Subclass
- descendants 자손역할, Specialized. 새로운 특성이 더 많음.
- Self and Super
- self : 자기 자신을 가리키고 있는 reference.
- super : base class instance를 가리키고 있는 reference class