[워밍업 클럽 스터디 2기 :: BE 클린코드 & 테스트] 2주차 발자국
주석
의사 결정의 히스토리를 코드로 표현할 수 없을 때, 주석으로 상세하게 설명
자주 변하는 정보는 지양
코드도 변경되면 주석도 함께 변경
좋은 주석?
우리가 가진 모든 표현 방법을 동원해 코드에 의도를 녹여내고
그럼에도 불구하고 전달해야 할 정보가 남았을 때 사용하는 주석
변수와 메서드의 나열 순서
정답은 없지만 중복이 없을 수 있게 정렬
변수
사용하는 순서대로
사용하는 곳 근처
메서드
공개 메서드를 상단에
중요도, 종류별로 그룹화
상태 변경 >> 판별 ≥ 조회
나열 순서로도 의도와 정보를 전달 할 수 있는 것!!!
코드를 보는 사람이 인지하기 쉽게!!
패키지 나누기
패키지는 문맥으로써의 정보를 제공할 수 있다.
패키지는 적당(?)하게 나눠야 좋다
리펙토링
null 을 반환하는 것은 nullPointException 을 발생시키기 때문에 안티패턴
파라미터로 Optional 을 보내는 것도 안티 패턴
Optional 이 자체가 null
Optional 에 들어있는 객체가 null
Optional 에 들어있는 객체가 존재 한다 받는 입장에서는 위 3가지 처리를 해야함
Optional.
ifPresentOrElse
앞에는 값이 있을 때, 뒤에는 값이 없을 때 액션을 지정할 수 있음optionalLockerPass.ifPresentOrElse( lockerPass -> outputHandler.showPassOrderSummary(selectedPass, lockerPass), () -> outputHandler.showPassOrderSummary(selectedPass) );
Git Commit 은 짧게 짧게
작업을 쪼개서 유지 관리에 용이 해짐
IO 통합
세트로 묶여서 작업되는 부분들을 합쳐서 관리하는 것
일급 컬렉션
일급 컬렉션은 리스트를 감싸서 컬렉션 내부에서 리스트를 추상화(제어.. 등등)을 할 수 있음
display 책임
Order 추가
헥사고날 아키텍쳐
포트와 어댑터
포트 : 인터페이스, 스펙!
어댑터 : 포트에 맞는 구현체
능동적 읽기
목표 : 우리의 도메인 지식을 늘리는 것!!
오버 엔지니어링
필요한 수준보다 더 높은 수준의 엔지니어링!
구현체가 하나인 인터페이스
구현체를 수정할 때마다 인터페이스도 수정해야함
코드 탐색에 영향, 어플리케이션이 비대해 짐
너무 이른 추상화
정보가 숨겨지기 때문에 복잡도가 높아진다
다른 개발자들이 의도를 파악하기 어렵다.
클린코드는 절대적인 것이 아니다.
미래에 잘 고치도록 할 수 있는 코드 센스가 필요!
결국 클린코드의 사고법을 기반으로 결정!
지속가능한 소프트웨어의 품질 vs 기술부채를 안고 가는 빠른 결과물