[Effective-Java] Chapter12 #85. 자바 직렬화의 대안을 찾으라
·
Reference/Effective-Java
이번 챕터를 어떻게 정리하면 좋을까 싶었는데, 직렬화의 개념과 문제점, 그리고 그 대안책인 JSON, 프로토콜 버퍼, 마지막으로 레거시 코드에서 어떻게 대처할 것인가 총 3가지 파트로 분리했다. 📌 직렬화의 문제 🟡 직렬화(Serialization)란? 넓은 의미로는 어떤 데이터를 다른 데이터의 형태로 변환하는 것을 말한다. 이 책에서는 객체의 상태를 byte stream으로의 Serialization, 즉 변환하는 것을 말하고 있다. 반대로 byte stream을 객체의 상태로 변환하는 것을 역직렬화(Deserialization)라고 한다. 🟡 바이트 스트림(Byte Stream)이란? 데이터의 흐름. 데이터 통로. Stream : Client와 Server 같이 출발지와 목적지로 입출력하기 위한 통로..
[Effective-Java] Chapter11 #84. 프로그램의 동작을 스레드 스케줄러에 기대지 말라
·
Reference/Effective-Java
📌 이식성을 높이는 방법 💡 정확성이나 성능이 스레드 스케줄러에 따라 달라지는 프로그램이라면 다른 플랫폼에 이식하기 어렵다. 실행 가능한 Thread 평균 개수를 Processor 개수보다 지나치게 많아지지 않도록 하라. 그래야 Scheduler가 고민할 거리가 줄어든다. 실행 준비가 된 Thread들은 맡은 작업을 완료할 때까지 계속 실행되도록 만들어라 전체 Thread 수는 훨씬 많을 수 있고, 대기 중인 Thread는 실행 가능하지 않다. (실행 가능한 Thread 수를 구분하라는 의미) 각 Thread가 어떤 유용한 작업을 완료한 후에 다음 일거리가 생길 때까지 대기하도록 만들어라. 실행 가능한 Thread 수를 적게 유지하는 주요 기법 Thread는 당장 처리해야 할 작업이 없다면 실행돼서는 안..
[Effective-Java] Chapter11 #83. 지연 초기화는 신중히 사용하라
·
Reference/Effective-Java
⚔️ 지연 초기화는 양날의 검 소프트웨어 시스템은 Application 객체를 제작하고 의존성을 서로 연결하는 준비 과정과 준비 과정 이후에 이어지는 Runtime 로직을 분리해야 한다. 제작(Construction)과 사용(use)은 아주 다르다. 시작 단계는 모든 Application이 풀어야 할 관심사(Concern)다. 지연 초기화는 관심사 분리가 제대로 이루어지지 않는 좀스러운 방법 중 하나다. public Service getService() { if (service == null) service = new MyServiceImpl(); return service; } 장점 실제 필요한 시점에 객체를 생성하므로 불필요한 부하를 줄인다. Class와 Instance 초기화 때 발생하는 순환 문제..
[OS] Process Synchronization
·
Computer Science/Computer Structure & OS
강민철님의 "혼자 공부하는 컴퓨터 구조+운영체제"을 기반으로 학습한 게시물입니다. 📕 목차 1. Synchronization 2. Technique 1. Synchronization 📌 Concept Synchronization은 Multi-thread 환경에서 실행 순서와 자원의 일관성을 보장하기 위해 필요하다. 즉, Process(혹은 Thread) 사이의 작업 수행 시기를 맞추는 것을 말한다. 실행 순서 제어 : Process를 올바를 순서대로 실행한다. 상호 배제(mutual exclusion) : 동시에 접근하면 안 되는 자원에 하나의 Process만 접근하게 한다. 🟡 실행 순서 제어 Writer와 Reader Process가 하나의 text 파일을 공유하는 경우, Write가 먼저 값을 저장..