본문 바로가기
정보처리기사/필기

[정보처리기사] Part01-03-2. 객체 지향 설계

by 채연2 2022. 2. 25.

* 객체 지향 (Object Orient)

☞ 실세계 개체를 속성과 메소드가 결합된 형태의 객체로 표현하는 개념

☞ 구현 대상을 하나의 객체로 보고 객체와 객체들 간 관계로 모델링 하는 방법

☞ 개발 측면에서 SW 위기 해결 위한 대안과 생산성 저하에 따른 재사용성, 확장성 필요에 의해 등장

☞ 사용 측면에서 컴퓨팅 환경에 대한 보다 많은 기능, 단순성, 사용 편의성 요구가 증대

 

    ◎ 객체 지향 프로그래밍 (Object Oriented Programming)

    - 컴퓨터 프로그래밍 패러다임 중 하나

    - 컴퓨터 프로그램을 명령어 목록으로 보는 시각에서 벗어나 여러 개 독립된 단위(객체)들의 모임으로 파악하고자 함

    - 각각의 객체는 메시지 주고 받고, 데이터 처리 가능

    - 프로그램을 유연하고 변경 용이하게 만들기 때문에 대규모 SW 개발에 많이 사용됨

    - 프로그래밍 더 배우기 쉽게 하고 SW 개발과 보수 간편하게 하며 보다 직관적인 분석 가능케 함

 

        ▶ 객체지향 구성

           ▷ 클래스 (Class)

                -  같은 종류 객체들 집합에 공통 속성과 행위 정의

                - 객체지향 프로그램 기본적인 사용자 정의 데이터 형

           ▷ 객체 (Object)

                - 클래스 인스턴스 (실제로 메모리 상에 할당된 것)

                - 자신 고유 데이터를 가지며 클래스에서 정의한 행위 수행

           ▷ 속성 (Attribute)

                - 객체 데이터

           ▷ 메소드 (Method)

                - 객체 행위 (함수, 메소드)

                - 클래스로부터 생성된 객체 사용하는 방법

           ▷ 메시지 (Message)

                - 객체 간 통신

 

        ▶ 객체지향 기법

           ▷ 캡슐화 (Encapsulation)

                - 속성과 메소드를 하나로 묶어서 객체로 구성

                - Readability 향상 : 유지보수 용이

                - 재사용성 높은 SW 개발 가능

                - 정보은닉으로 내부 자료 일관성 유지

                - 객체 각 인터페이스 이용, 종속성 최소화

           ▷ 추상화 (Abstraction)

                - 공통 성질 추출하여 수퍼클래스로 구성

                - 객체 중심 안정된 모델 구축

                - 현실 세계 자연스럽게 표현

                - 분석 초점이 명확해짐

           ▷ 다형성 (Polymorphism)

                - 동일 이름의 여러 오퍼레이션(메소드)을 다른 사양으로 정의 가능

                - 오버로딩 : 매개변수의 수 또는 타입 달리하여 구분

                - 오버라이딩 : 부모 클래스 메소드 재정의

           ▷ 정보 은닉 (Information Hiding)

                - 캡슐화된 항목을 다른 객체로부터 숨김

                - 메시지 전달에 의해 다른 클래스 내 메소드가 호출됨

           ▷ 상속성 (Inheritance)

                - 부모 클래스 속성과 메소드 상속받아 사용함

                - 부모와 자식 클래스 간 관계가 수퍼 클래스와 서브 클래스로 유지됨

                - 부모 클래스는 추상적이며, 자식 클래스는 구체적 성질 가짐

 

        ▶ 다형성과 상속성 비교

구분 다형성 (Polymorphism) 상속성(Inheritance)
개념 동일 인터페이스에 대해 서로 다른 처리 방식으로 구현 가능한 특성 부모(Super) 클래스 Method, Attribute 물려 받는 특성
특징 동적 Binding (Run Time) 정적 Binding (Compile Time)
구조 수직/수평적 구조 수직적 구조
장점 명령 단순화, 메모리 절약, 높은 응집도 실현 가능 재사용성 향상,  중복 제거, 유지보수성 향상됨
단점 코드 중복 개발 가능성 과도한 상속은 결합도 상승 요인

 

        ▶ 다형성의 오버로딩과 오버라이딩

