Java 13

(java) 패턴 매칭 instanceof 캐스팅 제거 (Flow Scoping 완벽 이해)

자바 개발을 하다 보면 특정 타입을 확인하고 그 타입의 메서드를 쓰기 위해 지겹게 반복하는 코드가 있습니다. 바로 instanceof로 확인하고 다시 (Casting)을 하는 과정이죠.오늘은 JDK 16부터 정식 도입되어 우리 코드를 훨씬 깔끔하게 만들어준 패턴 매칭(Pattern Matching) 기능과, 은근히 헷갈리는 스코프(Scope) 규칙을 정리해 보겠습니다.1. 우리가 그동안 작성하던 방식 (AS-IS)기존에는 객체의 타입을 확인한 뒤, 다시 명시적으로 캐스팅을 해줘야 했습니다.if (obj instanceof String) { String str = (String) obj; // 아... 이 코드를 또 써야 하나요? System.out.println(str.toUpperCase()..

자바/자바 2026.01.20

(자바) Apache Kafka 핵심 개념 (RabbitMQ <->Redis (Pub/Sub) <->Apache Kafka 차이 )

1. Apache Kafka란 무엇인가?Apache Kafka는 LinkedIn에서 개발하여 오픈소스로 공개한 **분산 이벤트 스트리밍 플랫폼(Distributed Event Streaming Platform)**입니다.기존의 메시징 시스템이 "메시지를 주고받는 것"에 집중했다면, Kafka는 **"데이터(이벤트)를 지속적으로 생성하고, 저장하고, 처리하는 것"**에 초점을 맞춥니다.핵심 특징높은 처리량(High Throughput): 초당 수백만 건의 이벤트를 처리할 수 있습니다.영속성(Persistence): 메시지를 메모리가 아닌 **디스크(Disk)**에 저장하여, 장애가 발생해도 데이터가 유실되지 않습니다.확장성(Scalability): 서버(Broker)를 수평적으로 늘려 성능을 확장하기 쉽습..

자바/자바 2025.12.15

(JAVA) 함수형 인터페이스 완벽 정리: 람다부터 스트림까지의 연결고리

1. 왜 함수형 인터페이스가 등장했는가?1.1 배경 및 목적배경: Java 8 이전에는 메서드(동작) 하나를 파라미터로 넘기려면 거추장스러운 **익명 내부 클래스(Anonymous Inner Class)**를 써야 했다. (보일러플레이트 코드 발생)목적: "함수를 변수처럼 다루자(동작 파라미터화)"는 함수형 프로그래밍의 니즈를 충족하고, 코드를 간결하게 만들기 위해 **람다(Lambda)**가 도입되었다.정의: 람다식을 담을 수 있는 그릇, 그것이 바로 **함수형 인터페이스(Functional Interface)**다. Code: Before & After // [Before: Java 8 이전] 익명 내부 클래스 사용// 코드가 뚱뚱하다. (핵심 로직보다 껍데기가 더 큼)Collections.sor..

자바/자바 2025.12.03

(자바) 인프런 강의(자바 ) *널널한 개발자

part 1, 2 JVM과 클래스, 객체 생성, 그리고 알아둬야 할 개념들1. JVM에서 클래스 로딩 → 객체 생성 과정자바에서 객체는 JVM이 클래스 로더를 통해 클래스를 메모리에 적재한 후에야 생성할 수 있습니다.흐름은 다음과 같습니다:클래스 로딩:클래스 로더가 .class 파일을 읽고 JVM 메모리에 올립니다.메타데이터, 메서드 정보, static 변수 등이 메소드 영역(자바 8 이후는 Metaspace) 에 저장됨.링크 & 초기화:심볼릭 참조 → 실제 메모리 주소로 연결static 변수 초기화객체 생성 (new 키워드):힙(Heap) 메모리에 객체 공간 확보멤버 변수 기본값 초기화명시적 초기화 → 생성자 호출 순으로 진행생성자 호출:객체의 초기 상태를 설정super()를 통해 부모 생성자까지 호출..

자바/자바 2025.09.02

(자바) 자바 I/O 기본 *자바의 신 DAY 10

1. Java I/O 기본 구조1.1 Stream의 분류자바의 입출력 스트림은 크게 두 가지 계열로 나뉩니다.바이트 스트림(Byte Stream)최상위 클래스: InputStream, OutputStream1바이트 단위로 입출력대상: 파일, 네트워크, 이미지, 바이너리 등문자 스트림(Character Stream)최상위 클래스: Reader, Writer2바이트 유니코드 문자 단위로 입출력대상: 텍스트 기반 입출력1.2 공통 특징Closeable 인터페이스 구현: 스트림은 외부 자원을 사용하므로 명시적으로 close() 호출 필요.Flushable 인터페이스: OutputStream, Writer 등 출력 스트림은 버퍼에 데이터를 모았다가 flush()로 전송 가능.2. 주요 클래스 기능 및 차이2.1 ..

(JAVA) java.lang 패키지란

자바의 java.lang 패키지란?자바에서 가장 핵심적인 클래스들이 모여 있는 기본 패키지자바 언어 그 자체의 일부로 간주되며, import 없이 자동 사용 가능JVM이 자바 코드를 실행할 수 있게 해주는 필수 기반 클래스 포함모든 자바 프로젝트의 출발점이자 중심 주요 역할별 클래스 분류영역대표 클래스설명객체 기본 구조Object, Class, Enum상속, 동등성, 리플렉션문자열 처리String, StringBuilder, StringBuffer불변 문자열, 동적 문자열수치/형 변환Integer, Long, Double, Character래퍼 클래스, 오토박싱시스템 제어System, Runtime, Process입출력, 종료, 시간, 환경변수예외 구조Throwable, Exception, Error예외..

자바/자바 2025.07.06

java(자바)- 제네릭(Generic)의 구조적 이해 – 타입, 힙/스택, 참조형까지 완전 정리

자바 제네릭(Generic)의 구조적 이해 – 타입, 힙/스택, 참조형까지 완전 정리1. 제네릭이란?제네릭(Generic) 은 자바에서 컴파일 시점에 타입을 명시적으로 지정할 수 있게 하는 문법이다.타입 안정성을 높이고 형변환을 줄이기 위해 도입되었으며, 대표적으로 List, Map, Box 등의 형태로 사용된다.예시:List list = new ArrayList();list.add("abc");String value = list.get(0); // 형변환 없이 사용 가능2. 자바 제네릭의 핵심 특징 – 타입 소거(Type Erasure)자바의 제네릭은 타입 소거(Type Erasure) 방식으로 동작한다.즉, 제네릭 타입 정보는 컴파일 시에만 존재하고, 런타임에는 모두 제거된다.예:List list =..

자바/자바 2025.06.15

(JAVA) 불변 객체

불변 객체란 뭘까?프로그래밍 하다 보면 "이 객체 상태가 바뀌면 안 되는데..." 싶은 순간이 있죠.그럴 때 딱 맞는 개념이 바로 불변 객체(Immutable Object)입니다.불변 객체는 한 번 만들면 내부 상태가 절대 바뀌지 않는 객체를 말해요.객체의 내부 상태를 제공하는 메소드를 제공하지 않거나 방어적 복사(defensive-copy)를 통해 제공한다.쉽게 말해, 생성 이후에는 그냥 읽기 전용! (read-only) 왜 불변 객체가 좋을까?.1. 코드가 깔끔하고 안전함상태가 안 바뀌니까 예상 못 한 사이드 이펙트도 없고, 디버깅도 쉬워져요.특히 협업할 때 다른 사람이 뭘 건드릴까 걱정 안 해도 되는 게 제일 큼.2. 자료구조와 찰떡궁합Map, Set, Cache 같은 데서 많이 쓰이는데,값이 안 ..

자바/자바 2025.04.25

(java) 기본 배열(Array), 동적 배열(Dynamic Array), 연관 배열(Associative Array)의 개념과 내부 동작 원리를 설명

Java에서는 데이터를 저장할 때 다양한 형태의 배열 구조를 사용할 수 있습니다.세 가지 대표적인 구조인 기본 배열(Array), 동적 배열(Dynamic Array), 연관 배열(Associative Array)의 개념과 내부 동작 원리를 설명하겠습니다.1. 배열 (Array)배열은 같은 타입의 데이터를 일정한 순서로 나열하여 저장하는 자료구조입니다. Java에서 배열은 다음과 같은 특성을 가집니다:📌 특징동일한 데이터 타입만 저장 가능→ 예: int[], String[] 등고정 크기→ 생성 시 크기를 지정하면 이후 변경 불가연속된 메모리 공간에 저장→ 메모리의 주소가 연속적으로 할당되어 있음인덱스를 통한 접근→ 0부터 시작하는 정수 인덱스를 사용하여 요소 접근 int[] nums = new int[..

자바/자바 2025.04.22

(Intellij) 인텔리제이 jsp 변경 사항 적용 안될때 해결 방법 (적극 추천)

회사 프로젝트에서 기존 이클립스 쓰다가 IntelliJ로 툴 변경함.환경 설정하면서 JSP 화면 반영이 안 되는 문제가 생김.🔍 문제 상황이클립스에선 JSP 수정하면 바로 반영됐음IntelliJ에선 서버는 잘 뜨는데 JSP 변경이 적용 안 됨심지어 jsp 파일이 호출은 되는데, 수정 내용이 안 보이는 상태였음처음엔 캐시 문제인가 싶어서 서버 재시작도 해보고, clean도 해봤지만 소용없었음🧩 원인Run > Edit Configurations... 들어가보니Environment 항목 아래 Working directory가 비어 있었음* 만약 Working directory 필드가 안보인다면 -> Modify options -> Working directory 체크 하면 필드 표시 됨.!!!!!!!..

기타/설정법 2025.04.17