return null;

public class FooFactory {

    public static Foo createFoo() {
        try {
            Properties prop = new Properties("bi.properties");
            return new Foo(prop);
        } catch (Exception e) {
            log.error(e, e);
        }

        return null;
    }
}

이 코드의 문제점은 null이 리턴될 가능성이 있다는 것.
...
    public void 뿌잉뿌잉() {
        Foo foo = FooFactory.createFoo();
        foo.process();
    }
...

사용자는 이렇게 프로그래밍을 할것이다. 그런데 createFoo()가 null을 리턴할 수도 있다는 걸 알지 못한다. 만약 createFoo()에서 예외가 발생해 null을 리턴하게 되면 NullPointerException이 발생할 것이다.

좋은 코드는 아닌거 같은데 어떻게 하면 좀더 좋은 코드를 만들 수 있을까?

1. createFoo()라는 메쏘드명에 충실하자. Foo 객체만 생성해야 한다. null을 돌려줄 수 있다는 힌트는 어디에도 없다.

2. createFoo()를 실행 중에 예외가 발생하면 null을 리턴하지 말고 밖으로 예외를 던져서 알리는게 좋을 듯하다. 그래야 사용자가 예외 상황을 처리할 수 있다.

3. 이왕 던질거면 예외가 왜 발생했는지도 함께 넘겨주면 디버깅이 쉬워 진다. 적절한 메시지를 만들어서 보여주는 나만의 Exception을 하나 만들어 보자.

4. 그럼 이 때 RuntimeException으로 만들까 아니면 그냥 Checked Exception으로 만들까?
이 둘의 비교는 구글링하면 많이 나오므로 패쓰. Checked Exception을 사용하는 패턴은 지양하자.

댓글

이 블로그의 인기 게시물

미적분과 차원

자바 로깅

apache rewrite_module 로그