Skip to main content

Command Palette

Search for a command to run...

패스트캠퍼스X야놀자: 백엔드 개발 부트캠프_Java 과제 1 후기

Updated
2 min read
패스트캠퍼스X야놀자: 백엔드 개발 부트캠프_Java 과제 1 후기

패스트캠퍼스x야놀자 부트캠프를하며 첫 과제로 'Java 과제1'을 풀게 되었다.

이번 과제를 하면서 가장 집중했던 부분은 객체지향, 테스트코드 였다.

최종적으로 3개의 클래스로 나누어 코드를 작성했다. (Main 제외)

처음 설계를 할 때 어떤 식으로 객체를 설계해야할 지 감이 잘 오지 않았다.

'객체지향의 사실과 오해'에서 말하는, 객체가 가져야할 책임이 무엇인지 생각하여 역할을 고려하고 등등.. 을 떠올리며 설계를 해보려 했으나 머릿속에 잘 정리되지 않아서 인지 그런 방식으로 설계하는게 쉽지는 않았다.

그래서 최대한 내가 아는, 감이 오는 방식으로 객체를 설계했다. 우선 검색 기능을 담당하는 객체를 만들고 그 기능에서 필요한 도메인 두 개로 설계했다.

다른 분들의 코드를 자세히 보지는 않았지만 객체를 엄청 많이 쪼개신.... 아직 설계에 있어 부족한 부분이 많은것 같고 더 노력해야겠다는 생각을 했다. 만약 내 코드에서 객체의 역할을 더 분리해 본다면 검색 역할을 하는 객체에서 Json을 파싱하는 객체를 따로 분리 할 수 있겠다는 생각이 들었다.

두 번째로 테스트 코드에 대한 고찰이다.

class KaKaoAPISearcherTest {
    @Test
    void findAddressXY() throws Exception{
        KaKaoAPISearcher searcher = mock(KaKaoAPISearcher.class);
        AddressXY addressXY = mock(AddressXY.class);

        when(addressXY.getX()).thenReturn(120.0123);
        when(addressXY.getY()).thenReturn(66.12345);
        when(searcher.findAddressXY(anyString())).thenReturn(addressXY);

        AddressXY findAddressXY = searcher.findAddressXY("천안시 서북구 두정역동");

        assertThat(findAddressXY).isInstanceOf(AddressXY.class);
        assertThat(findAddressXY.getX()).isEqualTo(120.0123);
        assertThat(findAddressXY.getY()).isEqualTo(66.12345);
    }

    @Test
    void getPlaceInformation() throws Exception{
        KaKaoAPISearcher searcher = new KaKaoAPISearcher();
        AddressXY findAddressXY = searcher.findAddressXY("천안시 서북구 두정역동");
        List<GasStation> findGasStationList = searcher.findGasStationInfoList(findAddressXY, 2000);

        assertThat(findGasStationList.size()).isLessThan(11);
    }

}

테스트 코드를 위와 같이 작성했다. 멘토님께서 가르쳐 주신 방식으로 테스트 코드를 먼저 작성하여 동작의 흐름에 맞춰 실제 코드를 작성했다.

첫 테스트 코드는 mock객체를 활용하여 작성했는데, 동작 흐름을 파악하는 목적으로는 좋다. 그러나 테스트 코드의 목적 중 하나가 코드 리펙토링 후에도 기능이 올바르게 작동하는지를 확인하는 용도라고 이해하고 있다. 그런데 mock객체를 활용하면 항상 테스트가 성공하게 되는 문제가 있지 않나? 라는 생각을 하게 되었다.

두 번째로는 mock객체를 사용하지 않고 실제 객체를 이용하여 작성하였다. 이 번에는 후에 리팩토링 하고 난 다음에도 활용할 수 있는 방식으로 코드를 작성했다.

위와 같은 방식으로 테스트 코드를 작성하는게 맞는지 1도 모르겠으나, 테스트 코드의 목적에 대해서는 이해가 확실히 된 것 같다. 물론 아직 부족하고 어렵지만 계속해서 작성하다 보면 충분히 잘 해질 수 있을 것 같다는 생각이 들었다.

마지막으로, 이번 과제를 하며 올린 커밋 로그와 결과화면을 끝으로 포스팅을 마친다.

브라우저 띄우는 API 매우 신기;;