RangA 2023. 5. 29. 23:50

01. 객체지향 기술의 개념

01. 객체지향(Object Oriented) 기술의 개념

1) 객체지향 기술의 등장 배경

  • 1960년도 초기부터 시작된 객체지향 기술은 소프트웨어 개발 규모가 점점 대형화 되면서 "소프트웨어 개발에 투입되는 시간과 비용 등 여러 가지의 문제점을 해결하고 어떻게 하면 소프트웨어 개발을 손쉽게 할 수 있을까?"하는 요구에서 시작됨
  1. 과거 기술 측면
    • 절차적 설계 : 프로그램을 순차적으로 수행시키는 방법으로 자료 구조와 명령 중심으로 프로그램을 나열하듯이 개발하는 방법
    • 모듈화된 설계 : 객체라는 개념이 등장하기 이전에 모듈, 함수를 계층적으로 조립하면서 개발하는 구조화된 방법
  2. 개발자 측면
    • 소프트웨어 위기를 해결하기 위한 대안, 생산성 저하로 인한 재사용성의 증대, 확장성의 필요가 절실해짐
  3. 사용자 측면
    • 컴퓨터 보급이 늘어나면서 사용자의 더 많은 기능, 단순성, 사용 편의성 등의 요구가 증대됨

2) 객체지향 기술의 특징

  • 현실 세계의 개체를 속성과 메소드(행위, 동작, 함수, 연산 등)가 결합된 형태의 객체로 표현함
  • 현실 세계에 존재하는 속성을 데이터화하여 컴퓨터 세계로 변환한 것은 데이터베이스, 데이터뿐만 아니라 현실 세계에 존재하는 개체의 기능, 동작까지를 추가한 것이 객체라고 할 수 있음
  • 객체는 속성, 메소드로 구성되는데, 모듈화된 설계에서는 모듈은 객체에 대응되고, 변수는 속성에 대응되며, 함수는 메소드에 대응됨
  • 객체지향 기술은 객체와 객체 간의 통신을 통해 프로그램이 구현됨

3) 객체의 정의

  1. 객체(Object, 오브젝트)
    -객체(Object) = 속성(Attribute) + 메소드(Method)
    속성과 메소드로 구성된 클래스의 인스턴스(객체의 복사품)를 의미함
  2. 속성(Attribute, 애트리뷰트)
    • 자료 구조, 변수, 데이터, 성질, 분류, 식별, 수량, 상태를 의미함
  3. 메소드(Method)
    • 행위, 기능, 함수, 프로시저, 연산, 메소드는 동사형, 객체는 명사형

4) 객체지향 기술의 장점

  • 객체를 이용해 쉽게 프로그래밍할 수 있음
  • 규모가 큰 대형 프로그램 개발에 적당함
  • 객체를 만들어 복사해서 사용할 수 있어 프로그램을 신속하게 개발할 수 있음
  • 확장성과 유지보수성이 향상됨
  • 실세계 접근이 가능한 프로그램을 개발할 수 있음

5) 객체지향 기술의 단점

  • 객체를 이용하여 쉽게 프로그래밍할 수 있지만, 객체 자체의 설계가 어려움
  • 객체의 규모가 크기 때문에 실행 속도가 느림



02. 객체지향 기술의 구성 요소

1) 객체의 구성 요소

  1. 클래스(Class)
    • 데이터를 추상화하는 단위
    • 객체의 타입을 정의하고 객체를 생성하는 틀을 의미함
    • 하나 이상의 유사한 객체들을 묶어 공통된 특성을 표현한 데이터 추상화를 의미함
    • 클래스는 객체지향 프로그래밍에서 객체를 표현하는 추상 데이터 타입으로 객체를 생성하는 틀
    • 문제 해결을 위한 같은 종류의 집단에 속하는 속성과 행위를 정의한 것
    • 기존 언어에서 지원하던 사용자 정의 자료형 및 서브 프로그램의 개념을 발전시켜 Java, C++ 등에서 클래스를 통해 추상화된 자료형을 제공함
    • 객체지향 프로그램의 기본적인 사용자 정의형 데이터
  2. 객체(Object)
    • 개체(Entity), 속성(Attribute), 메소드(Method)로 구성된 클래스의 인스턴스를 의미함
    • 객체마다 고유한 속성(데이터)을 가지며 클래스에서 정의된 메소드를 수행함
  3. 인스턴스(Instance)
    • 실행 중인 임의의 프로세스, 클래스의 현재 생성된 객체를 가리킴
    • 클래스로 정의된 객체의 복사본이라고 할 수 있음
  4. 메시지(Message)
    • 객체와 객체들 사이의 인터페이스 형식을 메시지라고 하며 메시지를 주고 받음으로써 객체 간의 상호 작용을 함
    • 객체에 어떤 행위를 하도록 지시하는 명령
  5. 캡슐화(Encapsulation)
    • 구조적 설계에서 모듈화와 같은 의미로 객체를 정의한 때 연관된 속성(자료 구조, 데이터 등)과 방법(함수, 기능 연산 등)을 한 테두리로 묶는 것을 의미함
    • 캡슐화의 장점
      • 가독성이 좋아 유지보수가 용이함
      • 재사용이 용이함
      • 중복성을 최소화함
      • 인터페이스를 단순화시킴
      • 정보 은폐로 내부 자료의 일관성이 유지됨
      • 변경이 발생할 때 오류의 파급 효과가 작음
  6. 정보 은폐(Information Hiding, 정보 은닉)
    • 캡슐화된 객체 내부에 속성(자료 구조)이나 메소드(함수)의 기능이 외부에 영향을 받거나 주지 않도록 설계하는 방법
    • 고려하지 않은 영향(Side Effect)들을 최소화하기 위하여 사용됨
    • 모듈이나 객체 사이의 독립성을 유지하는 데 도움을 줌
    • IP 주소와 같은 물리적 코드, 상세 데이터 구조 등 캡슐화된 항목을 다른 객체로부터 은폐해야 함
    • 요구사항 변경에 따라 내부 자료와 동작들을 수정할 수 있음



