본문 바로가기
- 배움이 있는 삶/- 소프트웨어 공학

2021년 기출문제-소공

by story of interesting 2024. 12. 6.
반응형

2021년 기출문제 정리 합니다


Agenda

1. 리펙토링 기법 : 35번, 41번, 50번
2. UML Class diagram - code 구현: 39번, 42번
3. SPL (SW product line) - Feature diagram : 43번
4. sequence diagram 을 통한 아키텍처스타일 : 49번
5. 클래스 diagram 을 통한. 리펙토링기법 : 50번
6. Design pattern : 27번, 31번


1. 리펙토링 기법 : 35번, 41번, 50번

* 잘 정리된 site

- https://swingswing.tistory.com/125

 

소프트웨어 구현_리펙토링(Refactoring), method (extract , move, rename, inline), bad smell, 코드 스멜

▣ 소프트웨어 구현_리펙토링(Refactoring), method (extract , move, rename, inline), bad smell ■ Refactoring 대상 , Code Smell 종류 구분 설명 해결방법 중복코드 (Duplicated Code) 같은 코드가 두 군데 이상 존재할 때

swingswing.tistory.com

 

- 35번 : inline method

 

- 41번 : 산탄총 수술 (shotgun surgery)

 

- 50 : Hide delegate

 

리펙토링(Refactoring) 주요 기법
기법 설명
Extract method 그룹으로 함께 묶을 수 있는 코드 조각이 있으면 코드의 목적이 잘 드러나도록 메소드의 이름을 지어 별도의 메소드로 추출한다
Move method 메소드가 다른 클래스의 기능을 더 많이 수행한다면, 가장많이 사용하는 class에 비슷한 새로운 메소드를 생성
Rename method 메소드의 이름이 그 목적을 meet시키지 못한다면, 이름을 변경한다
Inline method 메소드 몸체가 이름만큼 명확할때는 메소드 몸체에 inline으로 넣고, 메소드는 삭제한다
Extract class 두개의 클래스가 할일을 -> 1개 class가 한다면, 새로운 class를 만들어 이동시킨다
Replace temp with Query 수식의 결과값을 저장하기 위해서 임시변수를 사용하고 있다면, 수식을 추출해서 메소드를 만들과, 임시변수를 참조하는 곳을 찾아 모두 메소드 호출로 교체
Substitute Algorithm 알고리즘을 보다 명확한 것으로 교체하고 싶은 경우 --> 메소드의 몸체를 새로운 알고리즘으로 교체

 

https://www.youtube.com/watch?v=B9B3TqzOZp4

 


2. UML Class diagram - code 구현 : 39번, 42번

- 39번

 

- 42번 : UML과 코딩

 


3. SPL (SW product line) - Feature diagram : 43번

- 코드를 diagram으로 전환하기

 


4 sequence diagram 을 통한 아키텍처스타일 : 49번 - 이 문제의 풀이는 아래 블러그를 참고하여 공부 함

Modifiability.  Avaikability.  Performance측면에서 바람직

49. 다음 시퀀스 다이어그램은 아키텍처 패턴의 개략적인 동작을 보여 준다.

이 패턴에 대한 설명으로서 가장 적절한 것은?

① 분산 애플리케이션을 개발할 때의 복잡도를 증가시킨다.

② 동일한 환경에서의 서비스 실행을 지원한다.

③ 여러 서비스를 하나의 동일한 언어로 개발하는 것이 일반적이다.

④ modifiability, availability, performance 측면에서 바람직하다.

[정답] 4

[풀이]

쉽지 않은 문제입니다. 답이 명확하지 않기 때문입니다.

객체지향 개발의 특징은 위임입니다. 각자 자기 역할만 수행하고 나머지는 뒤의 다른 객체에 넘기는 식입니다.

대표적으로 MVC 패턴이 있습니다.

먼저 컨트롤 객체가 받아서 처리할 것은 처리하고 화면에 되돌려 줄게 있으면 화면에 돌려주고, 데이터베이스에 변화가 필요하면 반영한 후 화면으로 돌려주는 구조입니다.

하나의 객체가 할 수 있는 일을 여러 객체가 나누어서 처리하다보니 복잡해 보이기도 하지만 수정 용이성, 가용성, 성능 등에는 유리할 수 있습니다. -> 이런 형태의 극단적인 형태가 마이크로서비스입니다.

하나가 할 일은 나누어서 하는 것이 성능에 유리한 것인지는 좀 따져봐야할 점이 있기는 합니다,


 

5. 클래스 diagram 을 통한. 리펙토링기법 : 50번

Hide delegate (문제의 정답)

Remove middle man

Rename method

Encapsulate downcast

 


6. Design pattern : 27번, 31번

1) 27번

- 장기게임 프로그램에서 사용자에 맞추어 레벨을 선택하여, 게임을 할 수 있다
- 메모리 환경에 따라 메모리를 사용하는 알고리즘을 사용 한다
- 스프레드시트의 디버그 판에서 복잡한 계산을 실행할때, 고속알고리즘의 검산을 저속 알고리즘으로 실행한다

정답) strategy 패턴

2) 31번 - Decorator 패턴

- 객체에 동적으로 새로운 서비스를 추가할 수 있게 함
- 객체가 상황에 따라 다양한 기능이 추가되거나 삭제되어야 할때 사용

 


7. JAVA ERROR문제 - 

- Unstatic 함수와 변수는 staitc 함수 내에서 사용 할 수 없다

1) a는 unstatic 변수인데, static test() 함수에서 사용하여 error 발생

2) get() class도 static test()에서 사용하여 error 발생

그런데, count는 static인데 왜 error 라고 할까?  error는  " <identifier> expected "

public class test {

    private int a = 0;
    private static count = 0;
    public int getA() {
        return a;
    }
    public static int getCount() {
        return count;
    }
    public static void test() {
        int sum = 0;
        sum = a;                    # error는 맞음, staitc 함수에서 unstatic변수 사용
        sum += count;
        System.out.println(getA());
        System.out.println(getCount());
    }
}

위 코드는 "private static count = 0" 에서 errror 가 발생한다. 문제는 아래 static 변수와 함수에 대한 질문인데, 그 전에 error가 발생하는 것이다 

그렇다면 왜 error가 발생하고 해결책은 무엇일까?

 

(해결)

 

- 위의 count 해결 후 실행결과

아래 결과에서 보듯이, 2개의 compile error 가 발생하는 것을 볼 수 있습니다. 즉 count의 데이타 타입이 누락되서 발생한 문제 였습니다

반응형