Lv1 자동차 경주 미션 피드백 2 : [우아한테크코스 5기 AN_베르]

2023. 2. 14. 00:20· 우아한테크코스

이전 글에 이어서 현직자 분의 step2 리뷰 입니다.

반복되는 리뷰는 앞 글에서 묶어서 이미 정리하였습니다. 

1. 재사용 가능하게 만들어라 

class RaceTime(private var time: Int) {
    ...
   	fun reduceTime(): Boolean {
        if (time <= 0) {
            return false
        }
        time--
        return true
    }
    ...
}

위 코드에서 RaceTime 은 time 값이 0 이하가 되기 전까지 reduceTime 을 반복하여 time 변수를 외부에서 get하지 않아도 반복할 수 있다. 

하지만 이 RaceTime 객체를 재사용 하고 싶어도 이미 0이 되어버린 값은 돌릴 수 없는 문제가 생긴다.

이렇게 되면 의도치 않은 동작을 만들 수 있는 사이드 이펙트가 발생할 수도 있다.

 

해결한 방법 : 코틀린 고차함수를 사용하여 재사용이 가능하도록 만들었다.

 

- 고차함수 

  함수를 인자로 받거나 함수를 반환한다.

class RaceTime(private val time: Int) {
	...
 	fun repeatTimes(func: () -> Unit) {
        repeat(time) {
            func()
        }
    }
}

 

repeatTimes는 함수를 인자로 받아 time 만큼 반복한다. 컨트롤러에서 반복하고 싶은 함수를 전달한다.

기존 var time 은 이제 불변 변수 val 로 변경한다.

class Controller(){
private fun race(cars: List<Car>, raceTime: RaceTime) {
        outputView.printExecutionResult()
        raceTime.repeatTimes {
            raceOneTime(cars)
            outputView.printInterval()
        }
    }
}

 

2. 외부에서 사용 되는가?

class RaceTime(private val time:Int){
    init {
        validateRange()
    }

    private fun validateRange() {
        require(time in LOWER_RACE_TIME..UPPER_RACE_TIME) { ERROR_NOT_IN_RANGE }
    }

    companion object {
        const val LOWER_RACE_TIME = 1
        const val UPPER_RACE_TIME = 10
        
        const val ERROR_NOT_IN_RANGE = "시도 횟수는 1이상 10 이하여야 합니다."
    }
}

 위는 RaceTime 클래스로 time 을 받고 검증한다. 여기서 하드코딩을 없애기 위해 companion object를 사용했으나 RaceTime을 검증하기 위한 값이 외부에서 사용될 일은 없기 때문에 private으로 변경해 주는게 올바르다. 단, 에러 메세지는 테스트에서 사용하기 때문에 public으로 남겨두었다. 

    companion object {
        private const val LOWER_RACE_TIME = 1
        private const val UPPER_RACE_TIME = 10
        
        const val ERROR_NOT_IN_RANGE = "시도 횟수는 1이상 10 이하여야 합니다."
    }

'우아한테크코스' 카테고리의 다른 글

로또 미션 피드백 : [우아한테크코스 5기 AN_베르]  (0) 2023.02.27
TDD : [우아한테크코스 5기 AN_베르]  (0) 2023.02.15
Lv1 자동차 경주 미션 피드백 1 : [우아한테크코스 5기 AN_베르]  (0) 2023.02.13
코틀린 이해하기 : [우아한테크코스 5기 AN_베르]  (1) 2023.02.08
OT : [우아한테크코스 5기 / 2023.02.07]  (0) 2023.02.07
'우아한테크코스' 카테고리의 다른 글
  • 로또 미션 피드백 : [우아한테크코스 5기 AN_베르]
  • TDD : [우아한테크코스 5기 AN_베르]
  • Lv1 자동차 경주 미션 피드백 1 : [우아한테크코스 5기 AN_베르]
  • 코틀린 이해하기 : [우아한테크코스 5기 AN_베르]
베르_최성훈
베르_최성훈
베르_최성훈
베르의 안드로이드
베르_최성훈
전체
오늘
어제
  • 분류 전체보기 (59)
    • Android (19)
    • kotlin (2)
    • 책 (2)
    • 우아한테크코스 (15)
    • 회고 (5)
    • Bug Fix (2)
    • 알고리즘 (6)
    • Jetpack Compose (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Android
  • 페스타고
  • Kotlin
  • Test
  • 우테코
  • ViewModel
  • 생명주기
  • flow
  • Lifecycle
  • PRESENTER
  • 프래그먼트
  • MVP
  • 우아한테크코스
  • 코틀린
  • 안드로이드
  • 회고
  • coroutine
  • FRAGMENT
  • SharedFlow
  • MVVM

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
베르_최성훈
Lv1 자동차 경주 미션 피드백 2 : [우아한테크코스 5기 AN_베르]
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.