java (26) 썸네일형 리스트형 [230827] Exception에 관해서 (2) - StackTrace 예외는 JVM에서 발생하거나, 프로그램에서 throw문에 의해 발생할 수 있다. 예외 상황이 발생하였을 때 예외 클래스의 인스턴스가 생성되며, 스택트레이스 데이터나 오류에 대한 메시지 문자열도 이 시점에 생성된다. 이번 글에서는 스택트레이스가 무엇인지, 그리고 스택트레이스 요소를 저장하는 클래스인 StackTraceElement에 대해 정확히 알아보려고 한다. StackTrace 스택트레이스란 예외 발생 시점 전까지 호출된 메서드의 목록을 말한다. 예외를 강제 발생시키는 테스트 코드를 작성해서 스택트레이스를 찍어보았다. public static void main(String[] args) { // 존재하지 않는 파일 경로를 설정해서 예외를 강제로 발생시킴 File file = new File("C:\\n.. [230820] Exception에 관해서 (1) - Error, Exception, RuntimeException 이펙티브 자바 스터디를 하다가 Exception에 대해 자세히 알 기회가 생겼는데, 평소에는 몰랐던 부분이기도 하고 알고 나니까 신기해서 간단하게 정리해보려고 한다. 1. Exception 이란? 자바 개발을 하면서 모르면 안 되는 개념이지만, 막상 정의를 하려니 어떻게 말해야 명료하게 느껴질지 모르겠다. "프로그램에서 발생한 오류를 java에서는 Exception이라고 한다"는 말이 가장 먼저 떠오르는데, 이렇게 답하자니 뭔가 부족한 설명으로 느껴진다. 오라클에 있는 자바 자습서에 따르면 예외의 정의는 아래와 같다. Definition: An exception is an event, which occurs during the execution of a program, that disrupts the n.. [230813] java TreeMap TreeMap은 key를 기준으로 요소를 정렬해주는 레드블랙트리 기반의 Map이다. 일반적으로는 자연적인 순서를 기반으로 정렬을 해주는데, comparator를 구현하였을 경우에는 그 순서대로 정렬을 해 준다. NavigableMap을 구현하고 있는데, NaigableMap의 코드를 보면 또 SortedMap을 구현하고 있다. 즉 TreeMap을 정렬 가능한 맵으로 만들어주는 기본 포맷은 SortedMap이라고 볼 수 있다. 처음에 TreeMap을 사용하려고 했을 때 HashMap을 사용할 때처럼 Map 인터페이스에 TreeMap을 선언했는데, 이렇게 하니까 정렬에 관련된 메서드가 동작이 안 되었다. TreeMap을 선언할 때는 인터페이스에 선언하는 게 아니라 NavigableMap에 선언해야 한다. S.. [230805] [google drive api] java api 사용하기 (3) - 파일 검색 코드 작성 . 2편에서 API 인증 토큰 발급하는 법을 설명했고, 이번 3편에서는 구글 드라이브 API를 사용하는 방법을 작성하려 한다. 1. 검색 2편에서 사용한 샘플 코드 중 main 만 떼어내서 가져왔다. 주석 중 // 1. Drive 객체 생성 을 보면, 구글 드라이브 API를 사용하기 위해서는 Drive 객체를 만들어야 한다. 이때 api의 접근 권한을 설정하거나, 사용자 인증 방식을 정의하는데, 자세한 건 이전 글에 정리되어 있다. public static void main(String... args) throws IOException, GeneralSecurityException { // 1. Drive 객체 생성 final NetHttpTransport HTTP_TRANSPORT = GoogleNet.. [211005] JNI(Java Native Interface)로 C++ dll 사용하기 - cmd 사용 프로젝트 진행 중에 dll을 java로 사용해야 하는 일이 생겼다. 이때 JNI를 처음 알게 되었고, 성공하기까지 엄청난 삽질을 했다... 삽질을 하는 내내 성공하게 되면 꼭 블로그에 기록해야겠다고 생각했다. 이 글은 JNI에 대한 간단한 설명, 그리고 실습 예제를 다룰 것이다. cmd를 사용해서 자바를 컴파일하고 헤더를 생성한 후, C++ 환경에서 dll을 생성하였다. . JNI(Java Native Interface) java는 JVM을 통해서 어느 장치에서나 유연하게 사용할 수 있다는 장점이 있지만, 그럼에도 불구하고 특정 프로세서에서 돌아가는 코드를 사용해야 하는 일이 생긴다. 예를 들면 아래와 같다. 몇몇 하드웨어를 다룰 때 프로세스의 성능 개선이 필요할 때 외부 프로그래밍 코드를 자바에서 재사.. [210623] spring boot - error page 만들기 . 고객에게 서비스를 하는 웹 서비스는 에러가 발생했을 때 에러 문구를 그대로 출력해서는 안 된다. 보안 상으로 문제가 생길 수 있기 때문이다. 그래서 지금 진행하는 프로젝트에서도 whitelabel error page를 그대로 출력하는 대신, 커스텀 된 에러 페이지를 출력해야겠다고 생각했다. jsp에서는 web.xml에 error page를 등록하고, page 디렉터브의 errorPage 속성을 사용해서 에러 페이지를 설정할 수 있었다. Spring에서는 방법이 다르다. 1. proerties에 아래 속성을 추가한다. server.error.whitelabel.enabled=false 2. error.html을 생성하고, 에러가 발생했을 때 출력할 페이지를 작성한다. Error page 에러가 발생했습.. [210620] junit Assertions - Method org.junit.jupiter.api.Assertions Assertions에는 JUnit 테스트를 위한 메소드가 있다. 테스트를 할 때 상태를 확인하기 위한 메소드를 제공한다. Method assertAll(Executable... excutables) 모든 표현식을 수행하고, 에러를 발생시키지 않는지 확인한다. @Test public void assertAllTest(){ Assertions.assertAll(()->{ System.out.println("first"); }, ()->{ System.out.println("second"); }, ()->{ System.out.println("third"); }); } assertArrayEquals(Object[] expected, Object[] .. [210530] junit에서 private 메소드 테스트하기 - reflection 사용 . 테스트 코드를 작성하던 중, 다른 클래스에 있는 private 메소드를 테스트해야 하는 상황이 발생했다. 테스트 때문에 메소드를 public으로 지정할 수 없었고, 테스트 코드에 메소드를 새로 생성할 수도 없었다. 구글링을 통해 reflecton을 사용해서 private 메소드에 접근할 수 있다는 사실을 알게 되었다. java.lang.Reflection 런타임 중에 메소드나 클래스를 검사하고 작동시킬 수 있게 해주는 API이다. 리플랙션 객체를 사용해서 리플렉션 객체가 가지고 있는 클래스나 메소드의 정보를 알아낼 수 있다. 또한 런타임 중에 메소드를 실행할 수도 있다. 내 경우에는 아래와 같이 코드를 작성해서 private 메소드를 테스트할 수 있었다. LoginController loginCont.. 이전 1 2 3 4 다음