본문 바로가기
  • Always Awake
정보처리기사/1과목

[정보처리기사 필기] 객체지향(Object-Oriented)

by NerdyBoy 2022. 2. 8.

객체지향


1. 객체지향 개요

객체지향이란 현실세계의 개체(Entity)를 기계의 부품처럼 하나의 객체(Object)로 만들어, 기계적인 부품들을 조립하여 제품을 만들 듯이 소프트웨어를 개발할 때에도 객체들을 조립해서 작성할 수 있는 기법을 말함

  • 구조적 기법의 문제점으로 인한 소프트웨어 위기의 해결책으로 채택
  • 소프트웨어의 재사용 및 확장이 용이하여 고품질의 소프트웨어를 빠르게 개발할 수 있고 유지보수 쉬움
  • 복잡한 구조를 단계적, 계층적으로 표현하고, 멀티미디어 데이터 및 병렬 처리를 지원한다
  • 현실세계를 모형화 하므로 사용자와 개발자가 쉽게 이해할 수 있다
구조적 기법 객체지향 기법
프로그램 = 데이터 + 함수 객체 = 데이터 + 함수
프로그램 = 객체 + 객체

 

2. 객체지향의 주요 속성

객체(Object)

객체는 데이터와 데이터를 처리하는 함수를 묶어놓은(캡슐화한) 하나의 소프트웨어 모듈이다.

데이터 객체가 가지고 있는 정보로 속성이나 상태, 분류 등을 나타냄
속성(Attribute), 상태, 변수, 상수, 자료 구조 라고도 한다
함수 객체가 수행하는 기능으로 객체가 갖는 데이터(속성, 상태)를 처리하는 알고리즘 이다
객체의 상태를 참조하거나 변경하는 수단이 되는 것으로 메소드(Method), 서비스(Service), 동작(Operation), 연산 이라고도 한다

객체의 특성

  • 독립적으로 식별 가능한 이름을 가짐
  • 객체가 가질 수 있는 조건을 상태(State). 일반적으로 시간에 따라 변함
  • 객체와 객체는 상호 연관성에 의한 관계 형성
  • 객체가 반응할 수 있는 메시지 집합을 행위라고 함 객체는 행위의 특징을 나타낼 수 있다
  • 일정한 기억장소를 가지고 있다

 

클래스

공통된 속성과 연산을 갖는 객체의 집합으로, 객체의 일반적인 타입(Type)

  • 객체지향 프로그램에서 데이터를 추상화하는 단위
  • 클래스에 속한 각각의 객체를 인스턴스(Instance)라 하며, 클래스로부터 새로운 객체를 생성하는 것을 인스턴스화(Instantiation)
  • 동일 클래스에 속한 각각의 객체(인스턴스)들은 공통된 속성과 행위를 가지고 있으면서, 속성에 대한 정보가 서로 달라서 동일 기능을 하는 여러가지 객체로 나타나게 됨
  • 최상위 클래스는 상위 클래스를 갖지 않는 클래스를 의미
  • 슈퍼 클래스(Super Class)는 특정 클래스의 부모 클래스 이고, 서브 클래스(Sub Class)는 특정 클래스의 자식 클래스

* 클래스는 일종의 자동차 틀이라고 생각할 수 있다. 핸들, 차 프레임, 바퀴 등의 유무는 모두 일정 하지만, 옵션에 따라 어떤것을 쓸지는 달라진다. 이렇게 인스턴스화 하여 만들어진 자동차를 객체라고 하는데, 자동차의 경우 번호판 이나 일련번호 등으로 구분되기 때문에 모두 독립적이다. 만들어진 인스턴스도 마찬가지로 같은 속성을 가질 지라도 다른 객체인 것.

 

캡슐화(Encapsulation)

데이터(속성)와 데이터를 처리하는 함수를 하나로 묶는것을 의미한다.

  • 캡슐화된 객체는 인터페이스를 제외한 세부 내용이 은폐(정보 은닉)되어 외부에서의 접근이 제한적이기 때문에 외부 모듈의 변경으로 인한 파급 효과가 적다.
  • 재사용이 용이하다.
  • 인터페이스가 단순해지고, 객체간 결합도가 낮아진다.

 

상속(Inheritance)

상속은 이미 정의된 상위 클래스(부모 클래스)의 모든 속성과 연산을 하위 클래스가 물려받는것

  • 상속을 이용하면 하위클래스는 상위클래스의 모든 속성과 연산을 자신의 클래스 내에서 다시 정의 하지 않아도 이용 가능
  • 하위 클래스는 상위 클래스로부터 상속받은 속성과 연산 외에 자신의 새로운 속성과 연산을 첨가하여 사용할 수 있다.
  • 소프트웨어의 재사용을 높이는 중요한 개념
  • 다중 상속(Multiple Inheritance): 한 개의 클래스가 두개이상의 상위 클래스로부터 상속 받는것

 

다형성(Polymorphism)

다형성은 메시지에 의해 객체(클래스)가 연산을 수행하게 될 때 하나의 메시지에 대해 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력

  • 객체(클래스)들은 동일한 메소드명을 사용하며 같은 의미의 응답을 한다.
  • 응용 프로그램 상에서 하나의 함수나 연산자가 두 개 이상의 서로 다른 클래스의 인스턴스들을 같은 클래스에 속한 인스턴스처럼 수행할 수 있도록 하는것이다.

