자바

Study/Java

[Java] 불변 객체 (Immutable Object) 란?

나만의 WAS 서버를 구현하는 도중에 클라이언트의 HTTP 메시지를 요청받고, 이를 파싱해 객체로 다루기 위한 작업이 필요했다. 이 과정에서 생성된 HttpRequestMessage 라는 클래스는 처음 파싱 이후 수정될 일이 없다는 특성을 가지고 있다. 이 특성을 만족하기 위한 객체지향 프로그래밍에서 사용되는 불변 객체에 정리하고자 한다. 불변 객체 (Immutable Object)? 불변 객체는 객체가 생성된 이후에 그 상태를 변경할 수 없는 객체를 의미한다. 한 번 생성된 객체는 재할당 되는 것이 아니라면 영원히 그 상태가 변하지 않는다. 자바에도 불변 객체가 존재한다. java.lang.String 문자열 클래스가 그 예이다. String 으로 생성된 문자열 객체의 메서드를 직접 살펴본다면 내부의 ..

Study/Java

[Java] 자바의 스레드와 동작 과정

스레드 Thread 운영 체제를 배웠다면 스레드의 개념은 익히 알 것이다. 스레드는 프로그램 수행의 가장 작은 단위를 의미한다. 스레드는 한 가지 일을 하는 프로세스의 단점을 극복하고자 여러 가지 일을 동시에 하기 위해 탄생했다. 스레드는 다음과 같은 생성 주기를 갖는다. 💡 스레드의 생성 주기 Runnable: 준비 상태로 CPU 를 점유하고 있지 않으며 대기하고 있는 상태이다. Running: 실행 상태로 CPU 가 점유하고, 실행중인 상태를 의미한다. Dead: 수행할 동작이 모두 실행이 완료된 상태를 의미한다. Blocked: 실행 중에 일시 중단되어 CPU 점유를 잃은 상태를 의미한다. wait() 메서드를 통해 대기 상태로 전환되며, 대기 상태에서 notify() 메소드를 통해 Runnable..