구분 오버라이딩 (Overriding) 오버로딩 (Overloading)
개념 상속관계에서 상위 클래스 메소드를 하위 클래스에서 재정의 하나의 클래스 내에서 같은 이름으로 여러 개 메소드 정의
메소드 명 상속관계 내 동일 특정 클래스 내 동일
매개변수 개수, 타입 반드시 통일 개수 또는 타입이 다름
리턴 타입 기본적으로 동일 상관 없음
접근 제한 범위 같거나 넓어야 함 상관 없음

 

 

        ▶ 객체지향 설계 원칙

           ▷ 단일 책임 원칙 (SRP, Single Responsibility Principle)

                - 객체는 단 하나의 책임만을 가져야 함

                - 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 함 (책임=변경 사유)

                - 같은 이유로 변화하는 것끼리 묶고, 다른 이유로 변화하는 것끼리 분리

           ▷ 개방 폐쇄 원칙 (OCP, Open-Closed Principle)

                - 기존 코드 변경하지 않으면서 기능 추가할 수 있도록 설계 되어야 함

                - SW 개체 (Classes, Modules, Functions 등)는 확장에는 열려있고 수정 시에는 닫혀있어야 함

                - 클래스 변경하지 않고도 그 클래스 둘러싼 환경 변경할 수 있는 설계가 되어야 함

           ▷ 리스코프 치환의 원칙 (LSP, Liskov Substitution Principle)

                - 부모 클래스와 자식 클래스 사이 행위가 일관성이 있어야 함

                - 일반화 관계 (is kind of 관계)에 대한 것으로 자식 클래스는 최소한 자신 부모 클래스에서 가능한 행위는 수행 가능해야 함

                - 부모 클래스 인스턴스를 자식 클래스 인스턴스로 대체해도 프로그램 의미는 변화되지 않음

                - 서브 타입은 언제나 자신 기반 타입으로 교체 가능해야 함

           ▷ 인터페이스 분리 원칙 (ISP, Interface Segregation Principle)

                - 인터페이스를 클라이언트에 특화되도록 분리하라는 설계 원칙

                - 하나의 일반적인 인터페이스보다 구체적인 여러 개 인터페이스가 나음

           ▷ 의존성 역전의 원칙 (DIP, Dependency Inversion Principle)

                - 의존 관계 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것보단 변화하기 어렵거나 거의 변화가 없는 것에 의존하라는 것

                - 추상화된 것에 의존하게 만들고 구체 클래스에 의존하도록 만들지 않도록 함

단일 책임 원칙 (SRP)
개방 폐쇄 원칙 (OCP)
리스코프 치환 원칙 (LSP)
인터페이스 분리 원칙 (ISP)
의존성 역전 원칙 (DIP)

 


* 디자인 패턴 (Design Pattern)

☞ 반복적으로 나타나는 문제들 해결해 온 전문가들 경험을 모아서 정리한 일관된 솔루션

☞ 설계 재사용을 통해 생산성 향상을 위한 기법

☞ SW 프로그래머들이 유용하다고 생각되는 객체들 간 일반적인 상호작용 방법들을 모은 목록

☞ GoF (Gang of Four) 분류가 많이 활용되고 있음

 

    ▶ 디자인 패턴 구성

        ▷ 패턴 이름 및 유형

            -  설계 의도 표현하며 한 두 단어로 설계 문제와 해법 서술

        ▷ 문제 및 배경

            -  해결해야 할 문제와 그 배경 설명하며 언제 패턴을 사용하는지 서술

        ▷ 해결

            -  설계 구성 요소와 그 요소들 간 관계, 책임, 협력 관계 서술

        ▷ 사례

            -  간단한 적용 사례 서술

        ▷ 결과

            -  디자인 패턴 적용해서 얻는 결과와 장/단점 서술

        ▷ 샘플 코드

            -  패턴이 적용된 원시 코드 기술

 

    ◎ GoF (Gang of Four) 디자인 패턴의 분류

