[Java] 까먹지 말아야 할 Java 스레드 생명 주기 및 상태 전이
자바에서 스레드의 생명주기는 여러 상태(state)로 나누어지며, 각 상태는 스레드가 실행되고 종료되기까지의 과정을 나타낸다.New (새로운 상태)스레드가 생성되고 아직 시작되지 않은 상태Thread 객체는 생성되었지만, start() 메서드가 호출되지 않은 상태 Runnable (실행 가능 상태)스레드가 실행될 준비가 완료된 상태 → CPU에 올릴 수 있다start() 메서드가 호출되면 이 상태로 진입스레드가 실행될 준비가 되어있고, 실제로 CPU에서 작업할 수 있는 상태하지만 모든 Runnable 스레드가 동시에 실행되진 않고, 운영체제의 스케줄링 방식에 따라 차례대로 실행된다스케줄링 실행 대기열에 있거나, 현재 CPU에서 돌아가고 있는 스레드 구분 불가보통 실행 상태라고 칭한다 Blocked (차단..
2025.03.08
no image
[Java] 까먹지 말아야 할 Java 메모리 구조
자바의 메모리 구조 메서드 영역 (Method Area)메서드 영역은 프로그램을 실행하는데 필요한 공통 데이터를 관리하는 영역이다 -> 프로그램의 모든 영역에서 접근 가능- 클래스 정보 : 클래스의 코드, 필드, 메서드, 생성자등 모든 코드 존재- static 영역 : static 변수 보관- 런타임 상수 풀 : 프로그램을 실행하는데 필요한 공통 리터럴 상수 보관 -> 이후 네트워크 부분에서 사용되는 PORT 번호 등을 사용할 때 접근 스택 영역 (Stack Area)우리가 흔히 스레드라고 칭하는 그 스택이다. 스레드별로 하나의 실행 스택이 존재하며, 이 스택 영역에 스택 프레임을 저장 -> 지역변수, 메서드 호출 정보 등 보관- 스택 프레임 : 메서드를 호출할 때마다 하나의 스택 프레임이 쌓이고, 메서..
2025.03.04
no image
[Java] 채팅 프로그램 소켓 연결 구현 1 - 1 대 1 통신을 해보자
순수 자바로 로컬 서버에서 실행할 수 있는 채팅 프로그램을 구현하는 것을 목표로 했다.연결하고 1대1 대화가 가능하도록 먼저 구현하고 차차 n:n 채팅이 되도록 리팩토링 해보자.서버 코드package chat;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;import java.util.Scanner;import static util.MyLogger.log;public class Server { private static final int PORT = 13423; public static v..
2025.02.09
no image
[Java] 두줄로 이해하는 객체 직렬화, 역직렬화
자바에서 객체 직렬화 (Serialization)는 메모리에 있는 객체 인스턴스를 바이트 스트림으로 변환하여 파일에 저장하거나 네트워크를 통해 전송할 수 있는 기능이다반대로 역직렬화 (Deserialization) 은 바이트 스트림을 다시 객체화 시키는 작업을 의미한다. 근데 요새는 XML, JSON , 데이터 베이스 쓰니까 잘 안쓰긴함ㅋㅋ그래도 XML, JSON , 데이터 베이스 같은 저장 방식의 조상님격이라 한번 알아봤다!import java.io.*;import java.util.ArrayList;import java.util.List;/** * Object 스트림은 컬렉션을 통으로 쓰고 통으로 읽는다 * writeObject() , readObject() */public class ObjectMe..
2025.01.28
no image
[Java] 예외처리 - 부모 자식 관계
자바는 모든 것이 객체다. 예외도 객체고 스레드도 객체고 너도 객체고 나도 객체다.오늘은 간단히 예외처리의 부모자식 관계에 대해 포스팅하겠다! 예외도 위 아래가 있어요예외도 상위 타입의 예외가 있고, 그것을 상속받는 하위 타입의 예외가 있다.본 포스팅에서는 뭐가 상위 타입 예외이고 뭐가 하위 타입 예외인지에 대한 것이 중요한게 아니기 때문에, 설명은 패스한다. 이번 주제에 대한 쉬운 이해를 위해 아래와 같은 코드가 있다고 가정하자(실제 동작하는 코드는 아님)//부모 클래스class Parent { void method() throws InterruptedException { // ... } } //자식 클래스class Child extends Parent { @Overr..
2025.01.02
no image
[Java] 컬렉션 - Array (배열) / 전,중,후 데이터 삽입
이번 주말에 있을 SQLD 시험을 준비하며.. 미뤄 왔던 포스팅을 다시 열심히 해야지..오늘은 컬렉션 프레임워크 중에서 ArrayList, 즉 배열리스트에 대해 포스팅하고자 한다.배열 리스트는 말 그대로 배열 + 리스트 의 개념을 합쳐 놓은 것이라는 선수 지식을 가지고 오늘의 복습을 시작하겠다.배열은 단순하면서도 복잡하면서도 아주 좋은 자료구조이다import java.util.Arrays;public class ArrayMain { public static void main(String[] args) { int[] arr = new int[5]; //index 입력 : O(1) System.out.println("==index 입력: O(1)=="); ..
2024.11.15
no image
[Java] 컬렉션 - Iterable, Iterator 와 for- each 문 (2)
이전 포스팅과 연결됩니다..!https://bdisappointed.tistory.com/64 [Java] 컬렉션 - Iterable, Iterator 직접 구현해보기 (1)오늘의 포스팅은 컬렉션 프레임 워크 중에 우리가 흔히 인텔리제이 에서 iter 이란 키워드로 편하게 배열을 탐색하게 해주는 바로 그 기능에 대해 포스팅 하고자 한다!사실 이전에 그냥 개꿀 기bdisappointed.tistory.com지난번 포스팅에서는 Iterable과 Iterator를 직접 구현해보았다.근데 그래서 우리가 인텔리제이에서 쓰는 iter, 즉 향상된 for 문이랑 이게 머선 상관인데?향상된 for문 (for- each 문)지난 포스팅에서 작성했던 코드에 for - each 문을 살짝쿵 추가해보자public class ..
2024.10.26
no image
[Java] 컬렉션 - Iterable, Iterator 직접 구현해보기 (1)
오늘의 포스팅은 컬렉션 프레임 워크 중에 우리가 흔히 인텔리제이 에서 iter 이란 키워드로 편하게 배열을 탐색하게 해주는 바로 그 기능에 대해 포스팅 하고자 한다!사실 이전에 그냥 개꿀 기능이네~ 하고 블로그에 글을 썼던 주제인데.. 사실 알고보면 복잡하고 복잡한 기능을 우리가 그냥 쓰기 편하게 인터페이스로 구현해놓은 것이었다..뭣도 모르고 사용 했던 향상된 for 문 (for - each)https://bdisappointed.tistory.com/33 [Java] 향상된 for문 (for - each문)향상된 for 문 (for - each)문이란배열을 배우고 응용하다 보면 배열의 0번째 인덱스부터 끝까지 한번 돌리고 싶은데,우리가 그럴 때마다 어떻게 했는가? 일단 아래 예시를 보자.//기존 for..
2024.10.26
no image
[Java] 제네릭 (Generic) (2)
저번 포스팅에서, 제네릭을 도입하여 코드의 타입 안전성과, 코드 재사용성을 늘려보았다.오늘은 1편에 이어 제네릭에 대해 두번째 포스팅을 해보고자 한다.동물 병원을 만들어보자예를 들어, 아래와 같이 Animal 클래스와 그의 자식 클래스인 Dog와 Cat이 있다고 하자.public class Animal { private String name; private int size; public Animal(String name, int size) { this.name = name; this.size = size; } public String getName() { return name; } public int getSize() { ..
2024.10.10