정보처리기사/프로그래밍 언어 활용
객체지향 기술 1
RangA
2023. 5. 29. 23:50
01. 객체지향 기술의 개념
01. 객체지향(Object Oriented) 기술의 개념
1) 객체지향 기술의 등장 배경
- 1960년도 초기부터 시작된 객체지향 기술은 소프트웨어 개발 규모가 점점 대형화 되면서 "소프트웨어 개발에 투입되는 시간과 비용 등 여러 가지의 문제점을 해결하고 어떻게 하면 소프트웨어 개발을 손쉽게 할 수 있을까?"하는 요구에서 시작됨
- 과거 기술 측면
- 절차적 설계 : 프로그램을 순차적으로 수행시키는 방법으로 자료 구조와 명령 중심으로 프로그램을 나열하듯이 개발하는 방법
- 모듈화된 설계 : 객체라는 개념이 등장하기 이전에 모듈, 함수를 계층적으로 조립하면서 개발하는 구조화된 방법
- 개발자 측면
- 소프트웨어 위기를 해결하기 위한 대안, 생산성 저하로 인한 재사용성의 증대, 확장성의 필요가 절실해짐
- 사용자 측면
- 컴퓨터 보급이 늘어나면서 사용자의 더 많은 기능, 단순성, 사용 편의성 등의 요구가 증대됨
2) 객체지향 기술의 특징
- 현실 세계의 개체를 속성과 메소드(행위, 동작, 함수, 연산 등)가 결합된 형태의 객체로 표현함
- 현실 세계에 존재하는 속성을 데이터화하여 컴퓨터 세계로 변환한 것은 데이터베이스, 데이터뿐만 아니라 현실 세계에 존재하는 개체의 기능, 동작까지를 추가한 것이 객체라고 할 수 있음
- 객체는 속성, 메소드로 구성되는데, 모듈화된 설계에서는 모듈은 객체에 대응되고, 변수는 속성에 대응되며, 함수는 메소드에 대응됨
- 객체지향 기술은 객체와 객체 간의 통신을 통해 프로그램이 구현됨
3) 객체의 정의
- 객체(Object, 오브젝트)
-객체(Object) = 속성(Attribute) + 메소드(Method)
속성과 메소드로 구성된 클래스의 인스턴스(객체의 복사품)를 의미함 - 속성(Attribute, 애트리뷰트)
- 자료 구조, 변수, 데이터, 성질, 분류, 식별, 수량, 상태를 의미함
- 메소드(Method)
- 행위, 기능, 함수, 프로시저, 연산, 메소드는 동사형, 객체는 명사형
4) 객체지향 기술의 장점
- 객체를 이용해 쉽게 프로그래밍할 수 있음
- 규모가 큰 대형 프로그램 개발에 적당함
- 객체를 만들어 복사해서 사용할 수 있어 프로그램을 신속하게 개발할 수 있음
- 확장성과 유지보수성이 향상됨
- 실세계 접근이 가능한 프로그램을 개발할 수 있음
5) 객체지향 기술의 단점
- 객체를 이용하여 쉽게 프로그래밍할 수 있지만, 객체 자체의 설계가 어려움
- 객체의 규모가 크기 때문에 실행 속도가 느림
02. 객체지향 기술의 구성 요소
1) 객체의 구성 요소
- 클래스(Class)
- 데이터를 추상화하는 단위
- 객체의 타입을 정의하고 객체를 생성하는 틀을 의미함
- 하나 이상의 유사한 객체들을 묶어 공통된 특성을 표현한 데이터 추상화를 의미함
- 클래스는 객체지향 프로그래밍에서 객체를 표현하는 추상 데이터 타입으로 객체를 생성하는 틀
- 문제 해결을 위한 같은 종류의 집단에 속하는 속성과 행위를 정의한 것
- 기존 언어에서 지원하던 사용자 정의 자료형 및 서브 프로그램의 개념을 발전시켜 Java, C++ 등에서 클래스를 통해 추상화된 자료형을 제공함
- 객체지향 프로그램의 기본적인 사용자 정의형 데이터
- 객체(Object)
- 개체(Entity), 속성(Attribute), 메소드(Method)로 구성된 클래스의 인스턴스를 의미함
- 객체마다 고유한 속성(데이터)을 가지며 클래스에서 정의된 메소드를 수행함
- 인스턴스(Instance)
- 실행 중인 임의의 프로세스, 클래스의 현재 생성된 객체를 가리킴
- 클래스로 정의된 객체의 복사본이라고 할 수 있음
- 메시지(Message)
- 객체와 객체들 사이의 인터페이스 형식을 메시지라고 하며 메시지를 주고 받음으로써 객체 간의 상호 작용을 함
- 객체에 어떤 행위를 하도록 지시하는 명령
- 캡슐화(Encapsulation)
- 구조적 설계에서 모듈화와 같은 의미로 객체를 정의한 때 연관된 속성(자료 구조, 데이터 등)과 방법(함수, 기능 연산 등)을 한 테두리로 묶는 것을 의미함
- 캡슐화의 장점
- 가독성이 좋아 유지보수가 용이함
- 재사용이 용이함
- 중복성을 최소화함
- 인터페이스를 단순화시킴
- 정보 은폐로 내부 자료의 일관성이 유지됨
- 변경이 발생할 때 오류의 파급 효과가 작음
- 정보 은폐(Information Hiding, 정보 은닉)
- 캡슐화된 객체 내부에 속성(자료 구조)이나 메소드(함수)의 기능이 외부에 영향을 받거나 주지 않도록 설계하는 방법
- 고려하지 않은 영향(Side Effect)들을 최소화하기 위하여 사용됨
- 모듈이나 객체 사이의 독립성을 유지하는 데 도움을 줌
- IP 주소와 같은 물리적 코드, 상세 데이터 구조 등 캡슐화된 항목을 다른 객체로부터 은폐해야 함
- 요구사항 변경에 따라 내부 자료와 동작들을 수정할 수 있음
03. 추상화와 상속
1) 추상화(Abstraction)
1. 추상화의 개념
- 불필요한 것은 제외하고, 공통적으로 사용 가능한 큰 틀을 구상함
- 큰 틀에서 데이터가 저장되어야 하는 변수 부분과 실제 행위를 가능하게 하는 명령 부분을 분리하여 식별함
- 변수에 대한 데이터 타입을 정의하고, 상세한 부분은 다루지 않는 추상적인 형태로 구조화함
- 공통 성질을 추출하여 슈퍼 클래스(부모 클래스, 베이스 클래스)로 구성함
- 객체 중심의 안정된 모델을 구축할 수 있음
- 현실 세계를 자연스럽게 표현할 수 있음
- 분석의 초점이 명확해짐
- 추상화는 복잡한 문제의 본질을 이해하기 위해 세부 사항은 배제하고 중요한 부분을 중심으로 간략화하는 기법으로 기능 추상화, 자료 추상화, 제어 추상화로 구분할 수 있음
2. 추상화의 종류
- 기능 추상화 : 입력 자료를 출력 자료로 변환하는 과정을 추상화하는 방법
- 자료 추상화 : 자료와 자료에 적용할 수 있는 오퍼레이션을 함께 정의하는 방법
- 제어 추상화 : 외부 이벤트에 대한 반응을 추상화하는 방법
2) 상속과 구체화
1. 상속과 구체화의 개념
- 상속은 상위 클래스의 속성과 메소드를 하위 클래스가 내려받아 사용함
- 상속은 상위 수준 그룹의 모든 특성을 하위 수준 그룹이 이어받아 재사용 또는 확장하는 특성을 의미함
- 부모와 자식 클래스의 관계는 슈퍼 클래스나 서브 클래스로 유지됨
- 상위 클래스는 추상적이지만 하위 클래스는 구체적인 성질을 가짐
- 프로그래밍 언어에서 추상화된 그룹과 추상화되지 않은 하위 그룹 간에는 부모-자식의 계층적 관계가 존재함
- 구체화는 하위 수준 그룹이 상위 수준 그룹의 추상적인 부분을 구체화시키는 것을 의미함
- 부모가 자식에게 특성을 물려주고, 자식이 구체적 기능을 구현하는 것으로써 이 개념을 변수와 명령문에 적용함
- 상속은 단일 상속과 다중 상속이 있으며, 상위 수준의 그룹이 하나만 존재할 때, 이를 단일 속성이라고 부름
- 파생 클래스는 베이스 클래스에서 속성과 메소드의 기능을 필요할 때마다 전달받아 새로운 형태의 클래스와 객체로 확장 사용하는 것으로 객체의 상속이라고 함
2. 다중 상속(Multiple Inheritance)
- 하나의 객체가 여러 개의 상위 클래스로부터 속성과 메소드를 상속받는 것을 의미함
3) 다형성(Polymorphism)
1. 다형성의 개념
- 상속 받은 여러 개의 하위 객체들이 다른 형태의 특성을 갖는 객체로 이용될 수 있는 성질
- 동일한 이름의 메소드를 다른 사양으로 정의할 수 있음
- 다형성은 한 메시지가 객체에 따라 다른 방법으로 응답할 수 있도록 설계해야 함(오버로딩)
- 상이한 클래스들이 동일한 메소드명을 이용하는 능력이 있어야 함(오버라이딩)
- 다형성은 두 개 이상의 클래스에서 동일한 메시지에 대해 객체가 다르게 반응하는 것
2. 다형성과 상속성의 비교
비교 구분 | 다형성 | 상속성 |
---|---|---|
개념 | 인터페이스에 따라 다르게 메소드를 사용 | 상위 클래스의 메소드를 사용 |
특징 | 동적 바인딩 | 정적 바인딩 |
구조 | 수직, 수평 구조 | 수직 구조 |
장점 | 명령 단순, 메모리 절약, 응집도 높음 | 재사용성, 중복 제거, 유지보수성 |
단점 | 코드 중복 개발 | 많은 상속으로 결합도 강함 |