2021. 10. 1. 13:27ㆍJAVA 공부
먼저, Java 1.8 의 변경사항을 공부하는 이유는 무엇일까?
- 보통 Java 를 사용할 때에 Java 1.8 을 사용한다. 나도 그렇다. 딱히 이유는 생각해 본적이 없다. 그냥 처음 배울 때부터 최신 버전은 SE15인가? 까지 나와 있었지만 학원에서 배울 때 Java 1.8 을 가지고 배웠다. 그리고 회사에 들어가도 Java 1.8 을 사용한다. 이 외에도 Java 설정 등 프로젝트 생성할 때 다른 사람들의 글을 보면 Java 1.8 을 가지고 작성한 것을 발견할 수 있다.
1. 첫 번 째로, Java 1.8 버전으로 업그레이드 되면서 중요한 기능이 생겼기 때문이다.
2. 호환성 문제
Java 1.8 버전 이후에도 계속적으로 Java 는 업그레이드 되어져 왔다.
그런데, Java 최신 버전인 SE15 설치된 환경에서 Java 1.8 이 작동을 하지 않는다.
하지만, 반대로 Java 1.8 이 설치된 환경에서는 Java 최신 버전인 SE15 가 작동한다.
결국. 버전을 업그레이드 한다는 것은, JDK 또한 업그레이드를 시킨 다는 것이기 때문에, 위의 문제가 발생하는 것이다.
※ 위의 2가지를 종합해서 Java 1.8 을 가장 많이 사용하기 때문에 이를 공부하는 것이다.
Java 1.8 의 변경사항
1. Lambda 표현식 적용 ( 함수적 프로그래밍 가능 )
2. StreamAPI ( 데이터를 추상화하여 다룰 수 있게 됌 )
3. java.time 패키지 ( 날짜 및 시간에 대해 조금 더 개선된 API 제공 )
4. 나즈혼 ( 자바 스크립트의 새로운 엔진 제공 )
1. Lambda 표현식 적용
- 이는 함수형 프로그래밍 패러다임에 의거한 적용 이라고 할 수 있다. 프로그래밍에 관심이 있다면, Java 는 객체지향 언어 라는 말을 들어 보았을 것이다. 프로그래밍의 흐름을 조금 말해 보자면, 절차지향 -> 객체지향 -> 함수지향 이라고 말할 수 있을 것 같다.
- 절차지향은 차례대로 실행되는 프로그래밍 이라고 생각 할 수 있을 것 같다.
- 객체지향은 클래스 등 으로 나누어서 하는 프로그래밍 이라고 생각 할 수 있을 것 같다.
※ 예를 들어서, 로봇이 있는데, 이 로봇 1대 에는 부품(머리, 몸통, 팔, 다리)이 있다. 절차지향은 부품을 나누지 않고 전체적인 로봇 1대를 만드는 것이고, 객체지향은 로봇의 부품을 따로따로 만들어서 합치는 것이다. 그렇기 때문에, 객체지향 프로그래밍은 부품들을 다른 로봇에도 사용할 수 있다는 장점이 있다.
- 함수형 프로그래밍은 함수 자체를 리턴 하는 방식 이라고 생각할 수 있을 것 같다. 좀 더 자세히 파고 들어 보자면, 기존의 프로그래밍은 변수에 값을 대입해 왔고, 이 변수를 리턴해서 사용을 하는 방식이 주를 이루었다. 하지만, 함수형 프로그래밍은 변수에 값을 대입하지 않고, 그대로 사용한다.
그러면 이제 Lambda 에 대해서 알아보자
Lambda 에 대해 설명하려면 익명 객체(클래스) 에 대해 알고 있어야 한다.
※ 익명 객체(클래스) : 이름이 없는 클래스로써 인터페이스를 implements 해서 사용하는 것이 아닌 인터페이스 자체를 구현화 해서 사용하는 것
※ 간단한 예
위의 예시 처럼, 인터페이스를 바로 구현화해서 사용하는 것을 익명 객체(클래스) 라고 한다.
Lambda 는 이러한 익명클래스를 좀 더 줄여서 사용할 수 있습니다.
인터페이스를 바로 구현화 하는 코드를 단 몇줄로 표현할 수 있게 됩니다.
2. StreamAPI
- 여기서 나오는 Stream 은 파일입출력 스트림과는 전혀 다른 스트림 입니다.
- Stream 은 함수적 인터페이스를 기반으로 사용하고 있습니다.
- 기존의 Collection(List, Map, Set) 등을 사용하려면, 각각의 접근 방법이 필요했습니다.
- 예를 들면, Iterator, EntrySet 등 을 만들어서 사용했습니다.
- 이렇게 Collection 별로 나누어지던 접근 방법을 하나로 통일하기 위해서 Stream 이 나왔습니다.
- Collection 에 속해 있는 List, Set, Map 등은 모두 Stream 으로 변환이 가능하게 되었습니다.
- Stream 을 만듦 으로써 인해 Collection 에 대한 접근 방법이 1개로 통일되게 되었습니다.
- StreamAPI 는 이러한 Stream 을 좀 더 편하게 사용할 수 있도록 만들어진 것들 입니다.
※ StreamAPI 종류
1. 시작연산 - Stream 객체가 아닌 다른 객체(Collection)로부터 Stream 을 얻는 연산
2. 중간연산 - Stream 객체를 가공하는 연산 (fillter) / 람다식을 사용해서 원하는 데이터만 추출 가능
3. 최종연산 - Stream 연산을 끝내고 최종 결과를 다른 타입으로 반환하는 연산
※ 예시
위처럼 만들어진 리스트를 StreamAPI 를 사용해서 아래처럼 사용할 수 있다.
3. java.time 패키지
- java 에서 날짜를 표현하기 위해서는 Date 클래스를 이용했었다. 하지만 현재 대부분의 메서드는 Date 클래스 사용을 권장하지 않고 있다.
- JDK 1.1 버전에서는 Calendar 클래스 를 도입시켰지만, 몇가지 문제들이 있어서, Joda-Time이라는 라이브러리를 함께 사용해 왔다.
- Java 1.8 버전에서는 이러한 Joda-Time 라이브러리를 발전시킨 새로운 날짜와 시간 API인 java.time 패키지 를 지원한다.
4. 나즈혼
- 지금까지 Java 는 Java Script 의 기본 엔진으로 모질라의 라이노 ( Rhino ) 가 사용되어 왔다. 하지만 세월이 흐르면서 자바의 최신 개선 사항 등을 제대로 활용하지 못하는 등의 문제가 생기게 되었다.
- 그래서, Java 1.8 에서는 Java Script 의 새로운 엔진으로 오라클의 나즈혼 ( Nashorn ) 을 도입하게 되었고, 기존에 사용되어 온 라이노 에 비해 성능과 메모리 관리 측면에서 크게 개선 되었다고 합니다.
'JAVA 공부' 카테고리의 다른 글
ORM(Object Relational Mapping) ? (0) | 2021.10.13 |
---|---|
Static(스태틱) (0) | 2021.10.01 |
Java에서 Poi 라이브러리 다운로드 및 사용 (0) | 2021.03.29 |
Day29 - Thread 쓰레드 (0) | 2021.03.26 |
Day27 - 정규식 표현법 (0) | 2021.03.24 |