지난 주 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
오늘도 몹 프로그래밍을 하다가 코드 수정 중에 한 줄을 띄울 것인가 말 것인가에 대한 논의가 있었습니다... ㅋㅋㅋ
@장영빈 어떤 부분에 대해 그런 고민을 했는지 소스 코드를 공유해 보면 이 곳의 좋은 선배 개발자들과 이야기해볼 수 있는 기회도 되고 좋을 듯 하다.
앞으로 그런 막연함이 있는 코드가 있다면 이곳에 온라인 코드 리뷰 요청을 해봐라.
파이썬의 pep8(https://www.python.org/dev/peps/pep-0008/#blank-lines)에서는에서는) 빈 줄에 대한 규칙이 정리되어 있지요. 전 이게 맘에 들어요.
@진우 참 소프트웨어 세상은 알수록 재미있네. 이런 걸 미리 정리하고 사용하는 곳이 이미 있다니. 좋네. 내가 이래서 이런 글을 쓰고 공유하는 재미가 있다니까.
의견을 남기기 위해서는 SLiPP 계정이 필요합니다.
안심하세요! 회원가입/로그인 후에도 작성하시던 내용은 안전하게 보존됩니다.
SLiPP 계정으로 로그인하세요.
또는, SNS 계정으로 로그인하세요.