40. 다음 중 코드 스멜과 이를 해결하기 위한 리팩토링 방법을 가장 적절하게 연결한 것만으로 짝지은 것은?
코드 스멜
|
리팩토링
|
(가) 다른 클래스를 지나치게 애용 (Feature Envey)
|
(a) 여러 클래스에 흩어진 유사한 기능을 한 곳으로 모은다.
|
(나) 여러 클래스를 동시에 수정 (Shotgun Surgery)
|
(b) 메소드를 그들이 애용하는 데이터가 있는 클래스로 옮긴다.
|
(다) 유사 데이터의 중복 (Data Clumps)
|
(c) 다형성으로 바꾼다. (같은 메소드를 가진 여러 개의 클래스를 구현한다.)
|
(라) 너무 많은 Switch, if 문장
|
(d) 해당 데이터들을 독립된 클래스로 정의 한다.
|
① (가) - (a), (다) - (c)
② (가) - (b), (다) - (d)
③ (나) - (a), (라) - (d)
④ (나) - (b), (라) - (c)
■ 해설
Code smell
|
설명
|
해결방법(Refactoring)
|
중복된 코드
(Duplicated Code) |
|
|
긴 메소드
(Long Method) |
|
|
거대한 클래스
(Large Class) |
|
|
긴 파라미터 리스트
(Long Parameter List) |
|
|
확산적 변경
(Divergent Change) |
|
|
산탄총 수술
(Shotgun Surgery) |
|
|
기능에 대한 욕심
(Feature Envy) |
|
|
데이터 덩어리
(Data Clumps) |
|
|
기본타입에 대한 강박관념
(Primitive Obsession) |
|
|
Switch, if 문장
|
|
|
게으른 클래스(Lazy Class)
|
|
|
추측성 일반화
(Speculative Generality) |
|
|
정답 : ②
41. 다음 Python 프로그램의 출력 결과로 가장 적절한 것은?
language = ['python', 'java', 'go', 'ruby', 'c']
pop = language.pop() pop2 = language.pop(1) language.insert(1, pop) language.insert(2, pop2) print(language.index('go')) |
① 3 ② 2
③ 1 ④ 0
■프로그램 요약 : 이 Python 코드는 리스트 연산 메서드를 사용하여 리스트 요소를 추가, 삭제, 삽입하고 있음. 리스트 인덱스를 활용하여 특정 요소의 위치를 확인하는 것도 포함되어 있음
● 프로그램 수행 과정 단계별 설명
- 리스트 선언
language = ['python', 'java', 'go', 'ruby', 'c'] ← 5개의 문자열 요소로 구성된 리스트 language가 선언
2. 리스트 요소 삭제
pop = language.pop() ← language 리스트의 마지막 요소 'c' 가 pop 변수에 저장되고, 리스트에서 삭제함
pop2 = language.pop(1) ← language 리스트의 두 번째 요소 'java' 가 pop2 변수에 저장되고, 리스트에서 삭제함
3. 리스트 요소 삽입
language.insert(1, pop) ← language 리스트의 두 번째 위치(인덱스 1) 에 앞서 삭제된 'c' 가 삽입됨
language.insert(2, pop2) ← language 리스트의 세 번째 위치(인덱스 2)에 앞서 삭제된 'java' 가 삽입됨
4. 리스트 요소 위치 확인
print(language.index('go')) ← language 리스트에서 'go' 의 인덱스 위치(3)가 출력
정답 : ①
공감과 댓글은 아이티신비에게 큰 힘이 됩니다.
블로그 글이 유용하다면 블로그를 구독해주세요.♥
'정보시스템 감리 기출해설 > 소프트웨어공학 해설' 카테고리의 다른 글
(제 25회) 소프트웨어 공학 / (44)~(45) 해설 (0) | 2025.01.22 |
---|---|
(제 25회) 소프트웨어 공학 / (42)~(43) 해설 (0) | 2025.01.21 |
(제 25회) 소프트웨어 공학 / (38)~(39) 해설 (0) | 2025.01.19 |
(제 25회) 소프트웨어 공학 / (36)~(37) 해설 (0) | 2025.01.18 |
(제 25회) 소프트웨어 공학 / (34)~(35) 해설 (0) | 2025.01.17 |