관리 메뉴

나구리의 개발공부기록

3장 - 애플리케이션 설계 | 섹션18. 객체지향(Object-Oriented), 섹션19. 객체지향 분석 및 설계 본문

2024정보처리기사 준비 정리(필기 - 시나공, 실기 - 수제비)/필기 1강 - 소프트웨어 설계

3장 - 애플리케이션 설계 | 섹션18. 객체지향(Object-Oriented), 섹션19. 객체지향 분석 및 설계

소소한나구리 2024. 4. 17. 12:36

2024년도 시나공 필기 책 내용 정리


섹션18. 객체지향(Object-Oriented)

 

1. 객체지향의 개요

 

  • 현실 세계의 개체(Entity)를 기계의 부품처럼 하나의 객체(Object)로 만들어 기계적인 부품들을 조립하여 제품을 만들듯이 소프트웨어를 개발할 때에도 객체들을 조립해서 작성할 수 있는 기법을 말함
  • 구조적 기법의 문제점으로인한 소프트웨어 위기의 해결책으로 채택되어 사용되고 있음
  • 소프트웨어의 재사용 및 확장이 용이하여 고품질의 소프트웨어를 빠르게 개발할 수 있고 유지보수가 쉬움
  • 복잡한 구조를 단계적, 계층적으로 표현하고 멀티미디어 데이터 및 병렬처리를 지원
  • 현실 세계를 모형화하므로 사용자와 개발자가 쉽게 이해할 수 있음
  • 주요 구성 요소와 개념에는 객체(Object), 클래스(Class), 캡슐화(Encapsulation), 상속(Inheritance), 다형성(Polymorphism), 연관성(Relationship)이 있음

2. 객체(Object)

 

  • 데이터와 데이터를 처리하는 함수를 묶어 놓은(캡슐화한) 하나의 소프트웨어 모듈
  • 객체의 메소드는 다른 객체로부터 메세지를 받았을 때 정해진 기능을 수행함
데이터 객체가 가지고 있는 정보로 속성이나 상태, 분류 등을 나타냄
속성(Attribute), 상태, 변수, 상수, 자료 구조라고도 함
함수 객체가 수행하는 기능으로 객체가 갖는 데이터(속성, 상태)를 처리하는 알고리즘
객체의 상태를 참조하거나 변경하는 수단이 되는 것으로 메소드(Method, 행위), 서비스(Service), 동작(Operation), 연산이라고도 함

 

객체의 특성

 

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

3. 클래스(Class)

 

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

4. 캡슐화(Encapsulation)

 

  • 데이터(속성)와 데이터를 처리하는 함수를 하나로 묶는 것을 의미
  • 캡슐화된 객체는 인터페이스를 제외한 세부 내용이 은폐(정보 은닉)되어 외부에서의 접근이 제한적이기 때문에 외부 모듈의 변경으로 인한 파급 효과가 적음
  • 캡슐화된 객체는 재사용이 용이하며 객체들 간의 메세지를 주고받을 때 상대 객체의 세부 내용은 알 필요가 없으므로 인터페이스가 단순해지고, 객체 간의 결합도가 낮아짐

5. 상속(Inheritance)

 

  • 이미 정의된 상의 클래스(부모 클래스)의 모든 속성과 연산을 하위 클래스(자식 클래스)가 물려 받는 것
  • 하위 클래스는 상위 클래스의 모든 속성과 연산을 자신의 클래스 내에서 다시 정의하지 않고서도 즉시 자신의 속성으로 사용할 수 있음
  • 하위 클래스는 상위클래스로부터 상속받은 속성과 연산 외에 새로운 속성과 연산을 첨가하여 사용할 수 있음
  • 상위 클래스의 속성과 연산을 하위 클래스가 사용할 수 있기 때문에 객체와 클래스의 재사용(소프트웨어의 재사용)을 높이이는 중요한 개념

다중 상속(Multiple Inheritance)

 - 한 개의 클래스가 두개 이상의 상위 클래스로부터 속성과 연산을 상속받는 것

 - 다중 상속은 클래스 계층을 복잡하게 만들어 상속 순서 추적이 어렵고 상위 클래스의 변경이 하위 클래스에 의도하지 않은 영향을 미칠 수 있어 다중 상속을 허용하지 않는 프로그래밍 언어들도 있음

 - 다중 상속이 가능한 프로그래밍 언어에서도 다중 상속을 이용할 때에는 이를 고려하여 매우 신중히 사용해야 함


6. 다형성(Polymorphism)

 

  • 메세지에 의해 객체(클래스)가 연산을 수행하게 될 때 하나의 메세지에 대해 각각의 객체(클래스)가 가지고 있는 고유한 방법(특성)으로 응답할 수 있는 능력을 의미
  • 객체(클래스)들은 동일한 메소드명을 사용하며 같은 의미의 응답을 함
  • 응용프로그램상에서 하나의 함수나 연산자가 두개 이상의 서로 다른 클래스의 인스턴스들을 같은 클래스에 속한 인스턴스처럼 수행할 수 있도록 하는 것
  • 예시1) + 연산자의 경우 숫자 클래스에서는 덧셈, 문자 클래스에서는 문자열의 연결 기능으로 사용됨
  • 예시2) 오버로딩(Overloading)기능의 경우 메소드(Method)의 이름은 같지만 인수를 받는 자료형과 개수를 달리하여 여러 기능을 정의할 수 있음
  • 예시3 오버라이딩(Overriding, 메소드 재정의) 기능의 경우 상위 클래스에서 저으이한 메소드와 이름은 같지만 메소드 안의 실행 코드를 달리하여 자식 클래스에서 재정의하여 사용할 수 있음

7. 연관성(Relationship)

 

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

섹션19. 객체지향 분석 및 설계

 

1. 객체지향 분석의 개념

 

  • 객체지향 분석(OOA : Object Oriented Analysis)은 사용자의 요구사항을 분석하여 요구된 문제와 관련된 모든 클래스(객체), 이와 연관된 속성과 연산, 그들간의 관계등을 정의하여 모델링 하는 작업
  • 소프트웨어를 개발하기 위한 비즈니스(업무)를 객체와 속성, 클래스와 멤버, 전체와 부분 등으로 나누어서 분석
  • 분석가에게 중요한 모델링 구성 요소인 클래스, 객체, 속성, 연산들을 표현해서 문제를 모형화 할 수 있게 해줌
  • 클래스로부터 인스턴스화되고, 이 클래스를 식별하는 것이 객체지향 분석의 주요한 목적

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

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

3. 럼바우(Rumbaugh) 분석 기법

 

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

4. 객체지향 설계 원칙

 

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