woniper

이유있는 코드, 설명할 수 있는 코드 본문

이야기

이유있는 코드, 설명할 수 있는 코드

woniper1 2017. 1. 10. 14:51

  몇년 전 모 회사 면접을 볼때 이런 질문을 받았다.

1
2
3
4
5
6
7
8
9
10
11
public void method() {
    Object obj1 = null;
    Object obj2 = null;
 
    if(flag) {
        obj1 = new Object();
        obj1 = new Object();
    } else {
        throw new IllegalArgumentException();
    }
}
cs

  위 코드 obj1과 obj2를 바로 초기화 하지 않고 if, else 문에서 객체를 초기화 했는지에 대한 질문이였다. 그 회사는 코딩 테스트를 본 후 인터뷰를 진행하는데 내가 작성한 코드를 인터뷰를 통해 검증하는 시간이다. 

  예를 들기 위해 위와 같이 의미를 파악 할 수 없는 코드로 설명을 했는데, 내가 설명하고자하는 이유는 Exception 처리를 하기 위해서였다. 이 질문을 받고 내가 한 답변은 지금 생각해도 황당한 답변이였을 것이다. "제 코딩 스타일이 그렇습니다.." 창피하지만 정말 저렇게 말했다. 긴장도 했고 뭣 모르던 시절이다. 혼자 코딩을 할때는 Exception 처리하기 위한 의도였는데 인터뷰에서 황당한 답변을하고 말았다.


그럼 아래 코드는 어떻게 설명할 것인가??

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Test
public void jdbc() {
    Connection connection = null;
    PreparedStatement statement = null;
 
    try {
        Class.forName("com.mysql.jdbc.Driver");
        connection = DriverManager.getConnection("url");
        statement = connection.prepareStatement("query");
 
        // ... 생략 ...
    } catch (SQLException e) {
        // ... 생략 ...
    } catch (ClassNotFoundException e) {
        // ... 생략 ...
    } finally {
        // connection, statement close
    }
}
 
cs

  자바 개발자라면 JDBC 코드를 한번쯤은 작성해봤거나, 책에서라도 봤을 것이다. 보통 위와 같이 작성하는데 Connection, PreparedStatment 선언을 null로 한 이유를 생각해보자. 단순하다. finally에서 close를 해야하기 때문이다. try 코드 블럭 안에서 초기화 했다면 finally에서 객체 접근이 불가능하기 때문 아닌가? 자세히 설명하지 않아도 누구나 이해할 것이다.


  개발자는 자신이 작성한 코드를 설명할 수 있어야하고, 충분한 이유가 있어야한다는 것이다. 말은 쉽지만 아직도 나는 관례대로 코딩하는 부분이 분명히 존재할 것이다. 하지만 공부를 하다보면 항상 생각하게 되는 것이 내 생각이나 의도를 설명할 수 있어야한다고 생각한다.

  아무리 쉬운 코드를 작성하더라도 그 코드에 대한 설명과 작성한 방법에 대한 타당한 이유를 설명 할 수 있어야된다고 생각한다. 조금 더 생각하고 코딩하자.


'이야기' 카테고리의 다른 글

Spring Camp 2017 연사 후기  (2) 2017.05.06
REST API와 Metadata  (0) 2017.03.17
최소한 단축키는 쓰자. 되도록이면 타자 연습도 하자.  (4) 2016.12.31
2016년 정리  (2) 2016.12.26
장애를 해결하는 방법  (1) 2016.12.03
0 Comments
댓글쓰기 폼