-
정보처리기사[실기 핵심 정리] - 객체지향 설계용어 정리 2024. 4. 13. 18:02
객체지향(OOP, Object oriented Programming)
1) 객체지향 개념
- 현실 세계의 유형, 무형의 모든 대상을 객체(Object)로 나누고, 객체의 행동(Method)과 고유한 값(Attribute)을 정의하여 설계하는 방법
- 객체를 만들고 조작하여 객체끼리 관계를 맺음으로써 다수의 객체가 함께 수행될 수 있게 한다.
2) 객체지향 구성요소
구성요소 설명 클래스
(Class)● 유사한 종류의 유형/무형의 존재를 속성과 연산을 정의해서 만든 틀
● 다른 클래스와 독립적으로 디자인한다.
● 데이터를 추상화하는 단위객체
(Object)● 클래스의 인스턴스
● 객체는 자신 고유의 속성을 가지며, 클래스에서 정의한 연산을 수행
● 객체의 연산은 클래스에 정의된 연산에 대한 정의를 공유함으로써 메모리를 경제적으로 사용속성
(Attribute)● 객체들이 가지고 있는 고유한 데이터를 단위별로 정의한 것
● 성질, 분류, 수량, 현재 상태 등에 대해서 표현한 값메서드
(Method)● 어떤 특정한 작업을 수행하기 위한 명령문을 집합
● 객체가 가지고 있는 속성들을 변경할 수 있는 하나의 연산메시지
(Message)● 객체에게 어떤 행위를 하도록 지시
● 객체의 메서드를 호출함으로써 객체 간의 상호작용을 할 수 있도록 한다3) 객체지향 언어의 특징
특징 설명 캡슐화 ● 속성(Attribute)과 속성을 조작하는 메서드(Method)를 하나로 묶은 것
● 캡슐화된 객체의 세부내용은 외부에 은폐(정보은닉)되어, 오류의 파급 효과가 적다.
● 캡슐화된 객체들은 재사용이 용이
● 객체들 간의 메시지를 주고받을 때, 해당 객체의 세부 내용을 알필요가 없으므로 인터페이스가 단순해지고, 결 합도가 낮아진다.정보은닉 ● 캡슐화의 가장 중요한 개념
● 다른 객체들이 객체의 내부 데이터에 직접 접근할 수 없도록 제한하며, 오직 공개된 메서드를 통해서만 내부 상 태에 접근할 수 있게 한다.상속 ● 상위 클래스(부모 클래스)의 모든 속성과 메서드를 하위 클래스가 물려받는 것
● 상속을 이용하면 하위 클래스는 상위 클래스의 속성과 메서드를 자신의 클래스에 다시 정의하지 않아도 된다.
● 하위 클래스는 상위 클래스에서 상속받은 요소 외에 새로운 속성과 메서드를 추가하여 사용할 수 있다.
● 상위 클래스의 요소들을 사용할 수 있기 때문에, 소프트웨어 재사용을 증대시키는 중요한 개념다형성 ● 하나의 메시지에 대해 각 객체가 가지고 있는 여러 가지 방법으로 응답할 수 있는 개념
● 객체에서 동일한 메서드명을 인자값의 유형이 개수만 틀리게 한느 오버로딩이 존재
● 객체에서 상속받은 메서드를 재정의하는 오버라이딩이 존재추상화 ● 실체의 핵심적인 개념만을 추출하여 간결한 형태로 표현하는 것
● 하위 클래스에 존재하는 공통적인 메서드를 상위 클래스 혹은 인터페이스로 정의하고, 하위 클래스가 해당 메서드를 재정의 할 수 있도록 하는 것4) 객체지향 설계 원칙(SOLID)
설계 원칙 설명 단일 책임 원칙
(SRP, Single Responsibility)`● 한 클래스는 하나의 책임만을 가져야 한다. 개방 폐쇄 원칙
(OCP, Open-Closed Principle)● 소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에 대해서는 열려 있어야 하지만, 수정에 대해서는 닫혀 있어야 한다.
● 기존의 코드를 변경하지 않으면서(Closed), 기능을 추가할 수 있도록(Open) 설계리스코프 치환 원칙
(LSP, Liskov Substitution Principle)● 자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있어야 한다.
● 부모 클래스가 들어갈 자리에 자식 클래스를 넣어도 계획대로 작동해야 한다.인터페이스 분리 원칙
(ISP, Interface Segregation Principle)● 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다.
● 자신이 사용하지 않는 인터페이스 때문에 영향을 받아서는 안 된다.의존성 역전 원칙
(DIP, Dependency Inversion Principle)● 의존 관계를 맺을 때 자주 변화하는 것보다 변화가 거의 없는 것에 의존해야 한다.
● 구체적인 클래스보다 인터페이스나 추상 클래스와 의존 관계를 맺어야 한다.디자인 패턴
1) 디자인 패턴(Design pattern) 개념
- 객체지향 프로그래밍 설계를 할 때 자주 발생하는 문제들에 대해 재사용 할 수 있도록 만들어놓은 패턴들의 모음
- 이미 만들어져서 잘 되는 것을 활용하여 재사용함으로써 프로그램 최적화에 도움을 준다.
- 효율적인 코드를 만들기 위한 방법론
2) 디자인 패턴 구조
구조 설명 패턴의 이름과 유형 ● 각 패턴은 고유의 이름을 가지고 있어 개발자들 사이의 의사소통을 돕고, 특정 디자인 패턴을 쉽게 식별할 수 있게 해준다.
● 패턴의 유형(생성, 구조, 행동 등)은 패턴의 목적과 사용방식을 분류하는 데 도움이 된다.문제 및 배경 ● 패턴이 어떤 상황에서 사용되어야 하는지, 어떤 문제를 해결하려고23 하는지에 대한 설명을 포함한다. 솔루션 ● 패턴의 구조와 그것이 어떻게 작동하는지를 설명한다.
● 클래스, 객체, 그리고 그들 사이의 관계와 상호작용을 포함한 패턴의 요소를 정의한다.사례 ● 실제 문제나 기술적 상황에서 패턴이 어떻게 적용될 수 있는지에 대한 예를 제공한다. 결과 ● 패턴을 사용함으로써 얻을 수 있는 장단점, 그리고 패턴이 시스템에 미치는 영향에 대해 설명한다. 샘플 코드 ● 구체적인 코드 예제는 패턴을 실제로 어떻게 구현하는지 보여준다 3) GoF 디자인 패턴
- 에리히 가마, 리차드 헬름, 람프 존슨, 존 블리시디스에 의해 개발 영역에서 디자인 패턴을 구체화하고 체계화 시킴
- 23가지의 디자인 패턴을 정리
- 각각의 디자인 패턴을 생성, 구조, 행위 3가지로 분류
- GoF 디자인 패턴 분류
생성 패턴 ● 객체 생성과 관련된 패턴
● 객체 생성에 있어서 프로그램 구조에 영향을 크게 주지 않는 유연성 제공구조 패턴 ● 클래스나 객체를 조합해서 더 큰 구조를 만드는 패턴 행위 패턴 ● 객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴 4) 디자인 패턴 종류
- 생성 패턴
- 객체 생성에 관련된 패턴
- 객체의 인스턴스 생성을 추상화하는 방법
- 객체의 생성 과정과 클래스의 인스턴스화를 캡슐화하여 특정 상황에서 어떤 객체를 생성할지 결정 할 수 있게 도와준다.
종류 설명 추상팩토리
(Abstract Factory)● 구체적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴 빌더
(Builder)● 복합 객체의 생성과 표현을 분리하여 동일한 생성 절차에서도 다른 표현 결과를 만들어낼 수 있음 팩토리 메서드
(Factory Method)● 객체 생성을 서브클래스로 위임하여 캡슐화 함
● Virtual-Constructor 패턴이라고도 함프로토타입
(Prototype)● 원본 객체를 복사함으로써 객체를 생성함
● java의 clone()을 이용하여 생성하고자 하는 객체에 clone에 대한 Override를 해준다.싱글톤
(Singleton)● 어떤 클래스의 인스턴스는 하나임을 보장하고 어디서드 참조할 수 있다. 2) 구조 패턴
- 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴
- 상속을 통해 클래스나 인터페이스를 합성하는 방법을 정의
종류 설명 어댑터
(adapter)● 클래스의 인터페이스를 다른 인터페이스로 변환하여 다른 클래스가 이용 할 수 있도록 함 브리지
(bridge)● 구현부에서 추상층을 분리하여 각자 독립적으로 확장 할 수 있게 함. 컴포지트
(Composite)● 객체들의 관계를 트리구조로 구성하여 복합 객체와 단일 객체를 구분 없이 다룸
● 하나 이상의 유사한 객체를 묶어서 설계된 객체로 모두 유사한 기능을 나타낸다.데코레이터
(Decorator))● 주어진 상황 및 용도에 따라 어떤 객체에 다른 객체를 덧붙이는 방식 퍼사드
(Facade)● 서브시스템에 있는 인터페이스 집합에 대해 하나의 통합된 인터페이스를 제곰(Wrapper)
● 서브시스템의 가장 앞쪽에 위치하면서 서브시스템에 있는 개체들을 사용 할 수 있도록 인터페이스 역할플라이웨이트
(Flyweight)● 크기가 작은 여러 개의 객체를 매번 생성하지 않고 가능한 한 공유할 수 있도록 하여 메모리를 절약함 프록시
(Proxy)● 접근이 어려운 객체로의 접근을 제어하기 위해 객체의 대리(Surrogate)나 대체글(Placeholder)을 제공 3) 행위 패턴
- 객체나 클래스들이 상호작용하는 방법 및 책임을 정의하는 패턴
- 객체 사이의 효율적인 커뮤니케이션과 책임 활당을 돕는다.
종류 설명 책임 연쇄
(Chain of Responsibility)● 한 객체가 처리할 수 없는 요청을 다음 객체로 전달하는 방식
● 객체들은 연쇄적으로 연결되어 있으며, 각 객체는 요청을 처리하거나 다음 객체로 전달될수 있다.커멘드
(Command)● 실행될 기능을 캡슐화함으로써 주어진 조건을 만족하는 기능을 실행할 수 있는 유연성을 제공한다.
● 요청자체를 객체로 감싸서 전달함으로써 로그, 큐 관리, undo-redo 등의 기능을 구현할 수 있다.인터프리터
(Interpreter)● 주어진 언어에 대해 그 언어의 문법에 대한 표현을 정의하고 해당 언어를 해석하는 해석자를 위한 패턴
● 복잡한 문법을 가진 언어의 해석에 사용된다.반복자
(Iterator)● 컬렉션 내부 구조를 노출시키지 않고도 그 원소들에 접근할 수 있는 방법을 제공
● 이를 통해 단일 원칙의 적용을 유지하면서도 컬렉션에 대한 반복작업을 수행할 수 있다.중재자
(Mediator)● 객체 간의 복잡한 상호작용을 캡술화하고, 객체들이 서로 직접 참조하지 않도록 중재자 객체를 통해 통신하도록 만든다.
● 이를 통해 시스템을 더 잘 조직화하고 결합도를 낮출 수 있다.메멘토
(Memento)● 객체의 상태 정보를 저장하고 필요에 따라 이전 상태로 복원할 수 있는 기능을 제공 옵서버
(Observer)● 객체의 상태 변화를 관찰하는 관찰자들의 목록을 객체에 등록하여, 상태 변화가 있을 때마다 메서드를 통해 객체가 직접 목록의 각 관잘자에게 통지하도록 한다.
● 이를 통해 상태의 일관성을 유지할 수 있다.상태
(State)● 객체의 내부 상태에 따라 동일한 작업이 상태에 따라 다르게 작동하도록 상태를 객체로 표현한다.
● 이를 통해 객체의 상태 전이 방식을 더 명확하게 표현할 수 있다.전략
(Strategy)● 알고리즘을 사용하는 클라이언트와 상관없이 독립적으로 알고리즘을 다양하게 만든다.
● 이를 통해 알고리즘을 쉽게 바꿔 사용할 수 있다.템플릿 메서드
(Template Method)● 상위클래스는 알고리즘의 골격만을 작성하고 구체적인 처리는 서브클래스로 위임함 방문자
(Visitor)● 객체 구조를 이루는 원소에 대한 연산을 정의하는 데 사용되는 패턴
● 이를 통해 새로운 연산을 추가하더라도 그 객체 구조를 변경하지 않아도 된다.
● 객체지향 원칙(SOLID) 중 하나인 개방-폐쇄 원칙(OCP, Open-Close Principle)을 적용하는 방법'용어 정리' 카테고리의 다른 글
정보처리기사[실기 핵심 정리] - 애플리케이션 통합테스트 (0) 2024.04.14 정보처리기사[실기 핵심 정리] - 애플리케이션 테스트케이스 설계 (0) 2024.04.13 정보처리기사[실기 핵심 정리] - 인터페이스 구현 검증 (0) 2024.04.11 정보처리기사[실기 핵심 정리] - 인터페이스 기능구현 및 검증 (0) 2024.04.11 정보처리기사[실기 핵심 정리] - 인터페이스 개요 및 설계서확인 (0) 2024.04.09