Java & Kotlin (15) 썸네일형 리스트형 Java 불변 객체(Immutable Object) 와 장단점 불변 객체(Immutable Object)는 한 번 생성되면 그 상태가 변하지 않는 객체를 의미합니다. 자바에서 가장 흔히 사용되는 불변 객체의 예로는 String 클래스가 있습니다. 이 글에서는 String 클래스를 통해 불변 객체의 개념을 살펴보고, 불변성의 장점과 단점에 대해 논의해 보겠습니다. String 클래스: 불변 객체의 대표적인 예 String 클래스의 인스턴스는 불변 객체입니다. 즉, 한 번 생성된 String 객체의 내부 상태(저장된 문자열)는 변경할 수 없습니다. 예제를 통해 이를 확인해 보겠습니다.String text = "abc";text = text + "def";System.out.println(text); // 출력 결과: "abcdef" 이 코드에서 text 변수는 처음에.. 자바의 Garbage Collection 이해와 성능 최적화 방법 1. Garbage Collection이란?Garbage Collection(GC)는 동적으로 할당된 메모리 중 필요하지 않은 부분을 해제하는 JVM의 기능입니다.더 이상 사용하지 않는 객체의 메모리 자원을 해제하여 메모리의 여유 공간을 만들게 됩니다.객체는 메모리 중 힙 영역에 할당되고, 할당된 객체 즉, 인스턴스가 더 이상 참조되지 않는다면 garbage로 간주되며, 이를 수집하여 메모리를 해제하는 역할이 바로 GC의 역할입니다.이와 같은 자동 메모리 관리는 프로그래머의 부담을 줄이고, 메모리 누수나 불필요한 메모리 사용 등의 문제를 방지하는데 큰 도움이 됩니다.2. GC의 동작 원리GC의 기본적인 동작 원리는 'Mark and Sweep' 알고리즘에 기반합니다. Mark 단계에서는 Root로부터 시.. Lock과 Double Check Lock: 동시성 문제 해결을 위한 효율적 패턴 Lock을 사용하는 이유는 여러 Thread가 하나의 메서드에 동시 접근했을 때 발생할 수 있는 동시성 문제를 해결하기 위해 사용합니다. 예를 들어 private int count = 0; public void addCount() { count = count + 1; }이러한 로직이 있으며 아래 순서대로 쓰레드 2개가 해당 메서드를 호출합니다.[Thread-1] A 쓰레드가 addCount()에 접근하여 count:0 에 1을 더합니다.[Thread-2] B 쓰레드가 addCount()에 접근하여 count:0 에 1을 더합니다.[Thread-1] A 쓰레드가 0+1 의 결과값인 1을 count에 입력합니다.[Thread-2] B 쓰레드가 0+1 의 결과값인 1을 count에.. Java Functional Interface로 API 테스트 모듈 간결하게 만들기: 적용 사례와 코드 개선 회사 API 테스트 모듈을 개발하다가 Functional Interface의 좋은 예가 있어서, 이를 통해 개발된 모듈이 어떻게 더욱 간결하고 효과적이게 작성될 수 있었는지를 공유하고자 합니다. 먼저, Functional Interface는 Java8에 도입된 인터페이스로 단 하나의 메서드만을 가지는 인터페이스를 의미합니다.쉽게말해 인터페이스에 메서드가 하나만 있으면 Functional Interface 이죠. test() 메서드를 만들어서 점진적으로 기능을 추가해보겠습니다. 우선 응답 결과가 성공인지 실패인지 확인하는 모듈을 보시죠.protected static boolean test(Call call) { try (Response response = call.execute()) { .. Stack Overflow Error 발생 원인과 해결 방법: 재귀 호출 피하기 Stack overflow error는 함수를 재귀 호출하거나 순환 참조하거나, 너무 많은 메소드가 실행되어 제한된 스택 메모리 용량을 초과할 경우 발생합니다. 아래는 에러 발생 예시입니다.public class StackOverflowDemo { public static void recursiveMethod() { recursiveMethod(); } public static void main(String[] args) { recursiveMethod(); }}하나의 메서드를 호출하면 하나의 스택이 쌓입니다.이게 반복되어 쌓이면 StackOverflowError가 발생합니다. 에러를 해결하기 위해 '재귀', '순환 참조'로직은 가급적 피하고, 불가피하게 사.. Java에서 제공해주는 Functional Interface 목차FunctionSupplierConsumerPredicateCustom Functional Interface자바에서 제공해주는 Functional 인터페이스중 가장 많이 사용되는 4가지 인터페이스를 알아보겠습니다.1. FunctionI : input typeO : output typeI 라는 입력을 받아서 O라는 출력을 낸다. 라는 인터페이스입니다.사용법은 아래와 같습니다. Function function = (i) -> "[" + i + "]"; String result = function.apply(3); System.out.println("result = " + result);결과 : result = [3] 2. SupplierO : output typeFunction과는 다르게.. 메서드 재실행 어노테이션을 만들자. 실무 & @Retryable (소스 코드) github : (빌드해서 라이브러리로 사용하거나 기능을 추가해서 사용하셔도 됩니다) GitHub - youseonghyeon/retry-lib: 라이브러리로 사용할 수 있음라이브러리로 사용할 수 있음. Contribute to youseonghyeon/retry-lib development by creating an account on GitHub.github.com 우선.. spring-retry라는 라이브러리를 설명하는 글은 아니므로, 만약 라이브러리 사용법을 알고싶으면... 뒤로가기를 눌러주세요. 메서드를 실패하면 재 실행하도록 하는 @Retryable 어노테이션을 만들자! @Retryable 어노테이션을 쓰는 이유는 다음과 같습니다.1. api 호출 시 장애가 발생할 가능성이 있.. 이전 1 2 다음