
코드 품질 개선 기법 28편: 제약 조건에도 상속세가 발생한다
상속 가능한 불변 클래스는 자식 클래스에서 불변성을 깨뜨릴 수 있어 주의가 필요했습니다. 불변성을 보장하려면 상속을 막고 읽기 전용 공통 타입을 사용하는 방식이 안전했습니다.

상속 가능한 불변 클래스는 자식 클래스에서 불변성을 깨뜨릴 수 있어 주의가 필요했습니다. 불변성을 보장하려면 상속을 막고 읽기 전용 공통 타입을 사용하는 방식이 안전했습니다.

의존성 주입은 모든 곳에 적용할수록 좋은 것이 아니라 목적이 분명할 때만 쓰는 것이 중요하다고 설명했습니다. 단순 유틸리티나 모델은 내부 생성으로 단순화하고, 주입은 라이프사이클 관리나 구현 전환에 한정할 것을 제안했습니다.

지도보기 API의 병목이던 표준 상품 API 호출을 동적 window 분할과 Coroutine Async로 병렬화했습니다. 그 결과 응답 시간을 8~10초에서 약 2초로 줄이고 TPS도 크게 개선했습니다.

숙박 전시 도메인의 복잡한 노출 로직을 Kotlin DSL로 표현한 적용 사례를 소개했습니다. 가독성은 좋아졌지만 내부 구현 복잡도와 팀의 러닝 커브가 커지는 트레이드오프도 있었습니다.

PLP 최저가 계산에서 모든 객실을 끝까지 계산하던 방식을 가지치기로 줄인 사례를 소개했습니다. 계산량은 크게 줄었지만 실제 성능 개선은 DB 조회 비용 때문에 제한적이었습니다.

목록과 지도를 하나의 화면으로 통합하며 비용 폭증과 구조 비대화 문제를 함께 다뤘습니다. Lazy Load, StateHolder, 거리 기반 클러스터링, 커스텀 바텀시트로 개선했습니다.
여행 상품 운영의 수작업 과정을 AI로 자동화한 구축 사례를 소개했습니다. 데이터 통합, 카테고리 매칭, 번역, 적재 최적화와 프롬프트 개선 과정을 다뤘습니다.

테스트 코드 자동화를 위해 IntelliJ 플러그인과 Amazon Q를 결합한 개발 과정을 다뤘습니다. 컴파일 보장 템플릿과 역할 분담으로 커버리지와 작업 효율을 높였습니다.

테마처럼 값만 다른 경우에는 상속보다 값 객체로 표현하는 편이 더 간결하다고 정리했습니다. Kotlin의 비상속 클래스 특성을 활용해 동적 변경 가능성과 불필요한 로직을 줄이는 방법을 제안했습니다.

조기 반환은 유용하지만, 에러와 정상 케이스를 통합할 수 있으면 더 단순한 코드가 됩니다. 빈 컬렉션, null, 범위 밖 인덱스, 연속 예외 처리를 기준으로 판단하는 방법을 소개했습니다.

LINE 메신저의 대량 푸시 알림을 안정적으로 보내기 위해 Pushsphere를 설계하고 도입했습니다. 재시도, 할당량, 엔드포인트 상태를 함께 고려해 도달률과 운영 안정성을 높였습니다.

SDUI의 트래픽 병목을 Caffeine과 Redis 이중 캐시로 해결한 사례를 소개했습니다. 백오피스 즉시 무효화와 프리워밍으로 1ms 미만 응답 성능을 확보했습니다.