34. 다음은 스프링 프레임워크가 제공하는 어드바이스의 유형을 그림으로 나타내고 있다. (가) ~ (다)에 가장 적절한 어드바이스는?
|
① (가) AfterReturning 어드바이스
(나) Around 어드바이스
(다) AfterThrowing 어드바이스
② (가) AfterReturning 어드바이스
(나) After Throwing 어드바이스
(다) Around 어드바이스
③ (가) AfterThrowing 어드바이스
(나) Around 어드바이스
(다) AfterReturning 어드바이스
④ (가) Around 어드바이스
(나) AfterReturning 어드바이스
(다) AfterThrowing 어드바이스
▣ 해설
관점
|
Spring AOP
|
Before
|
|
After
|
|
After-returning
|
|
After-returning
|
|
Around
|
|
정답 : ①
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
|
메소드를 호출한 다음, 결과를 다른 메소드에 대한 파라미터로 넘기고 있다. 수신자(파라미터를 넘겨 받는 메소드) 또한 이 메소드를 호출할 수 있다면, 그 파라미터를 제거하고 수신자가 그 메소드를 호출
|
정답 : ①
공감과 댓글은 아이티신비에게 큰 힘이 됩니다.
블로그 글이 유용하다면 블로그를 구독해주세요.♥
'정보시스템 감리 기출해설 > 소프트웨어공학 해설' 카테고리의 다른 글
(제 22회) 소프트웨어 공학 / (38)~(39) 해설 (1) | 2024.11.17 |
---|---|
(제 22회) 소프트웨어 공학 / (36)~(37) 해설 (2) | 2024.11.16 |
(제 22회) 소프트웨어 공학 / (32)~(33) 해설 (1) | 2024.11.14 |
(제 22회) 소프트웨어 공학 / (30)~(31) 해설 (2) | 2024.11.13 |
(제 22회) 소프트웨어 공학 / (28)~(29) 해설 (1) | 2024.11.12 |