본문 바로가기
반응형

자바32

Java Reflection Exception : IllegalAccessException,IllegalArgumentException, InvocationTargetException 설명 자바 리플렉션을 이용해서 클래스의 메소드를 호출할 일이 있었다. 클래스에 있는 모든 Getter 메소드를 호출해서 멤버 값을 가져오는 코드를 다음과 같이 작성했다. import java.lang.reflect.Method; public class Test { private String name; private String address; public Test(String name, String address) { this.name = name; this.address = address; } public String getName() { return name; } public String getAddress() { return address; } private static boolean isGetter(M.. 2019. 6. 1.
자바 컬렉션(Java Collection)들의 Big O (시간 복잡도, Time Complexity) 자바는 다양한 컬렉션 타입들을 제공한다. 이 컬렉션 타입들은 내부 구현에 따라 다양한 시간 복잡도를 갖는데, 이 특징을 잘 알고 사용해야 불필요한 성능저하를 피할 수 있다. List Add Remove Get Contains Data Structure ArrayList O(1) O(n) O(1) O(n) Array LinkedList O(1) O(1) O(n) O(n) LinkedList CopyonWriteArrayList O(n) O(n) O(1) O(n) Array LinkedList의 시간복잡도에서 remove 연산의 시간복잡도가 O(1)인 이유는 삭제할 엘리먼트에 대한 레퍼런스를 알고 있다고 가정하기 때문에 얻어진 것이다. 만약 삭제할 대상을 탐색하는 동작(get)까지 감안한다면 O(n)이 맞을.. 2019. 5. 31.
[Java] SAXParser Exception - "[Fatal Error] :1:1: Premature end of file" SAX 파서를 이용한 라이브러리를 사용하다가 "[Fatal Error] :1:1: Premature end of file." 혹은 "[Fatal Error] :1:1: 예기치 않은 파일의 끝입니다."라는 Exception을 만나게 되는 경우가 있다. 이 예외는 SAX 파서의 입력 스트림이 예기치 않게 끝났을 경우에 발생한다. 대표적으로 SAX 파서에 빈 문자열을 입력하면 발생하게 된다. 다음 예제를 살펴보자. import java.io.StringReader; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.xml.sax.. 2019. 5. 30.
[Java] Unmodifiable Collection vs Immutable 차이점 카프카 컨슈머 코드리뷰를 하다가 'Unmodifiable Collection'이라는 것을 보게 되었다. 카프카에서 본 소스코드는 다음과 같았다. private List drainRecords(int n) { if (isDrained() || position >= records.size()) { drain(); return Collections.emptyList(); } // using a sublist avoids a potentially expensive list copy (depending on the size of the records // and the maximum we can return from poll). The cost is that we cannot mutate the returned .. 2019. 5. 29.
Java Map - HashMap, TreeMap, LinkedHashMap 비교, 차이점 데이터를 모아서 관리할 수 있는 클래스를 컬렉션이라고 한다. 컬렉션은 그 타입에 따라 내부에 데이터를 저장하는 구조와 처리하는 방법이 다르다. 내부에서 처리하는 방법에 따라 데이터의 탐색이 빠른 경우가 있고, 추가/제거가 빠른 경우가 있다. 사용하는 컬렉션의 특성을 잘 알고 사용해야 불필요한 성능 저하를 피할 수 있다. 자바에서 제공하는 컬렉션의 대표적인 예로 List, Map, Set 등이 있다. 그 중에 이번 포스트에서 알아볼 Map 종류는 Key 값과 Value 값을 관리해주는 컬렉션이다. Key - Value 쌍은 java.util.Map.Entry 클래스로 정의되며 이 Entry 들을 저장, 관리 해주는 컬렉션이 Map이다. Map 컬렉션은 다음과 같이 사용할 수 있다. 가장 많이 사용하는 Ha.. 2019. 5. 28.
자바 'for each' 구문 - Java의 향상된 for 문 자바를 이용해서 컬렉션 데이터를 처리할 때 반복문을 많이 사용한다. for 문을 이용해서 컬렉션 데이터 하나하나를 처리하는 코드는 일반적으로 다음과 같을 것이다. public static void main(String[] args) { int array[] = {1, 2, 3, 4, 5}; for (int i = 0; i < array.length; i++) { System.out.println(array[i]); } } // 출력 // 1 // 2 // 3 // 4 // 5 초기부터 자바를 사용해 왔거나 C 언어 같은 언어를 사용하던 프로그래머라면 이런 형태의 코드가 자연스럽게 받아들여질 것이다. 하지만 JDK 5.0 버전부터 for each 구문을 제공하면서 더 간결하게 컬렉션 데이터를 사용할 수 있.. 2019. 5. 27.
[Java] System.currentTimeMillis() 값(유닉스 시간, Unix Time)을 Date 포맷으로 변경하기 자바에서 현재 시간 정보는 System.currentTimeMillis() 메소드를 이용해서 가져올 수 있다. System.currentTimeMillis() 메소드에서 얻어지는 값은 long 타입으로 세계 표준시(UTC)로 1970년 1월 1일 00시 00분 00초를 기점으로 현재까지 몇 밀리초(ms)가 흘렀는지를 기록한 값이다. 프로그래밍 세계에서는 흔히 '유닉스 시간(Unix Time)' 혹은 '파직스 시간(POSIX Time)'이라고 부른다. 자바를 이용해서 유닉스 타임을 얻어오는 코드는 다음과 같다. long time = System.currentTimeMillis(); 유닉스 타임을 이용해서 특정 코드의 수행 시간도 측정할 수 있다. long start = System.currentTimeMi.. 2019. 5. 18.
[Gson 사용법] 자바 객체와 JSON을 다루는 쉬운 방법, 몇 가지 예제 Java 클래스를 다른 곳으로 전송할 때 사용할 수 있는 직렬화(Serialize) 포맷으로 JSON이나 XML 같은 텍스트 포맷을 사용하는 경우가 많다. 문자열을 사용하는 만큼 데이터를 처리하는데 상당히 높은 수준의 유연성을 제공하기 때문이다. 자바 객체를 JSON으로 바꾸는 작업은 Gson 이라는 패키지를 이용하면 쉽게 할 수 있다. Gson은 구글에서 만든 자바 오브젝트의 직렬화/역직렬화 라이브러리다. 내부적으로 리플렉션(Reflection)을 사용하기 때문에 사용자가 귀찮게 이런저런 옵션을 넣어주지 않아도 되어 편하다. Maven 설정 Gson을 사용하기 위한 Maven 설정은 다음과 같다. com.google.code.gson gson 2.8.0 Java 객체를 JSON으로 직렬화(Seriali.. 2019. 5. 17.
[Java] org.w3c.dom.Node 클래스를 Document로 변환하기 XML의 특정 서브 트리의 Node 객체를 이용해서 해당 객체가 Root인 새로운 Document 를 만들고 싶을 때가 있다. 예를 들어 다음과 같은 XML Document가 있다고 하자. value 1 value 2 value 3 XPath 등을 이용해서 에 해당하는 Node 객체를 얻어왔을 때 노드의 서브 트리를 Root로 하는 새로운 Document를 얻어오고 싶을 경우가 있다. value 3 org.w3c.dom.Document 인터페이스에는 importNode() 라는 메소드가 있으며, 이 메소드를 이용해서 새로운 Document를 만들 수 있다. org.w3c.dom.Node 클래스를 Root로 하는 새로운 org.w3c.dom.Document를 만드는 예제 코드는 다음과 같다. public .. 2019. 5. 16.
반응형