전체 글 80

[JAVA] 스레드 Join

스레드는 생성하고 시작하고, 종료되는 생명주기를 가진다. 스레드의 상태New (새로운 상태) : 스레드가 생성되었으나 아직 시작되지 않은 상태Runnable (실행 가능 상태) : 스레드가 실행 중이거나 실행될 준비가 된 상태Blocked (차단 상태) : 스레드가 동기화 락을 기다리는 상태Waiting (대기 상태) : 스레드가 무한으로 다른 스레드의 작업을 기다리는 상태Time Waiting (시간제한 대기 상태): 스레드가 일정 시간 동안 다른 스레드의 작업을 기다리는 상태Terminated (종료 상태) : 스레드의 실행이 완료된 상태.자바 스레드(Thread) 의 생명주기는 여러 상태(state)로 나뉘며, 각 상태는 스레드가 실행되고 종료되기까지의 과정을 나타낸다. 자바 스레드의 생명주기를 자..

JAVA 2024.11.12

[JAVA] Runnable 을 만드는 다양한 방법

Runnable을 만드는 다양한 방법 중첩 클래스를 사용하면 Runnable을 더 편리하게 만들 수 있다. 참고로 모두 결과는 같아. 정적 충첩 클래스 사용package thread.start;import static util.MyLogger.log;public class InnerRunnableMainV1 { // 특정 클래스만에서만 사용되는 경우 정적 중첩 클래스 사용 public static void main(String[] args) { log("main() start"); MyRunnable myRunnable = new MyRunnable(); Thread thread = new Thread(myRunnable); thread.sta..

JAVA 2024.11.11

[JAVA] 데몬 스레드

스레드는 사용자(user) 스레드와 데몬(daemon) 스레드 2가지 종류로 구분할 수있다.  사용자 스레드 (non-deamon 스레드)프로그램의 주요 작업을 수행한다.작업이 완료 될 때 까지 실행된다.모든 user 스레드가 종류되면 JVM 도 종료된다.  데몬 스레드 백그라운에서 보조적인 작업을 수행한다.모든 user 스레드가 종류되면  데몬 스레드는 자동으로 종료된다. jvm 은 데몬 스레드의 실행 완료를 기다리지 않고 종료된다. 데몬 스레드가 아닌 모든 스레드가 종류되면, 자바 프로그램도 종료된다. 용어 - 데몬 : 그리스 신화에서 데몬은 신과 인간 사이의 중간적 존재로 , 보이지 않게 활동하며 일상적인 일들을 도왔다. 이런 의미로 컴퓨터 과학에서는 사용자에게 직접적으로 보이지않으면서 시스템의 백..

JAVA 2024.11.11

[JAVA] 스레드란? run() start() 의 차이

스레드란 무엇이면 왜 스레드 실행 시 run() 메서드가 아닌 start()를 호출하라고 하는 걸까?해당 내용을 알아보자. 자바 메모리 구조자바 메모리 영역은 크게 메서드, 스택, 힙 영역으로 나눠져 있다. 메서드 영역(Method Area) :  메서드 영역은 프로그램을 실행하는데 필요한 공통 데이터를 관리한다. 이 영역은 프로그램의 프로그램의 모든 영역에서 공유한다.클래스 정보 : 클래스의 실행 코드 (바이트 코드). 필드, 메서드와 생성자 코드 등 모든 실행 코드가 존재한다.static 영역 : static 변수들을 보관한다.런타임 상수 풀 : 프로그램을 실행하는데 필요한 공통 리터럴 상수를 보관한다.스택 영역 (Stack Area) : 자바 실행 시, 하나의 실행 스택이 생성된다. 각 스택 프레임..

JAVA 2024.11.11

[JAVA] String + 연산과 비효율성 StringBuilder의 해결 원리

String에 + 연산은 상수풀에 메모리가 할당되어 중간연산 과정에서 많은 객체를 생성한다. StringBuilider를 사용하면 중간과정의 비효율을 해결할 수 있다는데 어떠한 원리로 해결하였을까?궁금증이 생겨 해당 내용을 포스팅하게 되었다.   String에서 + 연산과 그 비효율성 String 객체에서 + 연산을 사용할 때마다 새로운 객체가 생성된다. 이는 불변 (immutable) 특성 때문에 발생하는데 , String 객체는 한번 생성되면 그 값을 변경할 수 없다.따라서 + 연산을 통해 여러 문자열을 이어 붙일 때, 중간 과정에서 새로운 String 객체들이 계속 생성되고,  이 객체들은 상수 풀에 할당되어 메모리를 추가로 차지한게 된다.  이로 인해 불필요한 객체가 계속해서 생성되고 메모리 사용..

JAVA 2024.11.10

[JAVA] 제네릭 (Generic) 2

타입 매개변수 제한 1 - 시작요구사항 : 개 병원은 개만 받을 수 있고, 고양이 병원은 고양이만 받을 수 있다. public class DogHospital { private Dog animal; public void set(Dog animal) { this.animal = animal; } public void checkup() { System.out.println("동물 이름 " + animal.getName()); System.out.println("동물 크기 " + animal.getSize()); animal.sound(); } public Dog bigger(Dog target) { return ..

카테고리 없음 2024.11.09

[JAVA] 제네릭 (Generic)

처음 제네릭에 관해 책을 읽었을 때 잘 이해가 가지 않아 해당 내용을 정리하게 되었다.단계별로 천천히 알아보자  제네릭이란?제레릭은 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시 타입 체크(compile - type check)를 해주는 기능이다. 객체의 타입을 컴파일 시 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어든다. 타입 안정성을 높힌다? 무슨 의미일까?package generic.ex1;public class IntegerBox { private Integer value; public void setValue(Integer value) { this.value = value; } public Integer getValue..

JAVA 2024.11.08

[자바의 신2] 정리해봅시다 [2장~ 11장]

2장. 가장 많이 쓰는 패키지는 자바랭같은 패키지에 있는 클래스를 제외하고, 별도로 import 하지 않아도 되는 패키지는 무엇인가요?java.lang 패키지는 별도로 import 하지 않아도 됩니다.자바의 메모리가 부족해서 발생하는 에러는 무엇인가요?자바의 메모리가 부족하여 발생하는 에러는 OutOfMemoryError입니다.메서드 호출관계가 너무 많아서 발생하는 에러는 무엇인가요?StackOverflowError자기 자신의 메서드를 다시 부르는 재귀호출 메서드와 같은 것을 잘못 구현했을 때 발생합니다.java.lang 패키지에 선언되어 있는 3개의 어노테이션에는 어떤 것들이 있고, 각각의 역할은?Deprecated : 컴파일러에게 더 이상 사용하지 않는 메서드임을 알립니다.Override : 해당 메..

JAVA 2024.11.07