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
Comments