Virtual Thread의 탄생 배경Java 개발자들은 오랜 기간 동안 병렬 처리 단위로 스레드를 사용했다.스레드는 독립적으로 실행되며 각각의 스택(Stack)을 가지고 있고 프로세스보다 가벼워 컨텍스트 스위칭(Context Switching)이 빠른 장점이 있다. 그러나 자바 스레드는 운영체제(OS) 스레드의 Wrapper로 구현되어 있기 때문에 OS의 스레드보다 많은 수를 가질 수 없다. 게다가 OS 스레드는 비용이 비싸기 때문에 많은 수를 생성하기 힘들다. 문제는 많은 환경에서 Request-per-Thread 구조를 사용하고 있다는 것이다.이는 요청 하나에 스레드 한개가 작업을 진행하는 구조를 뜻한다.스레드 1개당 1MB 사이즈를 차지한다고 했을 때 8GB 메모리 환경에서 약 8000개의 스레드..
새로운 LTS 버전 Java 21의 등장Jrebel의 2023 Java Developer Productivity Report에 따르면 31%는 Java 8을 사용하고, 28%가 Java 11을, 그리고 19%가 다른 버전의 Java를 사용한다고 한다. 이런 상황 속 2023년 9월 19일 새로운 JAVA LTS 버전인 Java 21이 출시되었다. Java의 최신 버전을 적용하는 것은 아직 쉽지 않을지 모르지만 Java 21은 적용을 고려해 볼 만큼 좋은 발전들이 존재한다. Java는 언어의 발전을 위해 JEP(Java development Enhancement Proposal)를 사용해 새로운 기능들을 추가한다.JEP는 말 그대로 JDK를 향상시키기 위한 제안으로 새로운 기능을 Java에 추가할 수 있는..
POJO는 말 그대로 오래된 방식의 간단한 자바 오브젝트라는 말로써 Java EE 등의 중량 프레임워크를 사용하게 되면서 해당 프레임워크에 종속된 "무거운" 객체를 만들게 된 것에 반발해서 사용된 용어이다. -위키백과- POJO는 정말 말 그대로 오래된 방식의 간단한 자바 객체를 뜻한다. 쉽게 말해 특정 자바 모델이나 기능, 프레임워크 등을 따르지 않는 순수한 자바 객체 그 자체를 뜻한다. 반면, 특정 기술과 환경에 종속되어 사용되는 기술을 EJB(Enterprise Java Beans)라고 한다. 이 EJB는 자바 개발을 할 때 로우 개발에 신경 쓰지 않고 개발을 쉽게 하도록 도와주지만, 특정 기술에 의존하여 확장서가 떨어지고 객체지향성을 잃어버리게 됐다. 따라서 옛날에 객체지향성이 큰 순수한 방식으로..
얕은 복사(Shallow Copy)란? public class Human { String name; int age; public Human(){ } public Human(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } 위와 같은 Human 클래스가 있다고 하자. 이 클래스를 다음과 같이 복사한 뒤 멤버 값을 변경해 보자. p..
직렬화(Serializaion)란? 역직렬화(Deserialization)란? 직렬화는 객체를 저장 가능한 상태(예를 들어 디스크에 파일 형태 등) 혹은 전송 가능한 상태(네트워크 상의 데이터 스트림 형태)로 변환하는 것을 뜻한다 - 위키백과 - 쉽게 말해 직렬화는 객체를 저장, 전송할 수 있는 특정 포맷 상태로 바꾸는 과정이라고 할 수 있다. 역직렬화는 말 그대로 직렬화의 반대이다. 즉, 특정 포맷 상태의 데이터를 다시 객체로 변환하는 것을 뜻한다. 데이터 직렬화 포맷 CSV, XML, JSON 형태의 직렬화 사람이 읽을 수 있다 저장 공간의 효율성이 상대적으로 떨어지고, 파싱 하는 시간이 오래 걸린다 주로 데이터의 양이 적을 때 사용한다 Binary 직렬화 사람이 읽을 수 없다 저장 공간의 효율성이 ..
추상클래스(Abstract Class)란? 추상 클래스(Abstract Class)는 추상 메서드를 선언해 놓고 상속을 통해 자식 클래스에서 메서드를 완성하도록 유도하는 클래스이다. 이러한 특성 탓에 미완성 설계도라고 표현하기도 한다. 추상클래스는 상속을 위한 클래스이기 때문에 따로 인스턴스를 생성할 수 없다. abstract class 클래스{ ... public abstract void 메서드(); } class 앞에 "abstract" 예약어를 붙여 해당 클래스가 추상 클래스임을 나타낸다. 또한 메서드도 abstract 예약어를 붙여 추상 메서드를 선언할 수 있다. 추상 클래스는 추상 메서드를 가지지 않아도 괜찮다. 다만, 추상 메서드를 하나라도 가진다면 그 클래스는 추상 클래스가 된다. 추상 메서..
JRE, JDK란? 처음 Java를 설치하려고 보니 JRE, JDK 등이 존재하는 것을 확인할 수 있다. 둘의 차이는 무엇일까? 참고) [JAVA] 자바(JAVA)란? 자바의 특징 자바(JAVA)란? 자바는 C언어에 객체 지향적 기능을 추가하여 만든 C++과 달리, 처음부터 객체 지향 언어로 개발된 프로그래밍 언어이다. 자바는 자바 가상 머신(JVM, Java Virtual Machine)을 사용하여 운 code-lab1.tistory.com [JAVA] JVM(Java Virtual Machine)이란? JVM(Java Virtual Machine)이란? JVM은 Java Virtual Machine, 즉 자바 가상 머신의 약자를 따서 줄여 부르는 용어이다. JVM은 OS와 Java 애플리케이션 사이의..
오류(error)와 예외(exception) 자바에서 오류(error)란 시스템이 종료되어야 할 수준의 수습하기 힘든 심각한 문제를 의미한다. 이러한 오류는 개발자가 미리 예측하여 처리하기 힘든 것이 대부분이기 때문에 오류에 대한 처리는 매우 힘들다. 반면 예외(exception)는 개발자가 구현한 로직에서 발생한 실수 혹은 사용자의 영향에 의해 발생하는 예측하고 방지할 수 있는 문제를 뜻한다. 따라서 자바 개발자는 예외 처리(Exception Handling)를 통해 예외를 원활하게 처리할 수 있어야 한다. 예외 처리(Exception Handling) 자바에서는 예외를 처리하기 위해 try / catch / finally 문을 사용할 수 있다. try{ // 예외를 처리하길 원하는 실행 코드; }ca..
제네릭(Generic)이란? 자바에서 ArrayList와 같이 꺽쇠 안에 클래스 타입이 명시되어있는 것을 확인할 수 있다. [그림 1]은 ArrayList의 내부이다. ArrayList처럼 'E'라고 표시된 것을 확인할 수 있다. ArrayList list = new ArrayList(); ArrayList list2 = new ArrayList(); 위와 같이 ArrayList에 저장할 타입을 Integer, String 등으로 지정할 수 있다. 이처럼 데이터의 타입을 일반화(Generalize)하는 것을 제네릭(Generic)이라고 할 수 있다. 이러한 제네릭은 클래스나 메서드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정할 수 있다. 따라서 컴파일 시에 미리 타입 검사(Type Check)를..
Map 컬렉션 클래스 JAVA의 Map 컬렉션 클래스는 Collection 인터페이스를 상속하진 않지만 Collection 자료구조를 이야기 할 때 빠지지 않는다. Map 클래스는 Map 인터페이스를 상속한다. Map 클래스는 중복을 허용하지 않는 Key 값과 그에 대응하는 중복이 허용되는 Value 값이 쌍을 이루어 저장되는 자료구조이다. 이때 Key 값은 Value를 찾기 위한 색인과 같은 역할을 한다. Map 클래스는 요소의 저장 순서를 유지하지 않는다. Key는 중복을 허용하지 않지만, Value는 중복을 허용한다. Map 대표적인 컬렉션 클래스 3가지에 대하여 알아보자. HashMap HashMap 클래스는 Map 클래스에서 가장 많이 사용되는 클래스 중 하나이다. HashMap 클래스는 해시 ..