우테코 프리코스 racing-car회고(수정중인 글입니다)

Muhly·2023년 11월 25일
0

이번에는 racing-car회고를 해보겠다. 사실 racing-car는 정말 부끄럽다...내 기억에는 테스트도 하나정도밖에 통과하지 못하고 기능명세목록도 이따구로 썼다.

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

이번에도 dolmeng2님의 코드를 클론코딩하고 스스로 어려운 점을 생각해 보았다.
dolmeng2님의 코드를 보면서 느낀점은 와....엄청 쪼갰다...!!!한마디로 신세계
그냥 쪼갠것이 아니라 하나하나 이유가 있다.아직 내가 쪼랩이기 떄문에 정확히 이해가 가지않기도하고, 어렵지만 공부겸 천천히 수정하면서 올리겠다.

https://cl8d.tistory.com/33 ->dolmeng2님 글 ...내겐 그저 다가갈수 없는 신

https://github.com/bir061521/java-racingcar-6/tree/muhlyRebuilding -> 제 깃허브입니다.


일단 굉장히 많이 나눴다.
이럴경우 나같은 쪼랩은 "어..어디부터 먼저하지?!(어리둥절)"모먼트를 취한다.

그래서 나는 이렇게 맨 처음에 기능명세서에 적혀있는 경주할 자동차 이름 입력받기에 초점을 맞췄다.
->이게 맞는지는...하하하하

1️⃣enumUtil패키지 생성

package racingcar.util;

public interface EnumUtil<T1, T2> {
    T1 getKey();
    T2 getValue();
}

이런식으로 일단 EnumUtil인터페이스를 생성해주었다. 하는김에 numberGenerator도 생성했음!!!

Q.인터페이스란?

인터페이스(interface)란 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스를 뜻한다.추상메소드와 상수만을 포함할 수 있다.

이렇게 EnumUtil<T1, T2>를 생성해준다면

package racingcar.enumType;

import racingcar.util.EnumUtil;

public enum InputMessage implements EnumUtil<String,String> {
    GET_CAR_NAMES_MESSAGE("경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분."),
    GET_TRY_COUNT_MESSGAE("시도할 횟수는 몇회인가요?");


    private final String message;

    InputMessage(final String message){
        this.message = message;
    }


    @Override
    public String getKey() {
        return name();
    }

    @Override
    public String getValue() {
        return message;
    }
}
package racingcar.enumType;

import racingcar.util.EnumUtil;

public enum ExceptionMessage implements EnumUtil<String, String> {//enum항목
    BLANK_MESSAGE("%s은(는) 빈 값이 들어올 수 없습니다."),
    LENGTH_MESSAGE("%d글자를 초과혔습니다."),
    INPUT_MESSAGE("입력 중에 예기치 못한 오류가 발생하였습니다.예외메시지: %s"),
    TYPE_MESSAGE("%s은(는)숫자만 입력할 수 있습니다."),
    RANGE_MESSAGE("%d 이상의 값을 입력해 주세요."),
    DUPLICATE_MESSAGE("중복된 값을 입력할 수 없습니다."),
    NO_RESOURCE_MESSAGE("%s 가 존재하지 않습니다.");

    private final String message;//문자열 필드 -> 필드는 객체의 상태를 저장하는 변수,객체의 데이터를 담는 역할

    ExceptionMessage(final String message){//생성자 -> 각 enum항목의 메시지 초기화
        this.message = message;
    }

    @Override
    public String getKey() {//enumUtil인터페이스 구현 ->enum상수의 이름과, 메시지 반환
        return name();
    }

    @Override
    public String getValue() {
        return message;
    }
}

이렇게 여러개의 클래스(enum)에서 공통적으로 받아올 수 있는것이다.

2️⃣ enumType패키지 생성

package racingcar.enumType;

import racingcar.util.EnumUtil;

public enum ExceptionMessage implements EnumUtil<String, String> {//enum항목
    BLANK_MESSAGE("%s은(는) 빈 값이 들어올 수 없습니다."),
    LENGTH_MESSAGE("%d글자를 초과혔습니다."),
    INPUT_MESSAGE("입력 중에 예기치 못한 오류가 발생하였습니다.예외메시지: %s"),
    TYPE_MESSAGE("%s은(는)숫자만 입력할 수 있습니다."),
    RANGE_MESSAGE("%d 이상의 값을 입력해 주세요."),
    DUPLICATE_MESSAGE("중복된 값을 입력할 수 없습니다."),
    NO_RESOURCE_MESSAGE("%s 가 존재하지 않습니다.");

    private final String message;//문자열 필드 -> 필드는 객체의 상태를 저장하는 변수,객체의 데이터를 담는 역할

    ExceptionMessage(final String message){//생성자 -> 각 enum항목의 메시지 초기화
        this.message = message;
    }

    @Override
    public String getKey() {//enumUtil인터페이스 구현 ->enum상수의 이름과, 메시지 반환
        return name();
    }

    @Override
    public String getValue() {
        return message;
    }
}

그리고 이렇게 인터페이스를 받아온다음 ExceptionMessage등을 구현해준다.

Q.enum이란?

열거형(enum)은 자료형이다. 어렵게 생각할 필요 없이 상수 데이터들의 집합 으로 치부하면 된다.
static final 로 구현해주는것보다 좀 더 보기 쉽고 편리해진다.

출처: https://inpa.tistory.com/entry/JAVA-☕-열거형Enum-타입-문법-활용-정리 [Inpa Dev 👨‍💻:티스토리]-> 자세히 나와있다.

profile
https://muhlysstudynote.tistory.com/-> 블로그 이전하였습니다

0개의 댓글