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