본문 바로가기

Java/이것이자바다

(9)
Ch 18.10 객체 스트림 객체를 입출력할 수 있는 보조 스트림 ObjectOutputStream: 바이트 출력 스트림과 연결되어 객체를 직렬화한다. 직렬화(serialization): 객체를 출력하기 위해 필드값을 일렬로 늘어선 바이트로 변경하는 것 ObjectInputStream: 바이트 입력 스트림과 연결되어 객체를 복원하는 역직렬화를 한다. 역직렬화(deserialization): 직렬화된 바이트를 객체의 필드값으로 복원하는 것 ObjectInputStream ObjectInputStream의 readObject() 메소드: 읽은 바이트를 역질렬화해서 객체를 생성한다. readObject() 메소드의 리턴 타입은 Object이기 때문에 구체적인 타입으로 아래와 같이 강제 타입 변환해야 한다. 객체타입 변수 = (객체타입) ..
Ch 18.1 입출력 스트림 ~ 18.3 바이트 입력 스트림 이것이 자바다를 읽고 정리한 글 입니다. 18.1 입출력 스트림 자바에서는 입력 스트림과 출력 스트림을 통해서 데이터를 입출력한다. 스트림(Stream)은 단방향으로 데이터가 흐르는 것을 말한다. 입력 스트림: 프로그램을 기준으로 데이터가 들어오는 것 출력 스트림: 프로그램을 기준으로 데이터가 나가는 것 프로그램이 다른 프로그램과 데이터를 교환하려면 양쪽 모두 입력 스트림과 출력 스트림이 필요하다. 어떤 데이터를 입출력하는지에 따른 스트림의 종류 바이트 스트림: 그림, 멀티미디어, 문자 등 모든 종류의 데이터를 입출력할 때 사용 문자 스트림: 문자만 입출력할 때 사용 자바에서는 데이터 입출력과 관련된 라이브러리를 java.io 패키지에서 제공하는데, java.io 패키지는 바이트 스트림과 문자 스트림을 ..
2.2 정수 타입의 2진수 표현 변수는 선언될 때 저장할 수 있는 값의 종류와 저장되는 값의 허용 범위가 달라진다. 자바에서는 정수, 실수, 논리값을 저장할 수 있는 기본타입을 제공한다. 정수 타입은 총 5개로, 메모리 할당 크기와 저장되는 값의 범위를 가지고 있다.(byte, short, char, int, long) 정수 타입의 메모리 사용 크기순으로 나열하면 아래와 같다. 종류 byte short int long 메모리 사용 크기(단위 bit) 8 bit(1byte) 16 bit(2byte) 32 bit(4byte) 64 bit(8byte) 메모리의 크기를 n이라고 할 때, 아래의 그림과 같이 정수 타입은 2진수로 저장된다. 최상위 bit가 1인 음수의 경우, 나머지 7개의 bit를 모두 1의 보수(1은 0, 0은 1)로 바꾸고 ..
Ch17.11 요소 커스텀 집계 ~ 17.13 요소 병렬 처리 이것이 자바다를 읽고 정리한 글 입니다. 17.11 요소 커스텀 집계 스트림에서는 다양한 집계 결과물을 만들 수 있도록 reduce() 메소드를 제공한다. 매개값인 BinaryOperator는 함수형 인터페이스이다. BinaryOperator는 2개의 매개값을 받아 하나의 값을 리턴하는 apply() 메소드를 가지고 있기 때문에 아래와 같이 람다식을 작성할 수 있다. BinaryOperator에 대한 자세한 설명은 BinaryOperator 글에 정리해두었다. (a, b) -> {...return 값;} 또는 (a, b) -> 값 // return문만 있을 경우 중괄호와 return 키워드 생략 가능 reduce()는 스트림에 요소가 없을 경우 예외가 발생하지만, identity 매개값이 주어지면 이 값..
Ch17.8 요소를 하나씩 처리(루핑) ~ 17.10 요소 기본 집계 이것이 자바다를 읽고 정리한 글 입니다. 루핑(looping)이란 스트림에서 요소를 하나씩 반복해서 가져와 처리하는 것을 말한다. 루핑 메소드에는 peek()과 forEach()가 있다. 리턴 타입 메소드(매개변수) 설명 Stream InsStream DoubleStream peek(Consumer
Ch17.5 요소 걸러내기(필터링) ~ 17.7 요소 정렬 이것이 자바다를 읽고 정리한 글 입니다. 17.5 요소 걸러내기(필터링) 필터링: 요소를 걸러내는 중간 처리 기능 1) distinct() - 요소의 중복을 제거한다. - 객체 스트림(Stream)일 경우, equals() 메소드의 리턴값이 true이면 동일한 요소로 판단한다. - IntStream, LongStream, DoubleStram은 같은 값일 경우 중복을 제거한다. 2) filter() - 매개값으로 주어진 Predicate가 true를 리턴하는 요소만 필터링한다. Predicate 모든 Precidate는 매개값을 조사한 후, boolean을 리턴하는 test() 메소드를 가지고 있다. Predicate를 람다식으로 표현하기 T -> {...return true} 람다식에서는 return만..
Ch17.1 스트림이란? ~ 17.4 리소스로부터 스트림 얻기 이것이 자바다를 읽고 정리한 글 입니다. 17.1 스트림이란? Java 8부터는 컬렉션 및 배열의 요소를 반복 처리하기 위해 스트림(stream)을 사용할 수 있다. 스트림은 요소들이 하나씩 흘러가면서 처리된다는 의미를 가지고 있다. Stream과 Iterator의 차이점 1) 내부 반복자이므로 처리 속도가 빠르고 병렬 처리에 효율적이다. 2) 람다식으로 다양한 요소 처리를 정의할 수 있다. 3) 중간 처리와 최종 처리를 수행하도록 파이프 라인을 형성할 수 있다. 17.2 내부 반복자 내부 반복자 VS 외부 반복자 내부 반복자의 장점 내부 반복자는 멀티 코어 CPU를 최대한 활용하기 위해 요소들을 분배시켜 병렬 작업을 할 수 있다. 하나씩 처리하는 순차적 외부 반복자보다는 효율적으로 반복시킬 수 있는 장..
BinaryOperator<T> BinaryOperator BinaryOperator는 Java8부터 도입되었으며, 같은 타입의 매개변수 2개를 받아 비교하여 결과값을 반환하는 Functional Interface이다. BiFunction를 확장하고 있다. BiFunction는 입력과 출력의 타입이 다를 때 사용하는 BiFunction과는 달리 입력 매개변수 2개와 결과값 타입을 모두 하나의 타입으로 동일하게 사용할 것으로 고려해서 만들어진 함수형 인터페이스이다. BinaryOperator와 BiFunction 모두 java.util.function에 위치한다. BiFunction BiFunction도 Java8부터 도입되었으며, 매개변수 2개를 받아 1개의결과값을 리턴하는 Functional Interface이다. BiFunction..
Ch 16. 람다식 이것이 자바다를 읽고 정리한 글 입니다. 16.1 람다식이란? 람다식: (매개변수, ...) -> {처리 내용} 자바는 람다식을 익명 구현 객체로 변환한다. cf) 익명 구현 객체: 이름이 없는 인터페이스 구현 객체 인터페이스의 익명 구현 객체를 람다식으로 표현하려면 인터페이스가 단 하나의 추상 메소드여야 한다. -> 2개 이상의 추상 메소드를 가진 인터페이스는 람다식으로 표현할 수 없다. 아래와 같이 2개 이상의 추상 메소드를 가진 RemoteControl 인터페이스는 람다식으로 표현할 수 없다. public interface RemoteControl { void turnOn(); void turnOff(); } 인터페이스가 단 하나의 추상 메소드를 가질 때, 함수형 인터페이스라고 한다. -> Q. 왜..