Object Oriented Programming

Object Oriented Programming 간략 정리

PowerCoding 2022. 5. 5. 00:06

Object Oriented Programming 간략 정리

OOP란?

Object Oriented Programming이란 프로그래밍 패러다임으로 실제 세상을 추상화를 통하여 모델링하고, 객체들 사이의 메시지 패싱을 통해 협업을 하도록 하는 프로그래밍 기법입니다. OOP의 목표는 Flexibility(유연성)과 Maintainability(유지보수성)를 높히는 것입니다.

OOP vs Procedure Programming

Object Oriented Programming이란 프로그래밍 패러다임으로 실제 세상을 추상화를 통하여 모델링하고, 객체들 사이의 메시지 패싱을 통해 협업을 하도록 하는 프로그래밍 기법입니다. OOP의 목표는 Flexibility(유연성)과 Maintainability(유지보수성)를 높히는 것입니다.

반면 절차 지향 프로그래밍은 알고리즘의 절차와 데이터의 처리에 중심으로 프로그래밍 하는 기법입니다. 절차 지향 프로그래밍은 최상위 메인 함수에서 하위로 서브 모듈을 참고 해서 사용하는 형식이 되어 있기 때문에, 변경에 취약합니다. 모듈의 서브 모듈이 변경되면 그 참고 모듈이 지속적으로 변경이되게 됩니다. 이 때문에 유지보수가 어렵고 많은 시간이 소요됩니다.

C같은 절차 지향 프로그래밍의 단점?

단점은, 유지보수가 어렵고 많은 시간이 소요된다는 점입니다. 절차 지향에서는 최상위 프로시저가 변경되는 경우 변경점의 영향이 하위로 연쇄적으로 전파되어 프로그램의 전반적으로 모두 수정 될 수 있기 때문입니다.

Class와 Object

  • Object는 Class의 인스턴스이다.
  • Class는 Object를 만드는 Templete
  • 실제 세상을 추상화를 통해 모델링 된것이 Class 이다. class는 각각 고유의 state와 behior를 갖는다.

Encapsulation

  • 오브젝트의 내부 정보와 method를 감추는 것. information hiding과 비슷한 의미. 맥락은 비슷하고 OOP에서 비슷한 data와 method를 하나의 class로 합치는 의미로 사용되기도 한다.

Coupling

  • 다른 모듈이 다른 모듈과의 의존관계를 맺는 정도. 의존관계가 많을 수록 Coupling이 높고, Coupling이 높을 수록 변경에 대한 영향을 많이 받으므로 Coupling이 낮아야 유지보수 측면에서 좋다.

Cohesion

  • 얼마나 class 또는 모듈 내의 구성요소들이 특정한 기능에 밀접하는지에 대한 정도. Cohesion이 낮으면, 모듈은 이해하기 어렵고, 유지보수가 어려워져 재사용하기 어려워집니다.

Module

  • 하나의 기능을 수행하는 단위. 프로그램은 작은 서브 시스템으로 쪼갤 수 있고, 하나의 독립적인 기능 단위로 쪼갤 수 있다. Loose Coupling과 High Cohesion이여야 Module의 유지보수성이 좋아진다.

Benefit of Object Oriented Programming

  • Modulariuty : 설계의 궁극적인 목표로, 다른 모듈들과 독립적이게 되어 유지보수성과 재사용성이 좋아진다.
  • Information Hiding : 내부의 데이터 또는 알고리즘을 외부로부터 숨기는 것. 내부 디자인 결정은 자주 바뀌기 때문에, 외부에서 볼땐 감추어진 내부구조가 변경이 되어도 변경이 안된것처럼 보이게 하여 설계의 유지보수성을 증가 시켜 수정으로부터 모듈간의 수정을 최소화 시킨다.
  • Code re-use
  • Easy Debugging

Abstraction

  • 가장 특징이되는 것은 드러내고, 다른 것들은 감추는 것

Encapsulation

  • 내부 동작 방식은 몰라도 사용할수 있도록 SW를 설계, 생산하는 것. 즉, 내부 데이터, 알고리즘을 감추어 black box형태 감추는것. 외부는 인터페이스를 통하여 접근이 가능합니다.

Polymorphism

같은 interface 뒤에 다양한 구현을 숨길 수 있는 기능.

Runtime Polymorphism (Dynamic Polymorphism)

  • Method Overriding : Runtime에 결정이 되고, 하위클래스에서 상위 클래스를 상속받아 재정의 함.
  • Method Overriding은 리턴값과 파라미터가 부모와 같다

Compile Time Polymorphism (Static Polymorphism)

Method Overloading : 컴파일 시점에 결정이 되고, 이름은 같고 리턴과 입력 parameter와 method의 상세 내용을 재정의 하는 것

Inheritance

공통적으로 사용되는 state와 behavior를 subclass로 물려 주는 것. is a 관계.

Composition

has a 관계, 다른 클래스를 본인의 클래스의 구성요소로 사용하는 것

Binding

method 정의에 대한 메소드 호출의 연결을 의미합니다.

Static Binding (Early Binding)

Code의 Compile 시점에 결정된다. static, private, final과 같은 메소들 또는 Method Overloading된 메소드들이 해당됨

Dynamic Binding (Later Binding)

  • Code의 Runtime 시점에 결정된다.
  • Method Overriding된 메소드들이 call 하면서 동적으로 판단되서 출력됨.

왜 Dynamic Binding OOP에서 필수적인가?

System의 Flexibility을 증대 시키기 위해서입니다.
Dynamic Binding은 Runtime에 상속관계에서의 Dynamic Polymorphism을 이용하여 Method Overriding을 하는 것입니다. 이렇게 동적으로 Runtime에 Binding을 하기 때문에 Runtime에 변경이 가능하고, 이로인해 System에 Flexibility을 증가 시킵니다. 왜냐하면, Client의 상위 클래스는 변경이 되지않고, 하위클래스의 확장하는 것으로 다른 기능을 runtime에 변경 가능하기 때문입니다. 많은 OO Principle들은 이러한 Dynamic Binding을 통하여 기능의 확장은 쉽고, 수정은 최소한으로 하는것을 원칙으로 하고 있습니다.

Abstract Class and Interface 차이?

Abstract Class와 Interface의 공통점은 둘다 instance화 될수 없다는 것이지만, 다른 점은 interface는 오직 추상 method만 갖을 수 있는 반면에, abstract class는 attribute 이나 method도 갖을 수 있습니다.

Overloading과 Overriding의 차이?

Overloading은 동일한 이름의 method를 리턴 타입이나 파라미터를 변경하여 재정의 하는 것. Static Polymorphism이고 compile 시점에 binding이 결정됩니다.
Overriding은 동일한 이름의 method를 상속을 통하여 재정의 하는 것입니다. Dynamic Polymorphsim이고 runtime 시점에 binding이 결정됩니다.

Static Binding과 Dynamic Binding 차이

Binding은 Method call 시에 실행될 Method의 정의를 연결하는 것입니다.
Static binding은 compile 시점에 결정되며, 변경이 될 일이 없는 static, private, final과 같은 메소드들 또는 Overloading된 메소드들이 해당됩니다.
Dynamic Method는 runtime 시점에 결정되며, 상속을 통해 재정의된 Overriding Method들이 해당됩니다.

'Object Oriented Programming' 카테고리의 다른 글

UML 간략 정리  (0) 2022.05.07