Java 14

[Java] Exception(예외)

오늘은 자바에서 예외처리에 대해서 정리해보겠습니다. 1. Exception(예외)이란? 프로그램 실행 중에 정상 흐름을 방해하는 문제 상황을 객체로 표현한 것이 예외입니다.예외가 발생하면 JVM은 예외 객체를 던지고(throw),현재 실행 흐름을 따라가며 잡을 수 있는 곳(catch)을 찾는 과정을 진행합니다.아무도 못 잡으면 프로그램(해당 스레드)은 종료되고, 보통 스택 트레이스가 출력됩니다.예외는 크게 3가지 계열로 많이 말합니다.Error: JVM/시스템 레벨(OutOfMemoryError 등) → 보통 애플리케이션에서 복구 대상 아님Exception: 애플리케이션이 다루는 예외그 중 RuntimeException 계열은 Unchecked나머지는 Checked예외처리를 하는 3가지 방법1. try-..

Java 2026.02.05

[Java] equals() 와 hashCode()

1. equals()란? equals()란 객체를 비교하는 함수입니다. 두 객체가 내용이 같아면 true입니다.반면에 == 은 메모리 주소(참조)비교입니다. 두 객체가 완전히 똑같은 한 객체인지 비교하는 것입니다. String a = new String("hi");String b = new String("hi");System.out.println(a == b); // false (서로 다른 객체)System.out.println(a.equals(b)); // true (내용은 같음) 보통 문자열 비교는 equals()로 하는게 편합니다. 2. hashCode()란? 객체를 어떤 번호로 바꿔주는 함수입니다.HashMap, HashSet 같은 해시 기반 컬렉션이 번호로 빠르게 찾기가 유리한 이유입..

Java 2026.02.04

[Java] Stream

오늘은 자바 개념 중 Stream에 대해서 정리해보겠습니다. Stream은 컬렉션에서 데이터를 꺼내 선언형(무엇을 할지) 으로 가공하는 데이터 처리 파이프라인입니다.리스트(배열) 같은 데이터에 필터 → 변환 → 정리 → 결과 만들기 를 파이프처럼 줄줄이 연결해서 처리하는 방식입니다.예시과일 목록에서 길이 5 이상인 것만 골라서 대문자로 만들고 정렬List fruits = List.of("apple", "kiwi", "banana");List out = fruits.stream() .filter(f -> f.length() >= 5) // 골라내기 .map(String::toUpperCase) // 바꾸기 .sorted() // 정렬 .toList(); // 결과 만들기filt..

Java 2026.02.03

[Java] GC

오늘 포스트에서는 GC, 가비지 컬렉터에 대해서 설명해보겠습니다. GC란?더이상 사용되지 않는 객체를 자동으로 찾아 메모리(Heap)를 회수하는 JVM의 기능입니다.개발자가 free()를 직접 호출하지 않아도 되는 이유이기도 합니다. GC Root에서 시작해서 참조를 따라가며 도달 가능한 객체는 살려두고그 어디에서도 도달할 수 없는 객체는 가비지(회수 대상) 대상GC Root 예시실행 중인 스레드의 스택(지역변수/파라미터)static 필드JNI 참조 등 GC의 대표적 동작Mark(표시): 살아있는 객체 표시Sweep(청소): 표시되지 않은(죽은) 객체 제거Compact(압축): 메모리 단편화를 줄이기 위해 객체를 당겨 정리 finalize() 수동 호출의 단점finalize()는 GC가 객체를 정리하기 ..

Java 2026.01.30

[Java] Synchronized에 대해 - 2

지난 시간에는 Synchronized의 정의에 대해서 알아봤습니다. Synchronized = 동기화 스레드가 여러개 있을 때 일종의 순서 맞추는 것입니다. 다시 말해 Synchronized를 써서 영역을 만들고, 한사람만 들어올 수 있게 키워드입니다. 누군가 들어오지 못하게 문을 잠가버린다고 생각하면 이해하기 쉬울 것 같니다. 위치1. 인스턴스 메서드public synchronized void plus() { ... }-> 현재 객체를 잠가버린다.-> 옆동네는 상관 x 2. static 메서드public static synchronized void plus() { ... }-> 클래스 자체를 잠가버린다.-> 객체의 개수에 상관없이 전부 기다려야-> 전역 lock 같은 느낌 3. 블록synchroniz..

