728x90

Java 10

JAVA Lambda 한눈에 보기 : Lambda와 함수형 인터페이스: 자바는 왜 람다를 도입했을까?

Lambda와 함수형 인터페이스: 자바는 왜 람다를 도입했을까?들어가며람다는 “문법이 짧아졌다”는 이야기만으로 끝나기 쉽다. 그런데 실제로 코드를 읽다 보면 아래에서 계속 막힌다.컴파일러는 어느 인터페이스의 구현으로 이 람다를 붙이는가(타깃 타이핑)Function이면 되는데 왜 ToIntFunction을 쓰는가 (박싱·성능)람다가 잡는 this는 누구의 this인가검사 예외(checked) 를 던지는 람다는 왜 잘 안 되는가메서드 참조 String::length는 “어떤 형태의 함수형 인터페이스”에만 들어갈 수 있는가이 글은 왜 필요했는지에서 시작해, 언어 규칙(타깃 타이핑·SAM·캡처) 과 java.util.function 설계, 메서드 참조의 분류, 그리고 실무/면접에서 나오는 골든 질문까지 한 번에..

CS/JAVA 2026.04.04

Java Stream 한눈에 보기 : 컬렉션에 담지 않고 흘려보내며 가공하는 파이프라인

JavaStream: 컬렉션에 담지 않고 흘려보내며 가공하는 파이프라인들어가며for-loop를 한 단계씩 풀어 쓰던 손이 어느 순간.stream().filter(...).map(...).toList()로 바뀌었다 — 그런데이건 단순히 짧아진 게 아니라, 무엇을 할지와 어떻게 할지의 경계가한 칸 옮겨간 사건이다. 반복문을 쓸 때는 "인덱스를 올리고,요소를 꺼내고, 조건을 검사하고, 결과 리스트에 넣는다"까지 전부 내가 직접써야 했다. 스트림으로 옮겨 가면 그중 어떻게 돌릴지는라이브러리가 가져가고, 나는 무엇을 할지만 적는다.그런데 여기서 끝나면 "짧아서 좋다"는 이야기로 멈춘다. 실제로 스트림을일정 기간 쓰다 보면, 의외로 언어 문법 수준이 아니라의미론(semantic) 수준에서 막히는 지점들이 줄줄이 나..

CS/JAVA 2026.04.04

자바 입출력 한눈에 보기 : IO vs NIO: 왜 Buffer, Channel, Selector를 들고 나왔을까?

들어가며InputStream.read() 한 줄과 ByteBuffer.put() 한 줄은 겉으로 비슷해 보인다. 그런데 운영 방식은 완전히 다르다.전통 java.io 는 스트림 파이프와 블로킹 read/write가 중심이다. “바이트가 흘러온다”에 가깝게 생각하면 읽기 쉽다.java.nio 는 버흼는 조각을 두고, position / limit / capacity 로 내가 어디까지 썼고 어디까지 읽을지를 직접 맞춘다. 채널은 그 버퍼와 짝을 이룬다.Selector 는 “여러 채널을 한 스레드가 감시한다”는 이벤트 루프 모델이다. 필기에서 별표 친 ACCEPT / READ 가 왜 핵심인지까지 연결해야 서버 그림이 선명해진다.목차1) IO와 NIO를 공부할 때 먼저 던질 질문2) 전통적인 java.io는 어..

CS/JAVA 2026.04.04

Java 비교 한눈에 보기 : Comparable vs Comparator: 정렬 기준은 객체 안에 둘까, 밖에 둘까?

Comparable vs Comparator: 정렬 기준은 객체 안에 둘까, 밖에 둘까?들어가며compareTo와 compare는 “음수면 앞, 양수면 뒤”로 외우면 잠깐 편하다. 그런데 실무·면접에서 막히는 지점은 다른 데에 있다.equals와 compareTo가 말하는 동치가 다르면 TreeMap·TreeSet이 어떤 괴현상을 일으키는가Comparator 체인을 읽을 때 thenComparing이 “언제” 발동하는가“자바 정렬은 퀵소트 아닌가요?” 라는 질문에 어디까지가 사실인가원시형 int[] 과 List 은 왜 다른 정렬 엔진으로 가는 게 자연스러운가이 글은 정렬 기준을 어디에 둘지(내장 vs 주입) 를 정리한 뒤, Comparator 유틸 전부를 실무 관점에서, 마지막으로 TimSort와 퀵소트..

CS/JAVA 2026.04.04

Java 동시성 한눈에 보기 : 프로세스, 스레드, Thread Pool, Sync/Async, CompletableFuture까지

Java 동시성 한눈에 보기 : 프로세스, 스레드, Thread Pool, Sync/Async, CompletableFuture까지들어가며Java 동시성을 공부할 때 가장 헷갈리는 이유는 여러 질문이 한꺼번에 등장하기 때문이다.프로세스와 스레드는 무엇이 다른가왜 여러 스레드가 동시에 돌면 값이 꼬이는가synchronized, Lock, Atomic은 각각 무엇을 해결하는가스레드가 많으면 왜 오히려 느려질 수 있는가동기 / 비동기와 Blocking / Non-blocking은 무엇이 다른가ExecutorService, Future, CompletableFuture, WebFlux는 어디에 연결되는가즉 동시성은 단순히 "여러 개를 동시에 실행한다"는 이야기가 아니다.실행 단위를 이해해야 하고공유 자원을 안전..

