다음 제시된 Java 코드에 포함된 코드 스멜과 이를 해결하기 위한 리… | [7급 국가직 소프트웨어공학] 26년 1회차 기출문제 상세 페이지
1[7급 국가직 소프트웨어공학] 26년 1회차
다음 제시된 Java 코드에 포함된 코드 스멜과 이를 해결하기 위한 리팩토링 기법에 대한 설명으로 옳지 않은 것은?public class Employee {
public static final int EMP1 = 0;
public static final int EMP2 = 1;
public static final int EMP3 = 2;
private int empType;
public Employee(int empType) {
this.empType = empType;
}
public int paySalary() {
switch (empType) {
case EMP1:
return 5000;
case EMP2:
return 6000;
case EMP3:
return 9000;
default:
throw new IllegalArgumentException(
"Invalid employee type");
}
}
}
1
새로운 조건이 생길 때마다 switch 문을 수정해야 하므로 버그 발생 가능성이 증가한다.
2
코드 스멜 해결을 위해 empType을 서브클래스로 분리하고, paySalary() 메서드를 다형성으로 구현하는 리팩토링 기법을 사용한다.
3
주어진 코드는 객체지향 설계원리 SOLID의 OCP(개방-폐쇄 원칙)를 위반한다.
4
주어진 코드에는 높은 결합도로 인해 변경에 취약한 유사 데이터들의 그룹 중복(data clumps) 코드 스멜이 포함된다.
해설
이 코드의 스멜은 타입 코드에 따른 switch 문 분기이며, 여러 데이터 항목이 늘 함께 다니는 데이터 뭉치(data clumps)는 나타나지 않으므로 옳지 않다.
data clumps는 같은 매개변수·필드 묶음이 여러 곳에 반복되는 스멜인데, 이 코드는 empType 하나의 값으로 분기할 뿐이다. 해결책은 조건문을 다형성으로 바꾸기이다.
- 새 직원 유형이 생길 때마다 switch 문을 고쳐야 하므로 버그 가능성이 커진다는 설명은 옳다.
- empType별 서브클래스로 분리하고 paySalary()를 재정의하는 리팩토링은 옳다.
- 확장 시 기존 코드를 수정해야 하므로 OCP 위반이라는 설명은 옳다.
오류나 개정된 내용이 보이면 알려주세요