회사 블로그에 작성한 글을 제 개인 블로그에도 함께 올립니다.원본은 여기서 확인하실 수 있습니다. 삼쩜삼은 자비스앤빌런즈에서 제공하는 서비스로, 사용자들이 간편하게 세금을 환급받을 수 있도록 돕습니다. 이를 위해 먼저 결정 세액을 계산하고, 최종 환급액을 산출하는 과정이 필요한데, 이 때, 가장 중요한 요소 중 하나는 정확한 계산입니다. 특히, 세금과 관련된 모든 금액을 처리하는 과정에서 발생하는 작은 오차조차 법적 문제나 금전적 손실로 이어질 수 있어, 높은 정밀도가 요구됩니다. 한화(원)와 같은 통화는 소수점이 필요 없지만, 세율 계산 등 소수점 이하의 복잡한 연산을 처리할 때는 부동소수점(Floating Point) 방식을 사용하게 됩니다. 그러나 이 방식은 소수점 이하의 값을 정확히 표현하지 못해..
try-with-resources란? 자바에서 자원을 사용하는 블록을 처리할 때 자동으로 자원을 해제하는데 사용되는 구문으로 사용 방법은 아래와 같습니다. try (Resource resource = new Resource()) { // 자원 사용 코드 } catch (Exception e) { // 예외 처리 코드 } 이 때 try의 매개변수에서 선언할 수 있으려면 AutoClosable 인터페이스를 구현해야 합니다. 대부분의 자바 표준 라이브러리 클래스들은 AutoClosable 인터페이스를 구현하고 있습니다. 커스텀 클래스를 사용하려면 해당 클래스가 AutoClosable 인터페이스를 구현해야 합니다. AutoClosable 펼쳐 보기 /* * Copyright (c) 2009, 2013, Orac..
PhantomReference란? PhantomReference는 Java의 Reference 클래스의 하위 클래스 중 하나로, Java 객체의 참조를 간접적으로 유지하면서 해당 객체가 가비지 컬렉션될 때 알림을 받을 수 있도록 해주는 클래스입니다. PhantomReference를 생성할 때는 해당 객체의 참조와 함께 ReferenceQueue를 함께 전달해야 합니다. 이렇게 생성된 PhantomReference는 객체의 참조를 간접적으로 유지하지만, 실제 객체를 참조하는 것은 아닙니다. 그러므로 해당 객체는 가비지 컬렉션 대상이 됩니다. PhantomReference가 알림을 받기 위해서는 해당 객체가 가비지 컬렉션될 때, PhantomReference가 참조하는 객체와 함께 ReferenceQueue..
WeakReference란? Java에서 WeakReference는 가비지 컬렉터에 의해 강제로 수집될 수 있는 참조를 나타내는 객체입니다. 일반적으로 Java에서는 객체에 대한 참조가 있는 경우 해당 객체는 메모리에서 수집되지 않습니다. 하지만 WeakReference는 약한 참조를 제공하여 객체가 메모리에서 수집되도록 허용합니다. WeakReference를 사용하면 객체가 더 이상 사용되지 않는 경우 자동으로 메모리에서 제거됩니다. 이는 객체의 수명 주기를 추적하고 메모리 누수를 방지하는 데 유용합니다. 예를 들어 캐시나 캐시 라인에 저장된 객체는 더 이상 필요하지 않을 때 메모리에서 제거되어야 합니다. 이때 WeakReference를 사용하면 캐시에서 제거되는 객체의 메모리를 즉시 회수할 수 있습니..
Heap pollution은 Java에서 제네릭스를 사용할 때 발생할 수 있는 문제 중 하나입니다. 제네릭스는 타입 안정성을 보장하기 위해 사용되는 기술이지만, 제네릭 타입이 적용된 컬렉션에 잘못된 타입의 객체를 삽입하거나, 타입이 일치하지 않는 객체를 반환하도록 코드가 작성된 경우 발생할 수 있습니다. 이로 인해 컴파일러에서는 오류가 발생하지 않지만, 런타임에서 예기치 않은 동작을 할 수 있습니다. 예를 들어, 다음과 같은 코드가 있다고 가정해 봅시다. List stringList = new ArrayList(); List rawList = stringList; // warning: unchecked conversion rawList.add(1); // heap pollution String s = s..
본문의 글은 오라클 문서를 번역한 글 입니다. Unchecked Exceptions에 관한 논쟁 자바 프로그래밍 언어는 확인되지 않은 예외(RuntimeException, Error 및 그들의 하위 클래스)를 catch하거나 명시하는 것을 메소드에서 요구하지 않기 때문에, 프로그래머들은 UncheckedException만 던지도록 코드를 작성하거나 모든 예외 하위 클래스를 RuntimeException으로 상속하려는 유혹에 빠질 수 있습니다. 이러한 지름길을 사용하면 컴파일러 오류를 걱정하지 않고 예외를 지정하거나 잡지 않고 코드를 작성할 수 있지만, 이는 확인되지 않은 예외를 지정하거나 잡는 요구사항의 의도를 우회하며, 클래스를 사용하는 다른 사람들에게 문제를 일으킬 수 있습니다. 이는 프로그래머에게는..
자바 프로그래밍을 하다보면 Optional을 파라미터로 전달했을 때 컴파일러가 경고(노란줄)를 표시합니다. (IntelliJ에서는 표시해주는데 다른 IDE는 어떤지 잘 모르겠네요) 경고를 확인하기 위해 간단한 코드를 작성해보면, public void foo(String nullable) { bar(Optional.of(nullable)); } private void bar(Optional s) { // do something } 'Optional' used as type for parameter 's' 바로 이런 내용을 확인할 수 있습니다. 그렇다면 왜 Optional을 파라미터로 전달하면 안 되는 것일까요? 결론부터 말씀드리면 장점보다 단점이 많기 때문입니다. 먼저 장점으로는 전달할 당시에 별 생각 없..
Optional을 사용하다보면 마지막에 orElse() 또는 orElseGet()를 이용해 원래 값을 얻습니다. 그동안 저는 두 메서드의 차이가 단순히 전달해야하는 파라미터의 차이라고 생각했었습니다. 예를 들면 orElse(defaultValue), orElseGet(this::getDefaultValue) (또는 orElseGet(() -> getDefaultValue())) 이런식으로 하나는 값을 전달하고 하나는 구현체를 전달하기 때문에 그냥 적절하게 사용하면 되겠다는 정도로만 생각했었습니다. 그러던 중 테스트 클래스를 작성하다가 mocking을 사용하였는데 정상적으로 동작하지 않았습니다. 본문과 크게 관련 없는 내용(어떤 테스트가 동작하지 않았는지)이라 접어두겠습니다. 테스트 할 클래스는 Servi..
다형성을 사용할 때 자식 또는 구현체의 객체가 어떤 타입인지 알아보는 방법은 익히 알려져있습니다. 다음과 같은 두 개의 클래스가 있을 때, class Shape { // 생략 } class Triangle extends Shape { // 생략 } Triangle 객체가 어떤 타입인지 알아보려면 아래처럼 확인할 수 있습니다. class Scratch { public static void main(String[] args) { Triangle triangle = new Triangle(); System.out.println(triangle.getClass()); System.out.println(triangle instanceof Shape); System.out.println(triangle instan..
저는 취미생활(?)의 일환으로 네이버 지식인에 답변을 달아주고 있습니다. (현재 무려 바람신😎) 제가 대학생 때는 현재 창업한 회사에서 CTO로 활동하다가 모든 일을 맡아서 해야하는 실장이 되어버린 실력자 친구가 있었기 때문에 잘 모르면 무조건 그 친구에게 쪼르르 달려가서 질문을 하곤 했습니다. 하지만 그 친구를 만난 건 3학년 2학기.. 그 전까지는 고만고만한 친구들과 수업을 제끼고 당구를 치러 가는 게 더 좋았고, 그 친구들이 다 군대가고 나서는 혼자서 질문할 곳이 없어서 많이 힘들어하고 결국엔 휴학까지 했었습니다. 지식인에 올라오는 모든 질문이 저렇게 절박한 처지에 있는 사람이 올리는 글은 아니겠지만 혹시나 그런 처지에 있는 사람이 기댈 곳이 없어서 질문을 했을 수도 있기 때문에(?) 오지랖을 부려..
- Total
- Today
- Yesterday
- Jackson
- gRPC
- 스프링 부트
- leetcode
- spring boot jwt
- QueryDSL
- 스프링 부트 튜토리얼
- @ManyToOne
- Spring Boot JPA
- spring boot app
- 함께 자라기
- Spring Boot Tutorial
- Spring Boot
- intellij
- Linux
- 헥사고날 아키텍처
- 클린 아키텍처
- Java
- 함께 자라기 후기
- JSON
- JPA
- Spring Data JPA
- r
- 스프링 부트 애플리케이션
- 스프링 부트 회원 가입
- 알고리즘
- spring boot application
- 스프링 데이터 jpa
- 스프링부트
- proto3
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |