프로그래밍언어/JAVA (61) 썸네일형 리스트형 [Java] Record 1. Record 란?Record 는 JDK 14 에서 preview feature 로 처음 추가된 기능으로 불변 데이터 전달을 위한 클래스 타입이다. Record 는 생성자와 getter, equals(), hashCode(), toString() 과 같이 일반적인 데이터 클래스가 가지게 되는 기능을 자동으로 가지게 되어 boilerplate 코드들을 제거해준다. Record 의 선언부의 헤더를 통해서 필드가 선언된다. 이때 Record 의 필드는 모두 불변이기 떄문에 내부적으로 final 로 선언된다. record Rectangle(double length, double width) { }public final class Rectangle { private final double length; .. [JAVA] Virtual Thread 블로그 포스트 등을 통해서 Java21 에 대한 내용들을 접하게 되었다. 그중에서 virtual thread 에 대한 글들을 많이 접할 수 있었다. virtual thread 가 기존 thread 보다 가볍고 성능이 우수하다는 내용을 접하면서 흥미가 생겼고, 이전에 I/O 작업을 처리하기 위하여 사용했던 파이썬의 asyncio 와도 유사한 느낌이 들어서 virtual thread 와 관련 내용을 정리해보려고 한다.1. virtual thread 란?virtual thread 는 기존 자바의 동시성 모델을 개선하고자 하는 Project Room 에 의해 시작된 경량화 스레드 기술로 JDK21 에 정식 기능으로 추가되었다. 기존의 방식과 비교하여 많은 동시성 작업에 대해서 처리량이 많고 대기시간이 짧도록 개.. [JAVA] 람다식 (lambda expression) 자바의 람다식을 사용하던 중 "Local variable number defined in an enclosing scope must be final or effectively final" 라는 에러가 발생했다. 이 에러는 람다식에서 지역변수에 접근할때 발생하였는데, 찾아보니 메모리에서 람다식의 변수를 관리하는 방식과 관련된 문제였다. 해당 에러를 알아보면서 이번 기회에 람다식에 대해서도 한번 정리해보았다. 1. 람다식 (lambda expression) 람다식은 자바 1.8 버전부터 제공된 기능으로 함수를 하나의 식으로 표현한 것이다. 람다식은 메서드의 이름과 반환값이 필요없는 익명함수로 괄호와 화살표를 사용하여 식을 표현한다. (매개변수, ...) -> { 실행문 } 람다식을 사용하게 되면 보다 간결하.. [JAVA] 자바 Thread-safe 자바에서는 성능의 향상을 위하여 멀티 스레드 기능을 제공한다. 하지만 멀티 스레드 환경에서 개발을 하다보면 의도했던 결과가 나오지 않는 경우가 있다. 주로 여러 스레드가 하나의 자원에 동시에 접근하면서 발생하는 문제이다. 이러한 문제들을 해결하기 위하여 자바에서는 여러 기능들을 제공하는데, 이러한 기능들을 사용하여 멀티 스레드 환경에서의 실행에 문제가 없도록 프로그래밍한 프로그램을 thread-safe 하다고 한다. 1. synchronized (암시적 lock 사용) 자바에서 thread-safe 하게 구현하는 가장 간단한 방법은 synchronized 키워드를 사용하는 것이다. thread-safe 하게 동작하게 하고 싶은 메서드 또는 블럭을 지정하여서 synchronized 키워드와 함께 선언하여 .. [JAVA] 메서드 참조 (::) 1. 자바 메서드 참조 (Java Method Reference) 자바 메서드 참조는 자바 8 버전부터 지원해주는 기능으로 람다식에서 메서드를 참조하여 사용하여 보다 간단하게 표현할 수 있도록 해준다. 사용 방법은 '::' 기호를 사용하여 [클래스명]::[메서드명] 과 같이 사용한다. 스태틱 메서드의 경우 인스턴스 대신 클래스 이름으로 사용할 수 있다. 2. 메서드 참조 형식 메서드 참조는 사용하는 패턴에 따라 다음의 3가지로 구분된다. - static method reference - instance method reference - constructor reference - static method reference static method reference는 클래스의 static method 를 메.. [JAVA] 쓰레드의 동기화 멀티 쓰레드 프로그램에서는 프로세스의 자원을 여러 쓰레드가 공유한다. 그렇기 때문에 각각의 작업이 다른 작업에게 영향을 끼치게 된다. 이러한 경우 공유 데이터의 변경으로 인해 개발자가 의도했던 결과가 나오지 않을 수 있다. 이러한 문제를 해결하기 위해서 임계영역 (critical section) 과 락 (lock) 개념을 도입하여 한 쓰레드가 작업을 종료할 때까지 다른 쓰레드에게 방해받지 않도록 한다. 공유 데이터를 임계영역으로 지정해놓고, 해당 영역의 lock 을 획득한 쓰레드만이 공유 데이터를 사용할 수 있도록 하여 문제를 해결한다. 이처럼 한 쓰레드가 진행 중인 다른 쓰레드를 방해하지 못하도록 막는 것을 쓰레드의 동기화 (synchronization) 이라고 한다. 자바에서는 synchronized.. [JAVA] 쓰레드 실행제어 1. 쓰레드 우선순위 쓰레드는 우선순위라는 속성을 가지고 있다. 이 우선순위의 값에 따라 쓰레드가 얻는 실행시간이 달라진다. 각 쓰레드가 수행하는 작업의 중요도에 따라 쓰레드의 우선순위를 다르게 지정하여 실행시간을 조절할 수 있다. - 쓰레드의 우선순위 지정 void setPriority(int newPriority) // 쓰레드의 우선순위를 지정한 값으로 변경한다. int getPriority() // 쓰레드의 우선순위를 반환한다. public static final int MAX_PRIORITY = 10; // 최대우선순위 public static final int MIN_PRIORITY = 1; // 최소우선순위 public static final int NORM_PRIORITY = 5; // 보통.. [JAVA] 쓰레드 구현 및 실행 (Thread, Runnable, start(), run()) 1. 쓰레드 구현 쓰레드를 구현하는 방법은 Thread 클래스를 상속받는 방법과 Runnable 인터페이스를 구현하는 방법, 두가지가 있다. 각각의 방식으로 구현은 다음과 같이 할 수 있다. // Thread 클래스 상속 class ThreadClass extends Thread { // Thread 클래스의 run() 을 오버라이딩 public void run() { ... } } // Runnable 인터페이스 구현 class RunnableClass implements Runnable { // Runnable 인터페이스의 추상메서드 run() 을 구현 public void run() { ... } } 둘 간의 큰 차이는 없지만 Thread 클래스를 상속받으면 다른 클래스를 상속받을 수 없기 때문에 .. 이전 1 2 3 4 ··· 8 다음