5) [10점] 가상대학에 올라와 있는 프로그램숙제의 예제들을 조사해서 잘못된 점들을 지적하고 수정하여라. 왜 잘못되었는지를 설명하고 수정 후에는 어떻게 좋아졌는지를 설명하라.


[#M_답 보기|닫기|

WorkerListManagerClass 안에 txt파일로부터 worker 객체를 생성하는 부분을 수업시간에 지적한 바 있습니다. 이 부분의 코드 때문에새로운 worker class를 추가 할 때마다 이 클래스를 변경해야 합니다.


이것은 이 클래스가 “단일 책임 원칙”에 위배되기 때문입니다. List를 관리하는 역할만을 수행하도록 이 클래스에서 txt파일로부터 파일을 읽어오는 행동은 다른 클래스를 통해서 하도록 수정해야 합니다.


현재 WorkerListManager 클래스 안에있는 메소드 중에 txt파일로부터 정보를 읽어와서 worker 객체를 생성하고 그 각각의 객체를 workers List에 추가하는 코드 부분은 아래와 같습니다.


Martin Fowler의 리팩토링 카탈로그에 있는 Extract Class를 사용합니다.


간략하게 방법을 소개 하자면 먼저 새로운 클래스를 만들고 빼내고자 하는 메소드와 변수들은 Extract Method, Extract Member를 사용하면 되겠습니다.


기존의 WorkerListManager가 위와 같았다면..


리팩토링을 통해서 다음과 같이 변하게 됩니다.



이렇게 바뀌게 됩니다. 여기서 더 유연하게 만들고 싶다면 LoadDataManager를 Interface로 바꾸고 그것을 구현한 LoadDataFromTxtManager 클래스를 작성하여 사용할 수 있습니다.


LoadDataManager Source Code를 끝으로 이번 시험을 마치겠습니다.
_M#]


[#M_코드보기|닫기| _M#]