* 예를 들어 '+' 연산자의 경우 숫자 클래스 에서는 덧셈, 문자 클래스에서는 문자 연결

 

연관성(Relationship)

두 개 이상의 객체들이 상호 참조하는 관계

종류 의미 특징
is member of 연관화(Association) 2개 이상의 객체가 상호 관련되어 있음
is instance of  분류화(Classification) 동일한 형의 특성을 갖는 객체들을 모아 구성하는 것
is part of  집단화(Aggregation) 관련 있는 객체들을 묶어 하나의 상위 객체를 구상하는 것
is a 일반화(Generalization) 공통적인 성질들로 추상화한 상위 객체를 구성하는 것
특수화/상세화(Speciallization) 상위 객체를 구체화하여 하위 객체를 구성하는것

 


 

객체지향 분석 및 설계


1. 객체지향 분석의 개념

객체지향 분석(OOA; Object Oriented Analysis)은 사용자의 요구사항을 분석하여 요구된 문제와 관련된 모든 클래스(객체), 이와 연관된 속성과 연산, 그들 간의 관계 등을 정의하여 모델링 하는 작업이다.

  • 객체는 클래스로부터 인스턴스화되고, 이 클래스를 식별하는 것이 객체지향 분석의 주요한 목적이다.
  • 분석가에게 주요한 모델링 구성 요소인 클래스, 객체, 속성, 연산들을 표현해서 문제를 모형화할 수 있게 해준다.

 

2. 객체지향 분석의 방법론

  • Rumbaugh(럼바우) 방법: 가장 일반적으로 사용되는 방법. 분석 활동을 객체 모델, 동적 모델, 기능 모델 로 나눔
  • Booch(부치) 방법: 미시적(Micro), 거시적(Macro) 개발 프로세스를 모두 사용. 클래스와 객체들을 분석 및 식별 하고 클래스의 속성과 연산 정의
  • Jacobson 방법: Use Case 강조하여 분석
  • Coad와 Yourdon 방법: E-R 다이어그램 사용. 객체 식별, 구조 식별, 주제 정의, 속성과 인스턴스 연결 정의, 연산과 메시지 연결 정의 등의 과정으로 구성
  • Wirfs-Brock 방법: 분석과 설계간 구분없음. 고객 명세서 평가해서 설계 작업까지 연속적으로 수행

럼바우(Rumbaugh)의 분석 기법

모든 소프트웨어 구성 요소를 그래픽 표기법을 이용하여 모델링하는 기법. 객체 모델링 기법(OMT, Object-Modeling Technique)이라고도 한다.

  • 분석 활동은 '객체 모델링 - 동적 모델링 - 기능 모델링' 순으로 이루어짐
객체 모델링(Object Modeling) 정보 모델링이라고도 하며, 시스템에서 요구되는 객체를 찾아내어 속성과 연산 식별 및 객체들간 관계를 규정 하여 객체 다이어 그램으로 표시
동적 모델링(Dynamic Modeling) 상태 다이어그램(상태도)을 이용하여 시간 흐름에 따른 객체들간 제어흐름, 상호 작용, 동작 순서 등 동적 행위 표현
기능 모델링(Functional Modeling) 자료 흐름도(DFD) 이용, 다수 프로세스들 간 자료 흐름 중심으로 처리하는 과정 표현

상태 다이어그램: 객체가 시간에 따라 어떻게 변하는지 표현하는 그래픽 표기법

 

3. 객체지향 설계 원칙

객체지향 설계 원칙은 시스템 변경이나 유연한 시스템을 설계하기 위해 지켜야할 다섯가지 원칙. 앞글자를 따서 SOLID원칙

단일 책임 원칙(SRP; Single Responsibility Principle) 객체는 단 하나의 책임만 가져야함
응집도는 높고, 결합도는 낮게 설계
개방-폐쇄 원칙(OCP; Open-Closed Principle) 기존 코드를 변경하지 않고 기능 추가할 수 있도록 설계
공통 인터페이스를 하나의 인터페이스로 묶어 캡슐화 하는 방법이 대표적
리스코프 치환 원칙(LSP; LisKov Substitution Principle) 자식 클래스는 부모 클래스에서 가능한 행위 모두 수행가능 해야함
자식 클래스는 부모 클래스의 책임 무시, 재정의 하지 않고 확장만 수행 하도록
인터페이스 분리 원칙(ISP; Interface Segregation Principle) 자신이 원하지 않는 인터페이스와 관계 또는 영향 받지 않아야 함
단일 책임 원칙은 객체가 갖는 책임이라면, 인터페이스 분리 원칙은 인터페이스가 가지는 하나의 책임
의존 역전 원칙(DIP; Dependency Inversion Principle) 각 객체들간 의존 관계가 성립될 때, 추상성이 높은 클래스와 의존 관계를 맺어야함
일반적으로 인터페이스를 사용시 준수됨

출처

자료 참고: 

시나공 정보처리기사 필기 2022를 참고하여 작성되었습니다

표지

 

댓글