이제 한 3주 정도만 더 보면 끝이다!(아마도)
이번주는 클린코드 12장과 13장이다
창발성
이 뭐지
하위 계층에는 존재하지 않던 특성이 상위 계층에서 자발적으로 나타나는 현상
이거라고 한다
스터디봇 만드는거 테스트는 귀찮아서 생략했는데 만들어볼까 고민된다...
단순한 설계 규칙 2: 중복을 없애라
단순한 설계 규칙 3: 표현하라
단순한 설계 규칙 4: 클래스와 메서드 수를 최소로 줄여라
이 규칙이 제일 어려운 것 같다. 1,2,3번 규칙을 만족하면서 메서드와 클래스 줄이기... 필요한 클래스와 메서드만 만들라는 뜻인것 같다
동시성과 깔끔한 코드는 양립하기 어렵다. 이 장에서는 여러 스레드를 동시에 돌리는 이유를 논한다.
동시성
이 필요한 이유?
동시성
은 결합을 없애는 전략이다무엇
과 언제
를 분리하면 애플리케이션 구조와 효율이 극적으로 나아진다동시성
과 관련한 일반적인 미신과 오해
동시성
은 항상 성능을 높여준다동시성
은 때로 성능을 높여준다. 대기시간이 아주 길어 여러 스레드가 프로세서를 공유할 수 있거나, 여러 프로세서가 동시에 처리할 독릭접인 계산이 충분히 많은 경우에만 성능이 높아진다동시성
을 구현해도 설계는 변하지 않는다동시성
을 이해할 필요가 없다동시성
과 관련된 타당한 생각
동시성
은 다소 부하를 유발한다.동시성
은 복잡하다동시성
버그는 재현하기 어렵다동시성
을 구현하려면 흔히 근본적인 설계 전략을 재고해야 한다이메일 대량 전송 기능을 구현할 때
Spring Batch
에서 이메일을 중복으로 보내는 버그가 발생했는데 재현이 어려웠던 경험이 있다
동시성
방어 원칙
단일 책임 원칙
동시성
관련 코드는 다른 코드와 분리해야 한다동시성
코드는 독자적인 개발, 변경, 조율 주기가 있다동시성
코드에는 독자적인 난관이 있다동시성
코드는 별의별 방식으로 실패한다.동시성
코드는 다른 코드와 분리하라 → 어떻게 분리하지...따름 정리
synchronized
키워드로 보호하라고 권장캡슐화
하라. 공유 자료를 최대한 줄여라라이브러리를 이해하라
실행 모델을 이해하라
생산자
스레드가 정보를 생성해 버퍼
나 대기열
에 넣음소비자
스레드가 대기열
에서 정보를 가져와 사용읽기
스레드와 쓰기
스레드로 분리읽기
스레드의 요구와 쓰기
스레드의 요구를 적절히 만족시켜 처리율도 적당히 높이고 기아도 방지하는 해법 필요데드락
, 라이브락
, 처리율 저하
, 효율성 저하
등을 겪음동기화하는 메서드 사이에 존재하는 의존성을 이해하라
동기화하는 부분을 작게 만들어라
synchronized
문을 남발하면 안됨임계영역
은 반드시 보호해야 함 → 임계영역
수를 최대한 줄임임계영역
하나로 구현하면 성능 떨어짐.올바른 종료 코드는 구현하기 어렵다
스레드 코드 테스트하기
일회성
이라 치부하지 마라클린코드를 보면 볼수록
테스트 코드
의 중요성을 알게 되는 것 같다... 지금까지는 기능을 구현하는데에만 집중했는데 테스트 코드를 통해 검증을 하는 습관을 제대로 들여야 할 것 같다.