본문 바로가기
반응형

자바32

[Java] 9가지 예외처리 Best Practice - Exception Handling 자바 프로그래밍에서 '예외(Exception)' 처리는 다소 까다로운 주제입니다. 때문에 각 개발팀들은 자신들만의 예외처리 규칙을 만들고 사용하는데요. 일반적으로 자바 프로젝트에서 따르면 좋은 예외처리 'Best Practice'를 정리해보겠습니다. 자바 예외(Exception) 프로그램 실행과정에서 발생하는 비정상적인 상황을 '예외(Exception)'라고 합니다. 예를들어 존재하지 않는 파일을 오픈하려고 한다던가, 설정되지 않은 객체의 메소드를 호출하려고 하는 경우 예외가 발생합니다. 프로그램 실행중에 발생하는 예외를 잘 처리해주는 것을 '예외처리(Exception Handling)'이라고 합니다. 예외 상황에서 벗어나도록 코드를 작성하던가 시스템을 망가트리지 않는 상황에서 자연스럽게 프로그램이 종료.. 2020. 8. 8.
[Java] 개발환경에서 원격 디버깅 사용하기 - Intelli J, Eclipse Remote Debugger 자바를 이용해 프로그래밍을 할 때 통합 개발환경이 제공하는 디버거(Debugger)는 매우 편리합니다. 특정 코드의 수행을 단계별(Step-by-step)로 확인할 수 있기 때문입니다. 자바 프로그램이 실행되는 JVM은 원격 디버깅(Remote Debugging) 기능을 제공합니다. IntellI J나 Eclipse 같은 통합 개발환경에서 원격 서버에 설치되어 있는 자바 프로그램을 디버깅 할 수 있습니다. 이번 포스트에서는 도커 환경에 자바 프로그램을 구동시켜놓고 통합개발환경(Intelli J, Eclipse)에서 원격으로 디버깅해보겠습니다. 자바 프로그램 다음 자바 프로그램을 작성한 다음 도커에 구동시킨 후 원격 디버깅을 해보겠습니다. public class Test { public static voi.. 2020. 3. 13.
[Freemarker] 데이터 모델 메소드 (Data model Methods) 정의 사용자의 자바 객체를 데이터 모델로 사용할 때, 데이터 모델을 위한 메소드를 만들어 제공할 수도 있다. 예를 들어 템플릿을 작성할 때 데이터 모델에 'user_,method()'라는 메소드를 정의해 줄 수 있다. 'user_method()'는 템플릿에서 다음과 같이 사용할 수 있다. ${user_method(“abc”, x)} 이와 같은 사용자 정의 메소드는 TemplateMethodModelEx 인터페이스를 구현함으로써 제공할 수 있다. TemplateMethodModelEx 인터페이스는 다음과 같은 메소드를 가지고 있다. Object exec(java.util.List arguments); 템플릿 언어에서 사용자 정의 메소드를 호출하면, 메소드 이름에 대응되는 TemplateMethodModelEx .. 2019. 8. 8.
[Freemarker] Data Model 만들기 (ObjectWrapper, TemplateModel) Freemarker는 자바 객체를 데이터 모델로 사용할 수 있다. 다만 사용자의 자바 객체를 Freemarker 엔진이 해석할 수 있도록 ObjectWrapper 클래스와 Adapter 클래스를 구현해줘야 한다. FreeMarker 엔진은 ObjectWrapper 클래스와 Adapter 클래스를 통해서 자바객체를 트리형태로 해석할 수 있다. ObjectWrapper 사용자의 자바 객체를 위한 ObjectWrapper 클래스를 구현하기 위해서는 ObjectWrapper 인터페이스를 구현해야 한다. ObjectWrapper 인터페이스는 다음과 같은 메소드를 가지고 있다. TemplateModel wrap(Object obj) throws TemplateModelException;wrap() 메소드는 사용자의.. 2019. 8. 6.
[Freemarker] 프리마커 - 자바 템플릿 엔진(Java Template Engine) 업무에 사용하기 위해서 오픈소스 자바 템플릿엔진(Java Template Engine)을 조사하다가 Freemarker(프리마커)라는 템플릿 엔진을 알게 되었다. 템플릿 엔진(Template Engine)이란? 아파치 프리마커(Apache Freemarker)는 텍스트 형태로 데이터를 출력해주는 자바 템플릿 엔진(Java Template Engine) 라이브러리다. (링크 : https://freemarker.apache.org) 템플릿 엔진(Template Engine)이란 템플릿 양식과 데이터 모델에 입력되어 있는 데이터를 합성하여 문서를 만들어주는 소프트웨어를 말한다. 사용자는 템플릿을 작성하여 템플릿 엔진에 입력한 다음, 데이터 모델을 차례로 템플릿 엔진에 입력하면 데이터 모델에 대응되는 결과 문.. 2019. 7. 25.
[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.
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.
자바 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.
반응형