책/Effective Java 3E 4

이펙티브 자바 - 직렬화

"이펙티브 자바"의 마지막 챕터는 직렬화이다.  요즘은 대부분 JSON이나 Protobuf 같은 언어에 독립적인 데이터 교환 형식을 사용하는데, 왜 책에서는 여전히 직렬화를 중요한 주제로 다룰까? 자바에서 기본적으로 제공하는 직렬화(Serialization)와 역직렬화(Deserialization)는 JVM 위에서 동작하며, 데이터를 파일이나 네트워크로 전달할 수 있는 형식으로 변환하는 강력한 기능입니다. 하지만 이 메커니즘은 클래스 설계이 유연성 저하, 보안 취약점, 이식성 부족등의 큰 한계가 존재한다. 그렇다면 책에서는 왜 직렬화 파트를 크게 다룰까?여기서는 크게 직렬화를 하게 되면 유의할 점 등 직렬화시 매커니즘과 유의 사항을 알아보자는 취지로 책을 읽어보자! 직렬화의 목적현재 JVM 메모리 상태를..

이펙티브 자바 - 제네릭

아이템26 . 로 타입을 사용하지 말라!로 타입이란?  제네릭 타입에서 타입 매개변수가 정의되지 않을 때를 말한다. 예를 들어 List 의 로 타입은 List 이다.로(raw) 타입을 사용하지 말아야하는 이유는 무엇일까? 즉 매개변수화 타입을 사용하라는 말이다.매개변수화 타입을 사용하면 런타임이 아닌 컴파일 타입에 문제를 찾을 수 있고(안정성 -> 로타임 컬렉션에는 아무원소나 넣은 수 있어 타입 불변식 훼손이 쉽다.)제네릭을 활용하면 이 정보가 주석이 아닌 타입 선언 자체에 녹아든다. (표현력 : ex ) List -> Integer 라는 타입을 넣는다는 사실을 알수 있음)로 타입을 사용하면 안정성과 표현력을 잃게된다.아이템27. 비검사 경고를 제거하라 "비검사(unchecked) 경고 란? "컴파일러가..

[2장 객체 생성과 파괴] 아이템2. 생성자에 매개변수가 많다면 빌더를 고려하라

생성자에 매개변수가 많다면 빌더를 고려하라정적 팩터리와 생성자에 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 제약이 있다. 대안1. 점층적 생성자 패턴 식품포장의 영양정보를 표현하는 클래스를 예를 들어보자. public class NutritionFacts{ // 필드(기본값이 있다면) 기본값으로 초기화된다. private final int servingSize; // (mL, 1회 제공량) - 필수 private final int servings; // (회, 총 n회 제공량) - 필수 private final int calories; // (1회 제공량당) - 선택 private final int fat; // (g/1회 제공량) - 선택 private fina..

[2장 객체 생성과 파괴] 아이템1. 생성자 대신 정적 펙터리 메서드를 고려하라.

정적 팩터리 메소드 : 생성자와 별도로 그 클래스의 인스턴스를 반환하는 단순한 정적메서드. public static void main(String[] args) { Boolean bool1 = new Boolean(true); // new 생성자로 인스턴스 생성 // public Boolean(boolean value) { // this.value = value; // } Boolean bool2 = Boolean.valueOf(true); // 정적 팩터리 메소드를 활용한 인스턴스 생성 // public static Boolean valueOf(boolean b) { // ret..