CS/JAVA 2026.03.26

JVM 한눈에 보기 GC부터 ZGC까지: 큰 그림, 내부 구조, 구현체 비교, ZGC 심화

JVM 한눈에 보기 GC부터 ZGC까지: 큰 그림, 내부 구조, 구현체 비교, ZGC 심화들어가며JVM GC를 처음 공부할 때 가장 헷갈리는 지점은 두 가지가 섞여서 들어오기 때문이다.첫 번째는 GC 공통 모델이다.Reachability AnalysisGC RootYoung / Old GenerationMinor GC / Major GC / Full GCStop-The-World, SafepointBarrier두 번째는 HotSpot GC 구현체다.Serial GCParallel GCCMSG1ZGCShenandoah즉, GC를 이해하려면 먼저 공통 구조를 보고, 그 다음 각 구현체가 이 구조를 어떻게 다르게 구현하는지 봐야 한다.이 글은 그 흐름을 한 파일 안에서 아래 순서로 정리한다.GC는 왜 필요한가..

CS/JAVA 2026.03.12

JVM 한눈에 보기: Interpreter, JIT, Inline, Safepoint까지

JVM 한눈에 보기: Interpreter, JIT, Inline, Safepoint까지들어가며앞 글에서는 JVM을 전체 런타임 시스템으로 보고,클래스 로딩과 메모리 구조를 중심으로 큰 그림을 정리했다.그 흐름을 아주 단순하게 요약하면 이렇다.ClassLoader가 클래스를 메모리에 올린다Runtime Data Areas가 실행 중 필요한 데이터를 저장한다Stack Frame 위에서 메서드가 실행된다Heap에는 객체가 생성된다그런데 여기서 자연스럽게 다음 질문이 생긴다.실제 바이트코드는 누가 실행하는가JVM은 항상 한 줄씩 해석만 하는가자주 실행되는 코드는 왜 빨라지는가메서드 호출은 어떻게 최적화되는가GC나 스레드 덤프는 실행 중인 스레드를 어떻게 멈추는가이 질문에 답하려면 JVM의 Execution ..

CS/JAVA 2026.03.11

JVM 한눈에 보기: 클래스 로딩부터 메모리 구조까지

JVM 한눈에 보기: 클래스 로딩부터 메모리 구조까지들어가며Java를 공부하다 보면 가장 자주 듣는 단어 중 하나가 JVM이다.하지만 막상 JVM을 설명하려고 하면 "자바 코드를 실행해 주는 가상 머신" 정도에서 멈추기 쉽다.실제로는 그 안에서 꽤 많은 컴포넌트가 협력한다.클래스를 메모리에 올리고, 바이트코드를 검증하고, 메서드를 실행하고, 객체를 할당하고, 더 이상 필요 없는 객체를 회수하는 과정까지 모두 JVM 내부에서 벌어진다.이 글은 JVM 전체를 처음부터 끝까지 한 번에 정리하기보다, 아래 질문에 답하는 데 집중한다.Java 코드는 어떻게 실행되는가클래스는 언제, 어떻게 로드되는가JVM 메모리는 어떻게 나뉘는가객체와 메서드 실행은 메모리 어디에서 일어나는가1) JVM은 무엇을 하는가JVM(Jav..

CS/JAVA 2026.03.11

[LeetCode] 62. Unique Paths 풀이 회고

[LeetCode] 62. Unique Paths 풀이 회고백트래킹으로 시작해서 메모이제이션 DFS를 거쳐 1차원 DP로 정리한 과정 (Java)문제 링크: https://leetcode.com/problems/unique-paths/유형: 백트래킹으로 접근 가능, 하지만 정답 풀이는 다이나믹 프로그래밍체감 난이도: 처음에는 쉬워 보이는데, "경로를 다 가볼 것인가"와 "상태의 답을 저장할 것인가"를 구분하는 지점이 핵심인 문제1. 문제를 처음 마주했을 때문제를 처음 보면 가장 먼저 드는 생각은 단순하다.로봇은 오른쪽 아니면 아래쪽으로만 이동할 수 있으니,현재 위치에서 두 방향으로 계속 가 보면 결국 모든 경로를 셀 수 있지 않을까?실제로 이 생각 자체는 틀리지 않았다.정답을 빠뜨리지 않는다는 점에서는 ..

CodingTest 2026.03.11

[프로그래머스] 이모티콘 할인행사 (Java)

[프로그래머스] 이모티콘 할인행사(Java)완전탐색으로 접근은 맞았는데, 테스트 3개에서 시간초과가 발생했다.이번 글은 "어디서 시간이 터졌는지"와 "어떻게 구조를 바꿨는지"를 중심으로 정리한다.문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/1503681) 처음 접근처음에는 visit[]를 방문 체크 + 할인율 저장 배열로 같이 사용했다.visit[i] == 0이면 아직 미결정visit[i] == 10/20/30/40이면 i번 이모티콘 할인율 결정아이디어 자체는 나쁘지 않았다. 방문 관리와 할인율 상태를 한 배열로 표현할 수 있기 때문이다.2) 시간초과가 났던 중간 코드아래 코드는 실제로 많은 케이스는 통과했지만, 3개에서 시간초과가 발생..

CodingTest 2026.03.06
728x90