28. 다음은 리팩토링 목록(Catalog of Refactoring) 에서 정의된 리팩토링 방법 중 하나를 설명하는 코드이다. 다음 코드 변경을 잘 설명하고 있는 리팩토링 방법의 이름으로 가장 적절한 것은?
(변경전)
let defaultOwner = {firstName: "Martin",
lastName: "Fowler"}; |
(변경후)
let defaultOwnerData = {firstName: "Martin",
lastName: "Fowler"}; export function defaultOwner() {return defaultOwnerData;} export function setDefaultOwner(arg) {defaultOwnerData = arg;} |
① Inline Variable
② Encapsulate Variable
③ Split Variable
④ Rename Variable
▣ 리팩토링 기법
Encapsulate Variable(변수 캡슐화하기)
- 데이터가 사용되는 범위가 클수록 캡슐화를 하는 것이 더 중요해진다.
- 메소드는 점진적으로 새로운 매소드로 변경할 수 있으니, 데이터는 한 번에 모두 변경해야 한다.
=> 아래와 같이 변경
Inline Variable
- 변수에 담긴 표현식이 변수명과 다를 바 없을 경우나, 변수가 주변 코드를 리팩터링하는데 방해가 될 때에는 변수를 인라인 하는 것이 좋다.
정답 : ②
29. 다음 의사 코드(Pseudo Code)에 대하여 McCabe의 Complexity Number를 계산한 것 중 가장 적절한 것은? (단, 코드 실행에 대한 오류는 없는 것으로 가정함)
i = 0;
n=4; //N-Number of nodes present in the graph while (i<n-1) do j = i + 1; while (j<n) do if A[i]<A[j] then swap(A[i], A[j]); end do; i=i+1; end do; |
① 4 ② 5
③ 6 ④ 7
▣ McCabe 의 회전복잡도(Cyclomatic Complexity)
- McCabe 는 프로그램의 이해 난이도는 주로 그 프로그램에 대한 제어 흐름 그래프의 복잡도에 의해서 결정된다는 사실을 관찰[MCC 76]
- 접속 그래프 G의 사이클로메틱 수는 그래프 내에 있는 일차 독립 경로의 수이며,
V(G) = E- N + 2 ☞ E = 연결선의 수, n = 노드의 수
- 복잡도 계산 방식
- 복잡도 = 폐쇄영역수 + 1(제어흐름 그래프를 통해 파악 가능)
- 복잡도 = 화살표수 - 노드수 +2 (제어흐름 그래피를 통해 파악 가능)
- 복잡도 = 단일조건의 수 + 1(프로그램 코드상에서 파악 가능)
(단일조건 : 참과 거짓으로 판별되는 원자적 조건이며 AND,OR로 연결된 복합 조건이 아니라 단일조건이란 뜻,
예) - if/else if/for/while/do white/try catch : 단일조건
- switch 문 내의 case 문 하나당 : 단일조건
- else/switch default/try finally : 단일조건 아님)
복잡도 = 단일조건의 수 + 1
아래 코드에 단일조건은 총 3개이므로 복잡도는 4
i = 0;
n = 4; // N-Number of nodes present in the graph white (i<n-1)do j = i + 1; while (j<n) do if A[i] < A[j] then swap(A[i], A[j]); end do; i = i+1; end do; |
정답 : ①
공감과 댓글은 아이티신비에게 큰 힘이 됩니다.
블로그 글이 유용하다면 블로그를 구독해주세요.♥
'정보시스템 감리 기출해설 > 소프트웨어공학 해설' 카테고리의 다른 글
(제 23회) 소프트웨어 공학 / (32)~(33) 해설 (1) | 2024.09.15 |
---|---|
(제 23회) 소프트웨어 공학 / (30)~(31) 해설 (1) | 2024.09.14 |
(제 23회) 소프트웨어 공학 / (26)~(27) 해설 (6) | 2024.09.12 |
(제 24회) 소프트웨어 공학 / (48)~(50) 해설 (0) | 2024.07.27 |
(제 24회) 소프트웨어 공학 / (46)~(47) 해설 (0) | 2024.07.26 |