[Practical-Java] 23. Java Module
in Java on Java Practical
작성할 예정..
in Java on Java Practical
작성할 예정..
in Java on Java Practical
자바 7까지의 날짜와 시간을 처리하기 위해 공식적으로 제공하는 클래스는 Date와 Calendar였으며 날짜와 문자열을 포맷하거나 파싱하기 위해서는 SimpleDateFormat을 주로 사용하였다.
in Java on Java Practical
전통적으로 파일이나 디렉터리 변경은 반복문을 계속 수행함으로서 변경 여부를 확인하는 방법으로 감지했다. 이러한 방법은 for, while문으로 반복문을 돌거나 별도의 스레드나 백그라운드를 구현을 해야하기에 개발자에게 부담이 될 수 있다.
in Java on Java Practical
파일 NIO 에서는 디렉터리의 트리 구조를 지원하기 위해 FileVisitor 인터페이스
를 제공한다. 해당 인터페이스를 직접 구현해서 사용해도 되고 자바에서 기본 제공하는 SimpleFileVisitor 클래스를 이용해서 처리해도 된다.
in Java on Java Practical
Java NIO의 Files
클래스에서 제공하는 기본적인 디렉터리 관련 메서드나 기능에 대한 포스팅이다.
in Java on Java Practical
대용량 파일을 처리할 때는 FileChannel과 ByteBuffer를 사용하는게 좋다. FileChannel은 자바의 NIO (New Input/Output) 패키지 중 하나로, 파일에서 데이터를 읽고 쓰기 위한 고성능 I/O 기능을 제공한다. java.nio.channels.FileChannel
클래스를 사용하여 파일과의 입출력을 효율적으로 관리할 수 있다. 이 채널은 기본 파일 시스템의 파일과 직접 연결되며, 버퍼를 사용하여 데이터를 처리합니다. FileChannel은 비동기적으로도 사용할 수 있어 매우 유용하다.
in Java on Java Practical
Java NIO에서 Files 클래스의 newByteChannel
메소드는 SeekableByteChannel
인터페이스의 구현체를 반환한다. 이 채널은 파일과의 입출력을 위해 바이트 기반의 채널을 제공하며, 읽기, 쓰기, 파일 위치 변경, 파일 크기 조정 등의 작업을 수행할 수 있다. SeekableByteChannel
은 Java 7부터 도입된 java.nio.file
패키지의 일부로, 기존 FileChannel
보다 더 유연하고 간단한 API를 제공하여 다양한 파일 작업을 지원한다.
in Java on Java Practical
자바 7이후로 나온 File NIO에 대해서 Files 클래스의 newBuffered, newInputStream/newOutputStream 메서드
를 사용해 파일을 Read, Write 하는 설명하는 포스팅이다. Java File I/O의 기본적인 처리에 대한 자세한 내용은 없다. (참고 : [Java] FILE (1) 입출력 - Stream(스트림))
in Java on Java Practical
ByteBuffer
는 Java NIO의 패키지의 핵심 구성 요소 중 하나로 바이트 데이터를 읽고, 쓰고, 조작할 수 있는 버퍼를 제공하는 클래스
다. 버퍼는 기본적으로 일련의 데이터 요소를 포함하는 연속된 메모리 블록으로 구성되며, ByteBuffer는 바이트 타입의 데이터를 저장한다. 이 버퍼는 네트워크 통신이나 파일 I/O와 같은 곳에서 데이터를 임시 저장하는 데 사용된다.
in Java on Java Practical
Java NIO (New Input/Output)는 Java 1.4 버전에서 소개된 입력 및 출력의 새로운 방식으로, 기존의 표준 Java I/O를 보완하여 더 높은 성능과 기능을 제공합니다. Java NIO는 논블로킹(non-blocking) 입출력, 버퍼 관리, 채널(channel)을 이용한 데이터 전송 등의 특징
을 가지고 있다.
in Java on Java Practical
자바의 Spliterator
는 Java 8에서 도입된 인터페이스로, Iterator
와 Iterable
인터페이스의 확장된 것이다. Spliterator
는 “splitable iterator”의 줄임말로, 요소를 순차적으로 탐색하면서 필요에 따라 분할할 수 있는 기능을 제공한다. 이는 주로 병렬 프로그래밍을 위해 설계되었다. Collection
인터페이스를 구현하는 클래스는 spliterator()
메서드를 통해 Spliterator
객체를 제공할 수 있다.
in Java on Java Practical
스트림 병렬 처리는 자바(Java) 8 이상에서 도입된 Stream API의 중요한 기능 중 하나로 개발자는 데이터의 병렬 처리를 간단하게 적용할 수 있으며, 멀티 코어 프로세서의 성능을 최대한 활용하여 작업을 더 빠르게 처리할 수 있다.
in Java on Java Practical
Fork/Join 프레임워크에서 RecursiveTask와 RecursiveAction의 명세서를 살펴보면 두 클래스 모두 Future 인터페이스를 구현한 추상 클래스이다.
in Java on Java Practical
Thread, Runnable, Callable, ExecutorService 는 병렬 처리 및 비동기 실행 등 멀티 스레딩에 대해서 지원한다. 해당 포스팅에서는 Runnable과 Callable에 대한 내용이다.
Runnable과 Callable
은 Java에서 병렬 또는 비동기 작업을 정의할 때 사용되는 함수형 인터페이스입니다. 함수형 인터페이스이기에 단일 추상 메서드로 Runnable은 run() 메서드를, Callable은 call() 메서드를 정의한다. 람다 표현식과 함께 사용될 수 있어 Java 8 이상에서 함수형 프로그래밍을 지원한다.
in Java on Java Practical
자바 5에서 컨커런트API가 나오고 자바 7에서 Fork(포크)/Join(조인)
프레임워크가 나왔다. Fork/Join 는 java.uitl.concurrent 패키지의 ExecutorService 인터페이스를 구현한 클래스이다.
in Java on Java Practical
컨커런트 API의 java.util.concurrent 패키지에서 JAVA 5에서 추가 된 Executor(실행자)
에 대한 포스팅이다.
in Java on Java Practical
Java의 java.util.concurrent 패키지 컨커런트 API는 멀티스레드 프로그래밍을 보다 효과적으로 관리하고 구현할 수 있도록 다양한 동기화 클래스와 인터페이스를 제공한다. JDK 5에서 처음 소개되었으며, 그 이후로 여러 개선과 추가 기능이 포함되었습니다. 이 API는 성능을 최적화하고 스레드 관리를 단순화하여 보다 견고한 병렬 실행 애플리케이션을 개발할 수 있도록 설계되었다. 해당 포스팅은 컨커런트 API의 java.util.concurrent 패키지의 주요 구성 요소
들의 기능고 개념에 대한 내용이다.
in Java on Java Practical
**병행(Concurrency), 병렬(Parallelism), 분산(Distributed)**
은 모두 작업을 효율적으로 처리하기 위한 프로그래밍 및 컴퓨팅 모델이며 이 개념들은 서로 관련이 있지만, 목표와 실행 방식에서 차이가 있다.
in Java on Java Practical
자바8부터 스트림이 도입되었으며, 이후 버전에서 기능이 확장되고 개선되었다. java.util.stream 패키지에 존재하며 스트림 객체는 원천 데이터가 변하지 않고 가공 된 데이터가 새로 생기는 개념의 불변성
특징이 있으며 그로인해 사이드 이팩트가 없으면서 병렬처리가 가능해진다.
in Java on Java Practical
해당 포스팅은 추후 작성 예정으로 함수형 인터페이스와 메서드 참조에 대한 포스팅이다.
in Java on Java Practical
자바 역사 중에 제일 큰 변화가 온건 함수형 프로그램밍을 도입한 것이다. 아주 예전에 아는 개발자 동생이 함수형 프로그래밍언어 RUST를 추천할 때 처음 가볍게 접했던 기억이 있다. 당시 근무하는 회사의 개발환경에서 사용하지 않았기에 그러려니 했었다. 그만큼 함수형 프로그래밍이 유행이였던 적이 있는데 객체지향 프로그램의 자바 진영에서 자바8때 함수형 프로그램을 도입하며 패러다임 따라갔다고 생각된다.
in Java on Java Practical
추상 클래스(Abstract Class)
와 인터페이스(Interface)
의 차이점 및 용도로는 추상 클래스와 인터페이스는 모두 다형성(polymorphism) 을 지원하고, 코드 재사용성을 높이며, 설계 원칙을 명확히 하기 위해 사용되지만 목적, 사용 방법 및 기능에 따라 차이가 있다.
in Java on Java Practical
자바8에서 새로 생긴 default method는 자바에서 인터페이스 사용시 이미 정해진 인터페이스 규격에서 추가로 변경 될 때 마다 구현클래스에서 매번 메서드 기능을 반드시 구현해야 되는 문제에서 생긴 것이다.
in Java on Java Practical
개발을 하다 보면 "책 한권만 읽은 사람이 제일 무섭다는 말"
을 다시 한번 느낀다. Practical JAVA 책을 다시 읽고 포스팅을 하는 이유이다.