Kimuksung
Kimuksung 안녕하세요. 분산처리에 관심이 많은 생각하는 주니어 Data Enginner입니다.

좋은 코드란?

좋은 코드란?

안녕하세요

Python을 활용하여, Airflow, Streamlit, Spark에서 코드를 구현하면서 문득 어떻게 코드를 짜는 것이 옳은 방향인가 대한 생각이 깊어져 찾아보게 되었습니다.

좋은 코드란 무엇인가?

  • Read
  • Duplicate
  • Test

읽기 쉬운 코드?

  • 주석을 쓰지 않고, 남이 봐도 한번에 읽히는 코드
  • 주석은 메타데이터로서, 실제 동작과 불일치하는 경우 혼란을 야기 ( 어쩔 수 없는 경우에만 사용 )
  • 읽기만 쉽다면? 의미만 전달하는 것이 아닌 프로세스를 이해하는것도 포함

중복이 없는 코드?

  • 재사용이 높은 코드들을 수정 시 번거로움 방지
  • 의존성 적게하여 각각 다른 기능 구현
  • 그렇다면 시간이 지나면서 분리되는 코드들을 어떻게 해야 할까?

테스트가 용이한 코드?

  • 테스트를 통하여 예측 가능한 장애 방지


상위 목표

좋지 않은 코드를 줄인다.

좋지 않은 코드가 언제 생산되고 어떻게 방지할 수 있을까?

  1. Dead Code = 어디에 쓰이는지도 모르고, 삭제하기에는 위험 리스크가 있는 코드
    1. 동작하는 곳과 정의하는 코드 사이의 거리가 멀어진 경우
    2. 순수하지 않은 함수 = 함수 외부의 값을 통하여 동작하는 경우 → 함수의 입출력만 확인하여 내부를 수정할 수 없다면 유지보수 비용 발생
  2. 임시 방편 코드
  3. 추출이 아닌 추상화
  4. 삭제하기 쉬운 코드와 삭제하기 어려운 코드의 분리
  5. 일관성 있는 코드 = 합의된 규칙을 기반으로 코드를 구성한다.
    1. hooks과 관련되었다면, use-* prefix를 사용한다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
     // Case 1.
     // prefix: handle
     // target: button
     // action: click
     buttonClick()
        
     // Case 2.
     // prefix: on
     // action: click
     // target: button
     onClickButton()
    

    b. Directory = Component를 “어디에 분리할지”

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
     src
     ├── api
     ├── components
     ├── hooks
     ├── model
     ├── pages
        ├── contract
        └── docs
     └── utils
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
     src
     ├── @shared
        ├── components
        ├── hooks
        ├── models
        └── utils
     ├── contract
        ├── components
        ├── hooks
        ├── models
        ├── utils
        └── index.ts
     ├── docs
        ├── components
        ├── hooks
        ├── models
        ├── utils
        └── index.ts
     └── App.tsx
    
  6. 확장성 있는 코드 = 확장이 어려운 코드는 내부에서 많은 변경이 발생하며, 코드를 어렵게 만든다.