03. 추상화와 상속

1) 추상화(Abstraction)

1. 추상화의 개념

  • 불필요한 것은 제외하고, 공통적으로 사용 가능한 큰 틀을 구상함
  • 큰 틀에서 데이터가 저장되어야 하는 변수 부분과 실제 행위를 가능하게 하는 명령 부분을 분리하여 식별함
  • 변수에 대한 데이터 타입을 정의하고, 상세한 부분은 다루지 않는 추상적인 형태로 구조화함
  • 공통 성질을 추출하여 슈퍼 클래스(부모 클래스, 베이스 클래스)로 구성함
  • 객체 중심의 안정된 모델을 구축할 수 있음
  • 현실 세계를 자연스럽게 표현할 수 있음
  • 분석의 초점이 명확해짐
  • 추상화는 복잡한 문제의 본질을 이해하기 위해 세부 사항은 배제하고 중요한 부분을 중심으로 간략화하는 기법으로 기능 추상화, 자료 추상화, 제어 추상화로 구분할 수 있음

2. 추상화의 종류

  • 기능 추상화 : 입력 자료를 출력 자료로 변환하는 과정을 추상화하는 방법
  • 자료 추상화 : 자료와 자료에 적용할 수 있는 오퍼레이션을 함께 정의하는 방법
  • 제어 추상화 : 외부 이벤트에 대한 반응을 추상화하는 방법

2) 상속과 구체화

1. 상속과 구체화의 개념

  • 상속은 상위 클래스의 속성과 메소드를 하위 클래스가 내려받아 사용함
  • 상속은 상위 수준 그룹의 모든 특성을 하위 수준 그룹이 이어받아 재사용 또는 확장하는 특성을 의미함
  • 부모와 자식 클래스의 관계는 슈퍼 클래스나 서브 클래스로 유지됨
  • 상위 클래스는 추상적이지만 하위 클래스는 구체적인 성질을 가짐
  • 프로그래밍 언어에서 추상화된 그룹과 추상화되지 않은 하위 그룹 간에는 부모-자식의 계층적 관계가 존재함
  • 구체화는 하위 수준 그룹이 상위 수준 그룹의 추상적인 부분을 구체화시키는 것을 의미함
  • 부모가 자식에게 특성을 물려주고, 자식이 구체적 기능을 구현하는 것으로써 이 개념을 변수와 명령문에 적용함
  • 상속은 단일 상속과 다중 상속이 있으며, 상위 수준의 그룹이 하나만 존재할 때, 이를 단일 속성이라고 부름
  • 파생 클래스는 베이스 클래스에서 속성과 메소드의 기능을 필요할 때마다 전달받아 새로운 형태의 클래스와 객체로 확장 사용하는 것으로 객체의 상속이라고 함

2. 다중 상속(Multiple Inheritance)

  • 하나의 객체가 여러 개의 상위 클래스로부터 속성과 메소드를 상속받는 것을 의미함

3) 다형성(Polymorphism)

1. 다형성의 개념

  • 상속 받은 여러 개의 하위 객체들이 다른 형태의 특성을 갖는 객체로 이용될 수 있는 성질
  • 동일한 이름의 메소드를 다른 사양으로 정의할 수 있음
  • 다형성은 한 메시지가 객체에 따라 다른 방법으로 응답할 수 있도록 설계해야 함(오버로딩)
  • 상이한 클래스들이 동일한 메소드명을 이용하는 능력이 있어야 함(오버라이딩)
  • 다형성은 두 개 이상의 클래스에서 동일한 메시지에 대해 객체가 다르게 반응하는 것

2. 다형성과 상속성의 비교

  비교 구분     다형성     상속성  
  개념     인터페이스에 따라 다르게 메소드를 사용     상위 클래스의 메소드를 사용  
  특징     동적 바인딩     정적 바인딩  
  구조     수직, 수평 구조     수직 구조  
  장점     명령 단순, 메모리 절약, 응집도 높음     재사용성, 중복 제거, 유지보수성  
  단점     코드 중복 개발     많은 상속으로 결합도 강함