제 1과목 소프트웨어 설계 > 객체지향 설계
객체지향(Object Oriented)
- 객체지향은 실세계의 개체를 속성과 메서드가 결합한 형태의 객체로 표현하는 기법
- 소프트웨어를 개발하기 위한 비즈니스(업무)를 객체와 속성, 클래스와 멤버, 전체와 부분 등으로 나누어서 분석해 내는 기법 [2021년 1회]
객체지향 구성요소 (클객메 메인속)
클래스(Class) / 객체(Object)/ 메서드(Method) / 메시지(Message) / 인스턴스(Instance) / 속성(Property)
구성요소 | 설명 |
클래스(Class) | 하나 이상의 유사한 객체들을 묶어 공통된 특성을 표현한 데이터 추상화 공통된 속성과 연산(행위)을 갖는 객체의 집합 [2020년 1회, 2회, 3회] [2022년 1회] [2023년 2회] |
객체(Object) | 자신 고유의 데이터를 가지며 클래스에서 정의한 행위를 수행 객체는 상태, 동작, 고유 식별자를 가진 모든 것이라 할 수 있다. 객체의 상태는 속성값에 의해 정의된다. 데이터와 데이터를 처리하는 메소드를 묶어 놓은 하나의 소프트웨어 모듈 [2023년 3회] |
메서드(Method) | 클래스로부터 생성된 객체를 사용하는 방법, 객체에 명령을 내리는 메시지 [2021년 2회] |
메시지(Message) | 객체에게 어떤 행위를 하도록 지시하는 명령 [2022년 3회, 2023년 1회] |
인스턴스(Instance) | 클래스에 속한 각각의 객체 [2021년 2회] |
속성(Property) | 한 클래스 내에 속한 객체들이 가지고 있는 데이터 값들을 단위별로 정의 |
객체지향 기법 (캡상다추정관) [2021년 3회]
기법 | 설명 |
캡슐화 (Encapsulation) [2021년 3회] |
- 서로 관련성이 많은 데이터와 이와 관련된 함수들을 한 묶음으로 처리하는 기법. - 속성과 관련된 연산(Operation)을 클래스 안에 묶어서 하나로 취급하는 것을 의미 [2022년 2회] - 외부와 경계를 만들고 필요한 인터페이스만을 밖으로 드러내는 과정 [2021년 1회] [2022년 3회] - 정보 은닉과 밀접한 관계가 있다. [2020년 2회, 3회] -인터페이스가 단순화된다, 소프트웨어 재사용성이 높아진다, 변경 발생 시 오류의 파급효과가 적다. [2020년 3회, 4회] |
상속성 (Inheritance) |
상위 클래스의 속성과 메소드를 하위 클래스에서 재정의 없이 물려받아 사용하는 기법 [2022년 1회] |
다형성 (Polymorphism) |
- 하나의 메시지에 대해 각 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력 - 다형성은 현재 코드를 변경하지 않고 새로운 클래스를 쉽게 추가할 수 있게 한다. - 여러 가지 형태를 가지고 있다는 의미로, 여러 형태를 받아들일 수 있는 특징을 말한다. - 메소드 오버라이딩(Overriding)은 상위 클래스에서 정의한 일반 메소드의 구현을 하위 클래스에서 무시하고 재정의할 수 있다. - 메소드 오버로딩(Overloading) 메소드명은 같지만 매개 변수의 개수나 타입을 다르게 함으로써 구현, 구분할 수 있다. [2022년 2회] |
추상화 (Abstraction) |
공통 성질을 추출하여 클래스를 설정하는 기법 |
정보은닉 (Information Hiding) |
코드 내부 데이터와 메소드를 숨기고 공개 인터페이스르 통해서만 접근이 가능하도록 하는 코드 보안 기술 |
관계성(연관성) (Relationship) |
두 개 이상의 엔티티 형에서 데이터를 참조하는 관계를 나타내는 기법 연관성 종류 - is member of : 연관화(Association), 2개 이상의 객체가 상호 관련되어 있음 - is instance of : 분류화(Classfication), 동일한 형의 특성을 갖는 객체들을 모아 구성 - is part of : 집단화(Aggregation), 관련 있는 객체들을 묶어 하나의 상위 객체를 구성 [2020년 1회] - is a : 일반화(Generalization): 공통적인 성질들로 추상화한 상위 객체를 구성하는 것 : 특수화/상세화(Specialization): 상위 객체를 구체화하여 하위 객체를 구성하는 것 |
정보 은닉(Information Hiding)
- 필요하지 않은 정보는 접근할 수 없도록 하여 한 모듈 또는 하부 시스템이 다른 모듈의 구현에 영향을 받지 않게 설계되는 것을 의미한다. [2021년 2회]
- 모듈들 사이의 독립성을 유지시키는 데 도움이 된다.
- 설계에서 은닉되어야 할 기본 정보로는 IP 주소와 같은 물리적 코드, 상세 데이터 구조 등이 있다.
- 모듈이 독립성을 갖게 해주므로, 요구사항 등 변화에 따른 수정, 시험, 유지보수가 용이하다. [2021년 3회]
객체지향 설계 원칙(SOLID) [2020년 2회, 4회] [2022년 1회, 3회] [2023년 1회, 2회]
원칙 | 설명 |
단일 책임의 원칙 (SRP) (Single Responsibility Principle) |
하나의 클래스는 하나의 목적을 위해 생성 |
개방 폐쇄 원칙 (OCP) (Open Close Principle) |
소프트웨어의 구성요소는 확장에는 열려 있고 변경에 대해 닫혀 있어야 한다는 원칙 |
리스코프 치환의 원칙 (LSP) (Liskov Subsitution) |
서브 타입(상속받은 하위 클래스)은 어디서나 자신의 기반 타입(상위 클래스)으로 교체할 수 있어야 한다는 원칙 |
인터페이스 분리의 원칙 (ISP) (Interface Segregation Principle) |
클라이언트는 자신이 사용하지 않는 메서드와 의존관계를 맺으면 안된다. 클라이언트가 사용하지 않는 인터페이스 때문에 영향을 받아서는 안된다. |
의존 역전 원칙 (DIP) (Dependency Inversion Principle) |
실제 사용 관계는 바뀌지 않으며, 추상을 매개로 메시지를 주고받음으로써 관계를 최대한 느슨하게 만드는 원칙 |
객체지향 방법론 종류
종류 | 만든이(방법론) | 설명 | 특징 |
OOSE (Object Oriented Software Engineering) |
Jacobson (야콥슨)방법론 |
유스케이스에 의한 접근방법으로 유스케이스를 모든 모델의 근간으로 활용 | 분석, 설계, 구현 단계로 구성 기능적 요구사항 중심의 시스템 |
OMT (Object Modeling Technology) |
Rumbaugh (럼바우)방법론 |
객체지향 분석, 시스템 설계, 오브젝트 설계 및 구현의 4단계로 구성 럼바우의 객체지향 분석 절차 (객동기) 객체 모델링 → 동적 모델링 → 기능 모델링 [2020년 1회, 2회, 3회, 4회] [2021년 2회] [2022년 1회] [2023년 3회] |
복잡한 대형 프로젝트에 유용, 기업 업무의 모델링 편리 및 사용자와 의사소통 편리 |
OOD (Object Oriented Design) |
Booch (부치)방법론 |
설계 부분만 존재 설계 문서화를 강조하여 다이어그램 중심으로 개발하는 방법론 미시적(Micro) 개발 프로세스와 거시적(Macro) 개발 프로세스를 모두 사용하는 분석 방법 |
분석과 설계 분리 불가능 분석하는 데 이용된 객체 모델의 설계시 적용 |
Wirfs-Brock 방법론 |
고객 명세서를 평가해서 설계 작업까지 연속적으로 수행하는 분석방법 | 분석과 설계 간의 구분이 없다 | |
OOA (Object Oriented Analysis) |
Coad와 Yourdon 방법론 |
객체 식별, 구조 식별, 주체 정의, 속성 및 관계 정의, 서비스 정의 등의 과정으로 구성되는 객체 지향 분석방법 [2020년 1회] [2021년 1회] [2023년 3회] |
E-R 다이어그램을 사용하여 객체의 행위를 모델링 |
※ 객체/동적/기능 모델링에 활용되는 다이어그램 상세 바로가기
https://simuing.tistory.com/entry/2021-정보처리기사-필기요약-UML
럼바우(Rumbaugh) 분석 기법
객체 모델링(Object Modeling)
- 정보 모델링이라고 하며, 시스템에서 요구되는 객체를 찾아내어 속성과 연산 식별 및 객체들 간의 관계를 규정하여 객체 다이어그램으로 표시 [2021년 1회]
- 분석 활동의 세 가지 모델 중 가장 중요하며 선행되어야 할 모델링
동적 모델링(Dynamic Modeling)
- 상태 다이어그램(상태도)을 이용하여 시간의 흐름에 따른 객체들 간의 제어 흐름, 상호 작용, 동작 순서 등의 동적인 행위를 표현하는 모델링 [2020년 3회]
기능 모델링(Functional Modeling)
- 자료 흐름도(DFD)를 이용하여 다수의 프로세스들 간의 자료 흐름을 중심으로 처리 과정을 표현한 모델링 [2021년 3회]
디자인 패턴
소프트웨어 설계에서 자주 발생하는 문제에 대한 일반적이고 반복적인 해결 방법 [2022년 1회]
디자인 패턴 사용의 장단점
- 소프트웨어 구조 파악이 용이하다.
- 객체지향 설계 및 구현의 생산성을 높이는데 적합하다.
- 재사용을 위한 개발 시간이 단축된다.
- 절차형 언어보다는 객체지향 언어와 함께 이용될 때 효율이 극대화된다. [2020년 3회]
디자인 패턴 구성요소 (패문솔 사결샘)
패턴 이름 / 문제 및 배경 / 솔루션 / 사례 / 결과 / 샘플 코드 [2020년 2회]
디자인 패턴 유형 (생구행)
목적: 생성 / 구조 / 행위
범위: 클래스 / 객체
GoF(Gangs of Four) 디자인 패턴 종류
생성 패턴 / 구조 패턴 / 행위 패턴으로 분류된다. [2020년 3회] [2023년 2월]
생성 패턴 (생빌 프로 팩앱싱) [2021년 1회, 2회] [2022년 1회]
빌더 / 프로토타입 / 팩토리 메서드 / 앱스트랙 팩토리 / 싱글톤
Builder / Prototype / Factory Method / Abstract Factory / Singleton
→ 생더블 날빌을 프로브 안뽑고 하길래 팩토리 애(앱)드온해서 싱나게 두들겼다.
구조 패턴 (구 브데 퍼플 프록 컴 어) [2022년 2회] [2023년 1회, 3회]
브리지 / 데코레이터 / 퍼지사이드 / 플라이 웨이트 / 프록시 / 컴포지트 / 어댑터
Bridge / Decorator / Facade / Flyweight / Proxy / Composite / Adapter
→ 9(구) 부대(브데) 퍼플(보라색) 프로(록)토스 컴퓨터 병력이 어디있지?
행위 패턴 [2020년 1회, 2회]
Command, Observer, State, Visitor, Interpreter, Template Method, Chain of Responsibility, Iterator, Mediator, Memento,Strategy
디자인 패턴 설명 더보기를 클릭하면 보입니다.
구분 | 패턴 | 설명 |
생성 패턴 | Builder | 생산 단계를 캡슐화하여 구축 공정을 동일하게 이용하도록 하는 패턴 |
Prototype | 복사하여 새 개체를 생성할 수 있도록 하는 패턴 [2021년 3회] | |
Factory Method | 객체를 생성하기 위한 인터페이스를 정의하여 어떤 클래스가 인스턴스화 될 것인지는 서브 클래스가 결정하도록 하는 패턴, Virtual-Constructor 패턴이라고도 함 [2020년 2회, 3회, 2023년 3회] |
|
Abstract Factory | 생성군들을 하나에 모아놓고 팩토리 중에서 선택하게 하는 패턴 | |
Singleton | 유일한 하나의 인스턴스를 보장하도록 하는 패턴 하나의 객체를 생성하면 생성된 객체를 어디서든 참조할 수 있지만, 여러 프로세스가 동시에 참조할 수는 없는 패턴 [2022년 3회, 2023년 2회] |
|
구조 패턴 | Bridge | 추상과 구현을 분리하여 결합도를 낮춘 패턴 |
Decorator | 소스를 변경하지 않고 기능을 확장하도록 하는 패턴 | |
Facade | 하나의 인터페이스를 통해 느슨한 결합을 제공하는 패턴 | |
Flyweight | 대량의 작은 객체들을 공유하는 패턴 | |
Proxy | 대리인이 대신 그 일을 처리하는 패턴 | |
Composite | 개별 객체와 복합 객체를 클라이언트에서 동일하게 사용하도록 하는 패턴 | |
Adapter | 인터페이스로 인해 함께 사용하지 못하는 클래스를 함께 사용하도록 하는 패턴 기존에 구현되어 있는 클래스에 기능 발생 시 기존 클래스를 재사용할 수 있도록 중간에서 맞춰주는 역할을 한다. [2021년 3회] [2023년 1회] |
|
행위 패턴 | Interpreter | 언어 규칙 클래스를 이용하는 패턴 |
Template Method | 알고리즘 골격의 구조를 정의한 패턴 알고리즘은 상위 클래스에서 정의하고 나머지는 하위 클래스에서 구체화하는 패턴 [2023년 2회] |
|
Chain of Responsibility | 객체들끼리 연결 고리를 만들어 내부적으로 전달하는 패턴 | |
Command | 요청 자체를 캡슐화하여 파라미터로 넘기는 패턴 | |
Iterator | 내부 표현은 보여주지 않고 순회하는 패턴 | |
Mediator | 객체 간 상호작용을 캡슐화한 패턴 | |
Memento | 상태 값을 미리 저장해 두었다가 복구하는 패턴 | |
Observer | 상태가 변할 때 의존자들에게 알리고, 자동 업데이트하는 패턴 | |
State | 객체 내부 상태에 따라서 행위를 변경하는 패턴 | |
Strategy | 다양한 알고리즘을 캡슐화하여 알고리즘 대체가 가능하도록 한 패턴 [2021년 3회] | |
Visitor | 오퍼레이션을 별도의 클래스에 새롭게 정의한 패턴 [2020년 1회] |
디자인 패턴의 장단점 [2020년 4회]
장점
- 요구사항 변경에 따른 소스 코드 변경 최소화
- 설계 변경 요청에 대한 유연한 대처 가능
- 범용적인 코딩 스타일 적용 가능
- 개발자 간의 원활한 의사소통 가능
- 재사용을 통한 개발 시간 단축 가능
- 소프트웨어 구조 파악 용이
- 객체지향 설계 및 구현의 생산성을 높임
단점
- 객체지향 설계/구현 위주로 사용
- 초기 투자 비용의 부담
'IT License > 정처기필기-1과목' 카테고리의 다른 글
2024 #정보처리기사 필기요약 #1-5. 요구분석/요구공학 (0) | 2024.07.05 |
---|---|
2024 #정보처리기사 필기요약 #1-4. 인터페이스 설계 (0) | 2024.07.05 |
2024 #정보처리기사 필기요약 #1-3. 애플리케이션 설계 (0) | 2024.07.05 |
2024 #정보처리기사 필기요약 #1-2. 화면 설계 (0) | 2024.07.05 |
2024 #정보처리기사 필기요약 #1-1. 애자일(Agile), 분석모델확인 (4) | 2024.07.05 |
댓글