본문 바로가기

스터디/이펙티브 자바12

[이펙티브 자바] 2022.08.03 ~ 2022.10.19 다섯번째 스터디 회고록 [이펙티브 자바] 2022.08.03 ~ 2022.10.19 다섯번째 스터디 회고록 사실은 여섯번째 스터디지만, 헤드퍼스트 디자인 패턴 스터디 회고록을 까먹었더라. 그치만 끝난지 좀 되어 귀찮아서 패스하고 이펙티브 자바 스터디 회고록을 작성하도록 하자. 이펙티브 자바 스터디 중 가장 많이 했던 소리 사실 나는 이펙티브 자바를 읽기 전에 코틀린 인 액션을 읽지 않은채로 이펙티브 코틀린을 먼저 읽었었는데, 이펙티브 코틀린 책이 좀 어렵다고 느꼈었다. 그래서 이전에 쿠버네티스 스터디 끝날 때 쯤에 다음 스터디는 뭘로 할까? 를 정할 때 이펙티브 자바 이야기가 많이 나와서 내가 자바 인 액션 안읽었으면 이펙티브 자바 좀 어려울거라고 했었는데 다른 분들이 조금 만만하게 보았다. 그리고 마침내 이펙티브 자바가 선정.. 2022. 10. 31.
[이펙티브 자바] 11장 직렬화 (serializable) [이펙티브 자바] 11장 직렬화 (serializable) 이번 장은 객체 직렬화를 다룬다. 객체 직렬화란 자바가 객체를 바이트 스트림으로 인코딩하고(직렬화) 그 바이트 스트림으로부터 다시 객체를 재구성하는(역직렬화) 메커니즘이다. 직렬화된 객체는 다른 VM에 전송하거나, 디스크에 저장한 후 나중에 역직렬화 할 수 있다. 아이템 85. 자바 직렬화의 대안을 찾으라 자바 직렬화는 프로그래머가 어렵지않게 분산 객체를 만들수 있다는 장점이 있지만 보이지 않는 생성자, API와 구현 사이의 모호해진 경계, 잠재적인 정확성 문제, 성능, 보안, 유지보수성의 대가가 크다. 직렬화의 근본적인 문제는 공격 범위가 너무 넓고 지속적으로 더 넓어져 방어하기 어렵다는 점이다. readObject 메서드는 클래스패스 안의 거.. 2022. 10. 19.
[이펙티브 자바] 10. 동시성 [이펙티브 자바] 10. 동시성 아이템 78. 공유 중인 가변 데이터는 동기화해 사용하라 synchronized 키워드는 해당 메서드나 블록을 한번에 한 스레드씩 수행하도록 보장한다. 즉, 객체를 하나의 일관된 상태에서 다른 일관된 상태로 변화시킨다. long과 double 외의 변수를 읽고 쓰는 동작은 원자적(atomic)이다. 이 말을 듣고 "성능을 높이려면 원자적 데이터를 읽고 쓸 때는 동기화하지 말아야겠다"고 생각하기 쉬운데, 아주 위험한 발상이다. 동기화는 배타적 실행뿐 아니라 스레드 사이의 안정적인 통신에 꼭 필요하다. 공유 중인 가변 데이터를 비록 원자적으로 읽고 쓸 수 있을지라도 동기화에 실패하면 처참한 결과로 이어질 수 있다. 다음 스레드를 중지하는 코드를 살펴보자 잘못된 코드 - 이 프.. 2022. 10. 12.
[이펙티브 자바] 09. 예외 [이펙티브 자바] 09. 예외 아이템 69. 예외는 진짜 예외 상황에만 사용하라 예외를 완전히 잘못 사용한 예 - 따라하지 말 것! try { int i = 0; while(true) { range[i++].climb(); } } catch (ArrayIndexOutOfBoundsException e) { } 직관적이지 않다. 예외를 써서 루프를 종료하는 이상한 방식으로 구현 다음과 같이 표준 관용구대로 작성했다면 누구나 쉽게 이해했을 것이다. for(Mountain m : range) m.climb(); 예외를 써서 루프를 종료한 이유는 뭘까? 잘못된 추론을 근거로 성능을 높여보려 한 것 JVM은 배열에 접근할 때마다 경계를 넘지 않는지 검사 일반적인 반복문도 배열 경계에 도달하면 종료(경계를 넘지 않.. 2022. 10. 5.
[이펙티브 자바] 08. 일반적인 프로그래밍 원칙 [이펙티브 자바] 08. 일반적인 프로그래밍 원칙 아이템 57. 지역변수의 범위를 최소화하라 지역변수의 유효 범위를 최소로 줄이면 코드 가독성과 유지보수성이 높아지고 오류 가능성은 낮아진다. 지역변수의 범위를 줄이는 가장 좋은 방법은 '가장 처음 쓰일 때 선언하기'다. 지역 변수를 미리 선언하게 되면 사용하고자 하는 블록이 끝난 뒤에도 살아있을 수 있어 끔찍한 결과가 생길 수 있다. 거의 모든 지역변수는 선언과 동시에 초기화해야 한다. try-catch문 예외 반복문에서의 변수 범위 초기화 반복문에서는 독특한 방식으로 변수 범위를 최소화한다. 반복문에서는 반복 변수의 범위가 반복문의 몸체, 그리고 for 키워드와 몸체 사이의 괄호 안으로 제한된다. 따라서 반복 변수의 값을 반복문이 종료된 뒤에도 써야하는.. 2022. 9. 27.
[이펙티브 자바] 07. 메서드 [이펙티브 자바] 07. 메서드 아이템 49. 매개변수가 유효한지 검사하라 메서드와 생성자 대부분은 입력 매개변수의 값이 특정 조건을 만족하기를 바란다. 이런 제약은 반드시 문서화해야 하며 메서드 몸체가 시작되기 전에 검사해야 한다. "오류는 가능한 한 빨리 (발생한 곳에서) 잡아야 한다"는 일반 원칙의 한 사례이기도 하다. 오류를 발생한 즉시 잡지 못하면 해당 오류를 감지하기 어려워지고, 감지하더라도 오류의 발생 지점을 찾기 어려워진다. 메서드 몸체가 실행되기 전에 매개변수를 확인한다면 잘못된 값이 넘어왔을때 즉각적이고 깔끔한 방식으로 예외를 던질 수 있다. 매개변수 검사를 제대로 하지 못했을 때 생기는 문제 메서드가 수행되는 중간에 모호한 예외를 던지며 실패할 수 있다. 메서드는 잘 수행되었지만 잘못.. 2022. 9. 21.
728x90
반응형