모던 자바 인 액션 1장 : 자바 8, 9, 10, 111: 무슨 일이 일어나고 있는가?

Adam·2024년 6월 17일
0

모던 자바 인 액션

목록 보기
1/20
post-thumbnail

1.1 역사의 흐름은 무엇인가?

  • 자바의 역사 중 자바8에서 가장 큰 변화가 있었음
  • 자바8: 간결한 코드, 멀티코어 프로세서의 쉬운 활용 가능

스트림 API

  • 비용이 비싸고 에러가 많은 sychronized 키워드를 사용하지 않아도 된다.
  • 이로 인해 메서드 참조와 람다, 인터페이스의 디폴트 메서드가 존재한다.

1.2 왜 아직도 자바는 변화하는가?

  • 잘 설계된 객체 지향 언어 + 스레드와 락을 이용한 동시성 지원해 인기를 얻음
  • JVM 비트코드로 컴파일하는 특징 때문에 인터넷 프로그램의 주 언어로 성장
  • 하드웨어의 발전과 데이터량의 증가로 환경이 급격하게 변함
  • 자바8은 다양한 프로그래밍 문제를 더 빠르고 쉽게 유지보수 할 수 있게해준다는 장점을 갖고 있음

스트림 처리

  • 스트림: 한 번에 한 개씩 만들어지는 연속적인 데이터 항목의 모임
  • 기존 자바에서는 한 번에 한 항목만 처리 가능했지만 자바8 부터는 일련의 스트림으로 처리가 가능

동적 파라미터화로 메서드에 코드 전달하기

  • 동적 파라미터화 : 자바8부터 코드 일부를 API로 전달 가능

병렬성과 공유 가변 데이터

  • 자바8의 스트림으로 쉽게 병렬성 활용 가능

자바는 전통적으로 객체 지향형 프로그래밍이었으나 자바8 부터 이와 상극에 있는 함수형 프로그래밍도 도입할 수 있게 됨

1.3 자바 함수

프로그래밍 언어의 핵심은 값(일급 시민)을 바꾸는 것

이급 시민(메서드 , 클래스) 그 자체는 값이 될 수 없었다

자바8은 이러한 메서드 값으로 취급할 수 있게 해 프로그래밍을 편하게 하였다

  • 메서드 참조: 메서드 함수에 전달할 수 있게 되었다(밑의 예시에서 isHidden 메서드 처럼)
File[] hiddenFiles = new File(".").listFiles(File::isHidden);
  • 람다: 마찬가지로 함수를 값으로 취급 가능

기존에는 코드 전체를 복사 붙여넣기를 했어야 했는데, 이는 유지보수적 측면에서 좋지 않음

함수를 값으로 취급하여서 함수만 고치면 이 함수를 사용하는 부분이 자동적으로 고쳐져서 유지보수가 좋아짐

람다를 활용해서 여러번 사용하지 않을 함수는 굳이 구현할 필요가 없어졌다.

1.4 스트림

  • 컬랙션에서는 반복 과정을 직접 처리(외부반복)
  • 스트림에서는 라이브러리 내부에서 모든 데이터 처리(내부반복)
  • 컬랙션은 단일 cpu에 할당하기 때문에 데이터량이 크다면 데이터 처리 속도에도 문제가 발생할 수 있다

멀티스레딩은 어렵다

이전 버전의 자바에서는 멀티스레딩 방식으로 코드를 짜는것이 쉽지 않음

여러 스레드가 공유된 데이터에 접근하기 때문에 문제가 발생할 수 있음

스트림을 통해 ‘반복적인 코드’, ‘멀티코어 활용’ 어려움 이라는 문제를 해결

포킹을 통해 처리해야 될 데이터를 나누고 cpu에서 각각 처리 후 합치는 방식

1.5 디폴트 메서드와 자바 모듈

외부에서 만들어진 컴포넌트를 이용해 시스템을 구축하는 것이 일반적

자바9: 모듈을 정의하는 문법을 제공

자바8: 인터페이스를 쉽게 바꿀 수 있도록 디폴트 메서드를 제공

자바8에서는 구현 클래스에서 구현하지 않아도 되는 메서드를 인터페이스에 추가 가능

메서드 본문은 클래스 구현이 아니라 인터페이스의 일부로 포함

디폴트 메서드를 활용해 기존 코드를 건드리지 않고 인터페이스 설계를 자유롭게 확장 가능

1.6 함수형 프로그래밍에서 가져온 다른 유용한 아이디어

Optional: 값이 없는 상황을 어떻게 처리할지 명시적으로 구현하는 메서드를 포함해 NullPointer 익셉션 피할 수 있게 도와준다

profile
Keep going하는 개발자

0개의 댓글