Skip to content

Conversation

@hybeom0720
Copy link

안녕하세요. 허영범입니다.
이번 미션의 경우 상당히 어려웠고, 어떻게 객체들이 상호작용을 해야하나에 대해서 고민을 많이 하였던 과제였던 것 같습니다.
더군다나, 그전까지 미션에 대해서는 에러를 던지고 끝이었는데, 이번부터는 에러를 잡고 계속해서 프로그램이 돌아가게 만들어야해서 고민이 더 심하게 느꼈던 것 같습니다.
하지만, 지난 몇주 간의 공부가 많은 도움이 되었는지, 어렵지만 차츰 차츰 문제를 풀어 갈 수가 있었습니다.

먼저, 그 전에 언급드렸던 스트림 부분과 Comparable 부분에 대한 발전입니다.
이 코드들을 활용하여, indent를 늘리지 않고, 깔끔하게 코드들이 상호작용하면서 짤 수 있었던 것 같습니다. 자바의 API를 사용하니 코드가 간결해지면서도 각자의 기능을 더더욱 잘할 수 있게 되었습니다. 앞으로도 계속 자바를 공부를 하면서 더 많은 API를 자연스럽게 사용하고 싶습니다.

두 번째로는, Viewer와 Domain, Controller의 상호 책임을 지는 객체 관한 부분입니다.
피드백에서 언급해주셨다시피, 각각의 객체들이 자신만의 책임을 지도록 하게 함으로써, 객체가 생성되거나 상태 확인 및 로직시 오류, 상태값을 출력할 때, 그리고 이 모든 것을 제어하는 객체들이 상호 작용하면서 움직이게 되었습니다. 첫 주차에 비하면 훨씬 더 객체들이 자기 책임을 가지면서도, 유효한 값만을 사용하도록 각각의 부분들이 작동을 잘하게 되었던 것 같습니다. 특히 static이 남발했던 1주차와 달리, 이제는 static과 static이 아니여야하는 부분을 잘 구분하면서 구현을 하였기 때문에 자바 언어가 가지는 의미에 대해서 조금 더 다가갈 수 있었던 것 같습니다.

세 번째로는 메서드에 관한 부분입니다.
많은 인터넷 후기에 나와있듯이, 최대한 10줄 이하, depth도 1이하로 저와의 약속을 하나 더 만들어서 구현을 하게 되었습니다. 때문에, 이런 것까지 분리를 해야하나? 라는 생각이 들긴하였지만, 막상 코드를 리팩토링하면서 기능을 분리해보니, 훨씬 더 깔끔하고 각각의 메소드들이 어떤 기능을 가지고 있는지 단번에 보이는 계기가 되었던 것 같습니다. 때문에 앞으로도 메서드에 관한 부분을 더욱 더 신경쓰면서 발전시켜나갈 예정입니다.

마지막으로는 기능 구현, 에러 목록 및 커밋에 관한 부분입니다.
객체 단위 단위로 보지 않고 이번부터는 크게 기능을 구현하면서 에러를 최대한 많이 찾아가며, 그렇게 찾은 에러를 나중에 한번에 수정하는 방식을 사용하였습니다. 그랬더니 훨씬 더 중간 중간 다른 부분을 생각하며 코딩을 잘 할 수가 있었으며, 에러를 더 많이 찾을 수 있었던 것 같습니다. 그에 따라서 README 문서는 저번보다 수정된 부분은 적지만, 오히려 더 많은 명세를 할 수 있는 진짜로 살아 있는 모습을 갖춘 것 같아서, 살아있는 문서의 의미가 무엇인지 알게 되었습니다.

조금 아쉬운 점은 반복을 최대한 줄였음에도 불구하고, 데이터 형식이 아닌, 다른 객체 타입을 활용하는 Controller 부분에서 중복되어 보이는 부분이 발생한 것 같아서 해결책을 찾아보았으나, 상속이 불가능한 enum 부분이 섞여 있기 때문에 이 부분에 대해서는 조금 더 고민을 해봐야할 것 같습니다. 다음 코딩테스트까지 implements와 extends라는 두 가지 방법을 활용하여, 저의 자바 실력을 더더욱 발전시키는 방향으로 준비하겠습니다.

하지만 3주 전에 객체 지향적인 생각을 가지지 못하고, 자바에 대해서 아무 것도 모르던 개발자 지망생에서 이제는 객체 관점에서 조금 더 생각해보고, 자바 API를 능동적으로 활용하면서 찾아보면서 자기 주도적으로 성장할 수 있는 시간에 대해서 너무나도 감사드립니다.

4일 뒤에 코딩테스트에서 뵙겠습니다.

추가:
- 전체적인 구현해야할 리스트들을 정리하였습니다.
수정:
- 지하철 역 생성 시 오류에 대한 메서드 추가
- 지하철 역 이름 비교 메서드 추가
수정:
- 중복 체크하는 기능 추가
수정:
- 이름 비교 추가
- 역 중복 및 삭제 유효성 체크
수정:
- 노선 추가시 중복 여부 확인
추가:
- 전체 시스템 InputViewer 구현
- 역 InputViewer 구현
- 노선 InputViewer 구현
- 구간 InputViewer 구현
추가:
- 역 OutputViewer 구현
- 노선 OutputViewer 구현
- 구간 OutputViewer 구현
- 전체 지도 OutputViewer 구현
추가:
- Error Case를 추가하였습니다.
- Constant와 전체 시스템에 관한 객체를 추가하였습니다.
추가:
- 처음 상태를 설정하는 Initiator를 추가하였습니다.
- 전체 지하철을 관리하는 SubwaySystem을 추가하였습니다.
추가:
- 각각의 레포지토리에 이름에 따라서, 자동으로 정렬하는 기능을 추가했습니다.
추가:
- 각각 옵션들을 입력 받은 다음에 이를 바탕으로 기능을 수행하는 Controller를 추가하였습니다.
추가 :
- 라인에 관련한 Manager 추가
- 라인의 중복 체크에 관련하여, $LineRepository 및 $StationRepository 수정
추가 :
- 구간에 관련한 Manager 추가
- 해당 호선에 역 추가 및 삭제 기능 관련하여 $LineRepository 및 $Line 수정
추가 :
- 전체 노선도를 보여주는 객체 추가
추가 :
- 전체 시스템 진행하는 $EntireSystem 추가
추가 :
- Domain 영역 Constant 묶어서 정리
- Viewer 영역 Constant 묶어서 정리
- Controller 영역 Constant 묶어서 정리
수정:
- 에러 발생 시 돌아가는 회귀 지점 재정의
- 메세지 송출 추가
수정:
- Origin Repository로부터 바뀐 사항들을 Pull하였습니다.
수정:
- 에러 발생할 수 있는 케이스에 대한 docs 사항 추가.
수정:
- 최초 설계 이후 찾아낸 오류 상황에 대한 예외 케이스 적용.
수정:
- 전체적인 Viewer에서의 정렬
- 함수 depth 1로 정렬
- Comment 추가
- Set, Sector, Unit으로 단계별로 차등화
- Error Case 담당 부분 변경
수정 :
- 역 삭제시 노선에 등록되어 있으면 삭제를 못하는 사항에 대해서 변경 및 구현하였습니다.
수정 :
- 기능 구현시에 누락되었던 노선 체크 부분에 대해서 업데이트를 하였습니다.
수정 :
- ErrorMessage 부분을 문제 요구사항에 맞게 수정하였습니다.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant