Java 24

HttpSession(서버 세션)

HttpSession ≠ 세션 스토리지(Session Storage)  Session Storage (브라우저 Web Storage API)브라우저에서 제공하는 클라이언트 측 임시 저장소탭/창을 닫으면 자동 삭제됨 (지속성 없음)저장 위치: 사용자 브라우저 메모리 HttpSession서버가 사용자 정보를 일정 시간 유지하기 위해 사용하는 저장소사용자별로 하나씩 생성되고, 사용자 개별 데이터(예: 로그인 정보)를 저장하기 위해 사용속도: 세션 접근은 일반적으로 빠르지만, 많은 데이터를 저장하거나 많은 사용자가 있으면 속도 저하 가능메모리: 힙 메모리(Heap Memory)에 세션을 저장하며,  사용자 수가 많아질수록 메모리 사용량 급증사용자 수가 많아질수록 메모리 사용량 급증하기 때문에 요즘 웹은 Http..

Java 2025.04.03

Servlet, JSP

서블릿(Servlet)자바에서 웹 애플리케이션을 개발하기 위한 클래스웹 서버(WAS, tomcat)와 연동되어 클라이언트(브라우저)의 요청을 받아 동적으로 응답을 생성보통 HttpServlet을 상속(extends) 받아 사용한다. ✅ 주요 객체HttpServletRequest request클라이언트의 요청 정보를 담고 있는 객체. 서버가 요청을 객체로 생성HttpServletResponse response서버가 클라이언트에게 응답을 보낼 때 사용하는 객체. 서버가 요청을 객체로 생성✅ Servlet vs JSPServlet자바 코드로 웹 로직을 처리하기에 적합UI 구성의 어려움 (HTML 작성이 복잡함)이후 JSP 출현JSP (Java Server Pages)HTML에 자바 코드를 삽입해 UI를 쉽게 ..

Java 2025.04.02

Comparable VS Comparator

Comparable과 Comparator는 객체 정렬 시 사용되는 인터페이스다.JIT 컴파일러 최적화 덕분에 성능 차이는 거의 나지 않으며, 사용 목적과 방식에 따라 적절하게 사용하여야 한다 [Java] JIT 컴파일러란?JIT 컴파일(just-in-time compilation) 또는 동적 번역(dynamic translation)은 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법이다. 컴파일러 vs 인터프리터 컴파일러와 인터프리터 모두 highhyeinisfree.tistory.com  ✅ Comparable객체 클래스에서 Comparable 를 implements 한 후, compareTo(T o) 를 구현객체 자신과 다른 객체를 비교하는 방식Collections.sort() 또는 A..

Java 2025.03.02

스트림(Stream)

