반응형

6. 설계 원리

1.시스템 아키텍처에 대한 설명으로 옳지 않은 것은?
물리적 구성을 기반으로 정의되는 시스템의 상세 설계도이다.

 

2. 비기능적 요구사항을 고려한 아키텍처 설계로 가장 적합하지 않은 것은?
안정성이 중요한 요구사항일 경우 안전에 관련된 오퍼레이션 모두를 하나의 서브시스템이나 소수의 서브시스템 내부로 국한시키도록 설계한다.
성능이 중요한 요구사항일 경우 아키텍처는 중요 오퍼레이션을 가능한 많은 서브시스템으로 분할시킨다. (너무 많이 분할시키면 안좋음)

 

3. 설계 과정을 올바로 나열한 것은?
목표 설정 스타일 결정 아키텍처 설계 검토 서브시스템, 인터페이스 명세
목표 설정 스타일 결정 서브시스템, 인터페이스 명세 아키텍처 설계 검토 (아키텍처 설계를 검토하는 것은 이미 설계한 아키텍처를 검토하는 것)

 

4. 설계 원리에 대한 설명 중 옳지 않은 것은?
정보 은닉은 제한된 방법으로의 접근만을 허용해 잘못된 값이 저장되지 않도록 하고, 실수가 잘 발견되지 않도록 하려는 원리다.
+ 설계 원리 5가지: 추상화, 캡슐화, 모듈화, 결합, 응집

 

5. 모듈 결합도(coupling)에 대한 설명으로 옳은 것은?
모듈 간의 goto문 사용은 내용결합(content coupling)을 유발할 수 있다.

 

6. 절차적 응집력에 대한 설명으로 잘못된 것은?
모듈 내부의 어떤 기능 요소의 출력 데이터가 다른 기능 요소의 입력 데이터로 제공한다. (순차적 응집)

 

7. 배열, 레코드, 구조체 등을 매개변수로 사용하는 모듈 사이의 결합도는?
스탬프 결합도(Stamp Coupling)

 

8. 소프트웨어 설계시 모듈 내부의 응집도 측정을 위한 응집력에 관한 예이다. 바르게 연결된 것은?
교환적 응집 Employee 라는 클래스의 데이터를 조작, 저장, 갱신하는 모듈

 

9. 다음은 소프트웨어의 구성요소인 모듈의 계층적 구성을 나타내는 프로그램 구조도이다. 모듈 G에서 팬인(fan-in)과 팬아웃(fan-out)?
팬인(fan-in)=3, 팬아웃(fan-out)=2

 

10. 다음 각 모듈에 대한 응집도를 판단한 것으로 적절하지 않은 것은?
FormatDayReport: 출력을 위한 DaySummary 자료를 출력한다.

 

11. 객체지향 설계 기법 중 클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안 된다.”라는 설계 원칙으로 옳은 것은?
인터페이스 분리의 원칙

 

12. 그림과 같이 서비스 구현 클래스의 a(), b() 연산을 사용하는 클라이언트 클래스가 서비스 구현 클래스에 직접 의존하는 관계에서 클라이언트 클래스가 서비스 인터페이스에 의존하고 서비스 구현 클래스는 서비스 인터페이스를 구현하는 것으로 설계를 변경하였다. 다음 중 이와 가장 관련이 깊은 SOLID 설계 원칙은?
의존관계 역전의 원칙(Dependency Inversion Principle)

 

13. 클래스 설계 원칙에 대한 설명으로 옳은 것은?
클래스는 확장(extension)에 대해서는 열려있어야 하며 변경(change)에 대해서 닫혀있어야 한다.

 

14. 다음 설명에 해당하는 소프트웨어 설계 원리는?
범용적 목적의 단일 인터페이스보다는 클라이언트별 인터페이스를 다수 갖도록 설계한다.’
ISP(Interface Segregation Principle): 인터페이스 분리의 원칙

 

15. 직사각형과 정사각형을 처리하기 위한 클래스 설계에서 위반한 원리는 무엇인가?
리스코프 교체의 원리(하위 클래스를 상위 클래스로 대체할 수 있어야한다.)

 

16. 다음 설계에 적용된 OCP 원리를 설명한 것 중 옳지 않은 것은?
LogOnModem의 확장에 대하여 닫혀 있다.

 

17. 다음과 같이 UIApplicationLayer를 연관시키기 위하여 인터페이스를 도입하였다. 여기에 적용된 설계 원리는 무엇인가?
의존 관계 역전의 원리
OCP의 원리 (수정에는 닫혀 있고 확장에는 열려있도록 하기 위해)

 

18. 응집도를 강한 것부터 순서대로 나열할 때, ~에 들어갈 용어를 바르게 연결한 것은?
① ㉠ 절차적 응집 시간적 응집, 논리적 응집

 

19. 다음 설계 메트릭 중 얼마나 복잡한지를 나타내는 측정 방법으로 거리가 먼 것은?
클래스의 메소드 개수 + 그 클래스의 메소드가 호출하는 메소드의 개수 (클래스의 책임 크기를 구하는 측정 방법)

 

20. 설계 메트릭과 설계 원리에 대한 설명으로 옳지 않은 것은?
클래스의 안의 속성을 공유하지 않는 메소드의 쌍의 수가 적을수록 응집도가 올라간다.

 

21. 설계 작업은 기본 구조 설계와 상세 설계로 나눌 수 있다. 각 단계에서 하는 일을 나누어 설명하라.
기본 구조 설계는 구현하고자 하는 시스템의 아키텍처와 같은 전체 구조를 설계하는 것이고 상세 설계는 기본 구조 설계에서 정의한 모듈을 더 상세하게 설계하는 것으로 모듈들의 알고리즘이나 자료 구조를 설계하는 것이다.

 

