자바의 변화
모든 언어는 자신의 장점으로 생존을 도모했는데 자바의 경우 크게 3가지로 대중적이게 되었습니다.
캡슐화
를 통해 c언어 비해 언지니어링적인 문제가 적다..- 객체지향적인 모델
- 플랫폼에 독립적이다.
[외적인 환경의 변화]
하지만 빅데이터나 멀티코어 컴퓨터, 컴퓨팅 클러스터를 이용해서 빅데이터등의 대용량 데이터를 효과적으로 처리할 필요성이 증가했다.
이러한 이유 등으로 자바 하드웨어나 프로그래머의 기대에 부응하는 방향으로 변화하기 위해 여러 큰 변화를 가져왔다.
[변화1 : stream processing]
스트림은 데이터를 처리하는 하나의 파이프라인
스트림의 특징
- 파이프라인의 의미와 같게 파이프라인의 출력은 다른 파이프라인의 입력으로 갈 수 있다.
[변화2 : 동작 파라미터화]
특정 기능 자체를 넘겨주는 방식, 메서드 자체를 파라미터로 넘겨준다
[변화3 : 스트림을 통한 병렬성]
스트림을 통해 병렬적으로 처리하더라도 안전하게 실행되어야 한다.
물론 synchronized를 이용해서 작성할 수는 있지만, 자바 스레드 API보다 쉽게 병렬성을 활용할 수 있다.
자바8에서부터 위와같은 큰 변화를 적용 시켰다고 생각하면 된다.
추가된 개념
[자바 함수]
프로그래밍에서 가장 중요하다고 생각할 수 있는 것은 값을 넣어줄 수 있는 것이다. 이렇게 넣어줄 수 있는 값들을 일급시민이라 하는데, 자바에서는 메서드나 클래스를 전달할 수 없고 이들은 이급 시민
이 된다.
클래스도 인스턴스로 노배는 것이지 자체를 보내지는 않는다.
이러한 일급 시민들은 프로그래밍을 하면서 유용하게 사용할 수 있고 이를 추가했다. 이렇게 추가한 것이 메서드 참조
이다.
메서드 참조
- 메서드를 참조하는 방식에는 익명 클래스를 사용할 수 있고, 이는 결국 람다또한 사용할 수 있는 것이다.
- 또다른 방법으로는 메서드를 전달하는 방법이다.
[스트림]
[반복을 통한 가독성 증가]
기존 배열이나 컬렉션은 외부 반복을 통해서 접근했지만, 스트림은 내부 반복으로 데이터를 처리할 수 있다.
- 외부 반복: for-each루프를 이용해서 각 요소를 반복하여 작업 수행
- 내부 반복: 스트름 API 내부에서 모든 데이터가 처리
[멀티스레드의 장점]
멀티 코어를 통해 대용량 데이터를 더 빠르게 처리할 수 있다. 또한
기존
- 기존 스레드 API를 사용하게 되면 멀티스레딩을 코드로 구현하여 병렬성을 이용하는 것이 어려웠다.
- 스레드를 잘 제어하지 못하면 원하는 방식으로 동작하지 않는다.
스트림을 사용 후
- 필터링, 추출, 그룹화등 여러 기능을 통해 동작을 쉽게 병렬화 가능
- Forking step : CPU마다 맡은 부분을 다르게 처리
[디폴트 메서드]
인터페이스의 구현을 바꾼다는 것은 해당 인터페이스를 사용하는 모든 클래스를 변경해야 하기 때문에 작업이 어렵다.
자바9에서는 패캐지 모음을 포함하는 모듈을 정의하여 처리했고, 자바8에서는 인터페이스를 쉽게 바꿀 수 있도록 디폴트 메서드를 지원했다.
하지만 이렇게 되면 단점이 생기는데, 다이아몬드 상속 즉 다중 상속과 관련된 문제가 생기게 된다.
'JAVA > Java in action' 카테고리의 다른 글
[자바 인 액션] 6. 스트림 데이터 수집 (0) | 2023.03.23 |
---|---|
[자바 인 액션] 5. 스트림 활용 (0) | 2023.03.23 |
[자바 인 액션] 4. 스트림 (0) | 2023.03.23 |
[자바 인 액션] 3. 람다 표현식 (0) | 2023.03.23 |
[자바 인 액션] 2. 동작 파라미터화 (0) | 2023.03.22 |