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

(제 25회) 소프트웨어 공학 / (32)~(33) 해설

아이티신비 2025. 1. 16. 09:00

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

 

■ 프로그램 수행 과정 및 단계별 설명

 

  1. 변수 선언 및 초기화

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이 출력

 

정답 : ④

 

 

 




 

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

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