32. 다음의 코드에 적용된 코드 리팩토링 기법으로 가장 적절한 것은?
<적용 전>
int increment(int inValue, int Qty, int amount) { if (inValue > 50) inValues++; .... |
<적용 후>
int increment(int inValue, int Qty, int amount) { int grade = inValue; if (inValue > 50) grade++; .... |
① 임시변수 분리 기법(Split temporary variable)
② 매개변수 할당 제거 기법(Remove assignments to parameters)
③ 중간자 제거 기법(Remove middle man)
④ 조건 다형성 대체 기법(Replace conditional with polymorphism)
■ 해설
- 설명 : 파라미터 int inValue 에 값을 대입하는 것을 임시변수 grade 사용하였음
기법
|
내용
|
Remove Assignments to Parameters
|
파라미터에 값을 대입하는 코드가 있다면, 대신 임시변수를 사용하도록 하라
|
Substitute Algorithm
|
알고리즘을 보다 명확한 것으로 바꾸고 싶을 때는 메소드의 몸체를 새로운 알고리즘으로 변경
|
Hide Method
|
메소드가 다른 클래스에서 사용되지 않으면 메소드를 private 로 변경
|
Replace Magic Mumber with Symbolic Constant
|
특별한 의미를 가지는 숫자 리터럴이 있으면, 상수를 만들고, 의미를 잘 나타내도록 이름을 지은 다음, 숫자를 상수로 변경
|
Decompose Conditional
|
복잡한 조건문(if-then-else)이 있는 경우, 조건, then 부분, 그리고 else 부분에서 메소드를 추출
|
Consolidate Duplicate Conditional Fragments
|
동일한 코드 조각이 조건문의 모든 분기 안에 있는 경우, 동일한 코드를 조건문 밖으로 이동
|
Remove Control Flag
|
일련의 boolean 식에서 컨트롤 플래그 역할을 하는 변수가 있는 경우, break 또는 return 을 대신 사용
|
Replace Nested Conditional with Guard Clauses
|
메소드가 정상적인 실행경로를 불명확하게 하는 조건 동작을 가지고 있는 경우, 모든 특별한 경우에 대해서 보호절(guard clause)을 사용
|
Add Parameter
|
어떤 메소드가 그 메소드를 호출하는 부분으로부터 더 많은 정보를 필요로 한다면, 이 정보를 넘길 수 있는 파라미터를 추가
|
Remove Parameter
|
파라미터가 메소드 몸체에서 더 이상 사용되지 않는다면, 그 파라미터를 제거하라
|
Parameterize Method
|
몇몇 메소드가 메소드 몸체에 다른 값을 포함하고 있는 것을 제외하고는 비슷한 일을 하고 있다면, 다른 값을 파라미터로 넘겨 받는 하나의 메소드를 작성
|
정답 : ②
33. 다음 C 프로그램의 출력 결과로 가장 적절한 것은?
#include <stdio.h>
int main() { int a, b, c, ary[][4] = {{10, 20, 30, 40}, {50, 60, 70, 80}}; int (*ptr)[4] = ary; a = *(*(ptr + 1) + 3); b = **ptr++; c = **ptr; printf("%d\n", a+b+c); return 0; |
① 80 ② 100
③ 120 ④ 140
■ 프로그램 수행 과정 및 단계별 설명
- 변수 선언 및 초기화
int a, b, c, ary[][4] = {{10,20,30,40},{50,60,70,80}};
int (*ptr)[4] = ary; ← 2차원 배열 ary 와 포인터 변수 ptr이 선언
2. 변수 a 할당
a = *(*(ptr + 1) + 3); ← prt +1 은 두 번째 행을 가리킴
← *(prt +1) 은 두 번째 행의 배열 주소를 가리킴
← *(*(prt +1) + 3) 은 두 번째 행의 네 번째 열 요소 80을 가리킴. 따라서 변수 a에
80 할당
3. 변수 b 할당
b = **ptr++; ← ** prt 은 첫 번째 행의 첫 번째 열 요소인 10을 가리킴
← prt ++ 은 포인터를 다음 행으로 이동시킴. 따라서 변수 b에 10이 할당
4. 변수 c 할당
c = **ptr; ← ** prt 은 두 번째 행의 첫 번째 열 요소인 50을 가리킴. 따라서 변수 C 에 50이 할당
5. 결과출력
printf("%d\n", a+b+c) ← 변수 a, b, c에 각각 80, 10, 50이 할당되었으므로, 그 합인 140이 출력
정답 : ④
공감과 댓글은 아이티신비에게 큰 힘이 됩니다.
블로그 글이 유용하다면 블로그를 구독해주세요.♥
'정보시스템 감리 기출해설 > 소프트웨어공학 해설' 카테고리의 다른 글
(제 25회) 소프트웨어 공학 / (36)~(37) 해설 (0) | 2025.01.18 |
---|---|
(제 25회) 소프트웨어 공학 / (34)~(35) 해설 (0) | 2025.01.17 |
(제 25회) 소프트웨어 공학 / (30)~(31) 해설 (0) | 2025.01.15 |
(제 25회) 소프트웨어 공학 / (28)~(29) 해설 (0) | 2025.01.14 |
(제 25회) 소프트웨어 공학 / (26)~(27) 해설 (0) | 2025.01.13 |