본문 바로가기
멋쟁이사자처럼 동아리/공통피드백

3주차. 클린코드

by PlusUltraCode 2024. 6. 22.

이전 미션 공통 피드백

Java 컨벤션 & 스타일

네이밍 규칙

  • 메서드
    • 동사형으로 작성
    • Lower camel case 사용
  • 변수
    • 명사형으로 작성
    • Lower camel case 사용
  • 상수
    • UPPER_SNAKE_CASE 사용
  • 클래스, 타입
    • Upper camel case 사용

예시:

java
class Car {
    private static final int DEFAULT_POSITION = 0;
    
    private final String name;
    private int position = DEFAULT_POSITION;
    
    public void move() {
    }
}

공백

  • 공백도 의미를 담을 수 있다.
    • 컨벤션을 지킨 공백
    • 선언 사이의 공백

예시:

java
class Car {
    private static final int DEFAULT_POSITION = 0;
    private final String name;
    private int position;

    public void move() {
        position++;
    }

    public String getName() {
        return name;
    }
}

또는

java
class Car {
    private static final int DEFAULT_POSITION = 0;
    
    private String name;
    private int position;
    
    public void move(int power) {
        int move = power * 2;
        boolean movable = true;
        
        position++;
    }
    
    public String getName() {    
        return name;
    }
}

메서드 순서

클래스 내 메서드의 순서도 역할을 표현할 수 있다. 자바에서 메소드 순서

intellij 자동 정렬 사용

접근 제어자

  • 접근 제어자도 의도를 표현한다.
  • private, protected, (default), public

JCF 사용

  • Java Collection Framework
  • 배열 vs List: 기능이 더 많은 Collection 사용
  • Interface type으로 선언
    java
    코드 복사
    List<String> cars = new ArrayList<>(); List<String> cars = new LinkedList<>(); // 또는 ArrayList<String> cars = new ArrayList<>();

커밋 단위

매직넘버 제거하기

  • 매직넘버란? 의미 있는 이름의 상수로 대체될 수 있는 숫자 코드의 매직 넘버 (Magic Number) 란 무엇일까?
    java
    코드 복사
    class Car { private String name; private int position = 0; } // 또는 class Car { private static final int DEFAULT_POSITION = 0; private String name; private int position = DEFAULT_POSITION; }

EOF (End Of File)

intellij 파일 끝에 개행을 자동으로 추가하는 방법

주석

  • 주석은 필수가 아니다.
  • 주석도 적절히 활용하자
    java
    코드 복사
    class Car { private int p; // 자동차 위치 public void move(int n) { // n은 이동 거리 p += n; } } // 또는 class Car { private int position; public void move(int distance) { position += distance; } }

객체를 객체답게

  • 올바른 책임 부여하기

구현 방식

  • Out → In or In → Out
    • Out → In 접근 방식은 도메인 지식이 없거나 요구사항을 객체로 도출할 수 없는 경우 적합
    • In → Out 접근 방식은 도메인 지식이 있거나 요구사항을 객체로 도출할 수 있는 경우 적합
    • 애플리케이션 개발 단계에서 Out → In, In → Out 방식 중 하나만 사용되지 않는다.
    • 두 방식이 핑퐁처럼 주고 받으며 개발이 진행된다.
    • 현재 컨텍스트(도메인 지식 수준, 객체 설계 역량 등)에 따라 접근 방식은 달라질 수 있다.

구현 순서도 코딩 컨벤션이다

  • 상수, 클래스 변수, 인스턴스 변수, 생성자, 메서드 순으로 작성한다.

클린 코드

거의 바이블 같이 활용된 도서 "Clean Code" - 로버트 마틴(2013)

Clean Code 클린 코드 - 예스24

'이해하기 쉬운', '테스트 가능한’ 코드가 클린하다

읽기 쉬운, 이해하기 쉬운, 간단한, 성능 좋은, 안전한, 우아한, 테스트 가능한, 캡슐화된, 확장 가능한, 유지보수 가능한, 재사용 가능한.

??: Clean code라는 건 없습니다.

Clean Code 라는 건 없습니다 | GeekNews

클린 코드를 위한 다양한 개념과 방식들이 존재함.

주석을 쓰냐, 파라미터 개수, 명명 방식, 줄바꿈, 구조, 불변 등등

클린 코드가 왜 중요하냐?

결국 으로 (혹은 과거의 나) 프로덕트를 개발하기 때문.

앞으로 하게 될 코딩은 대부분 팀 스포츠. 팀 전체가 공통적인 이해를 가지는 것이 중요하다.

코드가 클린한가? 아닌가? 는 크게 중요하지 않다. 왜 그 코드가 더 좋은지를 확실하게 말할 수 있어야 하며, 정확한 용어를 사용하여 코드를 설명할 줄 아는 것이 중요하다.

본인 혹은 팀에서 중요하게 여기는 코드 가치(퀄리티)를 잘 정의하고 추구할 것.

와닿지 않음. 당연함

앞으로 코드를 작성하면서, 스스로 물어보기

코드가 클린한가? 그 이유는? 을 대답할 수 있는 코드를 작성하도록 노력하기.

클린코드에 대한 직관 키우기

'멋쟁이사자처럼 동아리 > 공통피드백' 카테고리의 다른 글

7주차. 인증  (0) 2024.06.22
6주차 Spring core  (0) 2024.06.22
5주차. 스프링 JDBC  (0) 2024.06.22
4주차. 스프링 MVC  (0) 2024.06.22
2주차. 단위테스트  (0) 2024.06.22