1. 코드 작성법
1.1. 클린 코드의 기준 : 단일 목적과 오용, 남용 방지
모든 변수, 함수, 클래스는 목적에 맞게 활용되어야한다는 원칙
코딩 잘하는 팁 세가지 (이걸 알면 코드가 깔끔해 진다)
- 반복되는 목적의 작업은 하나의 함수나 클래스로 묶어야하고
- DRY, Don’t Repeat Yourself : 반복하지 마라
- 동일한 작업을 수행하는 로직이 여러군데 있음 : (나쁜 사례) 해당 로직 수정 시 모든곳에서 수정해야함
- 목적이 여러개여서는 안되고
- KISS, Keep It Simple and Stupid : 단일 목적을 가져야한다 + 바보가 봐도 이해가능해야한다
- 하나의 함수는 하나의 역할만 해야한다 : (나쁜 사례) ListItem 을 생성하고 + 로컬 스토리지에 저장한다
- 목적이 미래를 위한것이어서도 안된다
- YAGNI, You Ain’t Gonna Need It : 지금 필요한것만 만든다
- 나중에 사용할 기능까지 미리 만들지않는다 : (나쁜 사례) 쓸것으로 생각되서 만들었으나 쓰지 않는 API
1.2. 클린 코드의 목적 : 쉬운 이해 및 유지보수성
유지보수성이 좋다라는 뜻은 코드에 수정이 필요할때 명확한 이해를 기반으로 매우 작은 부분만 수정하면 된다는것
- 중복의 최소화: 한 곳의 수정이 중복된 다른 코드에서의 수정을 동반해선 안됩니다
- 코드 변경의 용이성: 코드는 항상 완벽하지 않고, 요구사항은 상시 바뀔 수 있습니다.
- 재사용성: 정돈된 코드는 전혀 다른 요구사항 및 비슷한 경우에도 그대로 사용이 가능합니다.
1.3. 코드 그 자체로써 이해 가능해야한다 : 주석과 같은 코드 (인간의 문장과 같은 코드)
인간의 언어로 문장을 만드는것과 같이, 프로그래밍 언어로 문장을 만든다고 생각하라.
- 코드(변수, 함수, 클래스)는 비지니스를 해결하기 위한 사람의 문장을 컴퓨터 언어로 변환한것에 불과하다.
- 생각보다 코드를 작성하지 못하는 사람은 독해나 작문능력이 떨어지거나, 논리적 사고를 못하는 사람
- 코드를 잘 작성하지 못하는 사람은 코딩의 문제가 아니라 사고의 문제 : 논리적 사고 훈련이 필요
- 코드를 잘 작성하지 못하는 사람은 가장 먼저 문장을 작성해보면 된다. 그 후 각 문장을 코드로 변환하라.
- 목적 중심의 큰 덩어리의 생각 → 세부사항에 해당하는 작은 덩어리의 생각 (검증, 변환, 에러처리)
<aside>
✏️
고객의 호텔 예약을 받는 API 를 만들어라 = 고객의 호텔 예약을 받는다.
- 목적 중심의 큰 덩어리의 생각
- 고객은 호텔 예약 요청을 보낸다.
- 호텔 예약이 완료되면 해당 날짜의 방을 예약 불가능으로 전환한다.
- 예약 관련 정보를 저장한다.
- 예약 완료 메세지를 고객에게 반환한다.
-
그 다음, 세부사항에 해당하는 작은 덩어리의 생각 (검증, 변환, 에러처리)
- 고객은 호텔 예약 요청을 보낸다.
- 검증 : 예약 요청 정보에 잘못된 정보가 없는지 확인한다.
- 이메일과 전화번호 형태가 맞는지 확인한다.
- 에러처리 : 값이 들어오지 않았을때 “모든 값에 대한 입력을 요구”하는 오류를 반환한다.
- 호텔 예약이 완료되면 해당 날짜의 방을 예약 불가능으로 전환한다.
- 검증 : 해당 날짜의 방이 예약 가능한지 확인한다 (예약이 이미 되어있는가?)
- 에러처리 : 해당 날짜의 방이 이미 예약이 되어있다면 “예약 불가” 오류를 반환한다.
- 예약 관련 정보를 저장한다.
- 변환 : 유저에게 받은 예약 정보 + 해당 날짜의 방과 호텔 정보를 합쳐 저장을 위한 객체 생성
- 검증 : 유저측으로부터 결제가 제대로 되었는지 재차 확인한다.
- 에러처리 : 예약 정보 저장 시 데이터베이스 관련 에러 발생 시 “내부 에러” 오류를 반환한다.
- 예약 완료 메세지를 고객에게 반환한다.
- 검증 : 유저 정보에 입력되어있는 이메일, 전화번호 중 어떤것으로 전달받을지 옵션을 본다.
- 변환 : 대고객 메세지 템플릿 중 알맞은것을 찾아 메세지 생성 후 고객에게 전달한다.
- 에러처리 : 메세지 전송에 실패한 경우엔 에러를 반환하진 않고, 내부 개발자에게 알람을 준다.
</aside>
-
위 예시와 같이 뛰어난 개발자일수록 하나의 비지니스 목적 달성을 위해 필요한 수많은 케이스를 고려한다
2. 함수 작성법
2.1. 함수는 어떻게 인간의 문장으로부터 만들어지나
해커톤에서 Spring Boot 사용 시 Controller 메서드를 4시간동안 한줄도 작성을 못하는 학생 사례
앞서서 개발자 여러분들이 해결하고자하는 비지니스 요구사항 문장을 받아 (주석으로) 구체화했다면, 이제는 각각에 대해 함수와 클래스라는 실제 프로그래밍 코드로 치환할 차례이다. 함수는 어떻게 작성하는것이 좋은가?