Owl Life

객체지향 프로그래밍 / OOP란? 본문

Software Architecture

객체지향 프로그래밍 / OOP란?

Owl Life 2022. 12. 1. 21:47
반응형

Object-Oriented Paradigm

객체 지향 패러다임을 설명할때 절차지향 프로그래밍과 비교하여 설명하곤 합니다.

아래 표를 통해 잠깐 살펴 보겠습니다. ^^

Procedural Programming Object Oriented Programming
- 위에서 아래로 순서대로 수행되는 개발 방법 (C언어)
- 컴퓨터 작업 처리 방식과 유사하기 때문에 실행 속도가 빠름
- 유지보수가 힘들고 시간이 많이 소요됨
- 수정시 모든 절차에 영향을 줄 수 있음
- 실제 세계를 모델링.
- 데이터와 절차를 하나의 덩어리로 묶어서 표현.
- Encapsulation, Inheritance, Polymorphism이 있음.
- 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 사용.
- increase the flexibility and maintainability 

 

Class and Objects

  An object is an instance of a class. Objects are unit of abstraction. An object can communicate with other using messages. An object passes a message to another object, which results in the invocation of a method. Objects then perform the actions that are required to get a response from the system.

  Real world objects all share two characteristics; they all have state and behavior. One-way to begin thinking in an object oriented way is to identify the state and behavior of real world objects. The complexity of objects can differ, some object have more states and more complex behaviors than other object. Compare the state and behavior of a television to the states and behaviors of a car.

  Software objects are conceptually similar to real world objects. An object stores its state in fields, and it exposes its behaviors through its methods.

Encapsulation

하나의 객체에 대해 그 객체가 특정한 목적을 위해 필요한 변수나 메소드를 하나로 묶는 것.

데이터와 코드의 형태를 외부로부터 알 수 없게 은닉.

  • Cohesion 증가, Coupling 감소
  • SoC 달성
  • 외부의 변화에 영향을 덜 받음

Inheritance

"is-a" 관계. 부모 객체의 속성과 메서드를 자식이 물려 받는 것.

객체들 간의 관계를 구축하는 방법 중 하나.

상속을 통해 부모 클래스의 기능을 자식 클래스가 재사용할 수 있고 기능을 확장 할 수 있음.

Polymorphism

상속을 통해 기능을 확장하거나 변경하는 것을 가능하게 해 줌.

즉, 형태가 같은데 다른 기능을 하는 것을 의미. 자바의 오버라이딩, 오버로딩이 대표적인 예.

1. Overloading

메서드의 이름은 같고 매개변수의 갯수나 타입이 다른 함수를 정의하는 것.

2.  Overriding

상속 받은 하위 클래스가 메서드의 내용만 변경(재정의) 하는 것.

3. Dynamic Binding

객체의 성격이 컴파일 타임이 아닌 런타임에 결정됨. 다형성을 사용하고 OCP를 가능하게 하는 장치.

  • 장점 : 유연성 (런타임까지 타입에 대한 결정을 끌고 갈 수 있기 때문에 많은 선택의 여지가 있음)
  • 단점 : 안정성 (실행 도중에 예상치 못한 타입이 들어와서 타입 에러를 발생시키는 경우가 발생) 
              반면, 정적 바인딩은 컴파일 타임에 결정됨.
  • Q) Why is Dynamic Binding essential in object-oriented programming?

4. Substitutability (대체 가능성)

특정 타입을 사용해야 하는 곳이 있다면, 이 타입의 서브타입을 대신 쓸 수 있다는 원칙.

 

Abstraction

객체의 공통적인 속성과 기능을 추출하여 정의하는 것. 실제로 존재하는 객체들을 프로그램으로 만들기 위한 공통적인 특성을 파악해서 필요 없는 특성을 제거하는 과정

  • 장점
    - 재사용성 : 상속을 통해 프로그래밍시 코드의 재사용을 높일 수 있음.
    - 생산성 향상 : 잘 설계된 클래스를 만들어서 독립적인 객체를 사용함으로써 개발의 생산성을 향상할 수 있음.
    - 유지보수 우수성 : 프로그램 수정 시 캡슐화를 통해 주변 영향이 적기 때문에 유지보수가 쉬워서 매우 경제적이라고 할 수 있음.
  • 단점
    - 느린 개발 속도, 느린 실행 속도, 높은 난이도.

Information Hiding

코드 내부의 data와 method를 숨기고 공개된 Interface를 통해서만 접근이 가능하도록 하는 개념이다. 공개범위는 접근지시자로 지정 합니다.

  • Visibility(접근성)
    Public, Protected, Private같은 접근 지시자를 이용해 데이터나 메소드에 대한 접근 권한을 제어하는 키워드

Encapsulation은 관련된 요소를 묶어 캡슐 내부와 외부를 구별지는 장치이고 Information Hiding은 캡슐 내부요소들에 대한 세부 구현사항을 외부에 숨기는 장치이다. 따라서 캡슐화 했다고 해서 반드시 Hide 되는 것은 아니다.

모듈간 의존도를 낮춰서 Coupling이 낮아지고 Modularity가 좋아진다. 모듈내에 변경해도 외부에 미치는 영향을 최소화 할 수 있다.

 

Abstract Class & Interface

Q) What is the difference between Abstract Class and Interface?

Abstract Class

  • 추상 클래스를 상속 받아 기능을 이용하고 확장 시키기 위함
  • 추상 메소드가 하나 이상 포함되면 반드시 추상 클래스로 선언되어야 함.
  • 반드시 추상 클래스를 상속하는 자식 클래스에서 부모가 가진 추상 메소드를 모두 Overriding해야 함.
  • 추상 클래스에서 추상 메소드가 아닌 일반 메소드를 포함시킬 수 있다.
  • 추상 메소드는 몸체가 없고 선언부만 존재한다.
  • 다중 상속 불가능

Interface

  • 구현 객체의 같은 동작을 보장하기 위함
  • 오로지 추상 메소드와 상수만을 가집니다. 즉 로직을 작성할 수 없습니다.
  • 인터페이스 내에 존재하는 메소드는 무조건 public abstract로 선언됩니다.
  • 인터페이스 내에 존재하는 변수는 무조건 public static final로 선언됩니다.
  • 인터페이스는 다중 상속과 비슷한 기능을 제공합니다.
  • 다중 상속 가능

 

Generic Class & Template

형식 매개 변수

- 사용자가 전달하는 “형식”을 매개변수로 사용하여 형식 내부에서 형식 매개 변수로 정의된 (주로 단일 형식 매개 변수에서는 T를 사용합니다.) 형식을 교체하는 것입니다.

- 클래스를 정의할 때, 구체적인 타입(type)을 적지 않고 변수 형태로 적어 놓는 것이다

반응형

'Software Architecture' 카테고리의 다른 글

6. Software Architecture Styles  (0) 2022.12.04
5. Requirement Engineering  (0) 2022.12.04
GOF - Software Design Pattern  (0) 2022.12.04
3. Principles of SW Design  (0) 2022.12.01
2. OO Analysis and Design (OOAD)  (0) 2022.12.01
Comments