Spring으로 웹 프로젝트도 하고 Java 언어로 알고리즘 공부도 하면서 자바 언어에 대한 이해가 부족하다고 생각해서 자료를 찾아서 공부하고 정리하기로 했어요!
고민했거나 외울 필요하다고 생각하는거 위주로 정리할 예정입니다.
자바 프로그램의 동작
1. 코드 작성
2. 컴퓨터가 실행할 수 있는 형태로 코드를 컴파일
3. 컴파일된 프로그램을 실행
그러면 이를 가능하게 하기 위한 것들은 어떻게 있을까?
자바언어로 작성한 소스코드를 JVM이 이해할 수 있는 자바 바이트코드(.class)파일로 변환한다
JVM의 구성
- 자바 인터프리터(Interpreter): 자바 바이트코드를 읽고 해석하는 역할
- 클래스 로더(Class Loader): 자바는 동적으로 클래스를 읽어오는데 동적으로 클래스를 로딩해주는 역할을 함
- JIT 컴파일러(Just-In-Time compiler): 런타임 도중에 기계어로 변환해주는 컴파일러 (실행속도 향상을 위해 개발됨)
- 가비지 컬렉터(Garbage Collector): 개발자가 따로 관리할 필요 없이 더이상 사용하지 않는 메모리를 회수해줌
자바에서는 java.lang 패키지에 System이라는 표준 입출력 클래스를 정의하여 입출력을 제공한다.
그리고 System 클래스에는 표준 입출력을 위해 다음과 같은 클래스 변수(static variable)가 정의되어 있다
- System.in: 스트림을 사용해 표준 입력 수행
- System.out: 스트림을 사용해 표준 출력 수행
- System.err: 스트림을 사용해 표준 출력 수행
Java SE 8 버전에서는 많은 사항이 변경되거나 새롭게 추가되었음
대표적인 변경사항
1. 람다 표현식(lambda expression) : 함수형 프로그래밍
2. 스트림 API(stream API) : 데이터의 추상화
3. java.time 패키지 : Joda-Time을 이용한 새로운 날짜와 시간 API
4. 나즈혼(Nashorn) : 자바스크립트의 새로운 엔진
람다 표현식(lambda expression)이란 메소드를 하나의 식으로 표현한 것
왜 쓰는가?: 기존의 불필요한 코드를 줄여주고, 작성된 코드의 가독성을 높임
람다 표현식의 장점
1. 클래스를 만들고 객체를 생성하지 않아도 메소드를 사용할 수 있다.
2. 람다 표현식은 메소드의 매개변수로 전달될 수도 있고, 메소드의 결괏값으로 반환될 수도 있다 => 함수형 프로그래밍 가능
+) 나중에 더 자세히 정리할 예정
왜 쓰는가?
이전까지 자바에서 많은 양의 데이터를 저장하기 위해서 배열이나 컬렉션을 사용하고 이 데이터들에 접근하기 위해서는 반복문이나 반복자(iterator)를 사용하여 매번 코드를 작성해야 한다.
=> 코드의 길이가 너무 길고 가독성도 떨어지며, 코드의 재사용이 거의 불가능합니다.
그래서 나온게 Stream!
스트림 API는 데이터를 추상화하여 다루므로, 다양한 방식으로 저장된 데이터를 읽고 쓰기 위한 공통된 방법을 제공한다
따라서 스트림 API를 이용하면 배열이나 컬렉션뿐만 아니라 파일에 저장된 데이터도 모두 같은 방법으로 다룰 수 있음
+) 나중에 더 자세히 정리할 예정
실제로 프로젝트를 하면서도 많이 사용한 LocalDate와 같은 날짜와 시간을 다루는 class를 포함하고 있다.
+) 나중에 더 자세히 정리할 예정
기존의 사용하던 자바스크립트 엔진 리노에 비해 성능과 메모리 관리 면에서 크게 개선된 스크립트 엔진을 도입