[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
[Algorithm] 회문 문자열
설명앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 회문 문자열이라고 합니다.문자열이 입력되면 해당 문자열이 회문 문자열이면 "YES", 회문 문자열이 아니면 “NO"를 출력하는 프로그램을 작성하세요.단 회문을 검사할 때 대소문자를 구분하지 않습니다.입력 첫 줄에 길이 100을 넘지 않는 공백이 없는 문자열이 주어집니다.출력 첫 번째 줄에 회문 문자열인지의 결과를 YES 또는 NO로 출력합니다.예시 입력 1 gooG예시 출력 1YES Solution 1import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class String7 { public static String Solut..
2025.02.16
no image
[Algorithm] 중복문자 제거하기
설명소문자로 된 한개의 문자열이 입력되면 중복된 문자를 제거하고 출력하는 프로그램을 작성하세요.중복이 제거된 문자열의 각 문자는 원래 문자열의 순서를 유지합니다.입력 첫 줄에 문자열이 입력됩니다. 문자열의 길이는 100을 넘지 않는다.출력 첫 줄에 중복문자가 제거된 문자열을 출력합니다.예시 입력 1 ksekkset예시 출력 1kset Solutionpackage String;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.LinkedHashSet;import java.util.Set;public class Main { public static String S..
2025.02.15
no image
[Algorithm] 문자 찾기
문자 찾기설명한 개의 문자열을 입력받고, 특정 문자를 입력받아 해당 특정문자가 입력받은 문자열에 몇 개 존재하는지 알아내는 프로그램을 작성하세요.대소문자를 구분하지 않습니다.문자열의 길이는 100을 넘지 않습니다.입력 첫 줄에 문자열이 주어지고, 두 번째 줄에 문자가 주어진다.문자열은 영어 알파벳으로만 구성되어 있습니다.출력 첫 줄에 해당 문자의 개수를 출력한다.예시 입력 1 Computercoolerc예시 출력 12 Solutionpackage String;import java.util.Scanner;public class Main { public static int Solution(String input, char target) { // 둘다 대문자화 해서 비교 inpu..
2025.02.15
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
LG 유레카 SW 교육 2기 전공자 불합격(예비) 후기
기말고사가 끝나자마자부터 호기롭게 준비했던 LG 부트캠프 유레카 교육에 예비 - 불합격한 후기를 적어본다.중간고사 - SQLD - 기말고사 - 유레카 준비 라는 과정을 이어오며 쉴새 없이 달렸던 24년도 말 ~ 25년 초 인것 같다.이번 유레카 선발과정에서 진행한 서류 + 코테 + 면접 모두 인생에서 처음 해본 소중한 경험이었다.주변에서 나한테 불합격 해서 슬프지 않냐라는 질문을 들으면 사실 그렇게 크게 슬프지 않다라고 답한다. (사실 좀 아쉽긴 함ㅋ)내가 열심히 준비했는데도 좋은 결과를 얻지 못한 것은 정말 아쉬웠지만, 크게 동요되지 않으려고 정말 노력하고 있다. 또한, 이번에는 아쉬웠으나 언젠가는 나의 진가가 들어날 상황도 충분히 있다고 생각하려고 하고 있다.그리고 주변에 장난스런 분위기와 함께 "그..
2025.01.10
no image
[Java] 예외처리 - 부모 자식 관계
자바는 모든 것이 객체다. 예외도 객체고 스레드도 객체고 너도 객체고 나도 객체다.오늘은 간단히 예외처리의 부모자식 관계에 대해 포스팅하겠다! 예외도 위 아래가 있어요예외도 상위 타입의 예외가 있고, 그것을 상속받는 하위 타입의 예외가 있다.본 포스팅에서는 뭐가 상위 타입 예외이고 뭐가 하위 타입 예외인지에 대한 것이 중요한게 아니기 때문에, 설명은 패스한다. 이번 주제에 대한 쉬운 이해를 위해 아래와 같은 코드가 있다고 가정하자(실제 동작하는 코드는 아님)//부모 클래스class Parent { void method() throws InterruptedException { // ... } } //자식 클래스class Child extends Parent { @Overr..
2025.01.02