Old Posts/Java108 [Java] jstack 사용법 - 스레드 덤프 생성 멀티 스레드 자바 애플리케이션의 경우, 수 십개의 스레드가 공유 자원에 접근을 하면서 락(lock)을 잡았다 놓았다 한다. 이 과정에서 데드락(Dead lock)이 발생하면서 시스템이 실행을 멈추는 경우가 발생할 수 있다. 혹은 속도가 느린 외부 서버에 대한 연결 요청에 대해 기다리면서 응답시간이 늦어지는 경우도 있다. 애플리케이션의 실행이 어디에서 지체되고 있는지, 어느 부분에서 막혀있는지 확인하기 위해서는 스레드 덤프를 분석해야한다. 스레드 덤프를 생성하는 방법에는 여러가지가 있지만 이번 포스트에서는 jstack을 이용해보겠다. 설치 jstack은 JDK 패키지에 기본 포함되어 있다. 따라서 ${JAVA_HOME} 경로의 bin 디렉토리만 ${PATH}로 잡아주면 실행할 수 있다. (JAVA 5 이상.. 2021. 7. 8. [Java] 자바빈(Java Bean)이란 무엇인가 자바빈즈(Java Beans)는 자바 언어로 작성된 소프트웨어 컴포넌트를 일컫는 말로 데이터 표현을 목적으로 하는 자바 클래스를 의미한다. 자바 빈즈 클래스는 '자바 빈즈 컨벤션(Java Beans Convention)'을 지켜야 한다. 자바 빈즈 컨벤션(Java Beans Convention) 클래스는 인자(Argument)가 없는 기본 생성자(Default constructor)를 갖는다 클래스의 멤버 변수는 프로퍼티(Properties)라고 하며 private 접근 제한자를 가져야 한다. 클래스의 프로퍼티들은 Getter/Setter를 통해 접근할 수 있어야 한다 Getter의 이름은 get{프로퍼티 이름} 이며, Setter의 이름은 set{프로퍼티 이름}이다 Getter/setter의 접근 제한.. 2021. 7. 4. [Java] 예외처리 코드 잘 작성하는 9가지 방법 자바 프로그래밍에서 '예외처리(Exception Handling)'는 다소 까다로운 주제다. 개발 조직들은 자신들만의 예외처리 규칙을 만들고 사용하는 경우가 많다. 일반적으로 자바 프로젝트에서 따르면 좋은 예외처리를 정리해보자. 자바 예외(Exception) 자바 프로그램이 실행과정에서 만날 수 있는 의도하지 않은 상황에 대한 처리를 위해 '예외(Exception)'를 제공한다. 예를 들어 존재하지 않는 파일을 열어보려고 한다던가, 권한이 없는 파일에 데이터를 쓰려고 할 때 예외가 발생한다. 이런 예외상황에서 프로그램의 실행을 종료하지 않고, 예외 상황을 벗어나기 위해서 '예외처리(Exception Handling)'를 하게 된다. 예외처리를 통해 예외 상황에서 벗어나도록 코드를 작성하던가 시스템을 망가.. 2021. 7. 2. [Java] 깔끔한 조건문(if) 작성법 - Bubble Style vs Gateway Style 자바 프로그래밍을 하다보면 코드가 더러워지는 경우들이 있다. 특히 조건문들이 붙으면서 코드가 지저분해지고 가독성이 떨어지게 되는 경우가 많다. 조건문을 조금만 다른 관점으로 접근하면 가독성이 훼손되지 않으면서 동일한 로직을 좀 더 깔금하게 구현할 수 있다. Bubble Style 우선 코드의 로직을 보강하면서 조건문을 붙여나갈 때 제일 많이 등장하는 패턴의 코드는 다음과 같을 것이다. if (condition1) { if (condition2) { if (condition3) { return "All condition is true"; } return "Condition3 is false"; } return "Condition2 is false"; } return "Condition1 is false";.. 2021. 7. 1. [Java] 자바 난수(랜덤숫자) 생성하기 자바 프로그램에서 랜덤 숫자를 생성하기 위해서 Random 클래스를 사용하거나 Math 클래스를 사용할 수 있다. Random 클래스를 사용할 경우 boolean, int, long, float, double 타입의 랜덤 값을 얻을 수 있으며, Math 클래스를 사용할 경우 0.0에서 1.0 사이의 double 타입 난수를 얻을 수 있다. Math.random() Math 클래스에는 랜덤 숫자를 얻어올 수 있는 random() 메소드가 정의되어 있다. System.out.println("0.0 ~ 1.0 Random Value : " + Math.random()); Math 클래스는 Object 클래스에 정의되어 있으므로 따로 import 할 필요는 없다. Math.random() 메소드는 시드값으로 현.. 2021. 6. 30. [Java] 열거 타입(Enum) 사용법 및 예제 프로그래밍 언어에서는 열거 타입을 제공하는 경우가 많다. 요일이나 계절처럼 한정된 개수의 값들을 하나로 묶어서 사용하고 싶을 때, 열거 타입을 사용하면 편하다. 자바에서는 Enum 타입을 통해서 이런 종류의 데이터를 사용할 수 있다. enum 사용법 enum 선언 enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, STURDAY, SUNDAY; } enum 타입의 데이터를 선언하기 위해서는 'enum' 키워드를 이용해야한다. enum 키워드 뒤에 열거 타입의 이름을 쓰고, 중괄호를 연 다음 값들을 나열해서 사용하면 된다. enum의 정의에 나열된 값들은 0부터 순차적으로 1씩 증가하는 값을 갖게 된다. 자바에서는 enum의 값들을 클래스처럼 사용할 수도 .. 2021. 6. 29. [Java] 리소스 번들(ResourceBundle) 사용법 및 예제 자바 프로그램을 작성할 때, 로케일을 통한 국제화를 지원해야할 경우가 있다. 에러 메시지를 로케일에 따라 한국어로 찍었다가 일본어, 영어로 출력하는 경우를 생각해볼 수 있다. 자바는 리소스 번들(ResourceBundle)을 통해 이런 기능을 지원한다. ResourceBundle 리소스번들은 한번에 여러 로케일(언어와 국가)을 처리할 수 있다. 쉽게 현지화할 수 있고, 다른 언어로 번역해서 사용할 수 있다. 향후에 더 많은 로케일이 지원되어 쉽게 수정할 수 있다. 국제화 지원을 위한 프로퍼티 파일은 다음과 같이 구성되어야 한다. ${프로퍼티명}_${언어코드}_${국가코드}.properties ${프로퍼티명}_${언어코드}.properties ${프로퍼티명}.properties 예를 들어, 'message.. 2021. 6. 29. [Java] 파일 입출력 (FileReader, FileWrite) 사용법 및 예제 자바 애플리케이션을 작성할 때, 파일에 데이터를 출력하거나 파일로부터 데이터를 읽어오는 일은 흔하다. '[Java] 입력 스트림(InputStream)과 출력 스트림(OutputStream)'에서 언급했던 문자 기반 스트림인 FileReader, FileWriter 클래스를 이용한 파일 입출력을 정리해보자. 1. FileReader (파일 읽기) FileReader 클래스는 문자 기반 스트림 객체다. 텍스트 파일을 자바 프로그램으로 읽어올 때 사용한다. 문자 단위로 데이터를 읽기 때문에 텍스트 파일만 읽을 수 있다. File file = new File("파일경로"); FileReader fileReader1 = new FileReader(file); FileReader fileReader2 = new .. 2021. 6. 29. [Java] Maven 빌드시 "warning: [options] bootstrap class path not set in conjunction with 1.7" 메이븐(Maven) 프로젝트를 빌드할 때, 다음 경고 메시지가 출력되는 경우가 있다. "warning: [options] bootstrap class path not set in conjunction with 1.7" 메이븐 프로젝트에서 사용한 자바 버전과 빌드할 때 사용한 자바 버전이 다른 경우에 발생한다. 예를 들어 JDK 1.7 버전 기준으로 메이븐 프로젝트 코드가 작성되었다고 하자. 만약 접속한 환경에서 JAVA_HOME이 JDK 1.8 경로를 가리키고 있으면 메이븐 프로젝트와 자바 버전이 맞지 않게 된다. JDK 버전을 여러개 사용하는 경우는 생각보다 흔하다. 해결 방법으로는 메이븐 빌드를 할 때, 메이븐 프로젝트에 명시되어 있는 자바 버전으로 JAVA_HOME 환경변수를 맞춰주면 된다. 2021. 6. 28. 이전 1 ··· 3 4 5 6 7 8 9 ··· 12 다음