[Good Code Bad Code] 예측 가능한 코드를 작성해라-2

2025. 2. 19. 12:28·📚 개발자의 서재/Good Code, Bad Code
해당 포스팅은 톰 롱의 Good Code, Bad Code (P.169~176)를 읽고 정리한 글입니다.

 

널 객체 패턴을 적절히 사용해라

값을 얻을 수 없을 때 널값이나 빈 옵셔널을 반환하는 대신 널 객체 패턴을 사용할 수 있다. 그 이유는 널값을 반환하는 대신 유효한 값이 반한 되어 그 이후에 실행되는 로직에서 널값으로 인해 시스템에 피해가 가지 않도록 하기 위함이다.

 

널 객체 패턴의 가장 간단한 형태는 빈 문자열이나 빈 리스트를 반환하고, 정교한 형태로는 모든 멤버 함수가 아무 일도 하지 않고 기본값을 반환하는 클래스를 구현하는 것이다.

 

빈 컬렉션을 반환하면 코드가 개선될 수 있다.

함수가 컬렉션을 반환할 때, 반환할 요소가 없다는 이유로 컬렉션 대신 null을 반환하면, 호출 측에서 매번 null 여부를 확인해야 하므로 코드가 불필요하게 복잡해질 수 있다. 이때 빈 컬렉션을 반환한다면 호출하는 쪽에 코드는 간단해지고 예측을 벗어나는 작동을 할 가능성이 매우 낮다.

 

빈 문자열을 반환하는 것도 때로는 문제가 될 수 있다.

null대신 빈 문자열을 반환하는 방식이 적절한지의 여부는 문자열이 어떻게 사용되는지에 따라 달려있다. 단순히 문자열이 문자들의 모음이라면 빈 문자열을 반환하는 것은 일반적으로 큰 문제가 없다. 하지만 문자열이 코드에서 ID와 같은 특정한 의미를 가진다면 문자열의 존재 여부를 파악하는 것이 중요하다. 왜냐하면 이후 실행할 논리에 영향을 미치기 때문이다. 따라서 이럴 경우에 빈문자열 대신 null을 반환함으로써 호출하는 쪽에서 명확히 알 수 있게 해주는 것이 좋다.

 

널 객체 클래스는 예측을 벗어날 수 있다.

널 객체 패턴의 더 복잡한 형태 중 하나는 클래스를 만들고 무해한 값을 클래스 안에 두는 것이다. 하지만 무해하다고 생각하는 값 때문에 심각한 버그가 생길 수 있다. 해당 값으로 인해 이후 통계 데이터가 부정확해질 수 있고, 호출하는 쪽에서 언제나 유효한 값이 들어있는 클래스를 받을 것이라는 잘못된 인상을 줄 수 있다. 또한, 널 객체 구현은 예상과 다른 동작을 초래할 수 있다. 널 객체 클래스의 함수들은 아무 동작도 하지 않으므로 호출해도 실행되는 작업이 없으며, 이로 인해 개발자가 의도한 방향과 다르게 동작할 가능성이 있다.

 

널 객체 패턴을 사용하기 전에, 이는 적절한 선택인지와 예상치 못한 동작을 초래할 가능성이 있는지를 충분히 고려해야 한다.
최근에는 '값이 없음'을 표현하는 방식으로 널 안정성과 옵셔널이 널리 사용되므로, 널 객체 패턴 대신 이를 활용하는 것이 좋다.

 

저작자표시 비영리 변경금지 (새창열림)

'📚 개발자의 서재 > Good Code, Bad Code' 카테고리의 다른 글

[Good Code Bad Code] 예측 가능한 코드를 작성해라-4  (0) 2025.02.21
[Good Code Bad Code] 예측 가능한 코드를 작성해라-3  (0) 2025.02.20
[Good Code, Bad Code] 가독성이 높은 코드를 작성하라(마무리) /예측 가능한 코드를 작성하라 -1  (0) 2025.02.18
[Good Code Bad Code] 가독성 높은 코드를 작성하라-3  (0) 2025.02.17
가독성 높은 코드를 작성하라-2  (0) 2025.02.16
'📚 개발자의 서재/Good Code, Bad Code' 카테고리의 다른 글
  • [Good Code Bad Code] 예측 가능한 코드를 작성해라-4
  • [Good Code Bad Code] 예측 가능한 코드를 작성해라-3
  • [Good Code, Bad Code] 가독성이 높은 코드를 작성하라(마무리) /예측 가능한 코드를 작성하라 -1
  • [Good Code Bad Code] 가독성 높은 코드를 작성하라-3
l'avenirJun
l'avenirJun
  • l'avenirJun
    오늘도 꾸준히 개발
    l'avenirJun
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 📚 개발자의 서재 N
        • 객체지향의 사실과 오해
        • Good Code, Bad Code
        • 도메인 주도 개발 시작하기 N
      • 🔧 트러블 슈팅
      • Java
      • Spring
      • 운영체제
        • 공룡책 학습
      • 알고리즘
      • GIT
      • 면접 지식
      • Spring 단기심화 2기
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    인터페이스
    책임-주도 설계
    코딩트리조별과제
    코딩테스트
    오블완
    good code bad code
    타입
    협력
    매핑 구현
    티스토리챌린지
    추상화
    specification
    캡슐화
    책임
    코드트리
    메시지
    DIP
    리포지터리
    객체
    코드 계약
    애그리거트 루트
    역할
    표현 영역
    객체지향의 사실과 오해
    도메인 주도 개발 시작하기
    가독성
    유스케이스
    애그리거트
    모듈화
    도메인 모델
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
l'avenirJun
[Good Code Bad Code] 예측 가능한 코드를 작성해라-2
상단으로

티스토리툴바