| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- event
- 프로그래머스
- Gradle
- 연습문제
- 코딩테스트
- jre
- 티스토리챌린지
- code blocks
- Kotlin
- Java
- 삽입
- stack
- Unity
- MSA
- 탐색
- 아키텍처
- 오블완
- JPA
- 이진트리
- Spring
- EDA
- bean
- redis
- 백준
- jdk
- 플러스 백엔드
- 알고리즘
- 트리
- Kafka
- docker
- Today
- Total
목록Java (17)
Repository
9단계: 실전 프로젝트 & 베스트 프랙티스실무에서 겪은 문제들과 해결 방법을 바탕으로, 단순한 이론이 아닌 '실제로 작동하는 코드'와 '유지보수 가능한 설계'를 만드는 방법을 다룹니다.9.1 코드 품질Effective Java 핵심 정리생성자 대신 정적 팩토리 메서드정적 팩토리 메서드의 장점// ❌ 전통적인 생성자public class User { private String name; private String email; private int age; public User(String name, String email, int age) { this.name = name; this.email = email; this.age = age; } ..
8단계: Java 기능 (Java 17+)4년간의 실무에서 Java 8부터 Java21까지 마이그레이션을 진행하며 겪은 경험을 바탕으로, 단순한 기능 소개가 아닌 '언제', '왜', '어떻게' 사용해야 하는지를 실전 관점에서 다룹니다.8.1 Java 8-11 주요 기능Java 8의 게임 체인저들Lambda & Stream API: 함수형 프로그래밍의 시작Lambda 표현식의 혁명// ❌ Java 7 이전: 익명 클래스List names = Arrays.asList("Alice", "Bob", "Charlie");Collections.sort(names, new Comparator() { @Override public int compare(String s1, String s2) { ..
7단계: 디자인 패턴 & 아키텍처4년간의 실무에서 마주한 복잡한 설계 문제들을 해결한 경험을 바탕으로, 단순한 패턴 암기가 아닌 '언제', '왜', '어떻게' 사용해야 하는지를 실전 관점에서 다룹니다.7.1 생성 패턴싱글톤 패턴: 올바른 구현 방법다양한 싱글톤 구현 방식과 함정들실무에서 마주한 싱글톤 문제들// ❌ 문제 1: Eager Initialization의 문제점public class EagerSingleton { private static final EagerSingleton INSTANCE = new EagerSingleton(); private EagerSingleton() { System.out.println("EagerSingleton created"); } ..
6단계: JVM & 성능 최적화4년간의 실무에서 마주한 성능 이슈와 JVM 튜닝 경험을 바탕으로, 단순한 이론이 아닌 실제 프로덕션 환경에서 적용 가능한 최적화 기법들을 다룹니다.6.1 JVM 이해하기JVM 메모리 구조 완벽 가이드Heap vs Stack: 메모리 영역별 특성 이해메모리 영역 다이어그램┌─────────────────────────────────────────┐│ JVM Memory │├─────────────────────────────────────────┤│ Method Area (Metaspace in Java 8+) ││ - Class metadata ││ - Method b..
5단계: Java 동시성 & 멀티스레딩멀티스레딩은 Java의 가장 강력하면서도 위험한 기능입니다. 4년간의 실무에서 겪은 수많은 동시성 버그와 그 해결 과정, 그리고 안전한 멀티스레드 프로그래밍의 핵심을 담았습니다.5.1 스레드 기초Java 멀티스레딩 입문Thread vs RunnableThread 클래스 상속public class ThreadExample { // 방법 1: Thread 클래스 상속 static class MyThread extends Thread { private String name; public MyThread(String name) { this.name = name; } @Override ..
4단계: Java 함수형 프로그래밍 (Java 8+)Java 8은 자바 역사상 가장 혁명적인 변화를 가져왔습니다. Stream API, Lambda, Optional은 단순한 문법 변화가 아닌, 코드를 작성하는 패러다임 자체의 변화입니다. 4년간의 실무에서 체득한 함수형 프로그래밍의 진수를 담았습니다.4.1 Stream APIStream API 완벽 가이드Stream의 개념과 특징Stream이란?// 전통적인 방식 (명령형)List users = getUsers();List names = new ArrayList();for (User user : users) { if (user.getAge() >= 20) { names.add(user.getName()); }}Collections..
3단계: Java 컬렉션 & 제네릭실무에서 가장 많이 사용하는 컬렉션 프레임워크와 제네릭을 내부 동작 원리부터 성능 최적화까지 완벽하게 정리했습니다.3.1 컬렉션 프레임워크List 완벽 가이드: ArrayList vs LinkedList내부 구조와 동작 원리ArrayList: 동적 배열public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, java.io.Serializable { // 내부적으로 배열 사용 private Object[] elementData; private int size; // 기본 용량 private static final int DEFAULT_CAPACI..
2단계: Java 객체지향 프로그래밍4년간의 실무에서 마주한 객체지향의 진짜 모습을 담았습니다. 단순한 문법이 아닌, '좋은 설계'가 무엇인지, '왜' 그렇게 해야 하는지를 깊이 있게 다룹니다.2.1 클래스와 객체클래스 설계의 기본 원칙생성자 오버로딩: 유연성과 명확성의 균형기본 생성자의 함정public class User { private String name; private String email; private int age; private String address; private String phone; // ❌ 나쁜 예: 너무 많은 파라미터 public User(String name, String email, int age, String address, S..