Daily 2019-01-28
Daily
오전 : cardgame step2 :
메뉴박스라는 구분은 좋네요. 다만 결정하거나 비교하거나 판단하는 로직에서 출력까지 구현하지 않는게 좋습니다. 리턴값을 보고 상위 모듈에서 판단해서 흐름을 제어하거나 출력을 하도록 분리하는 게 좋습니다. 레벨3로 넘어가면 특히 출력은 화면에 해야 하는데, MenuBox 같은 클래스가 View에 접근하면 안되니까요.
피드백을 받고 수정을 하고 생각해 보았다.
struct MenuBox {
// 역할 : 입력받은것이 메뉴인지 확인하는 함수
// 매개변수 : String , 반환형 : Menu
static func getMenu(_ menuStringNumber: String) -> Menu? {
guard let menuNumber = Int(menuStringNumber) else {
return nil
}
guard let menuSelected = Menu(rawValue: menuNumber) else {
return nil
}
return menuSelected
}
}
코드를 수정하기 전에는
struct MenuBox {
// 역할 : 입력받은것이 메뉴인지 확인하는 함수
// 매개변수 : String , 반환형 : Menu
static func getMenu(_ menuStringNumber: String) -> Menu? {
guard let menuNumber = Int(menuStringNumber) else {
OutputView.errorResult(.NoInt)
return nil
}
guard let menuSelected = Menu(rawValue: menuNumber) else {
OutputView.errorResult(.notMenu)
return nil
}
return menuSelected
}
}
OutputView.errorResult() 에 관한걸 출력하려고 했다.
오후 : cardgame step2 : merge
makeStatus() 같은 함수를 CardDeck에서 분리하자는 것은 객체지향원칙에서 첫번째 SRP 단일 책임 원칙을 기준으로 하자는 겁니다. 카드덱 역할과 책임이 무엇이고 어디까지 일까요? 카드덱을 움직이도록 내부 메소드들을 선택하는 것은 스스로 하기 보다는 다른 모듈이 판단하는게 좋다는 겁니다. 오늘 피드백 강의에서 이런 얘기를 좀 더 해보겠습니다.
객체 지향 원칙에서 첫번째 SRP 단일 책임 원칙이 뭘까? 라는 고민을 하게 되었다.
나의 문제의 경우 : 카드덱이라는곳에서 카드덱의 상태를 만들어서 반환하는 함수가 있었다. 이건 카드덱이랑은 상관없는 함수 였다.
그래서 해결방법은 main에서 카드덱을 넘겨서 카드덱의 상태를 확인하도록 하였다. 그래서 카드덱의 상태를 만드는 함수는 CardFactory.swift에 넣었다.
Written on January 28, 2019