Java 2026.01.26

[Java] Synchronized에 대해

오늘는 자바에서 Synchronized에 대해 설명할 예정입니다.​synchronized는 여러 개의 스레드가 하나의 자원(변수, 객체 등)에 동시에 접근할 때 발생하는 데이터 불일치 현상을 방지하기 위해 사용합니다.​쉽게 말해, 이 키워드를 통해서 순서를 제어하고 이를 통해 Thread-safe한 코드를 작성할 수 있으며, 자바에서는 객체마다 존재하는 모니터 락(Monitor Lock)을 활용해 이를 구현합니다.

Java 2026.01.23

[Java] static - 2

Java에서 static의 의미와 장점 정리이번 포스트에서는 지난 포스트에 이어서 Java에서 static이 무엇이고, 왜 사용하는지를 다시 한 번 정리해보겠습니다. 1. static의 기본 개념 Java에서 static은 객체(instance)가 아닌 클래스(class)에 소속된다는 의미. 즉,일반 변수 / 메서드 → 객체마다 각각 존재static 변수 / 메서드 → 클래스당 하나만 존재라는 차이가 있다. 2. static의 메모리 구조static 변수와 메서드는 JVM 메모리 구조 중 Method Area(메서드 영역) 라는 공용 메모리 공간에 저장된다.이 특징으로 인해 다음과 같은 성질을 가진다.클래스가 로딩되는 시점에 생성프로그램 종료 시까지 유지모든 인스턴스가 동일한 static 멤버를 공유 ..

Java 2026.01.18

[Java] static class와 static method

static 키워드란?프로그래밍에서 "객체(인스턴스)에 속하지 않고 클래스 자체에 속한다"는 의미. 하지만 static class와 static method는 사용 목적과 범위에서 차이가 있다.1. Static Method (정적 메서드)정적 메서드는 객체를 생성하지 않고도 클래스 이름을 통해 바로 호출할 수 있는 함수.특징:- 메모리의 스태틱 영역에 상주하여 프로그램 종료 시까지 유지된다.- 인스턴스 변수(non-static field)에 접근할 수 없으며, 오직 정적 변수만 사용할 수 있다.- 공통 유틸리티 함수를 만들 때 주로 사용됩니다. (예: Math.abs(), Integer.parseInt())2. Static Class (정적 클래스)static class는 언어마다 의미가 약간 다를 수 ..

Java 2026.01.16

[Java] 리플렉션(Reflection)

리플렉션이란 ?구체적인 클래스 타입을 알지 못해도 런타임에 클래스, 인터페이스, 필드, 메서드 등을 검사하거나 수정할 수 있는 자바의 강력한 기능을 말한다. 리플렉션이란, 거울이라는 뜻을 가지고 있는데 거울과 같이 객체 내부 구조를 들여다보고 조작하는 것과 같다. 일반적으로 코드는 컴파일 시점에 타입이 결정되지만, 리플렉션은 실행 중인 애플리케이션의 메타데이터에 접근하여 동작을 제어한다. jvm에서 학습했듯이 클라스 파일을 로드할 때, 해당 클래스의 정보를 담은 Class 객체를 생성하여 heap 메모리에 저장한다. 리플렉션을 이 객체를 통해 해당 클래서의 정보를 가져온다. 구분내용장점유연성: 컴파일 시점에 타입을 몰라도 동적으로 객체를 생성하고 실행할 수 있다.확장성: 프레임워크(Spring, Hibe..

Java 2026.01.13

[Java] 인터페이스와 추상클래스

오늘은 늘 헷갈리는 인터페이스, 추상클래스, 상속 등에 대해서 정리해보겠습니다. 1. 추상클래스- abstract 키워드 사용- 상속을 통해서 부모의 특징을 물려받음- 다중 상속 불가능- 상태 값 가질 수 있음- 생성자 가질 수 있음- 하나 이상의 추상 메서드 포함abstract class Animal { String name; // 필드 가질 수 있음 Animal(String name) { // 생성자 가능 this.name = name; } void breathe() { // 일반 메서드 System.out.println(name + "이(가) 숨을 쉽니다."); } abstract void sound(); // 자식이 반드시 구현해야 할 추..

Java 2026.01.10