모던 자바 인 액션 (세션 1)

kimseungki·2022년 6월 10일
0

독서

목록 보기
1/8
post-thumbnail

1. 읽게 된 계기

퇴사 사유와 유사하다. 나는 제대로 공부를 안하고 코드를 짠게 많았었다. 코드를 작성하면, 이거를 아무이유없이 블로그글에 있는 솔루션라는 이유로 쓰거나, 기존 소스를 복붙하는 경우가 많았다. 공부를 하면서, 내가 지금까지 생각없이 썼던 개념들을 왜 쓰게 되었는지를 깨닫고 싶었다.

2. 세션 1 한줄요약

앞으로 있을 세션들에 어떤게 있는지 대강적으로 많은걸 설명이 되어있다. Optional, 람다, Stream, 함수형 프로그래밍 등등에 대해 나와있고, 왜 이거를 쓰는지에 대한 이유를 알게 된 것 같다.

3. 자바8에서의 큰 변화

  1. 스트림 API
  2. 메서드를 코드에 전달
  3. 인터페이스의 디폴트 메서드

4. 알게 된 신기한 것

  1. 자바는 CPU가 여러개가 있어도 단일 CPU만 기존에 써왔다.
  2. Collection을 활용한 Stream은 여러 데이터를 CPU에 나누어 병렬처리를 할 수 있게끔 할 수 있다.
  3. 메서드를 다른 메서드의 파라미터로 전달할 수 있다.
  4. 익명함수를 활용하기 위해 람다를 활용
  5. stream의 경우 중첩된 제어흐름이 많은 상황을 해결하기 위해 반복되는 패턴과 컬렉션을 멀티코어의 활용을 통해
  6. 멀티스레딩 시, 데이터를 스레드마다 다르게 읽고 쓰기 때문에 기대값이 다르게 나올 가능성 존재
  7. NullPointer 예외를 피하기 위해 Optional 클래스 활용
  8. Default method는 인터페이스에 메소드 선언 시 모든 구현클래스에 (많으면 그 하위에 하위까지..) 오버라이딩을 해야되는 문제가 발생
    -> 이는 SOLID 중 'O', OCP(개방 폐쇄 원칙) 위배, 따라서 확장에는 개방을 해야되서 메소드 구현하는 것은 맞지만 변화에는 폐쇄를 해야되는데
    무시하고 스프링이나 자바 개발자가 인터페이스에 추상메소드를 하나 추가하면
    많은 회사의 프로젝트에 인터페이스를 구현한 여러 구현체 클래스에 오버라이딩을 하는 곤란한 상황 발생
    즉, 모든 구현 클래스를 수정을 해야되므로 원칙 위배

5. 이슈

  1. 프로그래밍언어에서 값은 일급값이라 표현, but 메서드와 클래스 등은 이급으로 표현 됨 이유는 직접 전달을 못하기 때문
    • 해결방법 : 함수형프로그래밍 (File::isHidden) isHidden이라는 메소드를 값으로 사용

6. 아직 잘 모르겠는 것

  1. Predicate는 추후 어떻게 사용하는지 확인할 필요

후기

전반적인 책의 내용을 다 대략적으로 설명한게 대부분이라, 다음 챕터가 기대된다.

profile
seung 기술블로그

0개의 댓글