전체 글

    [Spring] 테스트 주도 개발 (TDD)

    💡 테스트 주도 개발이란? 이전 글에서 get() 메소드의 예외 테스트를 만드는 순서를 보면, 새로운 기능을 넣기 위해 UserDao를 수정한 후 수정한 코드를 검증하기 위한 테스트 구현 순서가 아닌, 테스트를 먼저 만들어 테스트가 실패하는 것을 본 후 UserDao의 코드를 수정하는 순서이다. 이러한 순서는 좀 이상하다고 생각할지 모르지만, 이런 순서로 진행하는 테스트가 이끄는 개발을 극대화한 방법을 테스트 주도 개발(TDD)이라 한다. TDD의 기본 원칙 "실패한 테스트를 성공시키기 위한 목적이 아닌 코드는 만들지 않는다." ✏️ 장점 테스트를 먼저 만들기 때문에 테스트를 빼먹지 않고 꼼꼼하게 만들 수 있다. 테스트를 작성하는 시간과 애플리케이션 코드를 작성하는 시간의 간격이 짧다. 코드를 작성하면 ..

    [백준] 9205번 - 맥주 마시면서 걸어가기 (카스텐라우프)

    https://www.acmicpc.net/problem/9205 9205번: 맥주 마시면서 걸어가기 문제 송도에 사는 상근이와 친구들은 송도에서 열리는 펜타포트 락 페스티벌에 가려고 한다. 올해는 맥주를 마시면서 걸어가기로 했다. 출발은 상근이네 집에서 하고, 맥주 한 박스를 들고 출발 www.acmicpc.net ✏️원리 Kastenlauf 카스텐라우프는 독일에서 주로 하는 술게임이라고 한다. 이 문제는 위 게임과 룰이 같으며, 맥주 20병을 담을 수 있는 박스를 들고 페스티벌까지 50m씩 맥주를 마시면서 맥주가 동이 안 날 때까지 마시면서 갈 수 있는지 없는지를 해결해야 하는 문제이다. 이 문제를 보고 나서 처음에 DFS로 풀어야지하며, DFS로 풀어보았다. 하지만 계속 시간초과가 나와, 계속 시간..

    [백준] 12100번 - 2048(Easy)

    https://www.acmicpc.net/problem/12100 12100번: 2048 (Easy) 첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2 www.acmicpc.net https://play2048.co/ 2048 Join the numbers and get to the 2048 tile! Careful: this game is extremely addictive! play2048.co ✏️원리 예전에 2048게임을 많이 했었는데, 이렇게 알고리즘 문제로 풀게되니 신기했다. 우선 2048은 동서남북, 이렇게 4방향으로 블록을 움직일 ..

    [Spring] JUnit - 예외조건에 대한 테스트

    💡 만약 메소드에 전달된 파리미터 값이 없을 때 어떻게 해결해야 할까? 해결 방법 : null과 같은 특별한 값을 리턴 값에 해당하는 정보를 찾을 수 없다고 예외를 던진다. 1번은 구현하기 간단하니 2번을 천천히 구현해보자. 두번째 방법을 위해 해당하는 정보가 없다는 의미를 가진 예외 클래스가 하나 필요한데 스프링이 미리 정의해 놓은 예외가 존재하며 가져다 써도 된다. 지금부터 UserDao의 get() 메소드에 전달된 id값에 해당하는 사용자 정보가 없을 때 예외를 던져 테스트 해보자. 예외 클래스로는 EmptyResultDataAccessException을 사용할건데, 먼저 java.org.springframework.dao 라이브러리가 있는지 확인을 해줘야한다. 일반적인 테스트는 다 원활이 수행되면..

    [Spring] 테스트 자동화 - JUnit 도구 활용

    💡 테스트를 해야하는 이유? 테스트란 의도했던 대로 코드가 정확히 동작하는지를 확인해서 만든 코드를 확신할 수 있게 해주는 작업 테스트의 결과 원하는 대로 나오지 않는 경우 코드나 설계에 결함이 있음을 알 수 있음 최종적으로 테스트가 성공하면 모든 결함이 제거됐다는 확신을 얻을 수 있음 💡 작은 단위에 테스트 테스트하고자 하는 대상이 명확하면 그 대상에만 집중해서 테스트하는 것이 바람직하다. 따라서 분리하고 집중해서 접근하자 이것을 단위 테스트라고 한다. 지금까지 만들어 온 UserDaoTest도 DB의 상태를 테스트하고 있어 단위 테스트라고 해도 된다. 💡 자동 수행 테스트 코드 UserDaoTest의 특징 중 하나는 테스트 할 데이터가 코드를 통해 제공되고, 테스트의 작업 역시 코드를 통해 자동으로 ..

    [백준] 13900번 - 순서쌍의 곱의 합 (부분합)

    이 문제를 보고, 무작정 Brute Force로 풀면 되지 않을까라고 생각했다. 하지만 시간 제한 부분에서 (추가 시간 없음)을 보고, 이렇게 쉽게 나올리 없다고 생각하며 다른 방법을 생각해보았다. 예전에 비스무리한 문제를 풀었던 기억이 있는데, 잘 기억이 나지 않았다. 이렇게 잘 기억이 나지 않을 때는 식을 써보면 기억이 나기도 하여, 노트를 이용해 식을 작성해보았다. 예제 입력 2으로 먼저 식을 나열하면, (1*2) + (1*3) + (1*4) + (2*3) + (2*4) + (3*4) 위와 같이 나오는데, 정리를 해보면 아래와 같이 나온다. (1*(2+3+4)) + (2*(3+4)) + (3*4) 아니다 다를까, 이렇게 바꿔보니 이 문제는 부분합으로 쉽게 풀리는 걸 알게 되었다. ✏️ 부분합이란? ..