Two Fer

Two Fer

쉬움

소개

일부 영어 억양에서는 "two for"를 빠르게 말하면 "two fer"처럼 들려요. Two-for-one은 하나를 사면 하나를 무료로 더 준다는 뜻을 나타내는 표현이에요. 그래서 "two-fer"라는 말은 흔히 하나를 사면 하나를 더 주는 혜택을 의미해요.

쿠키 두 개를 하나 가격으로 살 수 있는 휴일 특별 행사를 하는 빵집을 상상해 봐요 ("two-fer one!"). 이 혜택을 받아들이고, (아주 관대하게도) 남은 쿠키 하나를 줄에 서 있는 다른 사람에게 주기로 해요.

지침

여분의 쿠키를 나눠 줄 때 무슨 말을 할지 정하는 것이 이번 과제예요.

그 사람의 이름을 안다면(예를 들어 이름이 Do-yun이라면) 이렇게 말해요:

One for Do-yun, one for me.

이름을 모른다면 대신 _you_라고 말해요.

One for you, one for me.

몇 가지 예를 볼까요?

이름 대화
Alice One for Alice, one for me.
Bohdan One for Bohdan, one for me.
One for you, one for me.
Zaphod One for Zaphod, one for me.

구현

시작하기 전에, 테스트 케이스를 통과하는 코드를 어떻게 작성하는지 확실히 이해하고 있어야 해요. 더 자세한 내용은 이 [튜토리얼]을 확인해 봐요.

대부분의 Java 연습 문제에는 여러 개의 테스트 케이스가 들어 있어요. 이 케이스들은 테스트 주도 개발 (TDD)이라는 유용한 과정을 뒷받침하도록 구성되어 있어요. TDD는 복잡한 기능을 한 번에 만드는 대신 하나씩 쌓아 올리도록 도와주는, 체계적인 주기를 반복하는 방법이에요. 그 주기는 다음과 같아요:

  1. 지금 코드에 빠져 있는, 원하는 기능 한 조각을 설명하는 테스트를 추가해요.
  2. 테스트를 실행해서 새로 추가한 테스트가 실패하는지 확인해요.
  3. 다음 조건을 만족할 때까지 기존 코드를 수정해요:
    • 기존의 모든 테스트가 계속 통과하고,
    • 새 테스트도 통과해요.
  4. 코드를 정리하고, 모든 테스트가 계속 통과하는지 확인해요. 보통 변수 이름을 바꾸거나, 중복된 로직 덩어리를 없애거나, 남아 있는 로깅을 지우는 등의 작업이 포함돼요.
  5. 원하는 기능을 모두 만들 때까지 1단계로 돌아가요!

이 트랙의 테스트 파일에는, 풀이가 올바르다고 인정받기 위해 통과해야 하는 모든 테스트가 들어 있어요. 그런데 이는 테스트를 하나씩 작성하는, 위에서 설명한 주기와는 곧바로 맞아떨어지는 것처럼 보이지 않아요. 하지만 테스트를 작성할 때 사용하는 도구인 JUnit은 이미 작성된 테스트를 일시적으로 건너뛸 수 있게 해주는 @Disabled 애너테이션을 제공해요. 이 애너테이션을 이용하면, 전달하는 테스트 파일이 다음 규칙을 만족하도록 만들 수 있어요:

  • 테스트 파일의 첫 번째 테스트는 기본적으로 건너뛰지 않아요.
  • 테스트 파일의 첫 번째를 제외한 모든 테스트는 기본적으로 건너뛰어요.

이 덕분에 다음과 같이 살짝 수정된 단계를 따라가면서 TDD 주기를 직접 경험해 볼 수 있어요:

  1. 테스트를 실행해서 현재 실패하는 테스트가 _많아야 하나_인지 확인해요.
  2. 건너뛰지 않은 테스트가 모두 통과할 때까지 기존 코드를 수정해요.
  3. 코드를 정리하고, 건너뛰지 않은 테스트가 모두 계속 통과하는지 확인해요.
  4. 테스트 파일에서 가장 위에 있는 @Disabled 애너테이션을 지워요.
  5. 건너뛴 테스트가 하나도 없고 모든 테스트가 통과할 때까지 1단계로 돌아가요!

출처

이 연습 문제의 출처를 살펴보세요.

GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Java Exercism

Two Fer 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Java 트랙을 개념 26개연습 문제 158개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.