본문 바로가기
반응형

전체 글318

[Java] Maven 빌드시 "warning: [options] bootstrap class path not set in conjunction with 1.7" 메이븐 프로젝트를 빌드 할 때, "warning: [options] bootstrap class path not set in conjunction with 1.7" 이라는 경고 메시지가 뜨는 경우가 있다. 이는 메이븐 프로젝트에서 사용한 JAVA 버전과 빌드시 사용한 JAVA 버전이 맞지 않았을 때 발생한다. 자바 프로그램을 개발 할 때, 개발환경으로 여러 버전의 자바를 설치해 사용하는 경우가 흔하다. 예를 들어 JDK 1.7, JDK 1.8 버전이 설치되었을 때를 생각해보자. 메이븐 프로젝트는 1.7 기준으로 작성되어있지만 JAVA_HOME 환경 변수의 JDK는 1.8 경로를 가리킬 때 이런 메시지가 뜰 수 있다. 해결 방법으로는 메이븐 빌드 할 때, 메이븐 프로젝트의 Java 버전으로 JAVA_HOM.. 2019. 6. 20.
[Java] 자바 클래스에서 Getter 메소드 얻어오기 (Introspector) 자바 객체를 이용해서 데이터를 주고 받을 때, 객체 클래스의 Getter 메소드를 호출해야하는 경우가 있다. 특정 객체 클래스의 Getter 메소드를 리플렉션(Reflection)을 이용해서 가져올 수도 있지만 전달하는 객체가 자바빈 객체라면 다음 코드를 사용할 수도 있다. import java.beans.Introspector; import java.beans.PropertyDescriptor; public class Example { private String name; private String address; public String getName() { return name; } public String getAddress() { return address; } public String getA.. 2019. 6. 19.
MIME type이란? 웹 컨텐츠를 다루면서 "MIME type"이라는 단어를 자주 접하게 된다. Mime은 "Multipurpose Internet Mail Extensions"의 약자로 파일 변환을 위한 포맷이다. 이름에서도 알 수 있듯이 MIME은 이메일에 첨부된 파일을 텍스트 문자 형태로 변환해서 이메일과 함께 전송하기 위해 개발된 포맷이다. MIME 이름의 Internet Mail Extension에서 본래의 의도를 알 수 있다. 하지만 최근에는 이메일 뿐만 아니라 웹을 통해 전달되는 다양한 형태의 파일을 표현하기 위해 사용되고 있다. MIME 타입은 현재 IANA(Internet Assigned Numbers Authority)라는 인터넷 할당 번호 관리기관에서 다양한 파일 타입을 표준화하여 MIME 타입으로 관리하.. 2019. 6. 6.
IntelliJ Code Coverage for Class - Java Synthetic Class, Method, Field 자바 애플리케이션을 구현하고 테스트 케이스를 짜면서 IntelliJ의 'Coverage' 기능을 사용했다. IntelliJ의 'Coverage' 기능은 테스트 케이스가 애플리케이션 코드의 모든 메소드와 클래스, 코드 라인을 수행했는지 알려준다. (링크 : IntelliJ Coverage 기능) 테스트 케이스를 작성하고 코드 커버리지를 확인하는데 이상하게 클래스 항목이 100%를 찍지 못하고 있었다. 다음 자바 소스코드를 보자. public class Coverage { private String name; private String address; public static class Builder { private String name; private String address; public Builde.. 2019. 6. 5.
IntelliJ Code Coverage Test - 인텔리제이 테스트 IntelliJ를 이용해서 자바 애플리케이션을 개발 할 때, Coverage 테스트를 쉽게 할 수 있다. 별도의 플러그인을 설치해야하는 다른 개발 툴과는 다르게 인텔리 제이는 Coverage 테스트를 위한 툴을 내장하고 있다. [Run] - "Run 'project' with Coverage" 메뉴가 선택되면 실행하면 된다. 만약 저 기능이 보이지 않는다면 인텔리 제이를 최신 버전으로 업데이트 하기 바란다. 최신 버전으로 업데이트 한 다음 만약 저 기능이 활성화되지 않았다면 몇 가지 설정을 더 해줘야 한다. [Preferences] - "Plugins" 탭에서 "Coverage" 플러그인을 검색한다. 최신 버전의 인텔리 제이에서는 이미 번들로 설치가 되어 있으니 "Installed" 탭에서 "Covera.. 2019. 6. 4.
자바 Exception (Serializable) 정의시 does not define a 'serialVersionUID' Warning 해결하기 자바 프로젝트에서 예외처리를 위해 Exception 클래스를 정의하다보면 "'XXX' does note define a 'serialVersionUID'"라는 경고 문구를 만나게 될 때가 있다. 다음 Exception 클래스를 작성하면 개발환경 설정에 따라서 경고 메시지를 보게 된다. public class TestException extends IOException { public TestException(String message) { super(message); } } 경고 문구를 해석하자면 'serialVersionUID'를 정의하지 않았다는 의미다. 'serialVersionUID'가 뭐길래 경고 메시지를 띄우는 것일까? serialVersionUID serialiVersionUID를 정의하지 .. 2019. 6. 2.
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.
반응형