[Effective-Java] Chapter11 #79. 과도한 동기화는 피하라
·
Reference/Effective-Java
👽 외계인 메서드(alien method) DeadLock과 Safety Failure를 피하려면 동기화 메서드 혹은 블럭 안에서는 제어를 클라이언트에게 넘기지 마라 동기화된 영역 안에서는 재정의할 수 있는 메서드를 호출하지 마라 클라이언트가 넘겨준 함수 객체(Item 24)를 호출해서도 안 된다. 동기화된 영역을 포함한 클래스에서 외계인 메서드는 Exception, 혹은 Dead Lock에 빠트리거나, Safety Failure를 유발할 수 있다. 🚫 As-is @FunctionalInterface public interface SetObserver{ // ObservableSet에 원소가 더해지면 호출된다. void added(ObservableSet set, E element); } BiConsum..
[Effective-Java] Chapter11 #78. 공유 중인 가변 데이터는 동기화해 사용하라
·
Reference/Effective-Java
💡 여러 Thread가 가변 데이터를 공유한다면 그 데이터를 읽고 쓰는 동작은 반드시 동기화하라 📌 synchronized 키워드 Thread Synchronization : Multi-thread 환경에서 하나의 공유자원에 여러 thread가 동시에 접근하는 것을 막는 것 Critical Section : 공유 데이터가 사용되어 Synchronization이 필요한 부분 Java에서는 ciritical section에 synchronized 키워드를 활용하면 된다. 더보기 ✒️ Synchronized 블럭 synchronized(락 객체) { //임계 영역 (Thread 동시접근이 불가능) } 코드의 가독성 측면에선 좋으나, 성능 면에선 별로다. 지정된 객체는 critical section의 공유를 지..
Clean Code 보류
·
Reference/CleanCode
이번 챕터 11을 읽으면서 정리하다가 회의감이 들었다. 어려운 거야 뭐 시스템이라는 게 워낙 광범위한 내용들을 알아야 하니 그럴 수 있는데, 이 책의 전반에 걸쳐 나오는 '추상화 단계'에 대해서 나는 정확히 이해하고 있는 게 맞나? 라는 의문을 떨칠 수가 없었다. 물론 수학 공식 마냥 답이 딱 떨어지는 정의는 못하더라도, 적어도 예시 한 두가지 정도를 들 수 있는지. 그게 무엇이고, 왜 중요한지에 대해서 내 나름대로 정의한 답을 바로 내뱉을 수 있어야 한다고 생각을 하는데 순간적으로 내가 내 스스로에게 던진 질문에 나는 답을 하지 못했고, 그게 너무 화가 난다. 나름 잘 이해하고 내 방식대로 정리를 해나가고 있다고 생각했는데, 어느 순간부터 '이해'보다, 내가 가장 혐오스러워 하는 공부법인 그저 깔끔하고..
[Effective-Java] Chapter10 #77. 예외를 무시하지 말라
·
Reference/Effective-Java
📌 예외를 무시하는 방법 try { ... } catch (SomeException e) { // 아무것도 안 하면 예외가 무시된다. } catch 블록을 비워두면 예외가 존재할 이유가 없어진다. 화재 경보를 무시하는 수준이 아니라 그냥 꺼버린 거나 다름없다. 빈 catch 문을 보거든 당신의 머릿속의 사이렌🚨이 돌아가야 한다. ('어떤 놈이 한 짓이지..?') API 설계자가 메서드 선언에 예외를 명시한 까닭은, 적절한 조치를 취해달라고 말하는 것이다. 📌 부적절한 예외 처리 1️⃣ 예외 블랙홀 (1) try { // 예외가 발생할 수 있는 코드 } catch(~Exception e) { } 2️⃣ 예외 블랙홀 (2) try { // 예외가 발생할 수 있는 코드 } catch(~Exception e) ..