BigDecimal 나눗셈 시 소수점 자릿수가 무한대 일 경우 "Non-terminating decimal expansion; no exact representable decimal result" 오류가 발생한다. 적절하게 scale 처리를 해주어야 한다. 기존 나눗셈 처리시 BigDecimal 의 정적변수 대신 RoundingMode enum 클래스를 사용한다. bigDecimal.divide(new BigDecimal(3), 3, BigDecimal.ROUND_HALF_UP); bigDecimal.divide(new BigDecimal(3), 3, RoundingMode.HALF_UP);
상속과 컴포지션에 대해 알아보겠습니다. 상속은 부모클래스의 정의된 필드와 메서드를 자식클래스에서 물려 받는 것이고 컴포지션은 private 필드를 통하여 기존 클래스에 다른 클래스 인스턴스를 전달받는 것 입니다. 위의 설명 클래스들이 아래 소스에서와 같이 기존 클래스(Test)와 부모클래스(Test2), 다른 클래스(Test3)이 있습니다. public class Test extends Test2 { // 상속 private final Test3 test3; // 컴포지션 public Test(Test3 test3) { this.test3 = test3; } @Override protected void on() { super.on(); test3.on(); } public static void main(..
자바 8에 추가된 API인 스트림에 대해 알아보겠습니다. Stream API? Stream API란 데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 데이터입니다. Stream은 마치 Builder 패턴과 비슷하게 내부 반복을 통해 데이터 처리 연산을 적용합니다. ! 기존 Collection을 for 문으로 반복하는 방식은 외부 반복 Stream API 특징 - 선언형 : 더 간결하고 가독성이 좋아진다. - 조립할 수 있음 : 유연성이 좋아진다. - 병렬화 : 성능이 좋아진다. Stream 이용과정 스트림은 질의를 수행할 데이터 소스를 중간 연산을 거쳐 최종 연산을 합니다. 예를 들어 아래와 같은 ArrayList가 존재한다고 가정했을 때 // ArrayList 객체에 추가 된 목록이 있다고 가정 L..
Java에서는 값을 비교 할 때 동일성 (==), 동등성 (equals)로 비교합니다. 이중에서 Long을 동일성(==) 비교했을 때 어떤 일이 발생하는지 알아보겠습니다~ Long을 동일성 비교하게되면, 특정 상수풀(-128 ~ 127) 까지는 정상적으로 동작을합니다. 이래서 아무생각없이 함정에 빠졌습니다. 127 이상으로 넘어가니 동일성으로 비교가 되지않는 것을 확인했습니다. 결론은 객체 비교는 항상 equals를 사용하자 입니다.
불변 객체와 가변 객체는 Multi Thread 환경에서 개발할 때 이해해야 할 중요한 개념입니다. 일단은 단어에 대한 설명만 살펴보면 불변 객체 Java에서 Class의 인스턴스가 생성 된 후 상태가 변하지 않는 객체, Multi Thread 환경에서 안전하게 사용할 수 있다는 신뢰성이 보장됩니다. 가변 객체 Java에서 Class의 인스턴스가 생성 된 후 상태가 변할 수 있는 객체, Multi Thread 환경에서 별도의 동기화 처리가 필요합니다. 이렇게 글로만 보면 무슨 말인지 잘 이해가 안갑니다. Java에서 Class의 인스턴스가 생성 -> 소스에서 new Class(); 상태가 변하지 않는 -> 어렵습니다.. 뭔 상태요.. 예를 들어 클래스가 있으면 클래스 안의 멤버변수가 Primitive T..
JVM에 대해 다시 공부하다, 정리가 한 번 필요할 것 같아서 정리 해봅니다. 개발자들이 작성한 .java 코드가 어떻게 실행 되는지 한 눈에 알아 볼 수 있는 그림입니다. Java개발자라면 이클립스, 인텔리제이, vscode 등 IDE를 이용하여 개발할 때 JDK가 필요해 각자 본인 PC에 Java를 설치할 것 입니다. JDK를 설치하면 javac 명령어를 사용할 수 있습니다. javac 명령어로 .java 파일을 컴파일하게되면 바이트 코드인 .class 파일이 생성되고 JVM이 샐행할 메모리를 OS로 부터 할당 받습니다. 그 후 JVM의 Class Loader에 의해 클래스 파일을 읽어 옵니다. JVM 위에서 실행 되기때문에 Java를 OS에 상관없이 실행시킬 수 있습니다. 그럼 JVM은 어디에 있을..