소스 코드 구현할 때 어느 곳에 한 줄을 띄는 것이 좋을까?

2015-03-24 12:04

지난 주 NEXT 학생 소스 코드 리뷰를 하다 다음과 같은 소스 코드를 리뷰하는 중 나온 이야기이다.

public class NoteDAOTest {
    NoteDAO noteDAO = new NoteDAO();


    @Test
    public void testCreateNote() throws SQLException {
        
        //auto increment
        Note note = new Note("test", "2015-03-19 17:56:24", "test@guinness.org", "abcde");
        
        noteDAO.createNote(note);
        
        noteDAO.removeUser(note);
    }
}

위 소스 코드의 testCreateNote() 메서드를 보면 의미없이 한 줄을 띄고 있는 것을 볼 수 있다. 소스 코드를 구현할 때 한 줄을 띄는 경우가 많은데 어떤 기준으로 한 줄을 띄는가?

이와 관련해 채수원님이 NEXT 놀러왔다가 공유한 내용을 적어보려 한다. 정확하지 않은 부분은 채수원님이나 다른 분들이 채워주리라 믿는다.

일반적으로 대부분의 개발자들은 한 줄 띄는 것에 특별히 신경을 많이 쓰지 않는다. 하지만 어느 부분에서 한 줄을 띄울 것인가에 대해서도 고려하면서 코딩했으면 한다.

한 줄을 띄는 기준을 코드의 Context가 바뀌는 시점을 기준으로 했으면 한다. 이와 같이 Context가 바뀌는 지점에서 한 줄을 띄우는 방식으로 소스 코드를 구현해 놓으면 추후 Extract Method 리팩토링을 통해 메서드를 분리하는 기준점이 될 가능성이 높기 때문에 좋다.

지금까지 나 또한 특별한 기준 없이 순전히 감에 의존해 한 줄을 띄우면서 개발해 왔다. 위 내용을 듣는 순간 소스 코드를 구현할 때 한 라인 라인에 의도를 가지면서 구현하는 것이 중요하다는 것을 다시 한번 느꼈다.

소스 코드 중의 하나를 이 기준으로 리팩토링해본 내용을 공유한다.

public class UserDAOTest {
    @Test
    public void NotExistCreateUserTest() throws SQLException {
        User user = new User("testUserId2", "testUserName", "testUserPassword");
        UserDAO userDao = new UserDAO();
        userDao.createUser(user);
        User dbUser = userDao.readUser(user.getUserId());
        assertEquals(user.getUserId(), dbUser.getUserId());
    }
}

위와 같이 구현할 경우 현재 테스트 코드가 어느 메서드를 테스트하는지 읽기 힘들다. 위 코드를 다음과 같이 리팩토링해봤다.

public class UserDAOTest {
    @Test
    public void NotExistCreateUserTest() throws SQLException {
        //given
        User user = new User("testUserId2", "testUserName", "testUserPassword");
        UserDAO userDao = new UserDAO();
        userDao.createUser(user);
        
        //when
        User dbUser = userDao.readUser(user.getUserId());
        
        //then
        assertEquals(user.getUserId(), dbUser.getUserId());
    }
}

이런 하나의 예로 한번에 좋은 소스 코드를 구현하기는 힘들다. 하지만 지금까지 신경쓰지 않았던 부분에 대해 한번 상기시켜 줌으로써 의도적으로 프로그래밍하는 연습을 하고, 그로 인해 깔끔하고 읽기 좋은 코드가 나올 수 있다고 생각한다.

이 번 경험을 통해 나 혼자보다는 여러 명의 선배가 같은 소스 코드를 리뷰해 보는 것도 서로 간에 많은 배움이 되겠다는 생각을 해봤다.

2개의 의견 from FB

4개의 의견 from SLiPP

2015-03-25 11:17

@장영빈 어떤 부분에 대해 그런 고민을 했는지 소스 코드를 공유해 보면 이 곳의 좋은 선배 개발자들과 이야기해볼 수 있는 기회도 되고 좋을 듯 하다.

앞으로 그런 막연함이 있는 코드가 있다면 이곳에 온라인 코드 리뷰 요청을 해봐라.

의견 추가하기

연관태그

← 목록으로