목적 생성 패턴 구조 패턴 행위 패턴
암기 TIP FSABP ABCD2FP T2I2C2S2MVO
의미 객체 생성 방식 결정하는 패턴 객체 조직화하는데 유용한 패턴 객체 행위를 조직, 관리, 연합하는데 사용하는 패턴
범위 클래스 Factory method Adapter Template method
Interpreter
객체 Singleton
Abstract factory
Builder
Prototype
Bridge
Composite
Decorator
Facade
Fly weight
Proxy
Iterator
Command
Chain of Responsibility
State
Strategy
Mediator
Memento
Visitor
Observer

 

        1. 생성 패턴 (Creation Pattern)

        - 객체 인스턴스 생성 위한 클래스 정의와 객체 생성 방식 구조화, 캡슐화 방법 등 제공

        

        ▶ 생성 패턴 종류

종류 개념
Factory method - 객체 생성하기 위한 인터페이스 따로 정의하며 어떤 클래스에서 객체 생성하는 일을 서브 클래스가 담당토록 하는 패턴
-Virtual-Constructor 패턴
Singleton - 지정한 클래스 인스턴스가 반드시 한 개만 존재하도록 하는 패턴
Abstract factory - 구체적인 클래스 지정 않고 관련성 갖는 객체들 집합을 생성하거나 서로 독립적인 객체들 집합을 생성 할 수 있는 인터페이스 제공하는 패턴
Builder - 복잡한 객체 생성 방법과 표현 방법 정의하는 클래스를 별도 분리해 서로 다른 표현이라도 이를 생성할 수 있는 동일한 절차 제공하는 패턴
Prototype - 원본이 되는 인스턴스 사용해 생성할 객체 종류 명시하고, 견본 복사해 새로운 객체 생성하는 패턴

 

        2. 구조 패턴 (Structural Pattern)

        - 다른 기능 가진 객체 간 협력 필요 시 객체들 조직화 하는 방법, 기능 구현 위해 객체 구성하는 방식 제공

        

        ▶ 구조 패턴 종류

종류 개념
Adaptor - 클래스 재사용성 높이기 위해 클래스 간 기능 변환 제공하여 호환성 확보하는 패턴
Bridge - 인터페이스(API)가 서로 다른 클래스 연결하는 패턴으로 기능 계층과 구현 계층 연결시키는 패턴
Composite - 복잡한 객체 구조 표현하여 객체 집합 속에 또 다른 객체 집합 갖는 패턴
Decorator - 새로운 기능 추가될 때마다 새로운 객체 만들고, 이전 객체 기능은 새로운 객체 내부에서도 그대로 유지, 보장해주는 패턴
Facade - 서브 시스템 복잡할 경우 간단한 인터페이스 통해 서브 시스템 주요 기능 사용 가능한 패턴
Fly weight - 인스턴스를 가능한 한 공유시켜 불필요한 생성 하지 않도록 하는 패턴
Proxy 객체 접근 제어하려는 목적으로 인터페이스 역할 하는 객체 사용하여 제어하는 패턴

 

        3. 행위 패턴 (Behavioral Pattern)

        - 객체 간 기능 분배하는 일과 같은 로직 수행에 주로 이용하여 객체 간 연동에 대한 유형 제공

        

        ▶ 생성 패턴 종류

