Language/Java
-
[Java] 자바 버전 정리Language/Java 2024. 10. 25. 16:50
자바는 계속해서 새로운 버전들이 나타나고 유용한 기능들이 추가되고 있다.마냥 높은 버전의 자바를 사용하는 것이 아니라 자바 버전에 따른 기능들을 확실히 알고 있으면 기존에 사용하고 있던 코드를 더 좋게 리펙토링하는데 유용할 것이다.따라서 자바 버전 별로 어떠한 기능이 추가되었는지 주요 변경점에 대해서 알아보자! Java 7 이하 버전https://binsin.tistory.com/6 Java 7 이하 버전JDK 1.1이너 클래스, JavaBeans, RMI, 리플렉션, Calendar 등이 추가 J2SE 1.2Swing GUI, JIT, Collection Framework 등의 기능이 추가 J2SE 1.3HotSpot JVM, JNDI, JPDA, JavaSound 등이 추가 J2SE 1.4assert..
-
[Java] Java 10 ~ 17 버전 특징Language/Java 2024. 10. 25. 16:49
Java SE 10Local-Variable Type Interface (JEP 286)로컬 변수 타입인 ‘var’을 선언할 수 있다.선언 가능한 케이스initializer와 함께 선언되는 로컬 변수향상된 for문 내의 index 변수for문 내 로컬 변수var list = new ArrayList();var stream = list.stream();var numbers = List.of(1,2,3);for (var n : numbers) { System.out.println(n);} Garbage Collector Interface (JEP 304)자바10 이전에는 GC 코드는 HotSpot 소스 곳곳에 흩어져 있었만, Garbage Collector Interface의 도입으로 더 쉽고 간단하게 새로..
-
[Java] Java 9 버전 특징Language/Java 2024. 10. 25. 16:45
모듈시스템 jigsaw기존 방법에서는 서로 다른 패키지간의 캡슐화가 지원되지 않았다. 하지만 jigsaw의 등장으로 모듈을 만들고 모듈에 명시적으로 외부에서 호출할 수 있는 API를 선언하면 모듈에 선언된 영역에 접근할 수 있게 되었다.Jigsaw Project의 목적SE 플랫폼과 JDK를 작업 컴퓨터 디바이스보다 쉽게 경량화할 수 있게 한다.Java SE 플랫폼의 전반적인 구현 부분과 특히 JDK 부분의 보안성과 유지관리성을 향상시킨다.애플리케이션의 성능을 높인다.개발자들이 라이브러리와 애플리케이션의 구성 및 유지를 쉽게 해준다.// Java 코드 최상위에 module-info.java 파일을 만들어 이와 같이 사용한다.module java.sql { requires public java.logging..
-
[Java] Java 8 버전 특징Language/Java 2024. 10. 25. 16:43
Lambda Expression메서드를 지칭하는 명칭 없이 구현부를 선언하는 익명 메서드 생성 문법이다. 별도의 익명 클래스를 만들어서 선언하던 방식을 람다를 통해 대폭 간소화할 수 있으며, 함수형 프로그래밍, 스트림 API 그리고 컬렉션 프레임워크의 개선 등에 영향을 주었다. Method Reference특정 메서드만을 호출하는 람다의 축약형이다. 하나의 메서드를 참조하는 람다를 편리하게 표현할 수 있는 문법이다.(String s) -> System.out.println(s) // System.out::println Default Mehods인터페이스에 추성 메서드가 아닌 구현된 메서드를 정의할 수 있는 기능이다.public interface Singer { public default void song..
-
[Java] Java 7 이하 버전 특징Language/Java 2024. 10. 25. 16:37
JDK 1.1이너 클래스, JavaBeans, RMI, 리플렉션, Calendar 등이 추가 J2SE 1.2Swing GUI, JIT, Collection Framework 등의 기능이 추가 J2SE 1.3HotSpot JVM, JNDI, JPDA, JavaSound 등이 추가 J2SE 1.4assert, 정규표현식, IPv6, XML API, JCE, JSSE, JAAS, Java Web Start 등이 추가 J2SE 5Generice컬렉션 프레임워크를 이용하여 발생할 수 있는 ClassCastException을 컴파일에 검증할 수 있게 되었다.AnnotationConcurrency APIAPI를 사용하여 병렬 프로그래밍 혹은 멀티 스레드를 쉽게 구현할 수 있게 되었다.Enumeration데이터 구조를..
-
[Java] Garbage Collection 정리Language/Java 2024. 10. 25. 15:06
가비지 컬렉션 동작 과정GC에 대해서 알아보기 전에 알아야 할 용어가 있는데, 그건 바로 ‘stop-the-world’이다. 이 용어는, GC을 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것을 말한다. stop-the-world가 발생하면 GC를 실행하는 쓰레드를 제외한 나머지 쓰레드는 모두 작업을 멈추고 GC 작업을 완료한 이후에야 중단했던 작업을 다시 시작한다. 어떤 GC 알고리즘을 사용하더라도 stop-the-world는 발생하며 대개 GC 튜닝은 이 stop-the-world 시간을 줄이는 것이다. 그 다음 ‘Mark And Sweep’이라는 동작을 하는데 순서는 다음과 같다.Mark: 스택의 모든 변수 혹은 Reachable 객체들을 탐색하면서 사용되고 있는 메모리를 식별한다.Sweep:..
-
[Java] Stack Class의 문제점과 ArrayDeque ClassLanguage/Java 2024. 10. 25. 14:30
Stack 클래스의 문제점public Stack() { } public E push(E item) { addElement(item); return item; } public synchronized E pop() { E obj; int len = size(); obj = peek(); removeElementAt(len - 1); return obj; } public synchronized E peek() { int len = size(); if (len == 0) throw new EmptyStackException(..
-
[Java] JVM 내부 구조와 메모리 구조Language/Java 2024. 10. 25. 14:20
JVM의 동작 방식JVM의 동작 방식은 아래와 같다.자바로 개발된 프로그램을 실행하면 JVM은 OS로부터 메모리를 할당한다.자바 컴파일러(.javac)가 자바 소스코드(.java)를 바이트코드(.class)로 컴파일한다.Class Loader를 통해 JVM Runtime Data Area로 로딩한다.Runtime Data Area에 로딩 된 바이트코드들은 Execution Engine을 통해 해석된다.해석된 바이트 코드는 Runtime Data Area의 각 영역에 배치되어 수행되며, 이 과정에서 Exexcution Engine에 의해 GC의 작동과 스레드 동기화가 이루어진다. JVM의 구조클래스 로더(Class Loader)자바는 동적으로 클래스를 읽어오기 때문에 런타임에서야 모든 코드가 JVM과 연결..