Java
Generic Type Erasure는 어떻게 타입캐스팅을 하는건가요?
Generic Type Erasure는 어떻게 타입캐스팅을 하는건가요?
2021.12.07서론 커뮤니티에 다음과 같은 질문이 올라왔다. 질문 내용은 다음과 같다. 제네릭은 런타임시 타입 소거(type erasure)를 하기 때문에, 언바운디드(unbounded) 타입 같은 경우 Object로 치환 되는데, 어떻게 클라이언트에서 선언한 타입으로 캐스팅이 되는건가요?? 쉽게 풀어서 얘기하면, 다음 코드에서 리턴 타입은 Object인데 어떻게 클라이언트에서 서브 타입으로 타입 캐스팅 없이 받냐라는 내용이다. // 리턴 타입은 Object 라면서??! public T get(T t) { return t; } 우선 타입 소거가 무엇인지 알아보자. 타입 소거 Type Erasure 다음 내용은 오라클 공식 문서에 나와있는 Type Erasure에 대한 설명 중 일부다. Generics were intr..
Java Parallel Programming 성능 테스트 및 고려사항 (JMH)
Java Parallel Programming 성능 테스트 및 고려사항 (JMH)
2021.07.25본 글은 Kevin Lee님의 Parallel Programming을 학습 내용을 토대로 실험한 내용입니다. 자바8에서 부터 Parallel Stream을 이용해서 병렬처리를 쉽게할 수 있습니다. 병렬 스트림은 내부적으로 ForkJoinPool을 사용합니다. 작업을 분할할 때 기본적으로 pc의 cpu의 코어 수(정확히는 스레드)만큼 작업을 분할합니다. ForkJoinPool.getCommonPoolParallelism(); // 확인 가능 (0부터 1입니다) 우선 성능 테스트를 하기 전 간단한 병렬처리에 대한 개념 예제를 보여드리겠습니다. 병렬처리 개념 실험 환경: 제 PC의 cpu사양은 8코어 16스레드를 지원합니다. 상황) 1부터 16까지 총 16개의 숫자를 출력합니다. 출력하기 전 스레드를 1초씩 ..
HashMap은 어떻게 동작할까? + 자바8에서의 변화
HashMap은 어떻게 동작할까? + 자바8에서의 변화
2021.06.20hashCode의 특징 HashMap의 내부 구조 HashMap이 식별자를 구별하는 방법 Java8에서의 HashMap의 변화 자바에서 가장 많이 사용하는 자료 구조 중 하나인 HashMap은 어떻게 동작할까? 우선 HashMap을 이해하려면 hashCode랑 equals의 개념을 먼저 알고있어야합니다. (이 글에서는 다루진 않습니다) 이펙티브 자바 Item11에서는 "equals를 재정의하려거든 hashCode도 재정의하라"라는 내용이 있다. HashMap의 동작 원리를 알게되면 왜 이런 얘기를 하는지 자연스럽게 이해할 수 있다. 우선 간단하게 hashCode의 특징을 짚고 넘어가자. /** * Returns a hash code value for the object. This method is * s..
[Java] 새로운 날짜/시간 API Time소개, Date의 단점
[Java] 새로운 날짜/시간 API Time소개, Date의 단점
2021.02.10Goal Time API가 생긴 배경(이유) 주요 API 설명 자바 8에서 새로운 날짜와 시간 API가 생긴 이유 그전까지 사용하던 java.util.Date클래스는 mutable하기 때문에 thread safe하지 않습니다. 클래스 이름이 명확하지 않다. Date인데 시간까지 다룹니다. 버그 발생할 여지가 많다 (타입 안전성이 없고, 월이 0부터 시작한거나) 예제를 위한 코드 public static void main(String[] args) throws InterruptedException { Date date = new Date(); // 이름은 데이트인데 시간까지 다룬다 long time = date.getTime(); System.out.println(time); // 기계 시간 출력됨 // ..
[Java] 함수형 인터페이스, 람다식
[Java] 함수형 인터페이스, 람다식
2021.02.09GOAL 함수형 인터페이스에 대해서 이해할 수 있습니다. 함수형 인터페이스와 람다식을 사용할 수 있습니다. 자바에서 제공해주는 함수형 인터페이스 종류들을 알 수 있습니다. 함수형 인터페이스 자바 8부터 함수를 일급객체 처럼 다룰 수 있는 함수형 인터페이스를 제공합니다. 함수형 인터페이스의 기본 조건은 SAM(Single Abstract Method)이어야 합니다. public interface RunSomething { void doSomething(); // 인터페이스 메소드는 public abstract이며 생략 가능 } default 메소드나 static메소드가 있어도 추상 메소드가 한 개일 경우 함수형 인터페이스입니다. @FunctionalInterface // 어노테이션을 붙이면 함수형 인터페이..