ch7. 오류처리
깨끗한 코드와 오류 처리는 연관성있다. 상당수 코드기반은 전적으로 오류 처리 코드에 좌우된다.
오류처리가 중요하지만 프로그램 논리를 이해하기 어려워진다면 Clean Code라 부르기 어렵다.
- 오류코드보다 예외를 사용하라.
- Try-Catch-Finally 문부터 작성하라
- 미확인 (unchecked) 예외를 사용하라
- 호출자를 고려해 예외 클래스를 정의한다.
- 정상 흐름을 정의. 비즈니스 논리와 오류 처리가 잘 분리된 코드
- null 반환하지 마라. 호출자에게 문제를 떠넘기게 된다 > 예외를 던지거나 특수 사례 객체를 반환한다
- 또한 null을 전달하지 마라. 정상적인 인수로 null을 기대하는 API가 아니라면.
결론
깨끗한 코드는 읽기도 좋아야 하지만 안정성도 높아야. 이 둘은 상충하는 목표가 아니다
미확인 (unchecked) 예외?.
컴파일 시점에 처리 여부를 확인하는 예외. 이러한 예외는 반드시 처리(try-catch 블록으로 처리하거나 메서드 선언에 throws로 명시)해야 하며, 이를 통해 예외 처리를 강제함으로써 잠재적인 문제를 코드 수준에서 미리 다룰 수 있게 한다.
public void readFile(String fileName) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader(fileName));
String line = reader.readLine();
reader.close();
여기서 IOException은 확인된 예외이며 컴파일러는 IOException에 대해 예외 처리를 강제하며, 처리하지 않을 경우 컴파일 에러를 발생시킨다.
이 책에선 확인된 예외를 사용할 때 지나치게 상세한 예외 처리를 피하고, 프로그램의 가독성과 유지보수성을 높이는 방향으로 접근할 것을 권장합니다. 예외의 의미를 명확히 전달하고, 필요 이상으로 복잡하지 않게 다루는 것이 중요!
Ch.8 경계
시스템에 들어가는 모든 s/w를 직접 개발하는 경우는 드물다. 외부 컴포넌트, 오픈소스를 사용한다.
이 외부코드를 우리 코드에 깔끔히 통합해야 한다. 이를 위한 s/w 경계를 처리하는 방법 알아보기
- 통제가 불가능한 외부 패키지에 의존하는 대신 통제가 가능한 우리 코드에 의존하도록 만드는 방식
- 새로운 클래스로 경계를 감싸거나 Adapter 패턴을 사용해 원하는 인터페이스를 패키지가 제공하는 인터페이스로 변환
- 코드 가독성이 높아지며 경계 인터페이스를 사용하는 일관성이 높아지며 외부 패키지가 변했을때 변경할 코드도 줄어든다
ch.9 단위 테스트
TDD 법칙 3가지
- 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다
- 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트 작성
- 현재 실패하는 테스트를 통과할 정도로만 실제 코드 작성
- 깨끗한 테스트 코드 유지 : 가독성
- 테스트는 유연성, 유지보수성, 재사용성을 제공
- 테스트당 Assert 하나
- 테스트당 개념 하나
- 깨끗한 테스트의 5가지 규칙. FIRST
- Fast : 빠르게 / Independaent: 각 테스트는 서로 의존하면 안된다 / Repeatable: 반복가능하게
- Self-Validating : 자가검증. 테스트는 bool (성공 or 실패)로 / Timely : 적시에. 테스트하려는 실제 코드 구현 직전에 작성
ch.10 클래스
- 클래스는 작아야 한다
- 클래스 이름은 해당 클래스 책임을 기술해야 한다
- 단일 책임 원칙 (Single Reasponsibility Principe, SRP) : 클래스, 모듈을 변경할 이유가 하나 뿐이어야 한다.
- 응집도 : 일반적으로 메서드가 변수를 더 많이 사용할 수록 메서드와 클래스는 응집도가 더 높다. 응집도가 높다는 건 클래스에 속한 메서드와 변수가 서로 의존하며 논리적인 단위로 묶인다는 의미
- 변경쉬운 클래스
- 결합도를 낮추면 유연성, 재사용성 높아진다. 각 시스템 요소가 다른 요소의 변경으로부터 격리되어 있다는 의미
'프로그래밍&IT > 학습, 책' 카테고리의 다른 글
[클린 코드] 6. 창발성 (0) | 2025.01.15 |
---|---|
[클린 코드] 5. 시스템 (0) | 2025.01.13 |
[클린 코드] 4. 객체와 자료구조 (0) | 2025.01.09 |
[클린 코드] 3. 함수 / 주석 / 형식 맞추기 (0) | 2025.01.06 |
[클린 코드] 1. 깨끗한 코드 정의 / 2. 의미있는 이름 (2) | 2024.12.15 |