오류 처리는 중요하다. 하지만 오류 처리 코드로 인해 프로그램 논리를 이해하기 어려워진다면 깨끗한 코드라 부르기 어렵다. <p.130>
오류 코드보다 예외를 사용하라. <p.131>
Try-Catch-Finally 문부터 작성하라. <p.132>
미확인(unchecked) 예외를 사용하라. <p.133>
예외에 의미를 제공하라. <p.135>
호출자를 고려해 예외 클래스를 정의하라. <p.135>
정상 흐름을 정의하라. <p.137>
null을 반환하지 마라. <p.138>
매서드에서 null을 반환하고픈 유혹이 든다면 그 대신 예외를 던지거나 특수 사례 객체를 반환한다. 많은 경우에 특수 사례 객체가 손쉬운 해결책이다.
null을 전달하지 마라. <p.140>
대다수 프로그래밍 언어는 호출자가 실수로 넘기는 null을 적절히 처리하는 방법이 없다. 즉, 인수로 null이 넘어오면 코드에 문제가 있다는 말이다.
오류 처리를 프로그램 논리와 분리하면 독립적인 추론이 가능해지며 코드 유지보수성도 크게 높아진다.<p.142>
오류 처리는 프로그래밍에서 빠질 수 없는 과정이다. 잘 의도된 코드도 사용자에 따라 오류를 만들어 낼 수 있기 마련이다.
확인된 예외와 확인되지 않은 예외에 대한 내용은 상당히 흥미로웠다. 확인된 예외를 사용하던 시절부터 이를 사용함으로써 발생할 수 있는 OCP(Open Closed Principle) 위반과 캡슐화(Encapsulation)이 깨지는 것과 같은 문제들은 예외를 어떻게 처리해야 좋은지 방향성을 제공해주는 것 같았다.
정상 흐름을 정의하는 것과 null을 예외 처리에서 어떻게 바라봐야 하는지 등은 평소에 막연했던 개념을 확실하게 잡아 준 거 같다. 예외를 던지는 것은 중단을 불러온다. 가능하면 특수 사례 패턴을 이용해 코드를 좀 더 간결하게 리팩토링하자.
null이 어떤 문제를 불러일으키는지 알아봤다. null을 반환하거나 null을 전달했을때 발생하는 문제는 심각했다. 편의를 위해서 나 또한 프로그래밍에서 null을 처리하는 조건문을 상당히 많이 사용하였는데 이번 기회에 이것들을 고쳐보면 좋을 거 같다.
주로 사용하는 언어가 JS이다보니 JAVA의 예시들이 어색하게 느껴지는 경우도 많고 실제로 적용하기가 어렵게 느껴지는 경우가 많았다. 하지만 핵심 개념은 분명하고 이는 전 프로그래밍 코드에 적용될 수 있는 내용들일 것이다. 회차를 거듭해가고 계속해서 프로그래밍을 하면서 이것들을 실제로 적용하려고 노력하고 있다. 기회가 되면 아니 나중에는 반드시 이를 기반으로 리팩토링에 관한 글을 작성할 것이다.
트랜잭션(transaction) : 트랜잭션이란 데이터베이스의 상태를 변경하는 논리적 작업 단위입니다. 실제로 데이터베이스에 장애가 발생했을 때 데이터를 복구하는 작업의 단위로 사용됩니다.
캡슐화(Encapsulation) : 객체지향프로그래밍에서의 중요한 특징 중 하나로, 연관된 데이터와 함수를 논리적으로 묶어놓은 것이며, 데이터를 보호하기 위해 다른 객체의 접근을 제한하는 접근 제한 수식자의 기능을 제공한다.
특수 사례 패턴(Special Case Pattern) : 클래스를 만들거나 객체를 조작해 특수 사례를 처리하는 방식. 클래스나 객체가 예외적인 상황을 캡슐화해서 처리하므로 클라이언트 코드가 예외적인 상황을 처리할 필요가 없어진다.