티스토리 뷰

728x90
[이펙티브 자바] 아이템 27 비검사 경고를 제거하라 

 

네오의 수업에서

테스트 코드에서 함수명을 한글로 사용할 수는 있지만 이럴 경우 컴파일 경고(Compile Warnning)가 발생하며 이러한 경고의 경우 프로그램이 커지고 경고가 많아질 수록 디버깅에 어려움을 주는 요소이기때문에 그때 그때 제거해주는 것이 좋다는 말을 해주셨다.  

 

그리고 경고를 없애는 방법으로는 다음의 두가지를 말씀해주셨다. 

1. @SuppressWarnings("NonAsciiCharacters") 사용

2. 함수명을 영어로 만들고 @DisplayName으로 설명 추가

 

당시 나는 모든 테스트 코드의 함수명을 한글로 만들어놓았기 때문에 이번 미션까지는 @SuppressWarnings("NonAsciiCharacters")를 사용하여 경고를 없애고 다음 미션부터는 함수명을 영어로 만들어야겠다고 생각했다. 

@SuppressWarnings("NonAsciiCharacters")
public class WinnerTest {

	@Test
	void 우승자_선정() {
		List<Car> cars = Arrays.asList(
			new Car("aa", 3), new Car("bb", 2),
			new Car("cc", 2), new Car("dd", 1));
		Winner winner = new Winner();

		assertThat(winner.getWinners(cars)).contains("aa");
	}
}

 

그러다가 리뷰어 희봉이 "어떨때 @SuppressWarnings을 사용하게 되는지?"를 더 생각해보면 좋을 것 같다는 조언을 해주셨다. 🙇‍♀️

 

알고보니 한글명 메소드에 대한 경고를 제거할 때 무조건 @SuppressWarnings("NonAsciiCharacters")을 사용해야하는 것이 아니라 모든 경고를 제거할 수 있는 @SuppressWarnings("all") 또한 사용할 수 있으며 각각의 경고에 대한 토큰이 다르며 여러 토큰을 사용할 수 있었다. 

사용 가능 토큰 관련 문서

 

모든 경고를 제거해 주는 것이 좋지만 제거하기 어려울 경우, 하지만 개발자가 생각했을 때 안전한 경우 @SuppressWarnings 어노테이션을 사용하여 강제적으로 경고를 제거하는 방법을 사용한 다는 것을 알게되었다.  

 

✅ 다음과 같이 안전한 이유를 항상 주석으로 명시해 주는 것이 좋다고 한다. 

// 생성한 배열과 매개변수로 받은 배열의 타입이 모두 T[]로 같으므로 올바른 형변환입니다 
@SuppressWarnings("unchecked")

 

Ref.

https://haranglog.tistory.com/3

 

728x90
댓글
공지사항
최근에 올라온 글