재미있게 보았던 "카지노" 드라마와 객체지향 기술서적들의 예제를 이용하여 구현한 프로젝트입니다.
Casino(카지노)
Casino 프로젝트는 카지노의 기능을 구현한 프로젝트로, 칩을 추가하고 금액을 증감시키며, 딜러를 통해 칩을 교환하여 게임을 즐기는 프로젝트입니다.
객체의 책임과 역할을 나누어 객체들 사이 결합도를 낮게 유지하는 리팩토링 과정을 진행했습니다.
SRP, OCP 원칙을 통해 결합도를 낮추면서 응집도에 대한 트레이드 오프를 생각하며 균형 있는 설계를 고민했습니다.
리팩토링에 중점을 두고 반복적인 if else 처리 대신 정적인 경우 Enum, 확장 가능성이 존재하는 케이스는 디자인패턴을 적용했습니다.
Comp(콤푸 입출금 내역)
Comp는 카지노 이용객의 게임 금액과 시간에 따라 포인트를 지급받아 호텔 내에서 사용 할 수 있는 마일리지입니다. 입력 파일을 분석하여 콤푸(마일리지) 기록의 합계, 월별 합계, 카테고리별 합계 등을 계산하여 내역을 분석하는 프로젝트입니다.
소프트웨어 개발원칙 중 KISS, DRY, SRP를 코드에 적용했고 Java 8의 Lambda를 활용하여 가독성을 높였습니다.
단위 테스트를 진행할 때는 직관적으로 읽기 쉽게 Given-When-Then 패턴을 적용했습니다.
Getter, Setter와 메소드를 제외하고는 테스트 커버리지 목표를 70~90%로 하였습니다.
Agent(고객 관리)
Agent 프로젝트는 카지노에 방문한 고객 관리를 위한 시스템으로, 고객들의 숙소 예약, 환전, 식사 준비를 대신 도와주는 서비스를 제공합니다. 이상적인 예외 처리 방법에 대해 고민했습니다.
불변성을 보장하기 위해 변경 가능성이 없는 필드 변수들은 모두 final을 사용했고 컬렉션 사용 가능성과 객체의 행위와 상태를 한곳에서 관리하기 위해 일급 컬렉션을 사용했습니다.
클린 코드, 테스트, 리팩토링 중심의 좋은 품질의 서비스 개발
- 복잡한 요구사항을 추상화시키며 기능 추가와 수정에 확장성 있는 대응
- 클린 코드를 통한 유지 보수하기 좋은 코드 구현
- 테스트 주도 개발로 신뢰성 있는 환경
- 변경에 취약하고 객체의 책임을 분리해야하는 상황
- 반복되는 if문을 처리하는 다양한 방법
- 객체 지향에서 getter과 setter를 지향하는 이유
- 보다 효율적이고 보기좋은 패키지 구조에 대한 고민
- 정적 팩토리 메소드가 필요한 순간과 사용시 기본 생성자 private 이유
- 좋은 테스트 코드는 무엇일까
- 적절한 테스트 코드의 커버리지 수치는 어떻게 정할까
- 같은 클래스내 생성자가 두개 이상인 경우 생성자 체인 기법
- Stream 으로 리팩토링하며 고려해야할 상황
- equals와 hashCode를 재정의 하는 이유
- NPE를 방지하기 위한 optional 상황
- 불변 객체 사용과 일급 컬렉션을 사용하는 이유는 무엇일까
- static을 사용하여 utlity를 만드는건 나쁘게 봐야할까
- 자주 사용되는 상수들을 글로벌하게 관리하는것은 어떨까?
- 방어적 복사시 UnmodifiableList가 불변을 보장해주지는 않았다
- 이상적인 예외 처리에 대한 고민