티스토리 뷰



Note: Recompile with -Xlint:deprecation for details.

자바 빌드 과정에서 위와 같은 메시지를 만났다면 대부분 최근 프로젝트는 아니고 시간이 경과된 프로젝트일 경우일 것입니다. 자바 버전이 업그레이드 되면서 보안이나 기타 이유로 없어진(deprecated API) 기능이기 때문입니다. 컴파일도 정상적으로 수행되고 실행과정에도 문제가 없을 수 있지만 건강한 코드를 위해서는 실행 기준이 자바 버전에 맞도록 코드를 보완해 주는 것이 좋습니다.

어떤 코드에 이런 문제가 있는지 구체적으로 확인하고 싶다면 프로젝트의 컨텍스트 메뉴>properties를 선택하고 Build>Compiling에서 "Report Uses of Deprecated APIs"를 체크한다음 코드를 다시 컴파일합니다.


저의 경우에는 두가지 정도의 사례가 있었는데 다음과 같습니다. "없어진(deprecated API) 기능"과 관련된 코드는 위의 그림과 같이 넷빈즈에서 Strike(가로선)로 표시해 주므로 적절한 대안을 찾아 수정하면 됩니다.

javax.​swing.​JPasswordField는 getText() 대신 getPassword()를 사용해야 합니다.

"javax.swing.JPasswordField jtxtAccountID" 처럼 비밀번호 형태로 입력을 받는 항목을 사용한다면 기존에는 getText()를 사용해도 사용자가 입력한 내용을 받을 수 있지만 1.2부터는 보안상의 이유로 getPassword()를 사용해야 합니다.


- java.​util.​Date 오브젝트에서 getDate(), getDay(), getHours(), getMinutes(), getMonth(), getSeconds(), getYear() 등을 사용할수 없습니다.

1.1부터는 Calendar 및 DateTime 클래스를 사용해야 합니다.

위의 코드에서는 두 Date 오브젝트의 년월일을 상호 비교해서 같은 날짜인지를 비교하고 있는데 compareTo() 함수를 이용해서 두 값이 같은지(0 리턴)를 비교하는 방식으로 변경했습니다. 

원래의 코드 처럼 년월일만 비교하고 싶다면 Calendar 클래스를 사용해야 하는데 

Calendar calendar = Calendar.getInstance();

calendar.setTime(date);

Calendar와 Date 클래스 간의 변환은 위의 코드 처럼 사용할 수 있으며

Calendar.get(Calendar.DAY_OF_MONTH)

위의 코드처럼 Calendar 클래스를 통해서 년월일이나 개별 시간 단위를 처리할 수 있습니다.


댓글
댓글쓰기 폼
«   2022/11   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함