코딩에 도움이 되는 요소

(일반) 협업 + 유지보수에 필요한 과정 클린 코드를 알아보자

너어디사니 2024. 5. 6. 20:24

클린코드란??

  • 가독성이 좋고 유지보수 하기 좋은 코드
  • 나중에 다시 읽었을 때 다른 사람이 읽었을 때에도 이해하기 쉬운 코드
  • 한 번 작성된 코드가 보통 많이 읽히므로 작성하기 쉬운코드 보다 읽기 쉬운 코드가 좋은 코드
  • 리펙토링
    • 기존의 코드를 변경해서 코드의 구조를 개선 시키고 가독성을 향상 시키는 프로세스
    • 결과의 변경 없이 구조만 개선 시키는 방법
    • 리펙토링을 진행하는 시점
      • 기능 개발을 끝낸 후
      • 코드 리뷰를 받으면서 토의를 할 때
      • 새로운 기능을 추가하기 전
      • 코드가 뒤죽박죽 섞여있을 경우(가독성이 낮거나 이해도가 떨어질 경우)
  • 클린 코드 작성 요령
    • 코딩 컨벤션
      • 다른 사람들도 이해하기 쉽게 코드를 작성하는 규칙
      • 코드의 가독성이 증가해서 나중에 봐도 쉽게 이해가 가능하다
      • 유지 보수가 용이하다
      • 효율적인 협업이 가능하다
        1. camelCase (카멜케이스) 표기법
        • 주로 변수, 메소드의 이름을 지정할 때 사용
        • seoulFood (O) seoul_food (X) seoulfood (X)
        1. snake_case (스네이크케이스) 표기법
        • 주로 상수의 이름을 지정할 때 사용
        • seoul_food (O) SeoulFood (X)
        1. PascalCase (파스칼케이스) 표기법
        • 주로 클래스의 이름을 지정할 때 사용
        SeoulFood (O)
        Seoul_Food (X)
        
      • 유용한 단축키: reformat code
      • Control + Alt + L (Windows) Command + Option + L (Mac)
      • 유용한 단축키: optimaze all imports
        • 쓰지 않는 Import를 깔끔하게 정리 해 준다
        Control + Alt + O (Windows)
        Control + Option + O (Mac)
        
    • 이름을 잘 작성하는 방법
      • 의도를 밝히는 이름을 짓기
      • 오해할 수 있는 정보를 주지 않기
      • 모두가 이해알 수 있는 이름으로 짓기
      • 규칙에 맞게 품사를 사용
        • 클래스, 프로퍼티의 이름 : 명사
        • 함수 이름 : 동사
      • ex
      • // bad // 변수 이름에서 의도를 알기 어려움. val d = ZonedDatetime.now() // good val requestDatetime = ZonedDatetime.now() // bad // list 자료구조를 사용하지 않으면서 변수 이름에 list를 포함하면 좋지 않음. val userList = mapOf( "logan" to User(1), "frank" to User(2), "molly " to User(3), ) // good // 자료구조를 나타내지 않으면서 여러 대상을 나타내려면 // s를 붙여 복수형으로 사용, 혹은 group을 붙인다. val userGroup = mapOf( "logan" to User(1), "frank" to User(2), "molly " to User(3), ) // Bad class SaveProgress { fun progress() { val currentStep = getStep() repository.save(currentStep) } } // Good class ProgressSaver { fun save() { val currentStep = getStep() repository.save(currentStep) } }
    • 주석을 잘 작성하는 방법
      • 코드의 의도를 드러내게끔 작성한다
      • 학습할때는 주석을 작성하면 좋다
      • 좋은 주석
        • 계획을 설명하는 주석
        • 정책을 설명하는 주석
        • 학습을 위한 주석
      • 나쁜 주석
        • 코드를 설명하는 주석
        • 오해를 일으키는 주석
  • 테스트
    • 개발자의 로직을 보고 문제가 발생할 수 있는 부분을 예측할 수 있다
    • 제품을 베포하기 전에 QA를 거쳐서 버그를 찾아낼 수 있다
    • 베포된 제품들을 모니터링 시스템을 보고 알 수 있다
    • 고객의 제보를 보고 알 수 있다
    • 테스트 코드
      • 프로그램의 기능과 동작을 확인하기 위한 코드
      • 코드의 안정성과 신뢰성을 확보
      • 코드 변경 시에 예상치 못한 버그를 발견하고 유지보수성을 높일 수 있다
      • 테스트 코드의 장점
        • 문제를 보다 빨리 발견할 수 있다
        • 문제 확인을 자동화 할 수 있다
        • 요구사항을 문서화 역할을 한다
        • 리펙토링을 자신감 있게 진행할 수 있다
      • BehaviorSpec
        • 특정 기능이나 원하는 동작을 명시적으로 정의하는 것
        • Behavior-Driven Development (BDD) 스타일 이라고도 한다
        • assert 문을 활용해서 검증이 가능하다
        class SomeTest : BehaviorSpec({
        
            Given("어떤 조건이 주어졌을 때") {
                When("어떤 기능을 실행하면") {
                    Then("어떤 결과가 나타난다.") {
        		            true shouldBe true
                    }
                }
            }
        })
        
        • 테스트 코드가 지켜야 할 규칙
          • Fast : 테스트는 빠르게 동작해야 한다
          • Independent : 각 테스트는 서로 의존해서는 안되고 독립적으로, 아무 순서로 실행시켜도 괜찮아야 한다
          • Repeatable : 테스트는 어떤 환경에서도 반복이 가능해야 한다
          • Self-Validating : 테스트 성공 or 실패 값을 bool 값으로 결과를 내어 검증해야 한다
          • Timely : 테스트 하려는 실제 코드를 구현하기 직전에 구현해야 한다