ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 9/15 TIL | 코딩 테스트에 TDD 적용해보기! (부제: What I Ate Today😋)
    📝 기록/매일의 기록 2022. 9. 15. 20:17

    이번 주 퀘스트 과제부터는 테스트 코드를 함께 작성하게 되었는데, TDD는 해본 적이 없어 매번 그냥 구현부터 해버리는 바람에 아차차 하고 다시 테스트 코드로 돌아갈 때가 많았다. 익숙해지기까지 오래 걸리겠다 싶으면서도 하루빨리 익숙해지고 싶은 마음에 최대한 많이 작성해봐야 할 거 같아 매일 푸는 코딩 테스트에도 TDD를 적용해야겠다는 생각을 했다. 생각해보니 간단한 코딩 테스트야말로 테스트 코드를 작성하기 훨씬 쉽겠다 싶었고, 그래서 오늘 처음으로 코딩 도장 문제를 테스트 코드와 함께 작성해보았다.

    오늘의 코딩 도장 문제는 가운데 글자 가져오기였는데, 문제에 대한 설명부터 해보자면 아래와 같다.

    문제 설명

    - 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요.
    - 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

    제한 조건

    - s는 길이가 1 이상, 100이하인 스트링입니다.

    입출력 예

    arr return
    "abcde" "c"
    "qwer" "we"

    나의 문제 풀이

    [📃 SolutionTest.java - 테스트 코드]

    import org.junit.jupiter.api.Test;
    
    import static org.junit.jupiter.api.Assertions.*;
    
    class SolutionTest {
    
        // 홀수 & 짝수 판단하는 테스트 코드
        @Test
        void isOdd() {
            Solution solution = new Solution();
    
            assertTrue(solution.isOdd("abcde"));
            assertFalse(solution.isOdd("qwer"));
        }
    
        // 가운데 글자 구하기 테스트 코드
        @Test
        void middleString() {
            Solution solution = new Solution();
    
            assertEquals("c", solution.getMiddleString("abcde"));
            assertEquals("we", solution.getMiddleString("qwer"));
        }
    }

    먼저 이 문제는 문자열 s를 입력받으면, 그 문자열의 가운데 글자를 반환해야 하는 문제였는데, 이때 만약 문자열 s의 길이가 홀수면 한 글자를, 짝수면 두 글자를 반환하면 된다. 그렇기에 테스트 코드는 홀수와 짝수를 판단하는 테스트 코드 isOdd가운데 글자 구하는 테스트 코드 middleString를 작성하였다. (middleString보다는 subString이 보다 더 세련된 변수명인 거 같지만, 기존에 제공되는 메서드와 이름이 겹치는 게 싫어 middleString이라고 네이밍하였다.)

    우선 먼저 테스트 코드로 isOdd를 작성해서 홀짝 true & false를 체크하고 통과하고, middleString을 선언하여 가운데 글자를 제대로 추출하는지 체크하고 통과하니 어느새 문제 풀이를 완성하게 되었다.

    [📃 Solution.java - 문제 풀이]

    public class Solution {
        public String solution(String s) {
        	// 정답을 담을 answer 변수 선언
            String answer = "";
    
            // getMiddleString 메서드에 s를 인자로 전달하고 처리하여 받은 결과값을 answer에 할당
            answer = getMiddleString(s);
    
            // answer 반환
            return answer;
        }
    
        // 가운데 글자를 가져오는 메서드
        public String getMiddleString(String s) {
        	// s의 가운데 지점을 찾아 middle 변수에 할당
            int middle = s.length() / 2;
    
            // isOdd 메서드에 s를 인자로 전달하고
            if (isOdd(s)) {
                // isOdd의 반환값이 true면 한 글자 반환
                return s.substring(middle, middle + 1);
            }
    
            // isOdd의 값이 false면 두 글자 반환
            return s.substring(middle - 1, middle + 1);
        }
    
        // 문자열 길이가 홀수인지 짝수인지 판단하는 메서드
        public boolean isOdd(String s) {
        	return s.length() % 2 == 1;
        }
    }

    그렇게 완성한 코드는 위와 같은데, 점진적으로 하나하나씩 작성해서 메서드들이 통과할 때마다 쾌감 돋아서 즐거웠다. 테스트 코드가 완성되면 자연스럽게 문제 풀이도 완성되는 것이 신기하면서도 두 마리의 토끼를 잡은 기분이라 기분이 좋았다. 이 맛에 TDD하는 건가 싶기도 했고, 퀘스트 과제의 테스트 코드를 작성할 때보다 이렇게 스케일이 작은 코딩 테스트 문제로 테스트 코드를 작성해보니 보다 더 쉽게 작성할 수 있었다. 그 덕분에 TDD에 조금씩 감을 잡아가는 느낌인데, 이렇게 지속적으로 훈련해서  프로그램들을 만들 때도 숙련되게 작성해보자! 🤓


    그리고 아침에 코딩 도장이 끝나고 동기들이랑 각자 테스트 코드 작성을 어떻게 했는지 공유하고 있던 차에 오란다 과자를 선물받았다. 근데 이놈 아주 물건이다!!!😋 원래도 아빠랑 내가 이 과자를 엄청 좋아해서 시장에서 항상 사 와서 먹곤 했는데, 시장에서 사 온 오란다는 엄청 딱딱하다. 근데 얘는 엄청 부드럽고 말랑말랑 대박 맛있었다!!!👍🏻 개인적으로도 따로 구매해서 먹어보려고 한다 ㅎㅎ

    좌) 엔칠라다, 우) 치미창가

    또, 점심에는 제나님이랑 멕시칸 음식점인 와하카(이것도 홀맨님 추천 맛집!)에 가서 엔칠라다랑 치미창가를 먹고 왔는데, 레알로다가 입에서 팡파레 터지는 맛이었다.. 🎉 오랜만에 진짜 이국적인 음식 먹으니까 여행 온 기분도 나고 너무 좋았다. 이렇게 점심시간에 맛있는 음식 먹고 정신을 환기하니까 하루가 완벽해지는 느낌!!! 다음엔 가서 타코랑 부리또 먹고 와야지😋

    입으로 설거지 한 썰......🧼

    이렇게 유쾌함을 잃지 않으면서 지치지 말고 열심히 학습해서 내가 원했던 모든 것들을 이룰 수 있길! 기원하며 이제 다시 2인용 마카오뱅크 만들러 가보자 ㅎㅎ 오늘도 파이팅이다!💪