ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [μš°μ•„ν•œ ν…Œν¬μ½”μŠ€ 7κΈ°] ν”„λ¦¬μ½”μŠ€ 2μ£Όμ°¨ λ„·μ§Έλ‚  회고
    회고 2024. 10. 25. 23:36

    🎁 포μž₯ν•΄λ³΄μž 🎁

    μ˜€λŠ˜μ€ μ–΄λ–€ 객체λ₯Ό 또 돌돌 말아 κ°μ‹Έλ³ΌκΉŒ ν•˜κ³  κ³ λ―Όν–ˆλ˜ ν•˜λ£¨μ˜€λ‹€.

    μš°μŠΉμžλ“€μ„ μ €μž₯ν•˜μž

    public class Cars {
        public List<String> getNameOfWinner() {
            return cars.getNameOfMaxPositionCars();
        }
    
        public List<Car> getMaxPositionCars() {
            int maxPosition = cars.stream()
                    .mapToInt(Car::getPosition)
                    .max()
                    .orElseThrow(() -> new IllegalStateException("λ“±λ‘λœ μ°¨λŸ‰μ΄ μ—†μŠ΅λ‹ˆλ‹€."));
    
            return cars.stream()
                    .filter(car -> car.getPosition() == maxPosition)
                    .collect(Collectors.toList());
        }
    }
    
    public class Game {
    	 public List<String> getNameOfWinner() {
            return cars.getNameOfMaxPositionCars();
    }
    
    public class GameController {
    	public void start() {
        	// μƒλž΅..
            outputView.displayWinners(game.getNameOfWinner);
        }
    }

    κΈ°μ‘΄μ—λŠ” Game 이 Cars 우승자λ₯Ό μ°Ύμ•„ 이름을 λ°˜ν™˜ν•˜λŠ” λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•΄ λ°”λ‘œ 컨트둀러둜 λ„˜κΈ°λ„λ‘ ν–ˆλ‹€. 우승자의 값에 λŒ€ν•΄μ„œ λ”°λ‘œ μ €μž₯ν•˜μ§€λŠ” μ•Šμ•˜λ‹€. κ·ΈλŸ¬λ‚˜ λ‹€μŒκ³Ό 같은 고민을 ν–ˆλ‹€.

    πŸ€” 1. String 의 리슀트둜 λ°˜ν™˜ν•˜λŠ” 것은 μΊ‘μŠν™”κ°€ 잘 μ§€μΌœμ§€λŠ”κ°€?

    ν˜„μž¬ Cars μ—μ„œλŠ” Car 객체λ₯Ό λ°˜ν™˜ν•˜λŠ” λŒ€μ‹ , getter 둜 이름을 κΊΌλ‚΄ String 의 리슀트 ν˜•νƒœλ‘œ λ°˜ν™˜ν•˜κ³  μžˆλ‹€.

    κ·ΈλŸ¬λ‚˜ 이가 정말 μΊ‘μŠν™”λ₯Ό 지킬 수 μžˆλŠ”μ§€μ— λŒ€ν•œ 의문이 λ“€μ—ˆλ‹€. 

     

    λ§Œμ•½, λ‹€λ₯Έ μ½”λ“œμ—μ„œ 리슀트 값에 μ ‘κ·Όν•΄ λ‹€μ‹œ 값을 μ„ΈνŒ…ν•œλ‹€λ©΄? ν˜Ήμ€ μš°μŠΉμžκ°€ 두λͺ…μ΄μ—ˆλŠ”λ° ν•œ μš”μ†Œλ₯Ό μ‚­μ œν•΄λ²„λ¦°λ‹€λ©΄?

    πŸ€” 2. 우승자의 정보λ₯Ό μ €μž₯ν•˜μ§€ μ•Šμ•„λ„ λ˜λŠ”κ°€?

    λ‚΄κ°€ μ •μ˜ν•œ μ„œλΉ„μŠ€ λ‚΄μ—μ„œ Game 의 역할은 ν•œ 번 μ‚¬μš©μžκ°€ μž…λ ₯ν•œ 값에 λŒ€ν•˜μ—¬ κ²Œμž„μ„ ν•œ 판 μ§„ν–‰ν•΄μ£ΌλŠ” 객체이닀.

    즉, κ²Œμž„μ— κ΄€λ ¨λœ μ •λ³΄λŠ” λͺ¨λ‘ 여기에 μ €μž₯λœλ‹€. 총 λΌμš΄λ“œ 수, μ°Έμ—¬ν•˜λŠ” μžλ™μ°¨λ“€, λžœλ€ν•œ μˆ˜μ—μ„œ λͺ‡ 이상이 λ‚˜μ™€μ•Ό μžλ™μ°¨λ“€μ΄ 움직일 수 μžˆλŠ”μ§€ 등에 λŒ€ν•΄ μ •μ˜ν•œλ‹€.

     

    그런데 μ΄λŸ¬ν•œ Game 의 객체에 우승자λ₯Ό μ €μž₯ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것이 μ–΄μƒ‰ν•˜κ²Œ 생각 λ˜μ—ˆλ‹€.

    πŸ€” 3. 우승자의 이름을 λ°˜ν™˜ν•˜λŠ” 것이 Cars 의 역할인가?

    ν˜„μž¬λŠ” Cars κ°€ 우승자의 이름을 λ°˜ν™˜ν•˜κ³  μžˆλ‹€. Cars 의 λ©”μ„œλ“œλͺ…은 κ°€μž₯ 멀리 λ‚˜κ°„ μžλ™μ°¨μ˜ 이름을 μ°ΎλŠ”λ‹€κ³  λ˜μ–΄ μžˆμ§€λ§Œ, 사싀상 이에 λŒ€ν•œ 값을 Game 은 λ°˜ν™˜λ§Œ ν•˜κ³  μžˆκΈ°μ— 우승자λ₯Ό μ •ν•΄μ£ΌλŠ” 것과 λ³„λ°˜ λ‹€λ₯Ό λ°”κ°€ μ—†λ‹€. 그렇기에 μ–΄μ°Œλ³΄λ©΄ 우승자λ₯Ό μ •ν•˜λŠ” 것이 Cars 의 μ±…μž„μ²˜λŸΌ 보이기도 ν–ˆλ‹€.

     

    μ˜¬λ¦Όν”½μ— μΆœμ „ν•œ μ„ μˆ˜λ“€μ€ μΆœμ „λ§Œ ν•˜κ³ , μžμ‹ μ΄ 맑은 λ°”λ₯Ό ν•  뿐 μš°μŠΉμžλ“€μ„ μ •ν•˜μ§„ μ•ŠλŠ”λ‹€. 🀸🏻‍♀️

     

    κ·Έλž˜μ„œ λ‚˜λŠ” DTO λ₯Ό μ‚¬μš©ν•˜κΈ°λ‘œ ν–ˆλ‹€.

    public class Game {
        public void judgeWinners() {
        List<Car> maxPositionCars = cars.getMaxPositionCars();
        this.winners = new Winners(maxPositionCars);
        }
    }
    
    public class Cars {
        public List<Car> getMaxPositionCars() {
           // κ°€μž₯ 멀리 λ‚˜κ°„ μžλ™μ°¨λ“€μ„ λ°˜ν™˜
        }
    }
    
    public class Winners {
        private final List<Car> cars;
        
        // μƒλž΅..
    }
    
    public record WinnersDto(List<String> nameOfWinners) {
        public WinnersDto(Game game) {
            this(game.getNameOfWinners());
        }
    }
    
    public class GameController {
    	public void start() {
        	// μƒλž΅..
            outputView.displayWinners(game);
        }
    }

    Cars λŠ” 리슀트 ν˜•νƒœλ‘œ Car 객체 자체λ₯Ό λ°˜ν™˜ν•œλ‹€. κ²Œμž„μ€ κ·Έμ € Cars μ—κ²Œ 제일 멀리 λ‚˜κ°„ 차듀에 λŒ€ν•΄ λ¬»λŠ”λ‹€. 우승자λ₯Ό νŒλ‹¨ν•˜λΌλŠ” μ±…μž„μ€ 지지 μ•Šλ„λ‘ ν•œλ‹€. 그리고 Game 은 이 객체듀을 Winners λΌλŠ” 객체둜 돌돌 말아 μ €μž₯ν•œλ‹€.

    이후 GameController λŠ” 아무것도 꺼내지 μ•Šκ³  κ·Έμ € game 을 전달해 λ‚΄λΆ€μ—μ„œ Winners 의 이름을 꺼내도둝 ν•œλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄, 적어도 Winners 의 λ‚΄λΆ€μ˜ 값을 λ°”κΏ€ 수 μ—†κΈ° λ•Œλ¬Έμ— μ €μž₯된 우승자 정보λ₯Ό μ‘°μž‘ν•  μœ„ν—˜μ„±μ€ μ—†λ‹€. λ˜ν•œ, GameController μ—μ„œλ„ μš°μŠΉμžλ“€μ˜ 이름을 λ…ΈμΆœν•˜μ§€ μ•Šκ³  λ°”λ‘œ DTO 둜 λ„˜κ²ΌκΈ° λ•Œλ¬Έμ— μ–΄λ””μ—μ„œλ„ 리슀트 ν˜•νƒœμ˜ μš°μŠΉμžλ“€μ˜ 이름에 μ ‘κ·Όν•  수 μ—†κ²Œ 됐닀.

    μ²˜μŒμ—λŠ” λ‹¨μˆœ String 의 배열이기에 DTO 둜 κ°μŒ€ ν•„μš”κ°€ μžˆμ„κΉŒ μ‹Άμ—ˆλŠ”λ°.. μ•ˆμΌν–ˆλ‹€. DTO 의 κ³ λ§ˆμ›€μ„ λΌˆμ €λ¦¬κ²Œ λŠκΌˆλ‹€.

    μ‹œλ„ 횟수λ₯Ό κ°μ‹Έμž

    public class Game {
    	private int attemptCount;
        
        public void play() {
            attemptCount--;
            attemptToMoveCars();
        }
        
        public boolean isRunning() {
            return attemptCount > 0;
        }
    }

    κΈ°μ‘΄μ—λŠ” μœ„μ™€ 같이 Game 객체에 μ›μ‹œκ°’μœΌλ‘œ μ‹œλ„ 횟수λ₯Ό μ €μž₯ν–ˆλ‹€. κ·ΈλŸ¬λ‚˜ 이후 λ―Έμ…˜μ—μ„œ μ•ˆλ‚΄λ˜μ§€ μ•ŠλŠ” 뢀뢄듀을 λ‚΄κ°€ μ •μ˜ν•˜λŠ” κ³Όμ •μ—μ„œ μ‹œλ„ 횟수의 μƒν•œμ„ μ •ν•΄λ’€κΈ° λ•Œλ¬Έμ— λΉ„μ§€λ‹ˆμŠ€ 둜직이 좔가됐닀. 그렇기에 이λ₯Ό 객체둜 생성해 감싸쀬닀.

    public class TotalRounds {
    
        private final int totalRounds;
    
        public boolean hasMoreRoundsThan(int currentRound) {
            return totalRounds >= currentRound;
        }
    }
    
    public class Game {
    	public boolean isRunning() {
            return attemptCount > 0;
            return totalRounds.hasMoreRoundsThan(currentRound);
        }
    }

    μ΄λ ‡κ²Œ κ°μ‹Έλ‹ˆ μ•žμœΌλ‘œ 더 남은 λΌμš΄λ“œκ°€ μžˆλŠ”μ§€ νŒλ‹¨ν•˜λŠ” μ±…μž„λ„ Game μ—μ„œ TotalRounds 둜 μ΄λ™ν–ˆλ‹€.

    Game 클래슀의 크기가 μ΄μ „λ³΄λ‹€λŠ” μž‘μ•„μ Έ 적절히 μ±…μž„μ΄ 뢄배됐닀고 μƒκ°ν–ˆλ‹€.

    μžλ™μ°¨λ“€μ˜ μƒνƒœλ₯Ό κ°μ‹Έμž

    public class CarMovementResults {
        private final List<CarMovementResult> carMovementResults;
    
        private CarMovementResults(List<CarMovementResult> carMovementResults) {
            this.carMovementResults = carMovementResults;
        }
        public static CarMovementResults from(SequencedMap<String, Integer> statusOfCars) {
            List<CarMovementResult> movementResults = statusOfCars.sequencedKeySet().stream()
                    .map(name -> new CarMovementResult(name, statusOfCars.get(name)))
                    .collect(Collectors.toList());
            return new CarMovementResults(movementResults);
    }
    
    public class Cars {
         public SequencedMap<String, Integer> getStatus() {
                SequencedMap<String, Integer> carStatusMap = new LinkedHashMap<>();
                cars.forEach(car -> carStatusMap.put(car.getName(), car.getPosition()));
                return carStatusMap;
        }
    }

    기쑴의 μ½”λ“œ.. λ³Ό ν•„μš”λ„ μ—†λ‹€.. μΊ‘μŠν™”λ₯Ό μ§€ν‚€κ² λ‹΅μ‹œκ³  Map 을 μ‚¬μš©ν–ˆμ—ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ³΄λ‹€μ‹œν”Ό 가독성이 극악이라 λ¦¬νŒ©ν† λ§ν•  μƒκ°μœΌλ‘œ μš°μ„  κ΅¬ν˜„λΆ€ν„° ν•΄λ’€μ—ˆλ‹€. λ˜ν•œ μ§€κΈˆ μ™€μ„œ 보면, μ•žμ„œ 우승자λ₯Ό νŒλ³„ν–ˆλ˜ 기쑴의 둜직과 같이 μ™ΈλΆ€μ—μ„œ 이λ₯Ό μ‘°μž‘ν•  μš°λ €κ°€ λ„ˆλ¬΄ λ§Žλ‹€. Map 에 μ ‘κ·Όν•΄μ„œ νŠΉμ • 값을 바꿔버리면 μ–΄λ–»κ²Œ ν•  μˆ˜κ°€ μ—†λ‹€. κ·Έλž˜μ„œ 이에 λŒ€ν•œ 고민을 였늘 μ‹œμž‘ν–ˆλ‹€.

     

    λ‹€λ₯Έ κ²½μš°λ“€μ²˜λŸΌ μžλ™μ°¨μ˜ μƒνƒœλ₯Ό μ •μ˜ν•˜λŠ” λͺ¨λΈλ‘œ κ°μŒ€κΉŒμ— λŒ€ν•œ 고민을 ν–ˆλ‹€. κ·ΈλŸ¬λ‚˜, 이 κ²½μš°μ—λŠ” 더 고민이 λ§Žμ•˜λ‹€. μ΄μœ λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

    πŸ€” 1. DTO λž‘ 별 차이가 없지 μ•Šλ‚˜?

    뭐라고 μ •μ˜ν•΄μ•Ό 할지 고민이 됐닀. DTO 인가, λͺ¨λΈμΈκ°€?

    정보λ₯Ό μ „λ‹¬ν•˜κΈ° μœ„ν•œ κ°μ²΄λ‹ˆκΉŒ DTO 인가?

    κ·Έλ ‡λ‹€λ©΄ λͺ¨λΈμ—μ„œλŠ” λ·°λ₯Ό μ˜μ‘΄ν•˜λ©΄ μ•ˆλ˜λ‹ˆ Controller μ—μ„œ μ •μ˜λ₯Ό ν•΄μ•Ό ν•˜λŠ”κ±΄κ°€? μ΄λ ‡κ²Œ 섀계 μžμ²΄μ— λŒ€ν•œ 고민을 ν–ˆλ‹€. 

    πŸ€” 2. Car κ³Ό 별 차이가 없지 μ•Šλ‚˜?

    Car κ³Ό 같이 μžλ™μ°¨μ˜ μƒνƒœμ—λ„ 이름과 μœ„μΉ˜κ°€ ν•„μš”ν•˜λ‹€. κ·Έλ ‡λ‹€λ©΄ κ²°κ΅­ 같은 정보λ₯Ό μ€‘λ³΅μ μœΌλ‘œ κ°–κ³  μžˆλŠ” 꼴인데, Car 이 μ•„λ‹Œ 또 λ‹€λ₯Έ 객체λ₯Ό μ •μ˜ν•  μ΄μœ κ°€ μžˆλ‚˜?

     

    λ‚΄ 고민의 κ²°κ³ΌλŠ” λͺ¨λΈλ‘œ μ •μ˜ν•΄μ„œ κ°μ‹ΈλŠ” 게 λ§žλ‹€λŠ” κ²ƒμ΄μ—ˆλ‹€!

    일단, 쀑볡이라고 νŒλ‹¨ν•˜μ§€ μ•Šμ€ μ΄μœ κ°€ μžˆλ‹€. 객체지ν–₯의 사싀과 μ˜€ν•΄μ—λŠ” λ‹€μŒκ³Ό 같은 λ¬Έμž₯이 λ‚˜μ˜¨λ‹€.


    λͺ¨λ“  κ°μ²΄λŠ” μ‹λ³„μžλ₯Ό 가지며 μ‹λ³„μžλ₯Ό μ΄μš©ν•΄ 객체λ₯Ό ꡬ별할 수 μžˆλ‹€.

    λͺ¨λ“  객체가 μ‹λ³„μžλ₯Ό κ°€μ§„λ‹€λŠ” 것은 λ°˜λŒ€λ‘œ 객체가 μ•„λ‹Œ λ‹¨μˆœν•œ 값은 μ‹λ³„μžλ₯Ό 가지지 μ•ŠλŠ”λ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€.

    μžλ™μ°¨μ˜ μƒνƒœλ₯Ό μ •μ˜ν•˜λŠ” 것은 μ‹λ³„μžλ₯Ό κ°–λŠ”λ‹€. μžλ™μ°¨μ˜ μƒνƒœλ₯Ό μ €μž₯ν•˜λŠ” 것은 각 λΌμš΄λ“œλ§ˆλ‹€ μžλ™μ°¨κ°€ 전진을 ν•˜λ˜, ν•˜μ§€ μ•Šλ˜ 이뀄진닀. 즉, λΌμš΄λ“œ + μžλ™μ°¨μ˜ 이름이 κ²°κ΅­μ—λŠ” μ‹λ³„μžλ‘œμ„œμ˜ 의미λ₯Ό κ°–κ³  λ™μž‘ν•œλ‹€. 그렇기에 μ΄λŠ” λ‹¨μˆœν•œ κ°’ 객체인 DTO κ°€ μ•„λ‹Œ λͺ¨λΈμ΄λΌκ³  νŒλ‹¨ν–ˆλ‹€.

    λ˜ν•œ, 이와 같은 λ§₯λ½μ—μ„œ 각 λΌμš΄λ“œλ§ˆλ‹€ μžλ™μ°¨μ˜ μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ” κ°μ²΄λŠ” μžλ™μ°¨ κ°μ²΄μ™€λŠ” μ—„μ—°νžˆ λ‹€λ₯΄λ‹€.

    μŠ€λƒ…μƒ·μ„ μ €μž₯ν•˜λŠ” 것과 같은 λ§₯락이닀. μš°λ¦¬κ°€ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λ³΅μ‚¬ν•˜λ €κ³  ν•  λ•Œ μŠ€λƒ…μƒ·μ„ 뜬 것을 λ°μ΄ν„°λ² μ΄μŠ€μ™€ λ˜‘κ°™λ‹€κ³  λ³΄μ§€λŠ” μ•ŠλŠ” 것과 λ§ˆμ°¬κ°€μ§€λΌκ³  λ΄€λ‹€.μ΄λŠ” μ ˆλŒ€ μ ˆλŒ€ 값이 λ³€ν•˜λ©΄ μ•ˆλ˜κΈ° λ•Œλ¬Έμ— record 둜 μ •μ˜ν•΄μ€¬λ‹€.

    public record CarStatus(String name, int position, int round) {
    }

    πŸ’­ μƒμƒν•΄λ³΄μž πŸ’­

    μ½”λ“œ 리뷰λ₯Ό 톡해 이전 μ£Όμ°¨ κ³Όμ œμ—μ„œλŠ” 엣지 μΌ€μ΄μŠ€λ₯Ό 많이 κ³ λ €ν•˜μ§€ λͺ»ν–ˆλ‹€λŠ” 것을 μ•Œκ²Œ 됐닀. κ·Έλž˜μ„œ 이번 μ£Όμ°¨μ—λŠ” λ‹€μ–‘ν•œ 엣지 μΌ€μ΄μŠ€λ₯Ό 고렀해보고 μ‹Άμ—ˆλŠ”λ°, μžμœ λ„κ°€ λ†’λ‹€λ³΄λ‹ˆ μ–΄λ””λΆ€ν„° μ–΄λ””κΉŒμ§€ 정해둬야 할지 잘 λͺ¨λ₯΄κ² λ‹€λŠ” 생각을 ν–ˆλ‹€. κ·Έλ ‡λ‹€λ©΄ λ‚΄κ°€ 직접 ν•˜λ‚˜λΆ€ν„° μ—΄κΉŒμ§€ κ·œμ •μ„ ν•΄λ³΄λŠ” 건 μ–΄λ–¨κΉŒ μ‹Άμ—ˆλ‹€.

    # μžλ™μ°¨ κ²½μ£Ό κ²Œμž„ μž…λ ₯κ°’ κ·œμΉ™
    
    μ•ˆλ…•ν•˜μ„Έμš”! μžλ™μ°¨ κ²½μ£Ό κ²Œμž„μ— μ˜€μ‹  μ—¬λŸ¬λΆ„λ“€μ„ ν™˜μ˜ν•©λ‹ˆλ‹€.
    
    μžλ™μ°¨ κ²½μ£Ό κ²Œμž„ 진행에 μ•žμ„œ, κ²Œμž„μ˜ μž…λ ₯값에 λŒ€ν•œ κ·œμΉ™μ„ μ„€λͺ…ν•΄ λ“œλ¦¬λ €κ³  ν•©λ‹ˆλ‹€.
    
    ## πŸ“μžλ™μ°¨ 이름에 λŒ€ν•˜μ—¬
    
    κ΅¬λΆ„μž(,) λ₯Ό κΈ°μ€€μœΌλ‘œ μžλ™μ°¨μ˜ 이름을 μž…λ ₯ν•΄μ£Όμ‹œλ©΄ λ©λ‹ˆλ‹€.
    
    μΆœμ „ν•˜λŠ” μžλ™μ°¨λŠ” λ°˜λ“œμ‹œ 2λŒ€ 이상이어야 ν•©λ‹ˆλ‹€. 우승자의 자리λ₯Ό 두고 λ‹€ν‰ˆμ•Ό ν•˜λ‹ˆ 두 λŒ€ 이상이 λ‹Ήμ—°νžˆ μΆœμ „ν•΄μ•Όκ² μ£ ?!
    
    - ex) `토끼,` 와 같은 μž…λ ₯값은 ν•œ λŒ€λ‘œ κ°„μ£Όλ˜μ–΄ 잘λͺ»λœ μž…λ ₯κ°’μœΌλ‘œ 인해 κ²Œμž„μ΄ μ’…λ£Œλ˜λ‹ˆ μ£Όμ˜ν•΄μ£Όμ„Έμš”!
    
    μ΄λ¦„μ˜ 각 μ–‘μͺ½μ˜ 곡백은 μ œκ±°λ©λ‹ˆλ‹€.
    
    - ex) `토끼, 거뢁이` → 토끼와 거뢁이가 μΆœμ „ν•˜λŠ” κ²ƒμœΌλ‘œ μž…λ ₯λ©λ‹ˆλ‹€. 거뢁이 μ•žμ˜ 곡백이 μ œκ±°λ©λ‹ˆλ‹€.
    
    μžλ™μ°¨μ˜ 이름은 자유둭게 μž…λ ₯ν•΄μ£Όμ‹œλ©΄ λ©λ‹ˆλ‹€! 단, μˆ«μžμ™€ ν•œκΈ€, μ•ŒνŒŒλ²³λ§Œμ„ μž…λ ₯ν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.
    
    - ex) `ν† a끼,κ±°1뢁이` λŠ” κ°€λŠ₯ν•©λ‹ˆλ‹€.
    - ex) `토끼,**거뢁이` λŠ” λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.
    
    κ΅¬λΆ„μž(,) 둜 λλ‚΄κ±°λ‚˜ κ΅¬λΆ„μž(,) 만 μ‘΄μž¬ν•˜λŠ” 것은 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€!
    
    - ex)`토끼,거뢁이,` λŠ” λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.
    - ex) `,,,,` λŠ” λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.
    
    μžλ™μ°¨μ˜ 이름은 λ°˜λ“œμ‹œ 5자 μ΄ν•˜μ—¬μ•Ό ν•©λ‹ˆλ‹€! κ·ΈλŸ¬λ‚˜ 이 λ•Œ 이름 μ–‘μͺ½ 끝 곡백은 κΈ€μž 수둜 κ°„μ£Όν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
    
    - ex) `토끼깑총, 거뢁이` λŠ” κ°€λŠ₯ν•©λ‹ˆλ‹€.
    - ex) `토끼깑총, 거뢁이`          λŠ” κ°€λŠ₯ν•©λ‹ˆλ‹€.
    - ex) `토끼깑총, κ±°   뢁이` λŠ” λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.
    - ex) `토끼깑총, κ±°λΆμ΄μ—‰κΈˆμ—‰κΈˆ` 은 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.
    
    ## πŸ“μ‹œλ„ νšŸμˆ˜μ— λŒ€ν•˜μ—¬
    
    μž…λ ₯ν•˜μ‹  μ‹œλ„ 횟수만큼 κ²Œμž„μ„ μ§„ν–‰ν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” `λΌμš΄λ“œ` 라고 ν•˜κ² μŠ΅λ‹ˆλ‹€.
    
    κ·ΈλŸ¬λ‚˜ λΌμš΄λ“œλŠ” 10번 μ΄ν•˜μ—¬μ•Ό ν•©λ‹ˆλ‹€. λ„ˆλ¬΄ 였랜 μ‹œκ°„ λ™μ•ˆμ˜ κ²Œμž„ 진행은 κ²Œμž„ 쀑독 μœ„ν—˜μ΄ μžˆμŠ΅λ‹ˆλ‹€! πŸ˜“
    
    λΌμš΄λ“œλŠ” λ°˜λ“œμ‹œ 0보닀 큰 μ •μˆ˜μ—¬μ•Ό ν•©λ‹ˆλ‹€.
    
    즉, 0μ΄κ±°λ‚˜ 음수, μ†Œμˆ˜μΌ 수 μ—†μŠ΅λ‹ˆλ‹€. κ²Œμž„μ„ -1 회만큼 진행할 수 μžˆμ„κΉŒμš”? 0번 μ§„ν–‰ν•˜λŠ” 건 κ²Œμž„μ΄ μ•„λ‹ˆκ² μ£ ! 2.3회 κ²Œμž„ 진행 ν•΄λ³΄μ…¨λ‚˜μš”?
    
    - ex) `0` , `-1` , `2.3` 은 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.
    
    λ‹Ήμ—°νžˆ 숫자 μ΄μ™Έμ˜ 값은 μž…λ ₯ν•˜μ‹€ 수 μ—†μŠ΅λ‹ˆλ‹€.
    
    - ex) `d` , `rabbit` 은 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.
    
    그럼 λͺ¨λ‘ μž…λ ₯값을 잘 μž…λ ₯ν•΄ μž¬λ°ŒλŠ” κ²Œμž„ μ‹œκ°„ λ³΄λ‚΄μ‹œκΈΈ λ°”λΌκ² μŠ΅λ‹ˆλ‹€! πŸ™‡πŸ»

    κ·Έλž˜μ„œ λ‚˜λŠ” μœ„μ™€ 같이 직접 κ²Œμž„μ˜ μ•ˆλ‚΄μžκ°€ λ˜μ—ˆλ‹€κ³  μƒκ°ν•˜κ³  κ·œμΉ™ μ•ˆλ‚΄λ¬Έμ„ μž‘μ„±ν•΄λ΄€λ‹€.

    이가 λ‹¨μˆœνžˆ κ³Όμ œμ΄κ±°λ‚˜ μ½”λ”©μ˜ 세계라고 μƒκ°ν•˜μ§€ μ•Šκ³ , μ‚¬μš©μžκ°€ 있으며 νƒ€μΈμ—κ²Œ 이λ₯Ό μ•ˆλ‚΄ν•΄μ•Όκ² λ‹€κ³  μƒκ°ν•˜λ‹ˆ μ–΄λ–€ 뢀뢄듀을 κ³ λ €ν•΄μ•Ό ν•˜λŠ”μ§€ 더 λͺ…ν™•ν•΄μ Έμ„œ 도움이 됐닀. 이λ₯Ό 톡해 엣지 μΌ€μ΄μŠ€λ“€μ„ 더 λ‹€μ–‘ν•˜κ²Œ κ³ λ €ν•  수 μžˆμ—ˆλ‹€!


    μ˜€λŠ˜μ€ 주둜 μœ νš¨μ„± 검사와 객체λ₯Ό κ°μ‹ΈλŠ” 것에 λŒ€ν•œ κ³ λ €λ₯Ό ν–ˆλ‹€.

    λ¦¬νŒ©ν† λ§μ„ ν•œ 뒀에 λ‚΄λΆ€μ μœΌλ‘œλŠ” κ΅¬ν˜„μ΄ λ°”λ€Œμ—ˆμ–΄λ„ ν…ŒμŠ€νŠΈκ°€ 깨지지 μ•ŠμœΌλ©΄, 변경에 μœ μ—°ν•˜κ²Œ μ„€κ³„ν–ˆλ‹€λŠ” 생각이 λ“€μ–΄ λΏŒλ“―ν•˜κΈ°λ„ ν–ˆλ‹€! κ·Έλ ‡μ§€λ§Œ μ˜€λŠ˜μ€ 혼자 고민만 ν•΄μ„œ κ·ΈλŸ°μ§€ 이 λ°©ν–₯이 λ§žλŠ”μ§€λ„ λͺ¨λ₯΄κ² κ³ , μƒˆλ‘­κ²Œ λ“€μ–΄μ˜€λŠ” 지식은 μ—†μ–΄μ„œ 쑰금 힘이 빠지기도 ν–ˆλ‹€ γ… .γ… ~

     

    내일은 MVC ꡬ쑰λ₯Ό 쑰금 더 깊게 μ‚΄νŽ΄λ³΄κ³ , 역할에 μ–΄κΈ‹λ‚˜λŠ” 뢀뢄이 μžˆλŠ”μ§€μ— λŒ€ν•œ 생각을 해봐야겠닀.

    그리고 아직 GameController 의 전체적인 흐름이 λˆˆμ— λ“€μ–΄μ˜€μ§€λŠ” μ•Šκ²Œ 섀계가 된 것 κ°™μ•„μ„œ 이 뢀뢄에 λŒ€ν•΄μ„œλ„ λ‹€μ‹œ κ³ λ €λ₯Ό 해봐야겠닀!

     

    내일도 μ΅œμ„ μ„ λ‹€ν•΄λ³΄μž~

Designed by Tistory.