[정처기 필기] 오답노트) 소프트웨어 설계 유형 / 객체 지향 설계 원칙 / 객체 지향 기법 / 디자인 패턴
🤷♀️ 정처기 필기 오답노트
✅ 소프트웨어 설계 유형
Q. 다음 ( ) 안에 들어갈 내용으로 옳은 것은?
컴포넌트 설계 시 ‘( )에 의한 설계’를 따를 경우, 해당 명세에서는
(1) 컴포넌트의 오퍼레이션 사용 전에 참이 되어야 할 선행 조건
(2) 사용 후 만족하여야 할 결과조건
(3) 오퍼레이션이 실행되는 동안 항상 만족하여야 할 불변 조건 등이 포함되어야 한다.
① 협약
② 프로토콜
③ 패턴
④ 관계
정답 : ①
🔎 소프트웨어 설계 유형
-
자료 구조 설계(Data Structure Design)
-
아키텍처 설계(Architecture Design)
-
인터페이스 설계(Interface Design)
-
프로시저 설계(Procedure Design)
-
협약에 의한 설계(Design by Contract)
-
클래스에 대한 여러 가정을 공유하도록 명세한 설계
-
소프트웨어 컴포넌트에 대한 정확한 인터페이스 명세를 위하여 선행조건, 결과조건, 불변조건을 나타내는 설계 방법
-
선행조건(Precondition) : 컴포넌트의 오퍼레이션 사용 전에 참이 되어야 할 조건
-
결과조건(Postcondition) : 사용 후 만족되어야 할 조건
-
불변조건(Invariant) : 오퍼레이션이 실행되는 동안 항상 만족되어야 할 조건
-
-
✅ 객체 지향 설계 원칙
Q. 객체 지향 설계 원칙 중, 서브 타입(상속받은 하위 클래스)은 어디에서나 자신의 기반 타입(상위 클래스)으로 교체할 수 있어야 함을 의미하는 원칙은?
① ISP(Interface Segregation Principle)
② DIP(Dependency Inversion Principle)
③ LSP(Liskov Substitution Principle)
④ SRP(Single Responsibility Principle)
정답 : ③
🔎 객체 지향 설계 원칙(SOLID)
-
단일 책임의 원칙(Single Responsibility Principle)
-
하나의 클래스는 하나의 목적을 위해서 생성되며, 클래스가 제공하는 모든 서비스는 하나의 책임을 수행하는 데 집중되어 있어야 한다는 원칙
-
객체 지향 프로그래밍의 5원칙 중 나머지 4원칙의 기초 원칙
-
-
개뱡 폐쇄 원칙(Open Close Principle)
- 소프트웨어의 구성요소(컴포넌트, 클래스, 모듈, 함수)는 확장에는 열려있고, 변경에는 닫혀있어야 한다는 원칙
-
리스코프 치환의 원칙(Riskov Substitution Principle)
- 서브 타입(상속받은 하위 클래스)은 어디서나 자신의 기반 타입(상위 클래스)으로 교체할 수 있어야 한다는 원칙
-
인터페이스 분리의 원칙(Interface Segregation Principle)
-
한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다는 원칙
-
클라이언트가 사용하지 않는 인터페이스 때문에 영향을 받아서는 안된다는 원칙
-
-
의존성 역전의 원칙(Dependency Inversion Principle)
- 실제 사용 관계는 바뀌지 않으며, 추상을 매개로 메시지를 주고받음으로써 관계를 최대한 느슨하게 만드는 원칙
✅ 객체 지향 기법 - 관계성
Q. 객체 지향 기법에서 클래스들 사이의 ‘부분-전체(part-whole)’ 관계 또는 ‘부분(is-a-part-of)’의 관계로 설명되는 연관성을 나타내는 용어는?
① 일반화
② 추상화
③ 캡슐화
④ 집단화
정답 : ④
🔎 객체 지향 기법 - 관계성
-
- 객체 지향 기법
-
캡슐화(Encapsulation) / 상속성(Inheritance) / 다형성(Polymorphism) / 추상화(Abstraction) / 정보 은닉(Information Hiding) / 관계성(Relationship)
-
관계성(Relationship)
-
두 개 이상의 엔터티 형에서 데이터를 참조하는 관계를 나타내는 기법
-
종류로는 연관화, 분류화, 집단화, 일반화, 특수화가 있음
-
연관화
-
is-member-of 관계
-
클래스와 객체의 참조 및 이용관계
-
같은 계층에 속하는 클래스들 사이의 상호 의존성을 보여주는 비계층적 관계성을 나타냄
-
-
집단화
-
is-part-of 관계, part-whole 관계
-
서로 관련 있는 여러 개의 객체를 묶어 한 개의 상위 객체를 만드는 특징
-
일반화와 달리 상위 클래스의 성질들이 하위 클래스로 상속 되지는 않음
-
-
분류화
-
is-instance-of 관계
-
공통된 속성에 의해 정의된 객체 구성원들의 인스턴스
-
-
일반화
-
is-a 관계
-
클래스들 간의 개념적인 포함 관계
-
상위 클래스의 특성을 하위 클래스가 상속받음
-
-
특수화
-
is-a 관계
-
상위 클래스의 특성들을 상속받으면서 하위 클래스에서 나름대로 수정을 가하고 자기 자신의 고유한 특성을 갖는 관계
-
-
-
✅ 디자인 패턴
Q. GoF(Gang of Four) 디자인 패턴에 대한 설명으로 틀린 것은?
① Factory method pattern은 상위 클래스에서 객체를 생성하는 인터페이스를 정의하고, 하위 클래스에서 인스턴스를 생성하도록 하는 방식이다.
② Prototype pattern은 prototype을 먼저 생성하고 인서턴스를 복제하여 사용하는 구조이다.
③ Bridge pattern은 기존에 구현되어 있는 클래스에 기능 발생 시 기존 클래스를 재사용할 수 있도록 중간에서 맞춰주는 역할을 한다.
④ Mediator pattern은 객체 간의 통제와 지시의 역할을 하는 중재자를 두어 객체 지향의 목표를 달성하게 해준다.
정답 : ③
🔎 디자인 패턴 - Bridge pattern
-
구조 패턴의 한 종류
-
기능의 클래스 계층과 구현의 클래스 계층을 연결하고, 구현부에서 추상 계층을 분리하여 추상화된 부분과 실제 구현 부분을 독립적으로 확장할 수 있는 디자인 패턴
-
구현뿐 아니라, 추상화된 부분까지 변경해야 하는 경우 활용
🔎 디자인 패턴 - Adaptor pattern
-
구조 패턴의 한 종류
-
기존에 생성된 클래스를 재사용할 수 있도록 중간에서 맞춰주는 역할을 하는 인터페이스를 만드는 패턴
-
상속을 이용하는 클래스 패턴과 위임을 이용하는 인스턴스 패턴의 두 가지 형태로 사용되는 디자인 패턴