[Refactor] - 숫자 야구 게임

김주형·2022년 12월 1일
0

Reference


목표 - 학습 내용 적용하기

이펙티브 자바 학습

  • (o) 정적 팩터리
  • (o) 빌더
  • (o) 싱글턴
  • (x) private 생성자 사용, 불변 인스턴스 캐싱과 재사용

Flow

2

    1. 사용자 입력
    1. Hint에서 자체적으로 연산에 필요한 자원을 생성
    1. Hint의 처리결과를 Result로 메시징
    1. Result의 결과를 OutputView로 메시징

1. 사용자 입력

public class Console {
    private static Scanner scanner;

    private Console() {
    }

    public static String readLine() {
        return getInstance().nextLine();
    }

    private static Scanner getInstance() {
        if (Objects.isNull(scanner) || isClosed()) {
            scanner = new Scanner(System.in);
        }
        return scanner;
    }

    private static boolean isClosed() {
        try {
            final Field sourceClosedField = Scanner.class.getDeclaredField("sourceClosed");
            sourceClosedField.setAccessible(true);
            return sourceClosedField.getBoolean(scanner);
        } catch (final Exception e) {
            System.out.println("unable to determine if the scanner is closed.");
        }
        return true;
    }
}

2. Hint에서 자원 생성

객체의 연결 단위는 어떻게 지정해야할까?

  • 프로덕션 코드 구축과 테스트 용이성에 대한 고민을 반복하면서
    메서드 체이닝이 너무 자주 사용된다고 느낌

  • 우아한 객체지향

    • 객체 참조의 문제점은 모든게 다 연결되어 있다는 것
    • 어떤 객체라도 다 접근 가능하고, 어떤 객체라도 함께 수정 가능
    • 영구적인 결합이기 때문에 결합도가 가장 높은 의존성
  • 변경에 취약해지는 것을 고려해야 한다는 의미로 간추림

    • 싱글턴이 대안이 될 수 있을까?
    • 한 객체가 한가지 메시징만 던지는 구조로 개선하려는 의도로 열거 타입 싱글턴 선택
    • 입력자를 어떻게 캐싱해야 효과적일까?

    고민

  • 추후 계층형 구조가 개선된 모습으로 리팩토링 할 수 있을까?


진행 중

profile
도광양회

0개의 댓글