-
Java8 에서의 변경점Java/Java 문법 종합반 강의 정리 2024. 1. 9. 10:24
자바는 시장의 요구에 맞게 진화하고 있다.
그 중에 가장 큰 변화가 일어났던 것이 Java8 버전이다.
시장은 자바에게 어떤 요구를 했을까?
1. 병렬처리
- 간단하게 말하자면, 빅데이터를 처리할 필요성이 늘어났고, 멀티코어 컴퓨터와 같은 병렬 프로세싱이 가능한
장비들이 보급되면서 새로운 요구사항들이 생겨나게 됐다.
- 당장은 병렬 처리 라는 개념이 있다, 정도로만 알아 두면 된다. 당장 다루는 영역은 람다와 스트림의 기능을
사용하거나 문법을 이해하는 정도이다.
- 병렬 처리에 관한 관심이 생긴다면 아래의 링크를 참고하자.
https://medium.com/naver-cloud-platform/%EC%9E%AC%EB%AF%B8%EB%A1%9C-%EC%9D%BD%EC%96%B4%EB%B3%B4%EB%8A%94-%EB%B3%91%EB%A0%AC%EC%B2%98%EB%A6%AC-c60c8e3b62a7재미로 읽어보는 ‘병렬처리’
역사가 오래된 분야이자 작업 효율을 높여주어 최근 각광 받고 있는 주제 ‘병렬처리’에 대해 간단하게 소개해드리고자 합니다.
medium.com
2. 함수형 프로그래밍
- 함수형 프로그래밍은 객체 지향 프로그래밍처럼 프로그래밍의 패러다임의 한 종류이다.
- 당연히 엄청나게 많은 공부가 필요하고, 지금은 객체 지향 프로그래밍에만 집중할 것이다.
- 다만 자바8에서 새로운 문법이 도입된 이유를 알아보기 위해 간단하게만 이야기 하고 넘어가려고 한다.
객체 지향 프로그래밍의 핵심 아이디어
1. 객체 지향 프로그래밍의 핵심 아이디어는 간단하다.
- "프로그램을 객체들의 협력과 상호작용으로 바라고보 구현한다" 이다.
2. 그 객체들을 정의하기 위해서 추상화와 같은 개념들을 사용할 뿐이다.
3. 핵심 개념들을 통해서 달성하는 효용은 다음과 같다.
a. 코드의 재사용성이 높아진다.
b. 코드를 유지보수, 확장 하기 쉬워진다.
c. 코드를 신뢰성 있게 사용하기 쉬워진다.
그렇다면 함수형 프로그래밍의 핵심 아이디어는 무엇일까
1. 함수형 프로그래밍의 핵심 아이디어 또한 간단하다.
a. "수학의 함수처럼, 특정한 데이터에 의존하지 않고, 관련없는 데이터를 변경하지도 않으며, 결과값이 오직
입력값에만 영향을 받는 함수를 순수 함수라고 한다."
순수한 함수와 순수하지 못한 함수들// 수학의 함수 f(x, y) = x + 2xy // 순수한 메서드 // input에 따라 output은 항상 일정하죠! public int someMethod(int x, int y) { return x + 2y; } class notFunc { private int y = 0; private int result; // 순수 메서드가 아닌 메서드 // 메서드 안에서 제어할 수 없는 y라는 값에 의해 output이 바뀔 수 있죠 public int anotherMethod(int x) { return x + this.y * 2; } // 순수 메서드가 아닌 메서드 2 // 메서드 내에서 this.result 값을 변경하고 반환하기 때문에 // 순수 메서드라고 보기는 어렵습니다! public int otherMethod(int x, int y) { int result = x + 2 * y; this.result = result; return result; } }
b. 프로그램을 순수한 함수의 모음으로 바라보고 구현한다.
2. 핵심 개념을 통해서 달성하는 효용은 다음과 같다.
a. 검증이 쉽다(검증이 필요한 부분만 검증 할 수 있음)
b. 성능 최적화가 쉽다(특정 input에 대한 output을 재사용 할 수 있음 - 캐싱)
c. 동시성 문제를 해결하기 쉽다(함수는 다른 값의 변경을 야기하지 않음)
결론적으로 자바는 시장에 맞게 발전한 결과, 함수형 프로그래밍의 기능들을 추가하기로 결정했다.
함수형 프로그래밍 아이디어 1 : 함수를 일급 값으로 (함수를 변수, 객체 처럼 사용)
1. 우리가 지금까지 배웠던 자바에서 "조작할 수 있는" 값은 다음과 같다.
a. 기본값 (int, long, boolean, ...)
b. 객체
2. 1-a, 1-b 는 다음과 같은 특징을 갖는다.
a. 함수에 인자로 넘길 수 있다.
b. 함수의 결과로 반환할 수 있다.
c. 값을 수정할 수 있다.
d. 값을 변수에 대입할 수 있다.
3. 사실상 프로그래밍에서 지원하는 모든 연산을 지원하고 있고, 이러한 연산을 모두 지원하는 "값"들을
일급 시민, 또는 일급 객체라고 한다.
4. 그러나 메서드는 어떠한가?
a. 메서드에 인자로 메서드를 넘길 수 없다.
b. 메서드의 결과로 메서드를 반환할 수 없다.
c. 메서드를 변수에 대입할 수 없다.
- 특정한 연산을 지원하지 않는 값이기 때문에 메서드는 이급 시민으로 볼 수 있다.
- 그렇지만 함수를 값으로 취급할 수 있다면 매우 많은 것들을 할 수 있고, 함수형 프로그래밍에서는
이를 적극 이용해 오고 있다.
결론 : Java8 에 메서드 참조 기능이 도입되었다.
함수형 프로그래밍 아이디어 2 : 람다 : 익명함수
- 람다는 익명함수를 지칭하는 말이다.
- 익명함수란 말 그대로 이름이 없는 함수를 뜻하며, 일급 객체로 취급된다.
- 함수를 값으로 사용할 수 도 있으며, 파라미터에 전달할 수 있다.
- 변수에 대입 하기와 같은 연산들이 가능하다.
자세한 문법은 다음 글에서 알아보자.
스트림
- 스트림은 데이터 처리연산을 지원하도록 소스에서 추출된 연속된 요소이다.
- 컬렉션이 데이터를 저장하거나 접근하는데 초점을 맞춘 인터페이스라면, 스트림은 데이터를 처리하는데 초점을
맞춘 인터페이스 이다.
- 이해가 가지 않는다면, 일단 컬렉션의 반복을 멋지게 처리하는 일종의 기능이자, 멀티스레드 관련 코드를
구현하지 않아도 알아서 병렬로 추가해주는 기능이라고 생각하면 된다.
- 스트림 기능의 지원으로 더 간결하고, 유연하고, 성능좋은 코드를 작성할 수 있다.재미로 읽어보는 ‘병렬처리’
역사가 오래된 분야이자 작업 효율을 높여주어 최근 각광 받고 있는 주제 ‘병렬처리’에 대해 간단하게 소개해드리고자 합니다.
medium.com
'Java > Java 문법 종합반 강의 정리' 카테고리의 다른 글
stream(스트림) 개념, 예제 (6) 2024.01.09 함수형 프로그래밍 실전 예제(함수형 인터페이스, 람다 함수) (0) 2024.01.09 Lock, Conditon (6) 2024.01.03 wait(), notify() (1) 2024.01.03 join, yield, synchronized (4) 2024.01.03