분류 전체보기

· Spring
서론: 왜 직접 HTTP 서버를 만들어보는가?웹 개발을 할 때 우리는 대부분 Spring Boot 같은 프레임워크를 사용하여 서버를 구축한다.Spring Boot는 내부적으로 Tomcat, Jetty 같은 내장 서버를 사용하기 때문에, HTTP 요청이 어떻게 처리되는지 직접 고민할 일이 거의 없다. 그러나 만약 내장 서버가 없다면? 어떻게 동작하는지 예상이 가는가?? 라는 질문에 내가 대답하지 못했어서 시작하게 되었다. HTTP 서버의 동작 원리를 직접 구현해 본다면Socket 프로그래밍: 클라이언트와 서버 간의 데이터 전송 원리멀티스레딩 기초: 여러 클라이언트 요청을 동시에 처리하는 방법HTTP 프로토콜 구조: HTTP 요청(Request)과 응답(Response)의 동작원리 및 기본적인 웹 서버의 구..
· Java
개요일반적으로, 우리는 자바 HashMap이 평균적으로 O(1)의 시간 복잡도를 가진다고 배웁니다. 하지만 “해시 충돌(Hash Collision)”이 심해지면 성능이 급격히 떨어질 수 있다는 사실은 자칫 놓치기 쉽습니다. 또한, CPU 캐시 구조와 “참조 지역성(Reference Locality)”을 이해하면, 왜 이 문제가 현실에서 더 크게 체감되는지 알 수 있습니다. 이 주제는 백준 7453 번 문제를 풀다가 경험하게 되었는데https://www.acmicpc.net/problem/7453 C++,C 에서는 기존의 방법처럼 2개씩 쌍으로 묶어서 계산한다음에 한쪽 값을 해시 맵에 넣어두고 0을 만들기 위한 보수가 존재하는지 hash key 탐색으로 풀렸지만 자바의 경우에는 그렇지 않았다. 탐색 길이인..
· Java
개요자바 8에서 람다 표현식은 기존의 익명 클래스 방식과 다르게1. 익명 클래스를 생성하지 않고2. 바이트코드 수준에서 최적화된다.그럼에도 불구하고 람다를 배우면 항상 그냥 순회하는게 성능이 더 좋아~ 오버헤드가 발생해~ 로만 대강 알고있던 성능저하가 존재한다고 알고있었다. 그럼에도 불구하고 개발자들이 람다라는 표현식의 성능 최적화를 위해 어떻게 이를 구현했는지 바이트코드 분석을 통해 알아보자. 요약디슈거링(Desugaring)이 수행되며, 람다 표현식은 일반적인 정적 메서드로 변환된다.이후, 실행 시점에서 `invokedynamic` 바이트코드를 활용하여 동적으로 `MethodHandle`을 참조하게 된다.  디슈거링(Desugaring) 개념자바 8에서 람다 표현식은 내부적으로 익명 클래스를 생성하지..
· Java
개요자바 8의 핵심 기능 중 하나인 람다 표현식과 함수형 인터페이스의 개념을 살펴본데에 이어,@FunctionalInterface 구현체의 작성법과 생략 가능한 메서드 등을 통해서 람다 표현에 대해 익숙해진다.  또한 람다 표현식의 간소화가 어떻게, 왜 가능한지에 대해서도 확인해보자  또한, 이펙티브 자바 7장 아이템 44에서는 함수형 인터페이스를 직접 만들 경우 @FunctionalInterface 애너테이션을 반드시 사용하라고 권장한다. 그 이유는 다음과 같다.의도 명확성 – 해당 인터페이스가 람다 용도로 설계되었음을 명확히 알린다.컴파일러 검증 – 인터페이스가 정확히 하나의 추상 메서드만 가지도록 강제한다.유지보수성 향상 – 실수로 메서드를 추가하는 것을 방지하여, 코드의 안정성을 높인다.  꼭 직..
· Java
개요자바 8의 핵심 기능 중 하나인 람다 표현식과 함수형 인터페이스의 개념을 살펴본다. 이를 통해 코드의 간결화 및 유지보수성 향상의 이유를 이해하고, 자바 아키텍처 관점에서의 변화도 함께 분석한다. 배경: 익명 클래스에서 람다 표현식으로 자바 8 이전에는 특정 동작을 전달하기 위해 익명 클래스를 사용해야 했다. 예를 들어, `Comparator`를 활용하여 정렬을 수행하는 방식은 다음과 같다. 하지만 이 방식은 코드가 장황하고 보일러플레이트 코드가 많다. 자바 8부터는 람다 표현식을 활용하여 이를 간결하게 줄일 수 있다. 람다 표현식을 사용하면 불필요한 클래스 선언 없이 직관적으로 동작을 표현할 수 있다.  함수형 인터페이스와 `@FunctionalInterface`람다 표현식을 적용할 수 있는 함수형..
· Java
문제 1: 추상 클래스에서 static 메서드?abstract class Parent { static void show() { System.out.println("Parent 클래스"); } abstract void display();}class Child extends Parent { void display() { System.out.println("Child 클래스"); }}public class Test { public static void main(String[] args) { Parent.show(); }} Q1: 실행 결과는?"Parent 클래스""Child 클래스"컴파일 에러 발생런타임 예외 발생더보기✅ 정답:..
nstgic3
'분류 전체보기' 카테고리의 글 목록