day44 πŸŒ•

μž₯λ―ΈΒ·2022λ…„ 7μ›” 27일
0

였늘의 μ„±κ³Ό

λͺ©λ‘ 보기
44/129

μŠ€ν”„λ§ MVC 2편 - λ°±μ—”λ“œ μ›Ή 개발 ν™œμš© 기술 μ„Ήμ…˜ 2 μˆ˜κ°•

+) 22. 07. 28. μΆ”κ°€

μ„Ήμ…˜ 2. νƒ€μž„λ¦¬ν”„ - μŠ€ν”„λ§ 톡합과 폼 μˆ˜κ°• μ™„λ£Œ!!

th:fieldλŠ” id, name, value 속성을 λͺ¨λ‘ μžλ™μœΌλ‘œ λ§Œλ“€μ–΄μ€€λ‹€.

  • id: th:fieldμ—μ„œ μ§€μ •ν•œ λ³€μˆ˜ 이름과 κ°™λ‹€. id="itemName"
  • name: th:fieldμ—μ„œ μ§€μ •ν•œ λ³€μˆ˜ 이름과 κ°™λ‹€. name="itemName"
  • value: th:fieldμ—μ„œ μ§€μ •ν•œ λ³€μˆ˜μ˜ 값을 μ‚¬μš©ν•œλ‹€. value=""

μŠ€ν”„λ§ MVCλŠ” νžˆλ“  ν•„λ“œλ₯Ό ν•˜λ‚˜ λ§Œλ“€μ–΄μ„œ, _open처럼 κΈ°μ‘΄ 체크 λ°•μŠ€ 이름 μ•žμ— 언더 μŠ€μ½”μ–΄(_)λ₯Ό λΆ™μ—¬μ„œ μ „μ†‘ν•˜λ©΄ 체크λ₯Ό ν•΄μ œν–ˆλ‹€κ³  인식할 수 μžˆλ‹€.
νžˆλ“  ν•„λ“œλŠ” 항상 μ „μ†‘λœλ‹€. λ”°λΌμ„œ 체크λ₯Ό ν•΄μ œν•œ 경우 μ—¬κΈ°μ„œ open은 μ „μ†‘λ˜μ§€ μ•Šκ³ , _open만 μ „μ†‘λ˜λŠ”λ° 이 경우 μŠ€ν”„λ§ MVCλŠ” 체크λ₯Ό ν•΄μ œν–ˆλ‹€κ³  νŒλ‹¨ν•œλ‹€.


νƒ€μž„λ¦¬ν”„λ₯Ό μ‚¬μš©ν•˜λ©΄ 체크 λ°•μŠ€μ˜ νžˆλ“  ν•„λ“œμ™€ κ΄€λ ¨λœ 뢀뢄도 ν•¨κ»˜ ν•΄κ²°ν•΄μ€€λ‹€.
HTML 생성 κ²°κ³Όλ₯Ό 보면 νžˆλ“  ν•„λ“œ 뢀뢄이 μžλ™μœΌλ‘œ μƒμ„±λ˜μ–΄ μžˆλ‹€.
<input type="hidden" name="_open" value="on"/>


λΌλ””μ˜€ λ²„νŠΌμ€ 이미 선택이 λ˜μ–΄ μžˆλ‹€λ©΄ μˆ˜μ • μ‹œμ—λ„ 항상 ν•˜λ‚˜λ₯Ό μ„ νƒν•˜λ„λ‘ λ˜μ–΄ μžˆμœΌλ―€λ‘œ, 체크 λ°•μŠ€μ™€ 달리 λ³„λ„μ˜ νžˆλ“  ν•„λ“œλ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λ‹€.


@ModelAttributeκ°€ μžˆλŠ” deliveryCodes() λ©”μ„œλ“œλŠ” μ»¨νŠΈλ‘€λŸ¬κ°€ 호좜될 λ•Œλ§ˆλ‹€ μ‚¬μš©λ˜λ―€λ‘œ deliveryCodes 객체도 계속 μƒμ„±λœλ‹€.
이런 뢀뢄은 미리 생성해두고 μž¬μ‚¬μš©ν•˜λŠ” 것이 더 νš¨μœ¨μ μ΄λ‹€.


베이슀볼 μ΄μ–΄μ„œ!!

+) 22. 07. 30. 두 번째 PR μΆ”κ°€!!

Input Class

μ‚¬μš©μžμ—κ²Œ 값을 μž…λ ₯ λ°›λŠ” 클래슀

import java.util.*;
import java.util.stream.Collectors;

public class Input {

    public String input() {
        System.out.println("\n1~9 μ‚¬μ΄μ˜ 숫자 3개λ₯Ό μž…λ ₯ν•΄ μ£Όμ„Έμš”.");
        return new Scanner(System.in).nextLine();
    }

    public String[] inputDataSplit(String str) {
        return str.split("");
    }

    public List<Integer> arrToList(String[] str) {

        List<String> number = Arrays.asList(str);
        List<Integer> numbers = number.stream().map(s -> Integer.parseInt(s)).collect(Collectors.toList());

        validateForNumberLength(numbers);
        validateForDuplication(numbers);

        return numbers;
    }

    public void validateForNumberLength(List<Integer> numbers) {
        if(numbers.size() < 3 || numbers.size() > 3 || numbers.contains(0)) {
            throw new RuntimeException("1~9 μ‚¬μ΄μ˜ 3자리 숫자λ₯Ό μž…λ ₯ν•΄ μ£Όμ„Έμš”.");
        }
    }

