본문 바로가기

Java95

[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.
[Java] JVM on-heap 메모리와 off-heap 메모리 자바 프로그램에서 생성된 객체는 '힙(Heap)'이라는 메모리 영역에 생성된다. 힙 영역에 생성된 객체는 'GC(Garbage Collector)'의 관리를 받으며 사용되지 않는 경우 GC에 의해 다시 회수된다. 1. on-heap 메모리 우리가 일반적으로 알고 있는 '힙(Heap)' 메모리 영역이 on-heap 영역에 해당된다. 자바 프로그램에서 'new' 연산 등을 이용해 생성된 객체는 힙 영역에 생성된다. C, C++의 경우라면 객체의 생성과 소멸을 프로그래머가 관리해줘야한다. 반면 자바의 경우 GC(Garbage Collection) 알고리즘에 의해 자연스럽게 회수된다. 프로그래머는 객체의 메모리 회수, 메모리 릭(Memory Leak) 등을 걱정하지 않아도 된다는 장점이 있다. 하지만 GC 알고.. 2021. 6. 28.
[Java] final 키워드의 의미와 예제 자바 코드에서 자주 볼 수 있는 final 키워드에 대해서 정리해보자. final은 '최종적'이라는 의미를 갖고 있는 단어다. 자바에서는 final 키워드를 멤버 변수와 클래스, 메소드 그리고 메소드 인자에 붙일 수 있다. 각각이 의미하는 바에 대해서 알아보자. 1. final 멤버변수 클래스를 선언할 때 멤버 변수의 앞에 final 키워드를 붙일 수 있다. private final int number = 0; 이 경우 변수에 값 할당을 딱 한번 할 수 있다. final 멤버 변수에 값을 할당하는 방법에는 필드 선언시하는 것과 생성자를 통해서 할당하는 것이 있다. 만약 멤버 변수를 final로 선언하고, 선언부와 생성자에서 초기화하지 않으면 컴파일 에러가 발생한다. 이렇게 값이 할당된 멤버변수의 값은 다.. 2021. 6. 27.
[Java] this 키워드의 의미 및 사용법 자바에서 'this'라는 키워드는 '객체 자기자신'을 의미한다. 주로 3가지 패턴으로 사용된다. 1. 생성자 혹은 메소드의 인자(parameter)와 객체의 속성이 같은 경우 다음 자바 코드를 보자. public class Person { private int age; void setAge(int age) { this.age = age; } } Person 클래스에 setAge()라는 메소드를 정의하는 코드다. setAge() 메소드의 인자 이름이 'age'인데 이는 Person 클래스의 멤버 변수인 age와 동일하다. 이 경우 어떤 것이 멤버 변수이고 어떤것이 인자인지 구별하기 위해 this 키워드를 앞에 붙여준다. this는 현재 객체를 의미하고, this.age는 현재 객체의 멤버 변수를 의미한다... 2021. 6. 26.
[Java] 입력 스트림(InputStream)과 출력 스트림(OutputStream) - java.io 패키지 자바 프로그램은 외부에서 데이터를 읽거나 외부로 데이터를 쓰는 작업을 할 수 있다. 예를 들어 콘솔 입력을 받거나 모니터에 결과를 출력한다던가, 네트워크나 파일에서 데이터를 읽거나 쓰는 경우는 매우 흔하다. 이런 데이터의 입출력은 '스트림(Stream)'이라는 개념을 통해 수행된다. (Java8부터 도입된 스트림 기능과 혼동하지말자. 여기서 말하는 스트림은 입력 스트림(InputStream)과 출력 스트림(OutputStream)에 대한 내용이다) 1. 자바의 입출력 스트림(IOStream) 스트림(Stream)은 개울, 시내라는 명사와 '흐르다'라는 동사의 의미를 가지고 있는 단어다. 데이터의 입출력 관점에서보면 소스에서 타겟으로 데이터가 흘러가는 모양을 생각하면 편하다. 소스(Source)에서 생성된.. 2021. 6. 25.
[Java] 오버플로우 없이 정수 다루기 - BigInteger 사용법 및 예제 Java 혹은 C를 이용해서 프로그래밍하다보면 '오버플로우(Overflow)'라는 개념을 기억하고 있어야한다. 정수형 타입의 데이터를 저장하기 위해서 4바이트의 int 변수를 선언하게 된다. 문제는 int 타입의 변수는 -2,147,483,648 ~ 2,147,483,647 사이의 값만 저장할 수 있다는 점이다. 좀 더 큰 수를 저장하기 위해서 long 타입으로 선언하더라도 그 범위가 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807로 늘어날 뿐 모든 범위의 숫자를 정확하게 저장할 수 있는 것은 아니다 일반적인 경우라면 이 정도 범위의 숫자만으로도 문제가 없겠지만 과학 데이터를 다루는 프로그램이나 데이터의 숫자가 대륙의 스케일로 넘어가버리면 문제가 생기는 .. 2021. 6. 23.
[Java] 오버플로우 없이 실수 다루기 - BigInteger 사용법 및 예제 Java 혹은 C를 이용해서 프로그래밍하다보면 '오버플로우(Overflow)'라는 개념을 기억하고 있어야한다. 소수점을 가지고 있는 실수 타입의 데이터를 저장하기 위해서 double 혹은 float 타입의 변수를 선언하게 된다. 문제는 float 타입의 변수는 1.4E-45 ~ 3.4028235E38 사이의 값만 저장할 수 있다는 점이다. double 타입으로 선언하더라도 그 범위가 4.9E-324 ~ 1.7976931348623157E308 로 늘어날 뿐 모든 범위의 숫자를 정확하게 저장할 수 있는 것은 아니다. 게다가 부동 소수점 데이터의 경우 2진수로 데이터를 다루는 기본형 타입에서는 부정확한 결과가 나올 수도 있다. 따라서 정밀한 소수점 계산이 필요한 과학 데이터의 경우 double, float .. 2021. 6. 23.