22. 컴포넌트와 모듈, 서브시스템 세 가지 개념을 설명하고 어떤 차이가 있는지 기술하라.
컴포넌트는 독립적이고 재사용 가능한 소프트웨어의 최소 단위를 뜻하고 모듈은 프로그램 내에서 독립적이고 일반적인 기능을 수행하기 위한 코드의 집합이다. , 문법 구조에서 정의된 컴포넌트를 뜻한다. 마지막으로 서브시스템은 전체 시스템을 여러 개로 분할한 것으로 모듈이나 컴포넌트의 집합으로 이루어져 있다. 따라서 컴포넌트는 재사용성을 강조하고 모듈은 유지보수성을 강조하며 서브시스템은 시스템의 복잡도 감소를 강조한다.

 

23. 아키텍처 설계에는 세 가지 관점이 있다. 무엇인지 나열하고 각각의 관점을 설명하라.
아키텍처 설계에는 모듈 관점, 컴포넌트 관점, 할당 관점이 있다. 모듈 관점은 시스템을 모듈로 나누어 표현하는 관점이고 컴포넌트 관점은 시스템을 재사용 가능한 독립적인 단위로 분리하고 이러한 컴포넌트들이 시스템을 구성하는 관점이다. 할당 관점은 모듈이나 컴포넌트를 어떤 식으로 배치하고 작업을 할당할 것인지 중점을 두는 관점이다.

 

24. ISO 25010에서 정의하고 있는 소프트웨어의 기능 외적인 품질은 무엇이 있는지 나열하고 설명하라.
성능: 일정한 시간 동안 특정 작업을 수행하는 시스템의 응답 속도
상호운용성: 다른 외부 시스템과의 데이터 전송 및 교환을 담당
사용용이성: 사용자가 시스템을 효율적으로 사용하여 만족스러운 정도
신뢰성: 정의된 조건 아래 계속 작동할 수 있는 능력
보안성: 악의적이거나 우발적인 행동의 가능성을 줄이기 위한 특성
유지보수성: 변경에 대하여 얼마나 잘 수용하는지 나타내는 특성
이식성: 다른 환경에서도 쉽게 시스템을 변환할 수 있는 특성

 

25. 추상화, 캡슐화, 모듈화의 원리란 무엇이며 서로 어떤 관계인지 설명하라.
추상화는 시스템 중에서 핵심 요소들을 추출하여 시스템의 구성요소들을 추상적으로 정의하는 과정이다.
캡슐화는 자세한 내부 구현을 숨기고 공개된 인터페이스를 통해서만 상호작용할 수 있도록하는 개념이다.
모듈화는 시스템을 작은 구성 요소로 분할하는 과정이다.
추상화된 개념을 모듈로 구현하고 이를 캡슐화하여 외부에 노출되는 부분을 관리한다. 따라서 모듈화는 추상화와 캡슐화의 결과물이다.

 

26. 다음은 모듈 StoreCartManager 클래스에 담긴 책임을 분석하여 응집도를 높이도록 분할하라.
StoreCartManager 클래스에 장바구니 관리 기능 외에도 로그인과 관련있는 기능이 있다. 이는 단일 책임의 원칙을 위배하여 응집도가 낮아지는데 응집도를 높이기 위해서는 이 두 기능을 분할하여 설계하여야 한다.

 

27. 다음과 같은 특성을 갖는 모듈간의 결합도는 무엇인가?
모듈 P가 모듈 Q 내부의 변수 값을 수정한다.
모듈 P는 모듈 Q의 레이블로 직접 분기한다.
하나의 모듈이 다른 모듈의 변수 값을 수정하거나 직접 분기하는 경우는 내용 결합이다.

 

28. 다음의 설계를 결합도 유형에 따라 분류하고 그 이유도 서술하라.
(1) 클래스 CourseSectionpublic으로 선언된 변수 minClassSizemaxClassSize 두 개가 있다. 대학의 행정은 때때로 변한다. StudentRegistration 클래스에 있는 대부분의 메소드는 이 변수들을 접근한다.
- 공통 결합: 다른 클래스가 전역 변수에 접근하므로 공통 결합이다.
(2) 사용자 인터페이스 클래스가 여러 가지 Java 클래스를 import하고 있다. 예를 들면 그래픽을 그리고, UI 컨트롤을 생성하는 등의 유틸리티가 포함되어 있는 클래스를 import한다.
- 스탬프 결합: 사용자 인터페이스가 복합 데이터 구조인 여러 유틸리티가 포함되어 있는 클래스를 import 하므로 스탬프 결합이다.
(3) 시스템에 Address라고 불리는 클래스가 있다. 주소를 구성하는 네 개의 public 변수가 있다. Person이나 Airport와 같은 다른 클래스들이 주소 객체의 각 항목을 직접 변경한다. 또한 여러 메서드들이 Address를 매개변수로 선언하고 있다.
- 내용 결합: 다른 클래스가 Address 클래스의 객체의 항목을 직접 변경하므로 내용 결합이다.

GmailYahoo 메일로 서비스에 등록된 이메일 계정을 초기설정(이름과 패스워드 할당)하고 메일을 보내고 받을 수 있는 클라이언트 프로그램을 다음과 같이 설계하였다. 이 설계에서 단일책임의 원리를 위배한 곳을 지적하고 설계를 수정하라.
이 설계에서는 MailClient 클래스 내부에 이메일 계정을 초기설정하는 기능과 메일 송수신 기능이 한 클래스 내부에 포함되어 있다. 따라서 초기 설정을 담당하는 클래스와 이메일을 송신을 담당하는 클래스, 이메일 수신을 담당하는 클래스로 분할하여 설계하여야 한다.