    public void validateForDuplication(List<Integer> numbers) {
        if (numbers.size() != numbers.stream().distinct().count()) {
            throw new RuntimeException("쀑볡값이 μžˆμŠ΅λ‹ˆλ‹€.");
        }
    }
}
  • input()
    μ‚¬μš©μžμ—κ²Œ 값을 μž…λ ₯ λ°›λŠ”λ‹€.

  • inputDataSplit()
    μž…λ ₯ 받은 값을 ν•œ κΈ€μžμ”© λΆ„λ¦¬ν•˜μ—¬ 배열에 λ„£λŠ”λ‹€.

  • arrToList()
    배열을 리슀트둜 λ°”κΎΌλ‹€.

  • validateForNumberLength()
    1~9κΉŒμ§€μ˜ μˆ˜μΈμ§€, 3자리 μˆ˜κ°€ λ§žλŠ”μ§€ κ²€μ‚¬ν•œλ‹€.

  • validateForDuplication()
    쀑볡값이 μžˆλŠ”μ§€ κ²€μ‚¬ν•œλ‹€. (리슀트의 μ‚¬μ΄μ¦ˆμ™€ 쀑볡값을 κ±ΈλŸ¬λ‚Έ 개수 비ꡐ)


RandomNumber Class

λžœλ€ν•œ μ •μˆ˜λ₯Ό μƒμ„±ν•˜λŠ” 클래슀

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class RandomNumber {

    private Set<Integer> randomNumber = new HashSet<>();

    public List<Integer> createRandomNumber() {

        while(randomNumber.size() < 3) {
            randomNumber.add((int) (Math.random() * 9 + 1));
        }

        List<Integer> randomNumbers = new ArrayList<>(randomNumber);
        return randomNumbers;
    }
}
  • createRandomNumber()
    쀑볡값이 없도둝 Set으둜 값을 μ €μž₯ν•œλ‹€. λ¦¬μŠ€νŠΈμ— 3κ°œκ°€ λ“€μ–΄κ°ˆ λ•ŒκΉŒμ§€ λ°˜λ³΅ν•΄μ„œ λžœλ€κ°’μ„ μƒμ„±ν•˜κ³  λ„£λŠ”λ‹€.

Comparison Class

μ‚¬μš©μžκ°€ μž…λ ₯ν•œ κ°’κ³Ό 랜덀 μƒμ„±ν•œ 값을 λΉ„κ΅ν•˜λŠ” 클래슀

import java.util.List;

public class Comparison {

    private int ball;
    private int strike;

    public int[] compare(List<Integer> randomNumber, List<Integer> userNumber) {

        ball = 0;
        strike = 0;

        checkForStrike(randomNumber, userNumber);
        checkForBall(randomNumber, userNumber);

        return new int[] {ball, strike};
    }

    public int checkForBall(List<Integer> randomNumber, List<Integer> userNumber) {

        for(int i = 0; i < 3; i++) {
            if (randomNumber.contains(userNumber.get(i))) {
                ball++;
            }
        }

        return ball;
    }

    public int checkForStrike(List<Integer> randomNumber, List<Integer> userNumber) {

        for(int i = 0; i < 3; i++) {
            if (randomNumber.get(i).equals(userNumber.get(i))) {
                strike++;
                ball--;
            }
        }

        return strike;
    }

}
  • compare()
    ball, strike 값을 λ°˜ν™˜ν•œλ‹€.

  • checkForBall()
    랜덀 생성 값에 μ‚¬μš©μžκ°€ μž…λ ₯ν•œ 값이 ν¬ν•¨λ˜μ–΄ 있으면 ball 수λ₯Ό 늘리고 λ°˜ν™˜ν•œλ‹€.

  • checkForStrike()
    랜덀 생성 κ°’κ³Ό μ‚¬μš©μžκ°€ μž…λ ₯ν•œ 값이 κ°™κ³  μœ„μΉ˜λ„ κ°™μœΌλ©΄ strike 수λ₯Ό 늘리고 λ°˜ν™˜ν•œλ‹€.


Output Class

κ²°κ³Όλ₯Ό 좜λ ₯ν•˜λŠ” 클래슀

public class Output {

    public void output(int[] result) {
        if(result[1] == 3) {
            System.out.println("BASEBALL WIN~!");
            return;
        }

        System.out.println(result[0] + " " + "ball / " + result[1] + " strike");
    }

    public void printPlayBaseballGame() {
        System.out.println("Play Baseball Game");
    }

}
  • output()
    strike와 ball κ°’(result)을 받아와, λ§Œμ•½ strike(result[1])κ°€ 3이면 닡을 맞힌 κ²ƒμ΄λ―€λ‘œ BASEBALL WIN~!을 좜λ ₯ν•œλ‹€.
    정닡을 λ§žνžˆμ§€ λͺ»ν–ˆλ‹€λ©΄ ball, strike μ—¬λΆ€λ₯Ό μ•Œλ €μ€€λ‹€.

  • printPlayBaseballGame()
    "Play Baseball Game"을 좜λ ₯ν•œλ‹€.


Main Class

μ‹€ν–‰ν•˜λŠ” 클래슀

import java.util.List;

public class Main {
    public static void main(String[] args) {
        Input input = new Input();
        Output output = new Output();
        RandomNumber randomNumber = new RandomNumber();
        Comparison comparison = new Comparison();

        int[] result = new int[2];

        List<Integer> randomNumbers = randomNumber.createRandomNumber();

        output.printPlayBaseballGame();

        while(result[1] != 3) {
            List<Integer> userNumbers = input.arrToList(input.inputDataSplit(input.input()));
            result = comparison.compare(randomNumbers, userNumbers);
            output.output(result);
        }
    }
}

정리 쀑인 κ±° 끝내기 (ν† ν”½, OS, N/W)


μžλ°” 캑상좔닀 곡뢀

profile
김뉴비

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보