Code ‐ 추상 - dnwls16071/Backend_Summary GitHub Wiki
발단 : 회사를 다니면서 코드를 작성하고 그 과정에서 많은 코드 리뷰를 받았다. 메서드 네이밍, 클래스 네이밍, 향후 유지보수를 위한 설계 등등 혼자 개발을 하면서 지나쳤던 사소한 부분들을 개인적으로 공부해서 익숙하게 하기 위해 "읽기 좋은 코드"에 대한 부분을 공부하기로 결심했다. 기술 스택을 많이 알고 사용하는 것도 좋지만 코드의 본질부터 꿰뚫어보자는 생각으로 시작하게 되었다.
📚 추상과 구체⚠️
- 이름을 짓는다 -> 가장 단순하면서도 아주 중요한 고도의 추상적 사고 행위
- 실제로 실무를 경험하면서 위의 내용이 가장 중요하다는 것을 뼈저리게 느꼈다.
📚 이름 짓기
코드 리뷰 내용 포함
- 단수와 복수를 구분하기 -> 끝에 -e(s)를 붙여 어떤 데이터가 단수인지 복수인지를 나타내는 것만으로도 읽는 이에게 중요한 정보를 같이 전달할 수 있다.
- 이름 줄이지 않기 -> 줄임말이라는 것은 가독성을 제물로 바쳐 효율성을 얻는 것으로 대부분 잃는 것에 비해 얻는 것이 적다. 자제하는 것이 좋으나 관용어처럼 많은 사람들이 자주 사용하는 줄임말 정도는 존재한다.
❗코드에 대한 컨텍스트를 아는 사람은 알 수 있으나 컨텍스트를 모르는 사람은 알기 어렵다.(승준님)
- 농담에서 파생된 용어, 일부 팀원, 현재 우리 팀만 아는 용어 금지
❗프론트엔드와의 협업 과정에서 불명확한 응답은 어떤 것을 가리키는지 명확하게 알기 어렵다.(상혁님)
- 오버 엔지니어링인지를 파악하기
❗동작 가능한 코드를 구현하고 리팩토링 및 리뉴얼하면서 점점 고도화를 시도하기
📚 메서드와 추상화
void 서점에서_책을_샀다() {
우진이는 산책을 하다 은행에 가서 현금을 얼마 인출했다.
서점 가는 길에 아이스크림을 하나 사 먹었다.
남은 돈으로 서점에 가서 보고싶은 책을 고르고, 책을 구매했다.
}
// Ex
Money 은행에서_현금_인출();
Balance 아이스크림_사먹기(Money);
Book 서점에서_책_구입하기(Balance);
❗더 큰 맥락 안에서 포괄적인 의미를 담는다.
📚 메서드 선언부
반환타입 메서드명 (파라미터) {}
- 메서드명 - 추상화된 구체를 유추할 수 있는, 적절한 의미가 담긴 이름 & 파라미터와 연결지어 더 풍부한 의미를 전달
- 파라미터 - 파라미터 타입, 개수, 순서를 통해 의미를 전달, 파라미터는 외부 세계와 소통하는 창구
- 반환타입 - 메서드 시그니처에 납득이 가는 적절한 타입의 반환값 돌려주기 & void 대신 충분히 반환할 만한 값이 있는가를 고민하기(반환값이 있다면 테스트가 용이하기 때문이다.)
📚 매직 넘버, 매직 스트링
- 의미를 갖고 있으나 상수로 추출되지 않은 숫자나 문자열 등
- 상수 추출로 이름을 짓고 의미를 부여함으로써 가독성과 유지보수성을 높이는 효과