11월, 2011의 게시물 표시

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을 사용하는 패턴은 지양