1. 객체 안에 toString 오버라이딩
- 좋지 않다는 리뷰를 받음
class Car {
public String toString() {
return name + " : " + "-".repeat(score);
}
}
- 출력은 도메인의 책임이 아니다.
- 정해진 형식 이외에 출력을 위해 수정이 불가피하다
2. 전략패턴
- 확장성 및 테스트에 용이
- 객체지향의 장점인 다향성을 적극 활용한 패턴
💠 전략(Strategy) 패턴 - 완벽 마스터하기
Strategy Pattern 전략 패턴은 실행(런타임) 중에 알고리즘 전략을 선택하여 객체 동작을 실시간으로 바뀌도록 할 수 있게 하는 행위 디자인 패턴 이다. 여기서 '전략'이란 일종의 알고리즘이 될 수
inpa.tistory.com
3. 지네릭 메서드 + 함수형 인터페이스
: 입력에 있어 반복적인 예외처리(재입력)를 처리해주는 클래스
public class IterativeReader {
public static <T> T readUntilNoError(Supplier<T> supplier) {
while (true) {
try {
return supplier.get();
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
}
}
}
}
유효하지 않은 입력이 주어질 때
- 다시 입력받는 기능
4. compareTo : 비교에 대한 책임을 객체에 삽입
- isSame을 통해 가독성 있는 코드가 되도록 노력
- 여기서 가독성은 "타인이 내 코드를 직관적으로 이해하는 것"을 의미
public class Car implements Comparable<Car> {
...중략
@Override
public int compareTo(Car o) {
return Integer.compare(this.score, o.score);
}
public boolean isSame(Car o) {
return compareTo(o) == 0;
}
}
- 우승자들을 반환하는 스트림
public static List<String> getWinnerNames(List<Car> cars) {
Car maxScoreCar = Collections.max(cars);
return cars.stream()
.filter(car -> car.isSame(maxScoreCar))
.map(Car::getName)
.toList();
}
5. Array보단 List를 더 사용해보자
받은 리뷰 중 하나
라이브러리/API 등이 Array 형을 요구해서 Array를 사용할 때를 제외하고는 List를 사용하는 편이에요.
[이펙티브 자바] 아이템28 | 배열보다는 리스트를 사용하라
배열과 리스트 차이점 첫 번째 - 배열은 공변인 반면 리스트는 불공변이다. > 공변: 함께 변한다 불공변: 함께 변하지 않는다. 배열의 경우 가 의 하위 타입이라면 는 배열 의 하위 타입이 된다.
velog.io
-기타
: intellij의 reformat 기능을 자주 활용하자
: 파일 끝의 개행을 추가하자 : POSIX new line 규칙
-이외에 든 생각
1) 성능보다 유지보수/가독성을 더 신경쓰자
- 프로그래밍은 알고리즘 문제가 아니다. 알고리즘은 기존의 조건을 최대한 준수하는 선 안에서 통과하는 코드를 작성하고, 그 효율을 최대한으로 끌어들이는게 목적이었다면, 우테코 미션에서는 다양한 가능시나리오를 생각해보고, 최대한 범용적이면서 직관적인 코드를 작성하는 것의 필요성을 느끼고 있다.
즉, 초점을 "효율" => 확장성/가독성 으로 옮길 필요성을 많이 느끼고 있다.
이는 코드 리뷰에서도 공통적으로 받은 의견이다.
2) 컨벤션과 네이밍에 신경을 쓰자
컨벤션 : intellij의 reformat을 자주 습관화하기
네이밍 : 내가 아닌 남이 추론가능한 이름짓기
'우테코 > Level1' 카테고리의 다른 글
[TDD] JUnit - @ParameterizedTest 공식문서 정리하기 (1) | 2024.02.28 |
---|---|
[스크랩] 페어프로그래밍 환경설정 - 공통 커밋 Co-authored-by (0) | 2024.02.23 |
List.of() vs Arrays.asList() 차이 / 갱신 가능 여부 (0) | 2024.02.22 |
[우테코-Lv1] TDD- AssertJ 라이브러리 (0) | 2024.02.21 |
[Intellij IDEA] 페어 프로그래밍 공유 환경설정 / 같은 IDE 공유하기 (0) | 2024.02.19 |