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에 추가할 수 있는..
&& 연산자 && 연산자는 논리적 AND 연산자이다. 모든 피연산자가 true 일 때 해당 피연산자의 집합이 true가 된다. if( someFlag && otherFlag ){ // ... } 다른 프로그래밍 언어를 먼저 접한 사람이라면 && 연산자를 위와 같이 단순히 논리연산자로만 사용할 것이다. 하지만 자바스크립트에서 && 연산자는 단순히 논리연산자로만 사용되지 않는다. test = false && true // false test = "" && "test" // "" test = 12 && 4 // 4 test = 12 && 4 && 2 // 2 && 연산자는 피연산자를 왼쪽부터 평가하면서 첫 falsy(거짓 같은 값) 피연산자를 만나면 바로 해당 피연산자의 값을 반환한다. 만약 모든 값이 tru..
옵셔널 체이닝(optional chaining)이란? 옵셔널 체이닝은 '?.' 형태의 특별한 문법구조체의 사용을 뜻하는데, 이것을 이용하면 프로퍼티(property)가 없는 중첩 객체를 에러 없이 안전하게 접근할 수 있다. 다만 옵셔널 체이닝은 자바스크립트 스펙에 추가된 지 얼마 되지 않았기 때문에 구식 브라우저는 폴리필이 필요하다. 옵셔널 체이닝의 등장 배경 const student = {} 위와 같이 비어있는 student라는 객체의 프로퍼티에 접근하려고 하면 어떻게 될까? alert(student.name.lastName); // TypeError: Cannot read property 'lastName' of undefined 당연히 오류가 발생하게 된다. 실제로 어떤 객체의 프로퍼티가 비어있는 ..
nullish 병합 연산자 다른 프로그래밍 언어를 사용하다 자바스크립트를 사용하면 특이한 연산자가 보인다. alert(name ?? '홍길동' ); 위와 같이 자바스크립트에는 '??' 연산자가 존재한다. 이건 nullish 병합 연산자라고 하는데, 앞의 피연산자가 null 혹은 undefined라면 뒤 피연산자를 반환하고, 그렇지 않다면 앞의 피연산자를 반환한다. 예를 들어 let a = null; let x = a ?? b;// x = b 위와 같이 a ?? b와 같은 식에서 a가 null 혹은 undefined라면 뒤 b를 반환하고, 그렇지 않다면 a를 반환한다. x = (a !== null && a !== undefined) ? a : b; '??' 연산자와 위 코드는 같은 동작을 한다. 즉 위와 ..
typeof란? typeof는 피연산자의 데이터 타입을 반환하는 연산자이다. 하나의 피연산자를 오른쪽에 두며 피연산자의 원시 타입(primitive type)을 string 형태로 반환한다. 예를 들어 위와 같이 string 타입 변수를 피연산자로 받으면 'string'을 반환한다. typeof가 반환하는 값은 다음과 같다. 'boolean' : 불리언 'number' : 숫자 'string' : 문자열 'object' : 객체 'function' : 함수 'undefined' : undefined 'symbol' : ES6부터 추가된 Symbol 타입 typeof를 사용하는 다양한 예시를 보자. 특이한 경우 몇 개만 짚어보겠다. { }는 객체기 때문에 'object'를 반환한다. 또한 배열인 [ ] 도..
undefined란? undefined는 자바스크립트의 원시 값(primitive type) 중 하나로, 값을 할당하지 않은 변수는 모두 undefined 자료형이다. 또한 메서드나 선언에서 평가할 변수가 값을 할당받지 않은 경우, 값이 주어지지 않은 인수(parameter), 함수가 값을 명시적으로 반환하지 않는 경우에도 undefined를 반환한다. typeof undefined의 결과는 'undefined'이다. let x; if( x === undefined) { // 실행 O }else{ // 실행 X } null이란? null은 자바스크립트의 원시 값(primitive type) 중 하나로, 어떤 값이 의도적으로 비어있음을 표현한다. null 값은 참조 변수에(reference variable..
var 변수란? 자바스크립트에서 var은 변수를 선언하는 키워드이다. var의 특징은 다음과 같다. 1. var의 scope var은 함수 외부에서 선언되면 전역 변수로 취급된다. 반면, 함수 내에서 선언하면 함수 내에서만 접근이 가능하다. var name = 'code-lab1';// 전역변수 function funcA(){ var hi = 'hi'; console.log(name); // code-lab1 출력 console.log(hi); // hi 출력 } console.log(name); // code-lab1 출력 console.log(hi);// error: hi is not defined 예를 들어 위 코드에서 name은 전역 변수로써 코드 어디서든 접근이 가능하다. 하지만 funcA()에..
자바스크립트(JavaScript)란? 자바스크립트는 웹 페이지에서 다양하고 복잡한 기능을 구현할 수 있는 프로그래밍 언어이다. 자바스크립트를 이용하면 웹 페이지에 정적인 정보를 표시하는 것을 넘어 동적인 컨텐츠를 표시할 수 있다. 보통 HTML, CSS와 자바스크립트를 함께 사용하며 동적 웹페이지를 프로그래밍하게 된다. 이름에 Java가 들어가지만 Java와는 매우 다른 프로그래밍 언어이다. 코끼리와 바다코끼리가 아예 다른것처럼 Java와 JavaScript는 아예 상관이 없는 언어이다. 자바스크립트로 작성한 프로그램을 스크립트(Script)라고 부르는데, 이는 웹페이지를 불러올 때 자동으로 실행된다. 또한 자바스크립트는 애초에 웹 브라우저에서 사용할 목적으로 고안되었지만, 웹페이지 프로그래밍에만 사용할..
POJO는 말 그대로 오래된 방식의 간단한 자바 오브젝트라는 말로써 Java EE 등의 중량 프레임워크를 사용하게 되면서 해당 프레임워크에 종속된 "무거운" 객체를 만들게 된 것에 반발해서 사용된 용어이다. -위키백과- POJO는 정말 말 그대로 오래된 방식의 간단한 자바 객체를 뜻한다. 쉽게 말해 특정 자바 모델이나 기능, 프레임워크 등을 따르지 않는 순수한 자바 객체 그 자체를 뜻한다. 반면, 특정 기술과 환경에 종속되어 사용되는 기술을 EJB(Enterprise Java Beans)라고 한다. 이 EJB는 자바 개발을 할 때 로우 개발에 신경 쓰지 않고 개발을 쉽게 하도록 도와주지만, 특정 기술에 의존하여 확장서가 떨어지고 객체지향성을 잃어버리게 됐다. 따라서 옛날에 객체지향성이 큰 순수한 방식으로..