[iOS-Swift] 심화 문법 - 숫자 야구 게임 최종 리팩토링

TIL 20일 차 - Swift로 야구 게임 만들기 피드백 최종 리팩토링

튜터님 최종 피드백

드디어 피드백이 나왔다... 대학에서도 이렇게 하루 종일 집중해서 열심히 과제한 적이 없는 거 같은데...ㅎㅎ
ai 없이 끙끙거리면서 맨몸으로 부딪히니 더 기억에 남고 뿌듯함도 느껴지는 것 같다.
 
 

1. start() 메서드 내에 playGame() 메서드가 중첩되어 있다!

이 부분 읽자마자 냅다 비명부터 지름

형이 왜 거기서 나와..?? 싶어서 바로 후다닥 꺼내주었다......

튜터님은 이걸 어떻게 발견하신 거지.. 나는 몇 날며칠을 봐도 못 찾았는데..

 

2. splitNum 메서드를 Character의 wholeNumberValue 속성을 활용해 숫자로 변환하기

내가 제출했던 기존의 코드는 입력받은 Int값을 String으로 변환한 뒤 Character로 변환된 값을 다시 String으로 바꾸고 그걸 다시 Int로 형변환을 해주는 그런 복잡한 과정을 거쳐서 배열을 return해주는 함수였다.

// MARK: - 입력한 세자리 수를 숫자 각 한개씩으로 배열로 쪼개는 내부 로직 함수 
// 기존 코드 (수정 전)
private func splitNum(_ num: Int) -> [Int] { 
	let result = String(num).compactMap{ Int(String($0))} 
    return result 
}

 
이걸 이제 Chracter의 wholeNumberValue 속성을 써서 함수를 만들어보자
그럼 대체 wholeNumberValue는 뭐냐!
Character가 숫자라면? 그 숫자 값을 바로 Int?로 꺼내주는 속성이다.
밑의 예를 보고 이해해 보자

let ch: Character = "1886"
print(ch.wholeNumberValue) // Optional(1886)
// 숫자가 아니면 nil 출력

 
최종 수정 코드

// wholeNumberValue를 이용해 풀이한 최종 코드 (수정 후)
private func splitNum(_ num: Int) -> [Int] {
	return String(num).compactMap { $0.wholeNumberValue }
}

 
 

3. 함수 네이밍 수정

// MARK: - 입력값과 정답을 비교해 힌트 계산하는 함수 (수정 전)
func compareInpAns(_ number: Int, _ ansArray: [Int]) -> GameResult {...}

 
내가 작성했던 함수의 이름 compareInpAns 이거 지어놓고 나름 잘 지은줄 착각했는데 전혀 아니었다... ㅋㅠㅋ
내가 쓴 함수를 호출할 때의 모습을 봐보자

compareInpAns(123, [1,2,3])
// 일단 Inp,Ans이런건 이름을 지은 나만 알아먹음
// 파라미터가 둘다 _ 이거라서 읽을때 맥락이 없다

 
일단 함수의 이름은 compare로 바꾸고 _로 생략되어 있던 파라미터명을 input과 with answer로 변경해 주자

func compare(input: Int, with answer: [Int]) -> GameResult {...}

 
그러면 이 함수는 이렇게 호출하게 변경된다.

compare(input: 123, with: [1,2,3])

딱 봐도 input을 answer와 비교하는 함수이구나..!라고 캐치가 가능하게 변한다.
 
이렇게 함수 호출을 할 때 영어 문장처럼 읽히게 하는 것이 바로 Swift의 추구미✨라고 한다.
 
 
이제 야구 게임 리팩토링 진짜 끝!

칭찬을 들으니 춤을 추고 싶다. 💃🏻