본문 바로가기

Computer Science/JAVA11

Java의 lock * Optimistic Lock - 변경 충돌이 적을 것이라 낙관적으로 가정하고 충돌 발생 시에만 재시도 하는 방식. 1. CAS - 읽기 락과 쓰기 락의 구분이 명확한 알고리즘으로, Java의 AtomicInteger, AtomicLong 같은 클래스에 적용됨.  - 동작 원리 1. 기존의 값과 새로운 값을 비교한 후, 동일할 때만 값을 교체합니다. 2. 교체에 실패하면 재시도합니다. 3. 하드웨어 명령어 수준에서 구현됨, CPU의 CAS 명령어 (CMPXCHG, LL/SC)를 사용함. 4. Atomic 클래스 (AtomicInteger, AtomicLong, AtomicReference)가 이를 구현함.import java.util.concurrent.atomic.AtomicInteger;public.. 2024. 12. 8.
Java의 내장된 sort 구현 * 면접 질문중 JDK 1.8 ( JAVA 8 ) 버전의 자바는 어떤 sort를 구현하고 있는지에 대한 질문을 받았다.얼핏 SW 단톡방에서 QuickSort라고 들었지만 정확하게 알고있는것은 아니였기에 정리하고자 한다.총 2가지로 사용된다고 합니다. * 우선 잘 알려진 sort의 시간복잡도이다 1. TimSort ( TIME 아님 )  - 객체 타입 배열 (Integer[], String[] 등) 에 사용됩니다. - 병합 정렬 (Merge Sort) 와 삽입 정렬 (Insertion Sort)의 조합으로 만들어진 알고리즘입니다. - 정렬 중에 배열을 "Run"이라는 작은 정렬된 부분으로 분할하고, 병합하여 전체 배열을 정렬합니다. 특징  - 데이터의 순서를 보존함. - 최악의 경우에도 O(n log n).. 2024. 12. 6.
Mutable, Immutable * Mutable, Immutable - 자바는 new 연산자로 객체를 생성할 수 있고, 이때 heap 영역에 할당되고 stack 영역에서 참조 타입 변수를 통해 데이터에 접근한다. 이때 자바의 객체의 타입은 두 가지 있다. - Mutable (가변) 객체와 Immutable (불변) 객체이다. * Immutable (불변) 객체  - 정의 : 객체 생성 이후에는 객체의 상태가 바뀌지 않는 객체  - 불변 객체 종류 : String, Boolean, Integer, Float, Long 등...  - String을 제외하고 원시 타입의 wrapper 타입이다 Q. 불변 객체는 왜 사용할까요?A. 클래스들은 가변적이어야 하는 매우 타당한 이유가 있지 않는 한 반드시 불변으로 만들어야 한다. 만약 클래스를 .. 2024. 11. 26.
Java의 Garbage Collection(GC) * intro - 자바의 특징 중 하나로 메모리 관리를 개발자가 직접 명시적으로 수행하지 않고, JVM에서 자동으로 수행함. 이와 같은 프로세스를 GC라고 합니다.  - Java 도입의 전재 가설  a) 대부분의 객체는 금방 접근 불가능 상태가 된다.  b) 오래된 객체에서 젊은 객체로의 참조는 아주 적게 존재한다.   -> 이러한 가설 때문에 old 영역과 Young 영역이 나누어진다. for(int start = 0; start  - 위 코드에서 마지막 한번을 제외한 9999번의 객체들은 바로 접근 불가능 ( unReachable ) 이 된다. GC가 발생하지 않으면 10000개의 객체가 현재 참조되지 않지만 메모리를 점유하고 있다고 볼 수 있음.  * GC의 역할  - 메모리 할당  - 사용 중인 .. 2024. 11. 22.
Error와 Exception 의 개념 * Throwable 클래스* Error - Error는 컴퓨터 시스템의 동작 중 예기치 않았던 이상 상태가 발생하여 수행 중인 프로그램이 영향을 받을 경우. - 시스템 레벨에서 발생하여, 개발자가 어떻게 조치할 수 없는 수준을 의미합니다. - 예를 들어 OutOfMemoryError나 StackOverflowError와 같은 상황.  1. StackOverflowError : 호출의 깊이가 깊어지거나 재귀가 지속되어 stack overflow 오류.  2. OutOfMemoryError : JVM이 할당된 메모리의 부족으로 더 이상 객체를 할당할 수 없을 때 던저지는 오류. * Exception    - Exception은 컴퓨터 시스템의 동작 도중 예기치 않았던 이상 상태가 발생하여 수행 중인 프로그.. 2024. 11. 20.
디폴트 메서드, 추상 클래스와 인터페이스 1. 디폴트 메서드 Default Method  - 1.1 개요  - 자바의 인터페이스는 자바2, 자바5 에서도 일부 변화가 있었지만 가장 큰 변화는 Java8 에서라고 볼 수 있다.  - 자바8의 주요 변경점은 정적 메서드와, 디폴트 메서드를 선언 할 수 있다.  - 디폴트 메서드의 출현으로 기존의 배포된 인터페이스에서 수정이 어려운 단점을 극복 할 수 있게 됐다.  - 자바9에서 private 메서드를 선언해 외부에서 접근 불가능한 메서드 또한 선언 할 수 있게 됐다.  - 1.2 예제interface Foo { String getName(); // 추상 메서드, 구현하는 클래스에서 무조건 구현해줘야 하는 메서드. void printName() { System.out.println(getNa.. 2024. 11. 20.