Java

    [Kotlin] 기본 생성자가 없고, 필드가 1개여도 코틀린은 역직렬화가 된다

    기본 생성자가 없고, 필드가 1개여도 코틀린은 역직렬화가 된다 class BepozDTOTest { @Test fun convertTest() { val mapper = jacksonObjectMapper() val mapper2 = ObjectMapper() val json = "{\"name\": \"kang\"}" val result: BepozDTO = mapper.readValue(json) val result2: BepozDTO = mapper2.readValue(json) } } data class BepozDTO( val name: String ) 자바의 경우 jackson 2.13버전 부터 추가된 jackson-module-parameter-names 모듈에 의해 기본 생성자가 없어도 다..

    [Java] AttributeConverter를 이용하여 DB에 Entity의 컬렉션 필드 저장하기

    AttributeConverter를 이용하여 DB에 Entity의 컬렉션 필드 저장하기 @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class TimeTravel { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Convert(converter = TravelListToJsonConverter.class) private List travels; public TimeTravel(List travels) { this.travels = travels; } @Getter @NoArgsConstructor(access = AccessLevel..

    [Java] ThreadLocal에 대해

    ThreadLocal에 대해 ThreadLocal은 무엇일까? 코드로 먼저 확인해보자 public class Shared { private String nonDuplicatableId; public void responseYourId() { allocate(); System.out.println(nonDuplicatableId); } private void allocate() { if (nonDuplicatableId == null) { nonDuplicatableId = UUID.randomUUID().toString().substring(0, 6); } } } class SharedTest { private static final Shared shared = new Shared(); private s..

    [Java] Atomic, Volatile, Synchronized 에 대해

    Atomic, Volatile, Synchronized 에 대해 멀티 쓰레드의 경우에 공유하는 필드에 대해서 thread-safe를 보장해주어야 한다. public static int idx = 0; 이런식으로 두는 것은 thread-safe 하지않다. Atomic, Volatile, Synchronized 에 대해 알아보자. public class CounterBasic { private static int idx = 0; public static int increase() { return idx++; } public static int idx() { return idx; } } public class CounterSynchronized { private static int idx = 0; public..

    [Java] Reflection 사용법 정리

    Reflection 사용법 정리 클래스 객체 검색 Object.getClass(); class Bepoz { int value; public Bepoz(int value) { this.value = value; } } Bepoz bepoz = new Bepoz(10); Class aClass1 = Class.forName("reflection.Bepoz"); //Bepoz 클래스는 reflection 패키지 내부에 있음 기본 유형 래퍼의 TYPE 필드 Class type = Double.TYPE; Class type1 = Integer.TYPE; Class type2 = Void.TYPE; 클래스를 반환하는 메서드 public class Bepoz extends Parent { int value; pub..

    [Java] ExecutorService 와 ThreadPoolExecutor 에 대해

    ExecutorService 와 ThreadPoolExecutor 에 대해 ExecutorService service = Executors.newFixedThreadPool(50); 위 코드가 뜻하는 것은 무엇일까? Executors 는 Executor, ExecutorService, ScheduledExecutorService, ThreadFactory 등을 위한 정적 팩토리 메서드를 지원해주는 클래스다. 내부 메서드를 확인해보면 다음과 같은 팩토리 메서드가 눈에 들어올 것이다. Executors.newSingleThreadExecutor(); Executors.newFixedThreadPool(); Executors.newCachedThreadPool(); Executors.newWorkStealin..

    [Java] CountDownLatch, Semaphore, CyclicBarrier 에 대해

    CountDownLatch, Semaphore, CyclicBarrier 에 대해 CountDownLatch, Semaphore, CyclicBarrier는 자바에서 제공해주는 동기화 클래스이다. 이 클래스들을 이용해서 멀티 스레드와 관련된 코드들을 핸들링 할 수가 있다. CountDownLatch @Test void countDownLatchTest() throws InterruptedException { int numberOfThreads = 10; CountDownLatch latch = new CountDownLatch(10); ExecutorService service = Executors.newFixedThreadPool(numberOfThreads); for (int i = 0; i < nu..

    [Java] OutputStream, InputStream, File 간단 사용법 정리

    OutputStream, InputStream, File 간단 사용법 정리 어느 한쪽에서 다른 쪽으로 데이터를 전달하기 위해서는 두 대상을 연결하고 데이터를 전송할 수 있는 통로가 필요한데 이것을 스트림이라고 생각하면 된다. 스트림은 단방향통신만 가능하므로 입력과 출력을 위한 스트림이 각각 존재해야한다. 입력 스트림이 InputStream, 출력 스트림이 OutputStream이다. 스트림은 FIFO 다. OutputStream OutputStream은 다른 매체에 바이트로 데이터를 쓸 때 사용한다. 데이터를 쓰기위해 write(int a) 메서드를 이용한다. @Test void OutputStream은_데이터를_바이트로_처리한다() throws Exception { byte[] bytes = {110,..