CS/개발상식

[개발상식]클린코드란?

ari0930 2025. 6. 15. 01:46

클린코드란?

  • 가독성이 높고 유지보수가 쉬운 코드를 의미
  • 소프트웨어 개발에서 클린 코드를 작성하는 것은 코드 품질을 높이고 협업을 원할하게 하며 버그를 줄이는 중요한 원

클린코드 작성법


1. 의미 있는 변수 및 함수명 사용

변수,함수,클래스 등의 이름은 코드의 의도를 잘 표현할 수 있도록 지어야 하며

이름만으로도 코드가 하는 일을 예측할 수 있도록 해야한다.

2.함수는 하나의 역할만 수행

하나의 함수에 여러개의 기능을 수행하기보다는 여러개의 함수를 만들어 호출하는 방식으로 함수들을 분리하면 유지보수가 쉬워지고 가독성이 올라가면 테스에 용이하다.

3. 서술적인 이름을 사용하라

서술적인 이름을 사용하면 읽는 사람이 어떤 기능을 하는지 예측할 수 있도록 해준다.

  • 사각형 넓이 구하는 함수 ⇒ calculateSquare

4. 객체 생성에 유의미한 이름을 사용하라

객체의 생성자를 오버로딩 하는 경우 어떤 값이 인수로 들어가는지 알 수 없기에 인수를 설명하는 이름으로 작성하는 것이 명확하다.

// 두 번째 인자가 무엇인지 파악이 어렵다.
Student student = new Student("James", 85); 

// 이름을 부여하여 두 번째 인자를 명확하게 파악할 수 있다.
Student student = Student.withGrade("James", 85);

5. 명령과 조회를 분리해라 (CQS 원칙)

함수는 뭔가를 수행하거나 뭔가를 조회하거나 하나의 역할만을 수행 해야 한다.

6. 적절한 주석 사용(불필요한 주석 제거)

코드 자체 의미를 설명할 수 있도록 작성하고, 꼭 필요한 경우만 주석을 추가한다.

좋은 주석

  1. 법적인 주석
  2. 정보를 제공하는 주석
  3. 의도를 설명하는 주석
  4. 의미를 명료하게 밝히는 주석
  5. 결과를 경고하는 주석
  6. TODO 주석
  7. 중요성을 강조하는 주석
  8. 공개 API에서 Javadocs

나쁜 주석

  1. 이해하기 어려운 주석 다른 코드를 뒤져봐야하는 주석은 코드를 읽는 사람과 제대로 소통하지 못하는 주석입니다.
  2. 같은 이야기를 중복하는 주석
  3. 오해의 여지가 있는 주석
  4. 의무적으로 다는 주석
  5. 이력을 기록하는 주석
  6. 있으나 마나한 주석
  7. 함수나 변수로 표현할 수 있는 주석
  8. 닫는 괄호에 다는 주석
  9. 주석으로 처리한 코드
  10. HTML 주석
  11. 전역 정보

7. 오류 코드보단 예외를 사용하

if-else를 사용해서 구현 하는것보다 try-catch 문을 사용하여 오류 처리 코드를 구분할 수 있다.

이렇게 try-catch문을 사용하는 이유는 오류 처리하는 작업또한 함수를 이용하여 별도의 함수를 사용하여 처리해햐한다.

8. 중복 코드 제거

반복 되는 부분을 함수로 따로 빼주어서 반복을 줄여주는 것이 좋다.

9. 테스트 가능한 코드 작성

단위 테스트가 가능하도록 코드 구조를 설계

함수를 작은 단위로 분리하면 테스트가 용이해진다.

나쁜예)

public class UserService {
    public User getUserById(int id) {
        Database db = new Database();  // 데이터베이스 의존성 (테스트 어려움)
        return db.findUserById(id);
    }
}

좋은예)

// 1. 인터페이스 생성 (테스트 더블 사용 가능)
public interface UserRepository {
    User findUserById(int id);
}

// 2. 실제 데이터베이스 접근 클래스를 구현
public class DatabaseUserRepository implements UserRepository {
    @Override
    public User findUserById(int id) {
        // 실제 데이터베이스에서 사용자 조회하는 로직
        return new User(id, "John Doe");
    }
}

// 3. UserService - 의존성을 주입받아 사용
public class UserService {
    private final UserRepository userRepository;

    // 의존성 주입 (Constructor Injection)
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public User getUserById(int id) {
        return userRepository.findUserById(id);
    }
}

10. 불필요한 의존성 줄이기

  • 필요하지 않는 모듈이나 라이브러리 최소한으로 유지
  • 객체 지향 프로그래밍에서는 SOLID 원칙을 적용하여 유지보수를 쉽게 할 수 있다.

SOLID 원칙이란?

  1. Single Responsibility Principle (SRP) - 단일 책임 원칙
  2. Open/Closed Principle (OCP) - 개방/폐쇄 원칙
  3. Liskov Substitution Principle (LSP) - 리스코프 치환 원칙
  4. Interface Segregation Principle (ISP) - 인터페이스 분리 원칙
  5. Dependency Inversion Principle (DIP) - 의존 역전 원칙
반응형

'CS > 개발상식' 카테고리의 다른 글

애자일(Agile) 이란?  (4) 2025.08.07
CSR vs SSR  (3) 2025.07.08
[개발상식] OOP란?  (3) 2025.06.19
아키텍처  (0) 2025.05.13
리팩토링  (0) 2025.05.05