본문 바로가기

Languages/Java

(7)
리플렉션의 InvocationTargetException Java의 리플렉션 API를 사용해 메서드를 호출할 때 해당 메서드가 예외를 던지면 리플렉션 메커니즘은 이 예외를 InvocationTargetException 으로 감싸서 다시 던진다. 왜? 리플렉션을 사용해 메서드를 동적으로 호출하는 과정에서 발생하는 예외와 실제 메서드 내부에서 발생하는 예외를 구분하기 위함이다. 리플렉션 API를 사용하는 코드는 메서드 호출과 관련된 다양한 문제로 인해 예외가 발생할 수 있다. IllegalAccessException : 메서드에 접근할 수 없는 경우 IllegalArgumentException : 인자가 잘못된 경우 NoSuchMethodException … 메서드 자체가 실행되는 도중에 예외를 던지는 경우는 메서드의 로직과 관련된 문제이다. 리플렉션 API는 이..
WeakHashMap과 약한 참조 WeakHashMap의 특징 약한 참조 WeekHashMap은 키에 대한 약한 참조를 저장한다. 키 객체에 대한 다른 참조가 없다면 Garbage Collector에 의해 수거된다. 키 객체가 Garbage Collector에 의해 수거되면 해당 키와 연관된 엔트리도 자동으로 제거된다. → 메모리 누수를 방지할 수 있다. 동기화 x 동기화를 지원하지 않는다. 여러 스레드에서 동시에 WeakHashMap을 사용하려면 외부에서 동기화 처리를 해야한다. Null 허용 key와 value에서 모두 null을 허용한다. null 키는 약한 참조가 아니기 때문에 GarbageCollecor에 의해 수거되지 않는다. WeakHashMap 키에 대한 참조 없을 때 GC에 의해 수거되는지 확인 import java.ut..
예외처리 예외처리 Java에서 모든 에러와 예외는 Throwable 클래스의 하위 클래스입니다. Throwable 클래스는 Java에서 발생할 수 있는 모든 유형의 문제를 나타내며, 이는 두 개의 주요 하위 클래스인 Error 클래스와 Exception 클래스를 가지고 있습니다. 이를 이해하면 Java에서의 예외 처리 체계를 더욱 잘 이해하고 활용할 수 있습니다. Error vs Exception Error 에러는 시스템 레벨에서 발생하는 심각한 문제를 나타냅니다. 대부분 JVM(Java Virtual Machine) 자체에서 발생하거나, 시스템 자원 부족 등과 같은 경우에 발생합니다. 에러의 예로는 OutOfMemoryError(메모리 부족), StackOverflowError(스택 오버플로우) 등이 있습니다...
Primitive Type, Reference Type Primitive Type 기본형 데이터 타입은 Java에서 가장 기본적인 데이터 타입으로, 메모리(JVM의 스택)에 고정된 크기를 차지한다. Primitive values do not share state with other primitive values. 두 변수가 동일한 메모리 위치에 저장된 값을 가리키거나 서로 영향을 미치지 않는다. Primitive Type에는 아래와 같은 종류가 있다. 또한 Primitive Type은 default 값으로 초기화된다. 크기 default value 정수형 byte 1 byte 0 short 2 byte 0 int 4 byte 0 long 8 byte 0L 실수형 float 4 byte 0.0f double 8 byte 0.0d 문자형 char 2 byte &..
JVM과 GC JVM 컴파일 Java 소스코드는 Java 컴파일러 javac에 의해 바이트코드로 변환된다. 변환된 바이트코드는 플랫폼에 독립적인 이진 포맷으로, JVM 위에서 실행된다. 클래스 로더 실행 시간에 동적으로 바이트 코드를 로드하고 링크한다. Bootstrap 클래스 로더: JVM 구현의 일부로, Java 기본 클래스를 로드한다. Extension 클래스 로더: 확장 디렉토리에 있는 클래스를 로드한다. Application 클래스 로더: 사용자 정의 클래스와 클래스 경로에 있는 클래스를 로드한다. Runtime Data Area Method Area 바이트코드가 저장된다. 클래스의 메타데이터, 상수, 정적 변수 등이 저장된다. Heap 동적으로 생긴 객체가 저장되는 영역으로 가비지 컬렉션의 대상이 된다. S..
[Java] HashMap, HashTable, HashSet HashMap Map 인터페이스를 구현하는 클래스이다. key-value 쌍으로 데이터를 저장한다. 키는 중복될 수 없다. 동일한 키를 가진 값을 추가하려고 하면, 기존 값이 새 값으로 대체된다. key와 value에 대해 null을 허용한다. 동기화되지 않는다. 속도가 빠르다. HashTable Map 인터페이스를 구현하는 클래스이다. key-value 쌍으로 데이터를 저장한다. 키는 중복될 수 없다. 동일한 키를 가진 값을 추가하려고 하면, 기존 값이 새 값으로 대체된다. key와 value에 대해 null을 허용하지 않는다. 동기화가 된다. thread-safe하다. 속도가 느리다. HashSet Set 인터페이스를 구현하는 클래스이다. 중복을 허용하지 않는다. null을 허용한다. 내부적으로 Ha..
Object Mapper 매퍼 object → object 매퍼 라이브러리 ObjectMapper ModelMapper MapStruct Object Mapper JSON 컨텐츠를 Java 객체로 deserialization 하거나 Java 객체를 JSON으로 serialization 할 때 사용하는 Jackson 라이브러리의 클래스이다. ObjectMapper는 생성 비용이 비싸기 때문에 bean/static으로 처리하는 것이 좋다. ObjectMapper객체를 다음과 같이 생성한다. ObjectMapper objectMapper = new ObjectMapper(); 직렬화를 하기 위해서는 getter가 필요하다. 역직렬화를 하기 위해서는 생성자가 필요하다. class User{ private String name; priv..