본문 바로가기

Java95

Java NIO - Buffers Java NIO에서 버퍼(Buffer)는 채널(Channel)과 함께 사용된다. 데이터는 채널에서 읽혀 버퍼로 쓰여지거나 버퍼에 있는 데이터가 채널로 쓰여진다. Java NIO 버퍼(Buffer)는 본질적으로 메모리 블럭이다. 메모리의 한 공간에 할당되어 있는 공간을 NIO Buffer객체로 래핑(Wrapping)한 것으로 메모리로의 접근, 사용을 추상화 해 사용하기 편한 메소드를 제공해준다. 사용자는 버퍼에서 데이터를 얻고, 버퍼로 데이터를 저장한 다음 채널에 쓰거나 읽는다. 버퍼를 이용해 채널에서 데이터를 읽는 패턴은 다음과 같다. 버퍼가 채워진다(read from channel) buffer.flip() 메소드를 호출한다 버퍼에서 데이터를 꺼낸다 buffer.clear() 메소드 혹은 buffer... 2020. 12. 30.
Java NIO - Channel, Buffer 그리고 Selector 자바는 Java 4 부터 새로운 입출력 API를 지원하기 시작했다. NIO라는 이름으로 불리는 API는 New IO 혹은 Non-blocking IO라는 뜻을 가지고 있으며 java.nio 패키지로 포함되었다. 이후 Java 7으로 버전을 올리면서 Java IO와 Java NIO 사이의 일관성 없는 클래스 설계를 바로잡고, 비동기 채널 등의 네트워크 지원을 대폭 강화한 NIO 2 API가 추가되었다. Java NIO는 3가지 컴포넌트로 구성되어 있다. Channel Buffers Selectors 실제로는 이것보다 더 많은 컴포넌트들이 있지만 가장 핵심적으로는 저 3가지를 꼽을 수 있다. 채널(Channel) Java NIO의 모든 IO는 '채널(Channel)'에서부터 시작한다. 채널은 스트림과 유사하.. 2020. 12. 29.
[Java 예제] Array를 ArrayList로 변환 배열(Array)에 객체를 ArrayList로 변환해서 사용해야하는 경우가 있다. ArrayList.asList() import java.util.Arrays; import java.util.List; public class Tester { public static void main(String[] args) { String[] array = {"a", "b", "c", "d", "e"}; List list = Arrays.asList(array); System.out.println(list); } } ArrayList.asList()의 경우 배열을 List로 접근할 수 있도록 만들어준다. 대신 add()는 안된다. add()를 호출하면 UnsupportedOperationException이 발생한다. .. 2020. 12. 16.
[Java] 접근 제어자 - public, protected, package-private, private 자바 언어에는 접근 제어자(Access Modifier)라는 것이 있다. 프로그래머는 접근 제어자를 통해 변수와 메소드, 클래스에 대한 접근을 제한할 수 있다. 사전에 멤버 변수나 메소드, 클래스들의 성격을 규정하고 잘못된 접근을 차단함으로써 의도하지 않은 실수를 줄이기 위한 자바의 고유 장치다. 특히 클래스의 상속이 고려 대상에 포함될 경우 접근 제어자의 동작이 복잡해지는 경우가 있다. 따라서 접근 제어자에 따른 정확한 동작을 이해하고 코드를 작성해야 실수를 줄일 수 있다. 목차 자바 접근제어자 자바에는 4가지 접근 제어자가 있다. private default (package-private) protected public private < default < protected < public 순으로 많은.. 2020. 10. 1.
[Java] @VisibleForTesting 애너테이션 자바 코드에서 @VisibleForTesting 애너테이션은 해당 메소드 혹은 멤버 변수의 가시성(Visibility)이 테스트를 위해 완화된 것임을 명시적으로 나타내는 의미다. 자바의 경우 프로그래밍을 할 때, 비즈니스 로직을 담고 있는 클래스와 테스트 클래스를 분리한다. 그리고 이 두 클래스를 같은 패키지에 두는 것이 일반적이다. 이렇게 되면, 비즈니스 로직을 담고 있는 클래스의 private 멤버나 메서드를 테스트 클래스에서 접근할 수 없다. 비즈니스 로직을 담고 있는 클래스는 캡슐화(Encapsulation)를 위해서 불필요하게 메서드나 멤버 변수를 외부로 노출시키지 않는 것이 좋다. 그렇다고 private 메서드의 테스트를 안할 수는 없다. 이 때 사용하는 것이 @VisibleForTesting.. 2020. 9. 30.