종류 개념
Template method - 상위 클래스에서 처리 흐름 정하고 하위 클래스에서 구체적인 내용 재정의 하는 패턴
Interpreter - 간단한 언어 문법 정의하는 방법과 그 언어로 문장 구성하는 방법, 문장 해석하는 방법 제시하는 패턴
Iterator - 집합 객체 요소들 내부 표현 방식 공개하지 않고, 순차적으로 접근하는 구조 제공하는 패턴
Command - 요청 자체를 객체화(캡슐화(하고 매개변수 추가하여 여러 가지 요구사항 추가할 수 있는 패턴 (로그 기록, 작업 취소 지원)
Chain of Responsibility - 요청 처리 가능한 기회를 하나 이상 객체에 부여함으로써 객체 간 결합도 없애려는 패턴
State - 상태를 일반적인 데이터 변수로 두지 않고 객체로 만들어 그 상태에 따른 행동들 분리한 패턴
Strategy - 상황에 따라 알고리즘 변경 필요 시, 각 알고리즘 클래스들을 공통된 인터페이스에 맞게 구현하여 다형성 활용하는 패턴
Mediator - 중재자 통해 한 집합에 속해 있는 객체들 상호 작용을 캡슐화 하는 패턴
Memento - 어떤 시점에서의 객체 상태 저장해 두었다가 필요 시 객체를 그 시점 상태로 되돌리는 패턴
Visitor - 데이터 구조 안을 돌아다니는 주체인 "방문자" 나타내는 클래스 준비해서 그 클래스에게 처리 맡김으로서 기능 추가 시 유연성 제공하는 패턴
Observer - 한 객체 상태가 바뀌면 그 객체에 의존하는 다른 객체들에게 통지되고 필요 시 자동으로 내용 갱신되는 패턴

 

 

    ◎ 객체 지향 분석 (Object Oriented Analysis)

    - 사용자 요구사항 분석하여 요구되는 사항과 관련된 모든 객체, 클래스와 연관된 속성, 연산, 관계 등을 정의하여 모델링하는 작업

    - 분석가에게 중요한 클래스, 객체, 속성, 연산 등을 표현해서 문제를 모형화 할 수 있게 해줌

 

        1. 객체 지향 분석 방법론

            ㄱ. Rumbaugh(럼바우) 방법론 (OMT; Object Modeling Technique)

                - 가장 일반적으로 사용되는 방법

                - 분석 활동을 객체 모델, 동적 모델, 기능 모델로 나누어 수행하는 방법

                - 절차 : 객체 모델링 → 동적 모델링 → 기능 모델링

 

                ▶ 럼바우 방법론 분석 절차

                    ① 객체 모델링 (Object Modeling)

                        - 정보 모델링

                        - 시스템에서 요구되는 객체 찾아내 속성과 연산 식별

                        - 객체들 간 관계 규정하여 그래픽 다이어그램으로 표시

                        - 실세계 문제 영역으로부터 객체와 클래스 추출해 그들 간 관계를 연관화, 집단화, 일반화 중심으로 규명하며, 클래스 속성과 연산 함께 표현함으로써 시스템 정적 구조 생성

 

                    ② 동적 모델링 (Dynamic Modeling)

                        - 상태 다이어그램 사용해 시스템 행위 기술

 

                    ③ 기능 모델링 (Function Modeling)

                        - 자료 흐름도(DFD) 이용, 다수 프로세스들 간 자료 흐름 중심으로 처리 과정 표현

                        - 어떤 데이터 입력하면 어떤 결과 구할 것인지 표현

 

            ㄴ. Booch (부치) 방법

                - 요구사항 분석 하는 과정에서 절차 지향 프로그램으로 개발하려면 '동사' 식별하고, 객체 지향 프로그램으로 개발하려면 '명사' 선택하라고 했음

                - 미시적(Micro) 개발 프로세스와 거시적 (Macro) 개발 프로세스 모두 포함해 사용

                - 클래스와 객체들 분석 및 식별하고 클래스 속성과 연산 정의

                - 클래스와 객체들 의미 식별, 클래스와 객체들 관계 식별, 클래스와 객체 구현

                - 각 작업에 대한 다이어그램, 클래스 계층 정의, 클래스들 클러스터링 작업 수행

                - Use Case 강조하여 사용하는 분석 방법

 

            ㄷ. Coad(코드)와 Yourdon(요든) 방법

                - 객체 지향 분석 방법론 중 E-R 다이어그램 사용하여 객체 행위 모델링

                - 객체 식별, 구조 식별, 속성과 인스턴스 연결 정의 등의 과정으로 구성되는 것

                - E-R 다이어그램은 Coad & Yourdon 분석법의 기본 스타일

 

            ㄹ. Wirfs-Brock (워프스-브록) 방법

                - 분석과 설계 간 구분 없고 고객 명세서 평가해 설계 작업까지 연속적으로 수행하는 기법

320x100

댓글