직렬화 & 병렬 처리

Nadia·2024년 2월 15일

Java

목록 보기
4/4

직렬화 & 병렬 처리



직렬화 (Serialize)

: 객체를 다른 컴퓨터의 자바로 전송하기 위해
객체(Object or Data) → 바이트 스트림(stream of bytes) 형태로 변환하는 기술

- 역직렬화 (Deserializable)

: 바이트(byte)로 변환된 데이터 → 원래대로(Object or Data) 변환하는 기술

* 바이트 스트림(stream of bytes)

: 1 byte를 입출력 할 수 있는 스트림

  • 스트림(stream): 클라이언트나 서버 간에 출발지 목적지로 입출력하기 위한 데이터가 흐르는 통로
  • 자바는 스트림의 기본 단위를 바이트로 두고 있기 때문에 네트워크, 데이터베이스로 전송하기 위해 최소 단위인 바이트 스트림으로 변환하여 처리한다.

- 기능

1. 저장 / 전달이 가능한 데이터 생성

  • 기기마다 서로 다른 가상 메모리 주소 공간을 갖기 때문에 참조형 타입의 데이터들은 전달할 수 없다.
    따라서 주소값이 아닌 Byte 형태로(기본형 타입) 직렬화한 데이터로 전달해야 파싱이 가능한 데이터가 된다.

2. 객체 데이터를 영구 저장(영속화, Persistence) 가능

  • JVM 메모리에만 존재하는 객체 데이터가 시스템이 종료되더라도 사라지지 않는 데이터가 된다.



- Java의 직렬화

Serializable 인터페이스

  • java.io.Serializable 인터페이스를 implements 해야 한다.
  • Serializable 인터페이스는 아무런 내용도 없는 마커 인터페이스로, 직렬화를 고려하여 작성한 클래스인지를 판단하는 기준으로 사용된다.
public interface Serializable {

}

---------------------------------

import java.io.Serializable;

class Student implements Serializable {
    int id; 
    int age;

    public Student(int id, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

직렬화 제외: transient

: 직렬화 되면 안되는 값엔 데이터 타입 앞에 transient를 붙인다.

  • transient가 붙은 인스턴스 변수의 값은 해당 타입의 기본값으로 직렬화 된다.
    원시형: 각 타입의 디폴트 값
    참조형: null
javaimport java.io.Serializable;

class Student implements Serializable {
    int id; 
    transient int age; // *직렬화 제외*

    public Student(int id, int age) {
        this.name = name;
        this.age = age;
    }



병렬 처리 (Parall Operation)

: 하나의 작업을 분할해 각각의 코어가 병렬적으로 처리하는 것


- Java의 병렬 스트림

List<Integer> list = Arrays.asList(1, 2, 3, 4);
list.parallelStream().reduce(0, Integer::sum);

- 주의

  • 병렬 스트림의 실행 순서에 개입할 수 없다.
    프로그램을 실행할 때마다 변한다.




참고

직렬화
https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EC%A7%81%EB%A0%AC%ED%99%94Serializable-%EC%99%84%EB%B2%BD-%EB%A7%88%EC%8A%A4%ED%84%B0%ED%95%98%EA%B8%B0
https://be-a-weapon.tistory.com/139
https://www.scientecheasy.com/2021/07/serialization-in-java.html/
https://www.scaler.com/topics/transient-keyword-in-java/

병렬처리
https://girawhale.tistory.com/131
https://www.baeldung.com/java-when-to-use-parallel-stream

profile
비전공자 개발 일기

0개의 댓글