[Practical-Java] 18. File NIO (5)-FileChannel

대용량 파일을 처리할 때는 FileChannel과 ByteBuffer를 사용하는게 좋다. FileChannel은 자바의 NIO (New Input/Output) 패키지 중 하나로, 파일에서 데이터를 읽고 쓰기 위한 고성능 I/O 기능을 제공한다. java.nio.channels.FileChannel 클래스를 사용하여 파일과의 입출력을 효율적으로 관리할 수 있다. 이 채널은 기본 파일 시스템의 파일과 직접 연결되며, 버퍼를 사용하여 데이터를 처리합니다. FileChannel은 비동기적으로도 사용할 수 있어 매우 유용하다.

Continue reading

[Practical-Java] 17. File NIO (4)-newByteChannel

Java NIO에서 Files 클래스의 newByteChannel 메소드는 SeekableByteChannel 인터페이스의 구현체를 반환한다. 이 채널은 파일과의 입출력을 위해 바이트 기반의 채널을 제공하며, 읽기, 쓰기, 파일 위치 변경, 파일 크기 조정 등의 작업을 수행할 수 있다. SeekableByteChannel은 Java 7부터 도입된 java.nio.file 패키지의 일부로, 기존 FileChannel보다 더 유연하고 간단한 API를 제공하여 다양한 파일 작업을 지원한다.

Continue reading

[Practical-Java] 15. File NIO (2)-ByteBuffer

ByteBuffer는 Java NIO의 패키지의 핵심 구성 요소 중 하나로 바이트 데이터를 읽고, 쓰고, 조작할 수 있는 버퍼를 제공하는 클래스다. 버퍼는 기본적으로 일련의 데이터 요소를 포함하는 연속된 메모리 블록으로 구성되며, ByteBuffer는 바이트 타입의 데이터를 저장한다. 이 버퍼는 네트워크 통신이나 파일 I/O와 같은 곳에서 데이터를 임시 저장하는 데 사용된다.

Continue reading

[Practical-Java] 14. File NIO (1)

Java NIO (New Input/Output)는 Java 1.4 버전에서 소개된 입력 및 출력의 새로운 방식으로, 기존의 표준 Java I/O를 보완하여 더 높은 성능과 기능을 제공합니다. Java NIO는 논블로킹(non-blocking) 입출력, 버퍼 관리, 채널(channel)을 이용한 데이터 전송 등의 특징을 가지고 있다.

Continue reading

[Practical-Java] 13. Parallel Programming-JAVA 8 : Spliterator

자바의 Spliterator는 Java 8에서 도입된 인터페이스로, IteratorIterable 인터페이스의 확장된 것이다. Spliterator는 “splitable iterator”의 줄임말로, 요소를 순차적으로 탐색하면서 필요에 따라 분할할 수 있는 기능을 제공한다. 이는 주로 병렬 프로그래밍을 위해 설계되었다. Collection 인터페이스를 구현하는 클래스는 spliterator() 메서드를 통해 Spliterator 객체를 제공할 수 있다.

Continue reading

[Practical-Java] 10. Parallel Programming-Interface : Runnable, Callable

Thread, Runnable, Callable, ExecutorService 는 병렬 처리 및 비동기 실행 등 멀티 스레딩에 대해서 지원한다. 해당 포스팅에서는 Runnable과 Callable에 대한 내용이다.
Runnable과 Callable은 Java에서 병렬 또는 비동기 작업을 정의할 때 사용되는 함수형 인터페이스입니다. 함수형 인터페이스이기에 단일 추상 메서드로 Runnable은 run() 메서드를, Callable은 call() 메서드를 정의한다. 람다 표현식과 함께 사용될 수 있어 Java 8 이상에서 함수형 프로그래밍을 지원한다.

Continue reading

[Practical-Java] 7. Parallel Programming : Concurrent API

Java의 java.util.concurrent 패키지 컨커런트 API는 멀티스레드 프로그래밍을 보다 효과적으로 관리하고 구현할 수 있도록 다양한 동기화 클래스와 인터페이스를 제공한다. JDK 5에서 처음 소개되었으며, 그 이후로 여러 개선과 추가 기능이 포함되었습니다. 이 API는 성능을 최적화하고 스레드 관리를 단순화하여 보다 견고한 병렬 실행 애플리케이션을 개발할 수 있도록 설계되었다. 해당 포스팅은 컨커런트 API의 java.util.concurrent 패키지의 주요 구성 요소들의 기능고 개념에 대한 내용이다.

Continue reading

[Practical-Java] 6. Stream

자바8부터 스트림이 도입되었으며, 이후 버전에서 기능이 확장되고 개선되었다. java.util.stream 패키지에 존재하며 스트림 객체는 원천 데이터가 변하지 않고 가공 된 데이터가 새로 생기는 개념의 불변성 특징이 있으며 그로인해 사이드 이팩트가 없으면서 병렬처리가 가능해진다.

Continue reading

[Practical-Java] 4. Functional Programming

자바 역사 중에 제일 큰 변화가 온건 함수형 프로그램밍을 도입한 것이다. 아주 예전에 아는 개발자 동생이 함수형 프로그래밍언어 RUST를 추천할 때 처음 가볍게 접했던 기억이 있다. 당시 근무하는 회사의 개발환경에서 사용하지 않았기에 그러려니 했었다. 그만큼 함수형 프로그래밍이 유행이였던 적이 있는데 객체지향 프로그램의 자바 진영에서 자바8때 함수형 프로그램을 도입하며 패러다임 따라갔다고 생각된다.

Continue reading

[Practical-Java] 3. Abstract Class와 Interface

추상 클래스(Abstract Class)인터페이스(Interface)의 차이점 및 용도로는 추상 클래스와 인터페이스는 모두 다형성(polymorphism) 을 지원하고, 코드 재사용성을 높이며, 설계 원칙을 명확히 하기 위해 사용되지만 목적, 사용 방법 및 기능에 따라 차이가 있다.

Continue reading

Pagination