본문 바로가기

우테코/Level1

[우테코-Lv1] 자동차 경주 간단한 회고 (계속 수정 예정)

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를 사용하는 편이에요.

 

https://velog.io/@alkwen0996/%EC%9D%B4%ED%8E%99%ED%8B%B0%EB%B8%8C-%EC%9E%90%EB%B0%94-%EC%95%84%EC%9D%B4%ED%85%9C28-%EB%B0%B0%EC%97%B4%EB%B3%B4%EB%8B%A4%EB%8A%94-%EB%A6%AC%EC%8A%A4%ED%8A%B8%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%9D%BC

 

[이펙티브 자바] 아이템28 | 배열보다는 리스트를 사용하라

배열과 리스트 차이점 첫 번째 - 배열은 공변인 반면 리스트는 불공변이다. > 공변: 함께 변한다 불공변: 함께 변하지 않는다. 배열의 경우 가 의 하위 타입이라면 는 배열 의 하위 타입이 된다.

velog.io

 

-기타

: intellij의 reformat 기능을 자주 활용하자

: 파일 끝의 개행을 추가하자 : POSIX new line 규칙 

 

 

-이외에 든 생각

 

1) 성능보다 유지보수/가독성을 더 신경쓰자

- 프로그래밍은 알고리즘 문제가 아니다. 알고리즘은 기존의 조건을 최대한 준수하는 선 안에서 통과하는 코드를 작성하고, 그 효율을 최대한으로 끌어들이는게 목적이었다면, 우테코 미션에서는 다양한 가능시나리오를 생각해보고, 최대한 범용적이면서 직관적인 코드를 작성하는 것의 필요성을 느끼고 있다.

즉, 초점을 "효율"  => 확장성/가독성 으로 옮길 필요성을 많이 느끼고 있다. 

 

이는 코드 리뷰에서도 공통적으로 받은 의견이다.

 

 

2) 컨벤션과 네이밍에 신경을 쓰자

컨벤션 : intellij의 reformat을 자주 습관화하기

네이밍 : 내가 아닌 남이 추론가능한 이름짓기