본문 바로가기

자바54

IO 와 NIO 를 이용한 입출력 (2/2) NIO자바 4에서 새롭게 등장하고 7에서 재정비된 NIO 는 IO 와 비교해 여러 강점을 가진다. 1. MMIO(Merory-Mapped IO) 방식으로 버퍼 지원2. 넌블로킹 모드 지원3. Scatter/Gather 지원4. 파일락 이전 포스팅에 1,2,3, 의 내용이 정리되어 있다. 파일락의 경우, 어떤 파일을 수정하는 동안 다른 쓰레드에서 읽기 작업을 가능하게 할지 설정하는 기술이다. MMIO일반적으로 I/O 작업이 이뤄질때, 이를 위한 별도의 메모리 공간이 할당된다. 문제는 I/O 작업이 일어날 때마다 이 별도의 메모리 공간(자바에서는 Heap)을 사용하기 위한 시스템콜이 일어나고, 이 작업이 상당한 자원을 소모한다는 것이다.이 문제를 해결하기 위해 운영체제는 MMIO 라는 기술을 지원한다.mmi.. 2024. 5. 17.
IO 와 NIO 를 이용한 입출력 (1/2) 자바에는 입출력을 위한 I/O API 존재한다.I/O 클래스는 두개가 존재하는데, 기존 I/O 와 자바4에 등장해서 자바 7에 재정리된 버퍼를 사용하는 New I/O 다. 버퍼버퍼에 대해 쉽게 이해하기 위해 먼저 마트에서 장을 본다고 가정해보자. 살 물건을 하나씩 계산대로 가지고 가기 보다는, 바구니에 담아서 한번에 가져가는 것이 이동시간도 적게 걸리고 힘도 덜 들 것이다. 버퍼는 바로 이 바구니와 비슷한 역할을 한다. 즉, 데이터를 다루기 전 일정 크기만큼 한번에 가져와 가지고 있는 저장소다. 덕분에 데이터를 사용하기 위해 매번 데이터를 찾으러 갈 필요가 없어 실행 시간이 빨라진다는 장점이 있다. 기본 I/O 클래스를 이용한 버퍼코드로 살펴보기에 앞서 일부 세팅이 필요하다.1. 더미 파일 생성파워쉘에서.. 2024. 5. 13.
자바 - Java 8 date/time type `java.time.LocalDateTime` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling ... 발생ObjectMapper 을 이용한 객체 직렬화 도중에 문제가 발생했다. 원인에러 메시지에 나와있다.요약하면 자바 8 LocalDateTime 을 제공하지 않으니 ' jackson-datatype-jsr310' 모듈을 추가하라는 말이다. 해결먼저 jackson 버전을 확인해야 한다. jackson 2.8.0 이전 버전에는 jackson-datatype-jsr310 모듈을 추가할수 없다.다행히 내 jackson 버전은 2.15.3 버전이다.그런데 이상한 점을 발견했다. 이미  jackson-datatype-jsr310 모듈이 추가되어 있는 것이다. ObjectMapper 란?직렬화와 역직렬화를 제공하는 Jackson 라이브러리 클래스다. 다만 복잡한 데이터 유형은 사용자가 직접 어떤 식으로 직렬화를 할지.. 2024. 5. 5.
자바 - Junit5 Jupiter 를 이용한 단위 테스트 시작 1. 프로젝트의 main 폴더 아래에 test 폴더를 만든다. test 폴더 내부에 테스트 클래스를 만들지 않으면 정상적으로 junit 클래스를 import 해올수 없어 테스트 코드를 실행할수 없다. 2. @Test 어노테이션을 이용한 테스트 코드 메서드 작성 @Test void test(){ } 해당 어노테이션이 붙은 메서드는 main 클래스처럼 실행이 가능해진다. main 클래스가 그렇듯, 반환값은 존재하지 않는다. **** 만약 @Test 어노테이션의 import 클래스가 org.junit.jupiter.api.Test 가 아니라면 라이브러리를 추가해야 한다. gradle의 경우 다음의 코드를 작성해줘야 한다. dependencies { testImplementation 'org.junit.jupi.. 2024. 4. 3.