데이터를 작은 조각으로 나누어 순차적으로 처리하는 방식이다. 유튜브로 스트림에 대한 간단한 예시를 들 수 있다. 유튜브 시청 시, 한번에 분 단위로 스킵을 한다면 버퍼링이 걸리게 된다. 왜냐하면 유튜브는 한꺼번에 영상 전부를 가져오는 방식이 아닌, 동영상 하나를 작은 조각으로 나눠 순차적으로 받아오는 스트리밍 방식이기 때문이다. 이처럼 스트리밍을 사용하면 전체 동영상을 모두 가져오지 않아도 실시간으로 재생할 수 있다. 이를 통해 실시간으로 데이터를 처리하고, 메모리를 효율적으로 사용할 수 있다 스트림의 특징 1. 원본 데이터를 변경하지 않는다 2. 휘발성이다 - 한번 사용한 스트림은 사라지게 된다. 3. 스트림은 collection에 정의되어 있다. 모든 컬렉션을 상속하는 구현체(map, filter, ..

Java 2023.06.21

오버로딩(Overloading)과 오버라이딩(Overriding)

오늘은 오버로딩과 오버라이딩에 대해 찾아봤다. 처음에는 비슷한 이름이라 헷갈리기도 하고, 비슷한 기능이겠거니 생각했지만 전혀 다른 기능이었다. 오버로딩은 같은 이름을 가진 메서드나 생성자를 여러 개 정의하는 것이다 매개변수의 개수, 타입, 순서 등을 서로 다르게 정의하여야 함 오버로딩된 메서드들은 같은 이름으로 호출되지만, 매개변수의 정보를 통해 호출될 메서드를 구별함 오버로딩을 통해 메서드의 이름을 좀 더 직관적이고 일관성 있게 사용할 수 있음 //오버로딩 예제 public int add(int a, int b) { return a + b; } public double add(double a, double b) { return a + b; } public int add(int a, int b, int ..

Java 2023.06.09

모던 자바 알아보기(람다, 스트림, Optional)

모던 자바란 Java 8 이상의 버전을 가리키며, 새로운 기능들을 포함한 자바의 현대적인 개발 스타일과 패러다임을 의미한다. 모던 자바의 개선 사항들은 코드의 가독성, 유지보수성, 생산성, 성능 등을 향상시키고, 개발자들이 더 효율적으로 자바 애플리케이션을 개발할 수 있게 한다. 이전 버전의 자바와 비교했을 때, 다음과 같은 주요 개선 사항들이 있다. 1. 람다 표현식 (Lambda Expressions): 함수형 프로그래밍을 위한 기능으로, 익명 함수를 간결하게 표현할 수 있다. 코드의 간결성과 가독성을 향상시킨다. 2. 스트림 API (Stream API): 컬렉션 데이터를 처리하기 위한 선언적인 방식을 제공한다. 병렬 처리와 메서드 체이닝 등을 통해 데이터 처리를 효율적으로 수행할 수 있다. 메서드..

Java 2023.05.30

쓰레드의 상태

쓰레드의 상태 상태 Enum 설명 객체생성 NEW 쓰레드 객체 생성(new()). start() 메서드 호출 전 상태 실행대기 RUNNABLE 실행 가능한 상태 실행 Running 실행중인 상태(start()메서드가 호출된 상태) 일시정지 WAITING 다른 쓰레드가 통지(notify)할 때까지 기다리는 상태 일시정지 TIMED_WAITING 주어진 시간 동안 기다리는 상태 일시정지 BLOCKED 사용하고자 하는 객체의 Lock이 풀릴 때까지 기다리는 상태 종료 TERMINATED 쓰레드의 작업이 종료된 상태

Java 2023.05.30

동기화(synchronized)

멀티 쓰레드의 경우, 자원을 공유하여 작업하기에 장애나 버그가 발생할 수 있다. 이러한 일을 방지하기 위한 방법이 동기화(synchronized)이다. synchronized(동기화)란? 한 쓰레드가 진행중인 작업을 다른 쓰레드가 침범하지 못하도록 막는 것이다. 동기화를 하려면 다른 쓰레드의 침범을 막아야하는 코드들을 '임계영역'으로 설정하여야 한다. 임계영역 : Lock을 가진 단 하나의 쓰레드만 출입이 가능한 영역 동기화 방법 1. 실행할 메서드 앞에 synchronized를 붙여 임계영역을 지정한다. public synchronized void asyncSum() { //코드 구현 .... } 2. 실행할 코드 묶음 앞에 synchronized를 붙여 임계영역을 지정한다. synchronized(해..

Java 2023.05.30

쓰레드 제어 메소드

쓰레드의 제어 쓰레드의 상태는 위와 같은 그림으로 나타낼 수 있다. interrupt() interrupt()는 일시정지 상태인 쓰레드를 실행대기 상태로 만든다. sleep() 현재 쓰레드를 지정된 시간 동안 멈추게 한다. 자기 자신에 대해서만 멈추게 할 수 있다. try - catch문을 작성하여야 한다. join() 정해진 시간 동안 지정한 쓰레드가 작업하는 것을 기다린다. 시간을 지정하지 않았을 때, 지정한 쓰레드의 작업이 끝날 때까지 기다린다. try - catch문을 작성하여야 한다. join()의 예제 Thread thread = new Thread(task, "thread"); thread.start(); try{ //join의 괄호안에 값(시간)을 입력하지 않았기 때문에 //thread가 ..

Java 2023.05.29

데몬 쓰레드와 사용자 쓰레드, 쓰레드 그룹 및 우선순위

데몬 쓰레드 데몬 쓰레드란, background에서 실행되는 낮은 우선순위를 가진 쓰레드를 칭한다. 보조적인 역할을 담당하며 대표적인 데몬 쓰레드로는 메모리 영역을 정리해주는 GC가 있다. 데몬 쓰레드 생성코드 //쓰레드 생성 Thread thread = new Thread(deamon); //true입력 시 데몬 쓰레드가 됨 //데몬 쓰레드는 사전에 정의된 횟수와 상관없이 메인 쓰레드가 동작 완료 시 종료됨 thread.setDaemon(true); 사용자 쓰레드 사용자 쓰레드는 foreground에서 실행되는 높은 우선순위를 가진 쓰레드를 칭한다. 프로그램 기능을 담당하며 대표적인 사용자 쓰레드로는 메인 쓰레드가 있다. 쓰레드 우선순위와 쓰레드 그룹 작업의 중요도에 따라 쓰레드의 우선순위를 다르게 부..

Java 2023.05.29