Java/클린코드

깨끗한 코드 그리고 의미있는 이름

chjs93 2022. 2. 6. 23:27

나쁜 코드

클린코드를 이야기 하기 앞서 나쁜코드의 예시는 다음과 같다.

  • 성능이 나쁜 코드 : 불필요한 연산을 개선할 여지가 있는 코드
  • 의미가 모호한 코드 : 이해하기 어렵거나 네이밍과 내용이 다른 코드
  • 중복된 코드 : 비슷한 내용인데 중복됨으로 버그를 낳는 코드

왜 나쁜 코드를 짜는 걸까?

  • 시간이 없어서
  • 영향 범위 (Side Effect) 가 넓어서

클린 코드란?

클린 코드는 나쁜 코드의 반대라고 할 수 있다.

  • 성능이 좋은 코드
  • 의미가 명확한 코드 (가독성이 좋은 코드)
  • 중복이 제거된 코드

 

유명하고 노련한 프로그래머들의 클린 코드 의견은 다음과 같다.

  • 비야네 스트롭스트룹 - C++ 창시자
    • 깨끗한 코드는 한 가지를 제대로 한다.
  • 그래디 부치 - 객체지향 대가
    • 깨끗한 코드는 잘 쓴 문장처럼 읽힌다.
  • 빅 데이브 토마스 - 이클립스 전략의 대부
    • 깨끗한 코드에는 단위 테스트 케이스와 인수 테스트 케이스가 존재한다.
  • 마이클 페더스 - Working Effectively with Legacy Code 저자
    • 깨끗한 코드는 언제나 주의 깊게 짰다는 느낌을 주는 코드
  • 론 제프리스
    • 중복없는 코드
  • 워드 커닝햄 - 위키 창시자
    • 짐작한 기능을 그대로 수행하는 코드

 

클린한 코드를 작성하는 방법으로 책에서는 다음 규칙을 제시한다.

  • 보이스카우트 규칙
    • 손대기 전보다 손댄 후가 더 깨끗한 코드!!

 

의미 있는 이름

  • 클래스 (객체) 이름 : 명사, 명사구
  • 메소드 이름 : 동사, 동사구
  • 인터페이스 이름 : 접두어 붙이지 않기 public interface IShapeFactory -> ShapeFactory
  • 구현 클래스 이름 : public class ShapeFactoryImpl -> CircleFactory
  • 변수명에 타입 넣지 말자
    • String nameString -> name
    • int itemPriceAmount -> itemPrice
    • Account[] accountArray -> accounts
    • List accountList -> accounts, accountList
    • Map accountMap -> accountMap
  • 루프 속 i j k 사용하지 않기 -> advanced for 문으로 대체하자! -> lamda를 사용하자
    • i, j -> row, col / width, height
    • i, j, k -> row, col, depth
  • 통일성 있는 단어 사용하기
    • Member, Customer/ User
    • Service/ manager
    • Repository / Dao
    • 등은 팀 협업을 통해 이야기 하자

 

Google Java Naming Guide

https://google.github.io/styleguide/javaguide.html#s5-naming