1HOON
논리적 코딩
1HOON
전체 방문자
오늘
어제
  • HOME (187)
    • ☕️ JAVA (28)
      • WhiteShip Java LIVE Study (6)
      • Effective JAVA (10)
    • 🔮 KOTLIN (4)
    • 🌱 SPRING (51)
      • 스프링 인 액션 (22)
      • JPA (18)
    • ☕️ JAVASCRIPT (6)
    • 📃 DATABASE (40)
      • ORACLE (37)
      • MSSQL (2)
    • 🐧 LINUX (4)
    • 🐳 DOCKER (5)
    • 🐙 KUBERNETES (4)
    • 🏗️ ARCHITECTURE (8)
    • 📦 ETC (27)
      • TOY PROJECT (5)
      • RECRUIT (1)
      • 그냥 쓰고 싶어서요 (14)
      • TIL (1)
    • 🤿 DEEP DIVE (1)
    • 🚽 Deprecated (9)
      • PYTHON (3)
      • AWS (2)
      • HTTP 완벽가이드 (3)
      • WEB (1)

블로그 메뉴

  • 홈
  • 방명록
  • 관리

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
1HOON

논리적 코딩

[Effective Java] 아이템 49 : 매개변수가 유효한지 검사하라
☕️ JAVA/Effective JAVA

[Effective Java] 아이템 49 : 매개변수가 유효한지 검사하라

2021. 12. 4. 20:58

 

아이템 49 : 매개변수가 유효한지 검사하라


메서드와 생성자 대부분은 입력 매개변수의 값이 특정 조건을 만족하기를 바랍니다.

  • 예) 인덱스 값은 음수가 아니어야함
  • 예) 객체 참조는 null이 아니어야함

이러한 제약은 반드시 문서화해야 하며 메서드 몸체(로직)가 시작되기 전에 검사해야합니다.

 

매개변수 검사를 제대로 하지 못하면 아래와 같은 문제가 발생합니다.

  • 메서드가 수행되는 중간에 모호한 예외를 던지며 실패
  • 메서드가 잘 수행되지만 잘못된 결과를 반환
  • 메서드가 문제없이 수행되었지만, 어떤 객체를 이상한 상태로 만들어놓아서 미래의 알 수 없는 시점에 이 메서드와 관련 없는 오류가 발생

 

 

public & protected 메서드


매개변수의 제약을 문서화한다면 그 제약을 어겼을 때 발생하는 예외도 함께 기술해야합니다.

/**
 * (현재 값 mod m) 값을 반환한다. 이 메서드는
 * 항상 음이 아닌 BigInteger를 반환한다는 점에서 remainder 메서드와 다르다.
 *
 * @param m 계수(양수여야 한다.)
 * @return 현재 값 mod m
 * @throws ArithmeticException m이 0보다 작거나 같으면 발생한다.
 */
public BigInteger mod(BigInteger m) {
	if (m.signum() <= 0) {
    	throw new ArithmeticException("계수(m)는 양수여야합니다. " + m);
    }
    ...
}

자바 7에 추가된 java.util.Objects.requireNonNull 메서드는 null 검사를 수동으로 하지 않게끔 해줍니다.

// strategy가 null일 경우 NullPointerException이 발생하고, exception 메시지로 "전략"이 세팅됩니다.
this.strategy = Objects.requireNonNull(strategy, "전략");

자바 9에서는 Objects에 범위 검사 기능도 추가되었습니다.

  • checkFromIndexSize
  • checkFromToIndex
  • checkIndex

 

 

private 메서드


공개되지 않은 메서드라면 assert를 사용할 수도 있습니다.

단, assert는 JVM 옵션으로 -ea 또는 --enableassertions 플래그를 설정하면 검사를 수행하지 않습니다.

private void methodName(Integer value) {
    assert value != null;
    ...
}

 

 

유효성 검사의 예외가 되는 경우


  • 유효성 검사 비용이 지나치게 높거나 실용적이지 않을 때
  • 계산 과정에서 암묵적으로 검사가 수행될 때

 

 

Reference


 

이펙티브 자바 3/E - 교보문고

프로그래밍인사이트 | 자바 6 출시 직후 출간된 『이펙티브 자바 2판』 이후로 자바는 커다란 변화를 겪었다. 그래서 졸트상에 빛나는 이 책도 자바 언어와 라이브러리의 최신 기능을 십분 활용

www.kyobobook.co.kr

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

'☕️ JAVA > Effective JAVA' 카테고리의 다른 글

[Effective Java] 아이템 5 : 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라  (0) 2022.01.02
[Effective Java] 아이템 68 : 일반적으로 통용되는 명명 규칙을 따르라  (0) 2021.12.18
[Effective Java] 아이템 33 : 타입 안전 이종 컨테이너를 고려하라  (0) 2021.11.28
[Effective Java] 아이템 23 : 태그 달린 클래스보다는 클래스 계층구조를 활용하라  (1) 2021.11.21
[Effective Java] 아이템 13 : clone 재정의는 주의해서 진행하라  (1) 2021.11.14
    '☕️ JAVA/Effective JAVA' 카테고리의 다른 글
    • [Effective Java] 아이템 5 : 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
    • [Effective Java] 아이템 68 : 일반적으로 통용되는 명명 규칙을 따르라
    • [Effective Java] 아이템 33 : 타입 안전 이종 컨테이너를 고려하라
    • [Effective Java] 아이템 23 : 태그 달린 클래스보다는 클래스 계층구조를 활용하라
    1HOON
    1HOON

    티스토리툴바