본문 바로가기

이펙티브자바11

[이펙티브 자바] 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.
[이펙티브 자바] 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.
[이펙티브 자바] 06. 람다와 스트림 [이펙티브 자바] 06. 람다와 스트림 아이템 42. 익명 클래스보다는 람다를 사용하라 예전에는 자바에서 함수 타입을 표현할 때 추상 메서드를 하나만 담은 인터페이스(드물게는 추상 클래스)를 사용했다. 이런 인터페이스를 함수 객체(function object)라고 하여, 특정 함수나 동작을 나타내는 데 썼다. 익명 클래스의 인스턴스를 함수 객체로 사용 - 낡은 기법이다! Collections.sort(words, new Comparator() { @Override public int compare(String s1, String s2) { return Integer.compare(s1.length(), s2.length()); } }); 전략 패턴처럼, 함수 객체를 사용하는 과거 객체 지향 디자인 패턴에.. 2022. 9. 14.
728x90
반응형