정보시스템 감리 기출해설/소프트웨어공학 해설

(제 22회) 소프트웨어 공학 / (34)~(35) 해설

아이티신비 2024. 11. 15. 09:00

34. 다음은 스프링 프레임워크가 제공하는 어드바이스의 유형을 그림으로 나타내고 있다. (가) ~ (다)에 가장 적절한 어드바이스는?

 

 

 

 

① (가) AfterReturning 어드바이스

     (나) Around 어드바이스

     (다) AfterThrowing 어드바이스

② (가) AfterReturning 어드바이스

     (나) After Throwing 어드바이스

     (다) Around 어드바이스

③ (가) AfterThrowing 어드바이스

     (나) Around 어드바이스

     (다) AfterReturning 어드바이스

④ (가) Around 어드바이스

     (나) AfterReturning 어드바이스

    (다) AfterThrowing 어드바이스

 

▣ 해설

관점
Spring AOP
Before
  • 메소드 실행 전 Advice 실행
After
  • 메소드 실행 후 Advice 실행
After-returning
  • 메소드가 성공 후(예외 없이) Advice 실행
After-returning
  • 메소드가 예외발생 후 Advice 실행
Around
  • 메소드 실행 전과 후 Advice 실행(Before + After)

 

정답 : ①

 

 

 

35. 다음의 소스 코드 변경을 잘 설명하고 있는 리팩토링(refactoring) 방법으로 가장 적절한 것은?

 

(변경전)

int getRating() {
return (moreThanFiveLateDeliveries()) ? 2 :
1;
}
boolean moreThanFiveLateDeliveries() {
return _numberOfLateDeliveries > 5;
}

 

(변경후)

int getRating() {
return (_numberOfLateDeliveries > 5) ? 2 :
1;
}

① inline method

② extract method

③ move method

④ substitute algorithm

 

▣ 해설

기법
내용
Extrac Method
그룹으로 함께 묶을 수 있는 코드 조작이 있으면, 코드의 목적이 잘 드러나도록 메소드의 이름을 지어 별도의 메소드를 추출
Replace Temp With Query
어떤 수식의 결과값을 저장하기 위해서 임시변수를 사용하고 있다면, 수식을 추출해서 메소드로 만들고 인사변수를 참조하는 곳을 찾아 모두 메소드 호출로 교체
Move Method
메소드가 자신이 정의된 클래스보다 다른 클래스의 기능을 더 많이 사용하고 있다면, 이 메소드를 가장 많이 사용하고 있는 클래스에 비슷한 몸체를 가진 새로운 메소드 생성
Extrac Class
두 개의 클래스가 해야 할 일을 하나의 클래스가 하고 있는 경우 새로운 클래스를 만들어 관련 있는 필드와 메소드를 예전 클래스에서 새로운 클래스로 이동
Rename Method
메소드의 이름이 그 목적을 드러내지 못하고 있다면 메소드의 이름 변경
Pull Up Field
두 서브 클래스가 동일한 필드를 가지고 있다면, 해당 필드를 슈퍼 클래스로 이동
Pull Up Method
동일한 기능을 하는 메소드를 여러 서브 클래스에서 가지고 있다면 이 슈퍼클래스로 이동
Encapsulation Field
Public 필드가 있는 경우, 그 필드를 Private 으로 하고 접근자 제공
Inline Temp
간단한 수식의 결과값을 가지고 임시변수가 있고, 그 임시변수가 다른 리팩토링을 하는데 방해가 된다면, 이 임시변수를 참조하는 부분을 모두 원래의 수식으로 변경
Introduce Explaing Variable
복잡한 수식이 있는 경우에는, 수식의 결과나 또는 수식의 일부에 자신의 목적을 잘 설명하는 이름으로 된 임시변수를 사용
Split Temporary Variable
루프안에 있는 변수나 collecting temporary variable 도 아닌 임시변수에 값을 여러 번 대입하는 경우에는, 각각의 대입에 대해서 따로따로 임시변수를 작성
Inline Method
메소드의 본문이 메소드 이름 만큼이나 명확하다면 해당 본문을 메소드를 호출하는 호출자 안으로 옮기고 메소드를 삭제
Introduce Parameter Object
매개 변수가 너무 많을 경우 이를 하나의 객체로 변환
Remove Assignments to Parameters
파라미터에 값을 대입하는 코드가 있다면, 대신 임시변수를 사용하도록 하라
Substitute Algorithm
알고리즘을 보다 명확한 것으로 바꾸고 싶을 때는 메소드의 몸체를 새로운 알고리즘으로 변경
Hide Method
메소드가 다른 클래스에서 사용되지 않으면 메소드를 Private 로 변경
Replace Magic Number with Symbolic Constant
특별한 의미를 가지는 숫자 리터럴이 있으면, 상수를 만들고, 의미를 잘 나타내도록 이름을 지은 다음, 숫자를 상수로 변경1
Decompose Conditional
복잡한 조건문(if-then-else) 이 있는 경우, 조건, then 부분, 그리고 else 부분에서 메소드를 추출
Consolidate Duplicate
Conditional Fragments
동일한 코드 조각이 조건문의 모든 분기 안에 있는 경우, 동일한 코드를 조건문 밖으로 이동
Remove Control Flag
일련의 boolean 식에서 컨트롤 플래그 역할을 하는 변수가 있는 경우, break 또는 return 을 대신 사용
Relace Nested Conditional with Guard Clauses
메소드가 정상적인 실행경로를 불명확하게 하는 조건 동작을 가지고 있는 경우, 모든 특별한 경우에 대해서 보호절(guard clause}) 를 사용
Add Parameter
어떤 메소드가 그 메소드를 호출하는 부분으로부터 더 많은 정보를 필요로 한다면, 이 정보를 넘길 수 있는 파라미터를 추가
Remove Parameter
파라미터가 메소드 몸체에서 더 이상 사용되지 않는다면, 그 파라미터를 제거하라
Parameterize Method
몇몇 메소드가 메소드 몸체에 다른 값을 포함하고 있는 것을 제외하고는 비숫한 말을 하고 있다면, 다른 값을 파라미터로 넘겨 받는 하나의 메소드를 작성
Replace Parameter with Explicit Methods
파라미터의 값에 따라서 다른 코드를 실행하는 메소드가 있다면, 각각의 파라미터 값에 대한 별도의 메소드를 작성
Replace Parameter with Method
메소드를 호출한 다음, 결과를 다른 메소드에 대한 파라미터로 넘기고 있다. 수신자(파라미터를 넘겨 받는 메소드) 또한 이 메소드를 호출할 수 있다면, 그 파라미터를 제거하고 수신자가 그 메소드를 호출

 

정답 : ①

 

 



 

공감과 댓글은 아이티신비에게 큰 힘이 됩니다.

블로그 글이 유용하다면 블로그를 구독해주세요.♥