클린 코드

Lys·2023년 9월 7일

개발상식

목록 보기
6/15

클린 코드란?

  • 원하는 로직을 빠르게 찾을 수 있는 코드
  • 모든 팀원이 이해하기 쉽도록 작성된 코드

클린 코드를 작성해야하는 이유

유지보수 시간의 단축
일반적으로 기존 코드를 변경하고자 할 때, 해석하는 시간과 수정하는 비율이 10:1이라고 한다.
코드를 변경하기 위해서 걸리는 전체 시간이 10시간이라고 하면,
코드를 분석하는 시간이 9시간 이상 걸린다는 말과 같다.


해석이 어려운 코드는 그만큼 코드를 분석하는 시간을 늘어나게 한다. 더욱이 대부분의 결함은 기존 코드를 수정하는 동안에 발생하기 때문에 이해하기 쉬운 코드가 오류의 위험성을 최소화할 수 있다.


클린 코드 주요 원칙 (일반)

  • Follow Standard Conventions

    • 코딩 표준, 아키텍쳐 표준 및 설계 가이드를 준수해야 한다.
  • Keep it simple, Stupid

    단순한 것이 효율적이며, 복잡함을 최소화해야 한다.
  • Boy Scout Rule

    • 참조되거나 수정되는 코드는 원래보다 클린해야 한다.
    • 자신이 담당한 코드는 담당하기 이전의 코드보다 더 클린하게 만들어야한다
    • Root Cause Analysis

    • 항상 근본적인 원인을 찾아야한다. 그렇지 않으면 반복될 것이다.
  • Do Not Multiple Languages in One Source File

    • 하나의 파일은 하나의 언어로 작성한다.

클린 코드 주요 원칙(설계 관점)

Simple Responsibility Principle(SRP)

  • 하나의 클래스는 하나의 책임만 가져야 한다.
  • Open/Closed Principle(OCP)
    • 클래스는 확장에 대하여 열려 있어야 하고, 변경에 대해서는 닫혀 있어야 한다.
  • Liskov Substitution Principle(LSP)
    • 파생 클래스의 메소드는 기반 클래스의 메서드를 대체하여 사용될 수 있어야 한다.
  • Interface Segregation Principle(ISP)
    • 클라이언트가 사용하지 않는 메소드에 의존하지 않아야 한다.
  • Dependency Inversion Principle(DIP)
    • 추상화된 것은 구체적인 것에 의존하면 안된다.

클린 코드 작성법

의미있는 이름

  • 이름이 존재 이유, 수행하는 기능, 사용 방법을 대변해야한다.
  • 네이밍을 설명하는 주석이 필요하면 안 된다.
  • 널리 쓰이는 의미가 있는 단어를 다른 이유로 사용하면 안 된다.
  • 불용어(info, data 같이 애매한 의미의 단어)는 피해야 한다.
  • 검색하기 쉬운 단어를 사용하기
  • 클래스 이름은 명사
  • 메서드 이름은 동사 (표준에 따라 get, set, is를 사용한다.)
String s; //공연일자 (x)

String concertDate; // 공연일자 (o)

함수

  • 함수 안의 줄 수는 적을수록 좋다.
  • 들여 쓰기 레벨도 최대 2단까지만 있는 것이 가장 바람직하다.
  • 한 가지 일을 하는 함수들과 그 함수들을 호출하는 함수 하나로 이루어져 있어야 한다.
  • 코드는 위에서 아래로 읽혀야 한다.
  • 함수 인수 최대한 적게 쓰기
  • 가장 좋은 경우는 인수가 없는 것, 다음에는 단항 함수(인수가 1개)이다.
  • 입력값이 있는 변환 함수는 반환 값이 있는 것이 좋다.
  • 플래그 인수(ex. isTrue)는 사용하지 않는 것이 좋다.
  • 주석
    • 코드로 표현하지 못하는 정보를 제공하는 주석
    • 의도를 설명하는 주석
    • 결과를 경고하는 주석
    • 중요성을 강조하는 주석
    • 앞으로 할 일을 TODO주석으로 남김

오류 처리

  • 오류 코드보다 예외를 사용
  • 미확인 예외 사용
  • 예외에 의미 제공
  • 외부 라이브러리를 사용할 때에는 라이브러리용 클래스를 고려해보는 것이 좋다.

🙇‍ 참고 사이트 🙇‍

https://www.samsungsds.com/kr/insights/cleancode-0823.html?referrer=https://talkwithcode.tistory.com/73
https://talkwithcode.tistory.com/73
https://shinsunyoung.tistory.com/124

0개의 댓글