DevGang

[SE-18] 객체지향 소프트웨어 공학 본문

정보처리/SE

[SE-18] 객체지향 소프트웨어 공학

별천랑 2021. 2. 8. 18:03

1. 객체(object)란?

주체에 반대되는 말. 객관과 거의 동일한 뜻으로 
1) 일반적 대상, 사상(事象), 2) 주체와 연관됨으로써 이 주체의 행위가 지향하는 것을 의미한다. 더 좁은 뜻에서 인식론적으로 보면 경험을 통해서 의식에 주어진 대상 또는 인식 주체와의 관계에서 본 실재(實在)라는 것이 된다.
[네이버 지식백과] 객체 [Object, 客體] (철학사전, 2009, 중원문화)


객체 지향 프로그래밍(OOP)이나 설계에서, 데이터(실체)와 그 데이터에 관련되는 동작(절차, 방법, 기능)을 모두 포함한 개념. 예를 들어 기차역에서 승차권을 발매하는 경우, 실체인 ‘손님’과 동작인 ‘승차권 주문’은 하나의 객체이다. 실체인 ‘역무원’과 동작인 ‘승차권 발매’도 하나의 객체이다. 같은 성질(구조와 형태)을 가지는 객체는 등급으로 정의하고, 같은 등급에 속하는 객체는 그 등급의 인스턴스라고 한다.

[네이버 지식백과] 객체 [object, 客體, 客體空間] (IT용어사전, 한국정보통신기술협회)

2. 객체지향 기법 개념

  • 현실 세계의 개체(Entity)를 기계의 부품처럼 하나의 객체(Object)로 만들어, 기계적인 부품들을 조립하여 제품을 만들듯이 소프트웨어를 개발할 때도 객체들을 조립해서 작성할 수 있도록 하는 기법을 말함
  • 객체들 간의 상호작용은 메시지를 통해 이루어짐
  • 클래스는 인스턴스(instance)들이 갖는 변수들과 인스턴스들이 사용할 메서드(method)를 가짐

3. 객체지향 기법의 구성 요소 

- 객체(Object)

  • 객체란 필요한 자료 구조(데이터)와 이에 수행되는 함수들을 가진 하나의 소프트웨어 모듈 (어트리뷰트+메서드)

 1) 어트리뷰트(Attribute)

  • 객체가 가지고 있는 정보로 속성이나 상태, 분류 등을 나타냄
  • 데이터, 속성, 상태, 변수, 상수, 자료 구조라고도 함
  • 오브젝트의 상태는 어트리뷰트를 파악함으로써 알 수 있음

 2) 메서드(Method)

  • 객체지향 시스템에서 전통적 시스템의 함수(Function) 또는 프로시저(Procedure)에 해당하는 연산 기능
  • 객체가 메시지를 받아 실행해야 할 객체의 구체적인 연산을 정의한 것
  • 객체가 갖는 데이터를 처리하는 알고리즘
  • 연산(Operation)이라고도 함
  • 오퍼레이션(Operation)은 속성(Attribute)을 변화시킴

- 클래스 (Class) 

  • 클래스는 공통된 속성과 연산(행위)을 갖는 객체의 집합으로 객체의 일반적인 타입(Type)을 의미
  • 하나 이상의 유사한 객체들을 묶어 공통된 특성을 표현한 데이터 추상화를 의미
  • 모든 객체들은 더 큰 클래스의 멤버이고, 그 클래스에 대하여 이미 정의된 개별 자료구조와 연산이 상속이 되며, 그   때문에 개별 객체는 클래스의 인스턴스가 됨
  • 메타 클래스 (Meta Class) - 클래스의 클래스를 의미하는 것으로 클래스 계층 트리의 최상단에 위치

- 메시지 (Message) 

  • 메시지는 객체(Object)들 간에 상호작용을 하는 데 사용되는 수단
  • 객체(Object)의 메서드(동작, 연산)를 일으키는 외부의 요구 사항임
  • 메시지 전달은 오브젝트(object)에서 오브젝트로 이루어짐
  • 메서드는 오브젝트로부터 메시지를 받을 때 시작되어 짐(=오브젝트가 메시지를 받으면 메서드를 부른다(Invoke))

- 메시지의 구성 요소

  • 메시지를 받는 객체(수신자)의 이름
  • 객체(Object)가 수행할 메서드 이름
  • 메서드를 수행할 때 필요한 인자(속성 값)
  • 메시지=수신 객체 이름 + 연산 이름 + 인자

4. 객체지향 기법의 기본 원칙 

- 캡슐화 (Encapsulation) 

  • 캡슐화는 데이터(속성)와 데이터를 처리하는 함수를 하나로 묶은 것
  • 객체지향 시스템에서 자료 부분과 연산(또는 함수) 부분 등 정보처리에 필요한 기능을 한 테두리로 묶는 것
  • 객체 지향의 기본 원리인 정보 은폐와 가장 밀접한 관계가 있음
  • 객체지향 개념에서 연관된 데이터와 함수를 함께 묶어 외부와 경계를 만들고 필요한 인터페이스만을 밖으로 드러내는 과정
  • 서로 관련 있는 데이터와 연산자를 하나로 묶어서 프로그램의 컴포넌트로 재사용할 수 있는 개념

- 객체지향의 캡슐화(encapsulation) 개념이 갖는 장점

  • 재사용이 용이
  • 인터페이스 단순화
  • 변경이 발생할 때 오류의 파급효과가 적음
  • 응집도가 향상

- 정보 은닉 (Information Hiding) 

  • 캡슐화에서 가장 중요한 개념
  • 다른 객체에서 자신의 정보를 숨기고 자신의 연산만을 통하여 접근을 허용하는 것
  • 정보 은폐라고도 함
  • 목적 : 고려되지 않은 영향(Side Effect)들을 최소화하기 위하여

- 추상화 (Abstraction)

  • 추상화는 불필요한 부분을 생략하고 객체의 속성 중 가장 중요한 것에만 중점을 두어 개략화하는 것, 즉 모델화하는 것

- 상속성 (Inheritance) 

  • 상속성은 이미 정의된 상위 클래스(부모 클래스)의 모든 속성과 연산을 하위 클래스가 물려받는 것을 말함
  • 상위 클래스의 속성과 연산을 하위 클래스가 공유할 수 있기 때문에 객체(Object)와 클래스의 재사용, 즉 소프트웨어 재사용(Reuse)을 증대시키는 중요한 개념임

- 다형성 (Polymorphism) 

  • 객체지향 시스템에서 서로 다른 Class들이 같은 의미의 응답을 하는 특성
  • 한 메시지가 객체에 따라 다른 방법으로 응답할 수 있는 것
  • 많은 상이한 클래스들이 동일한 메서드 명을 이용하는 능력

5. 객체지향 프로그램의 장점

  • 자연적인 모델링이 가능
  • 소프트웨어의 재사용률이 높아짐
  • 소프트웨어의 유지보수성이 향상
Comments