- 객체별 역할과 책임을 가능한 구분하도록 구현하였습니다.
- 리플렉션을 활용해 재사용성 높은 코드를 작성하고자 노력하였습니다.
- 컬럼별 특성을 대표해줄 CellType Enum 구현하였습니다.
- Enum과 전략 패턴을 활용해 재사용성 높은 셀 데이터 렌더링 로직을 갖도록 하였습니다.
- 참고 문서
- 우아한 기술블로그 - 아 엑셀다운로드 개발,,, 쉽고 빠르게 하고 싶다 (feat. 엑셀 다운로드 모듈 개발기)
- 엑셀 다운로드 구현과 관련하여 위 문서를 보고, 개발 요구사항에 따라 필요한 부분과 몇 가지 아이디어를 차용했습니다.
- 우아한 기술블로그 - 아 엑셀다운로드 개발,,, 쉽고 빠르게 하고 싶다 (feat. 엑셀 다운로드 모듈 개발기)
- 로컬 실행시 http://localhost:8080/todo/excel
- 엑셀 다운로드 기능 구현에 주안점을 둔 프로젝트로 api는 전체 데이터를 다운로드하는 것으로 간단히 구현하였습니다.
- CellType이라는 이넘을 설정해두고, 이를 이용해 엑셀 스타일링을 수행하도록 구현하였습니다.
- ExcelColumnInfo 이넘 구현체 클래스에서 각 컬럼 정보가 CellType 데이터를 멤버로 갖습니다.
- 엑셀 파일을 만들 데이터의 메타 데이터 정보를 가진 이넘 클래스가 구현할 인터페이스입니다.
- 엑셀 파일을 작성하는 로직의 추상화를 위해 해당 인터페이스를 구현하게 됩니다.
- 인터페이스의 메서드에서 확인할 수 있듯이 해당 인터페이스 구현체는 엑셀 파일에서 작성될 헤더명, dto 클래스의 해당 컬럼 데이터의 속성명, 셀 타입, 순서, 너비 정보를 갖게 됩니다.
- CellType 별 스타일 객체를 캐싱 및 관리하는 객체입니다.
- 파일별로 생명주기를 갖도록 구현 (SimpleExcelFile에서 구상composition) 하였습니다.
- 제네릭을 활용해 작성된 엑셀 파일 작성 구현체입니다.
- E 클래스는 ExcelColumnInfo 인터페이스를 구현한 이넘 클래스를 가리킵니다.
- T 클래스는 엑셀로 작성된 데이터 DTO 클래스를 가리킵니다.