Clean Code - (4) : java 번외편 2

­이승환·2021년 10월 27일
0

Clean Code

목록 보기
4/7

서론


아래의 포스팅과 이어집니다.
링크

기능 목록 구현 재검토

지난 포스팅에서도 언급했지만, 개발 초기단계에서 기능 목록을 클래스 설계, 메소드 설계 등 너무 구체화시키지 않는 것이 좋다. 언제든 변경될 수 있기 때문이다. 예외처리나 코너케이스 등 예외적인 상황들도 적는 것이 좋다

예시는 아래와 같다.

  • 사용자가 입력한 이름을 쉼표 기준으로 분리한다
  • 사용자 이름이 5자 이하인지 검증한다
  • 자동차는 random값이 4 이상인 경우 전진한다
  • 4 미만인 경우는 early return
  • 여러 대의 자동차 중 최대 위치 값을 구현한다
  • ...

하드코딩 금지

문자열, 숫자 값을 하드코딩을 하지말고, 상수값이 필요하다면 이름을 부여해 역할을 드러내는 것이 좋다. java 상수와 같은 키워드로 검색하면 상수와 관련한 좋은 포스팅 들이 많다. 확인해 볼 것

api 를 적극 활용하자

메소드를 직접 구현하기 전에 언어에서 제공하는 api를 확인해 본후 제공한다면 적극 활용하자.

String result = String.join(",", winners) // List<String> winners

배열 대신 컬렉션을 활용하자

위와 연관된 조언이다. 컬렉션들의 경우 자바에서 제공하는 api가 무수히 많이 있기 때문에 굳이 배열을 사용해서 기능별 메서드를 구현할 필요가 없는 경우가 왕왕 있다.

객체에 메시지를 보내자

상태 데이터를 가지는 객체에서 데이터를 꺼내려 모델을 get 하지 말고 차라리 객체에 메시지를 보내자

// bad
private boolean isMaxPosition(Car car) 

// good
car.isMaxPosition(maxDistance) // Car 는 기본 Class

Instance Value를 줄이기 위해 노력하자

필드가 많은 것은 객체의 복잡도를 높이고, 버그 발생 가능성을 높일 수 있다.
중복이 있거나 불필요한 필드가 없는지 확인해 필드의 수를 최소화하고, 어쩔 수 없는 경우는 클래스 생성후 의존관계를 성립하게 하는 것이 나을 수도 있다.

//bad
public class Winner {
	private List<Car> cars;
    private List<String> winnerList;
    private int maxDistance;
}

//good
public class Winner {
	private List<Car> cars;
    
    private int getMaxDistance() { ... }
    
    public List<String> getWinners() { ... }
}

비즈니스 로직과 UI 로직을 분리하자

비즈니스 로직과 UI 로직을 한 클래스가 담당하지 않도록 한다.
단일 책임 원칙을 항상 유념하자

public class Car {
	private int position;
    
    public void move(int randomValue) { ... }
    
    // bad
    private void print(int position) { ... }

}

현재 객체의 상태를 보기위한 로그 메시지 성격이 강하다면 toString() 을 통해 구현한다. View에서 사용할 데이터라면 getter 메소드를 통해 데이터를 전달한다.

함수라인에 대한 기준

15줄 내외로 줄이자. 최소 모니터 화면에 한개의 메소드가 다 보이는 것이 제일 좋다.
이 기준은 main 함수에서도 해당된다. 주석은 가능하면 함수 밖, 또는 코드 우측에 표시하자

발생할 수 있는 예외케이스에 대해 고민하자

정상적인 경우를 구현한 것보다 예외 상황을 모두 고려해 프로그래밍 하는것이 더 어렵다. 예외상황을 항상 생각하는 프로그래밍 습관을 키우자. 이것은 코딩테스트에서도 많은 도움이 된다. 코너케이스..코너케이스..

주석은 꼭 필요한 경우에

git을 통해 관리할 자원에 대해서도 고려한다.

즉 .gitignore를 항상 기억해두고, 굳이 올리지 않아도 될 부분은 과감하게 제외해서 관리하는 것이 좋다. 자동으로 생성하는 파일이라던지.. 아니면 의존성 패키지만 있으면 쉽게 설치할 수 있는 부분이라던지.. 이런것들은 과감히 지운다.

참고로 .zip 파일이 나도 모르게 커밋되어서 나중에는 너무 무거워져 커밋이 안 되어 결국 filter 작업을 했던 경험이 있는 나로써는 정말 중요하다는 것을 인지하고 있다.

profile
Mechanical & Computer Science

0개의 댓글