객체 지향(Object Oriented) 이란?

 

1) 객체 | 기능(Operation)과 함수(Method)로 구성.

ex) 식당 주문 Process.

 

2) 인터페이스와 클래스 | 객체가 제공하는 기능(Operation)을 명세하는 인터페이스. 실제 객체의 구성의 집합은 클래스.

ex)

{매장 클래스에 명세된 Interface 목록}

 - 날짜 및 영수증 번호 등.

 - 결제 수단 집합 배열.

 - 주문을 받는 Method.

 - 결제 Method.

 - 상품을 건네주는 Method.

 

3) 메세지 | 클래스에서 인터페이스의 명령에 따라 객체의 기능(책임)을 전달하는 매개체.

ex)

 (1) 매장의 환경 설정 값을 확인한다.

 (2) 손님이 들어오면 주문을 받는다.

 (3) 해당 상품에 대해 결제를 진행한다.

 (4) 결제가 정상적으로 완료되면 상품을 제조하여 손님에게 건네준다.

 

4) 의존 | 각 객체가 서로를 생성하거나, 서로의 기능(Operation, Method)을 사용해야하는 흐름에 따른 이념.

ex)

{매장 클래스에서 발생된 결제에 대해서 산술 클래스에 의존하여 산술을 처리하는 방식}

...

#include "clsCalc.h"

...

double clsStore::CalcProcess(short snType) {

clsCalc objCalc = new clsCalc();

 

if(snType == CASH)

objCalc.CalcCash();

else if(snType == CARD)

objCalc.CalcCredit();

 

delete objCalc;

}

...

 

1. 캡슐화(Encapsulation) | 클래스를 모듈화하여 코드 은닉 및 내부 구조 변경의 유연성을 증진시키는 기법을 사용하는 과정.

ex) 공통 모듈화

 - 상품 결제 시 결제 금액, 부가세, 봉사료 등을 계산하는 클래스.

 - 매장 멤버십 고객 포인트 처리에 대해 계산하는 클래스.

 - 직원 출, 퇴근 관련 인사 관리를 담당하는 클래스.

 

** 데미테르의 법칙(Law of Demeter) 준수 **

 (1) 메서드에서 생성한 객체의 메서드만 호출.

 (2) 파라미터로 받은 객체의 메서드만 호출.

 (3) 필드로 참조하는 객체의 메서드만 호출.

 

2. 다형성(Polymorphism)과 상속(Inheritance)

[ 다형성 | 한 객체(혹은 메소드, 기능(Operation))를 재사용 필요에 의해 여러 타입으로 변경하여 사용하는 기법. ]

[ 상속 | 상속해주는 클래스(부모(super))가 상속받는 클래스(자식(parent))에게 자신의 기능(Operation)의 권한을 위임시켜주는 기법. ]

 -> 인터페이스 상속 | 추상 함수만을 가지는 추상 클래스를 상속시키는 기법.

 -> 구현(Class) 상속 | 기능 재사용을 목적으로 하는 일반 클래스를 상속시키는 기법.

 

ex)

 (1) 오버라이딩(Overriding)

  - 부모 클래스에게 상속받은 메소드를 자식 클래스에서 이름과 인자, 반환 값을 모두 같게 재 선언하되, 다른 기능(Operation)을 부여하는 기법.

 (2) 오버로딩(Overloading)

  - 부모 클래스에게 상속받은 메소드를 자식 클래스에서 이름은 같되 인자의 구조는 달라야하며, 반환 값은 제한받지 않는 방식으로 기능(Operation)을
부여하는 기법.

 

** 상속 기법의 사용에 있어 드러날 수 있는 문제점 **

 1) 부모 클래스의 변경으로 인해 해당 부모 클래스에게 상속을 받은 자식 클래스들의 수정이 불가피해질 수 있음.

 2) 다중 상속이 불가능한 환경에서는 클래스의 불 필요한 증가가 불가피해질 수 있음.

 3) 유사하지만 전혀 다른 기능을 가지는 각기 다른 클래스 구현 시 혼란을 야기시킬 수 있음.

 --> 상속보다는 각 클래스의 조립을 통해 기능을 엮는 방법도 고려하기에 충분하다.

 

3. 추상화 | 데이터나 프로세스 등을 의미가 비슷한 개념이나 표현으로 정의하는 과정.

ex)

 (1) 계산에 대한 로직 추상화

  - 현금, 카드 및 기타 결제 수단 관련 클래스.

  - 멤버십 포인트 사용 관련 클래스.

  - 할인 수단 관련 클래스.

 (2) 직원 인사에 대한 로직 추상화

  - 출, 퇴근 관련 클래스.

  - 각 직원 별 매출 집계 관련 클래스.

 

 

이제 다음 포스트에서 위의 객체 지향적 사고를 바탕으로 구성된 설계 원칙(SOLID) 기법에 대해 알아보도록 하자.

 

 

출처: 최범균, 『개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴』, 인투북스(2014)

'IT > Design Pattern' 카테고리의 다른 글

객체 지향적 설계 원칙 : SOLID  (0) 2018.12.14
디자인 패턴 (Design Pattern) 이란?  (0) 2018.09.17

+ Recent posts