Java 8

[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

[Java] 객체지향 - final 2

- 그렇다면, 컴파일 과정에서 final이 붙으면 차이점이 있을까? 1. 컴파일 타임 상수final 변수 중에서도 선언과 동시에 리터럴 값으로 초기화된 static final 변수(예: static final int MAX = 10;)는 컴파일 타임 상수로 취급.인라인화(Inlining): 컴파일러는 코드에서 이 변수를 참조하는 부분을 실제 값으로 치환.실행 속도 향상: 런타임에 변수를 찾기 위해 메모리 주소를 참조할 필요 없이, 즉시 값을 사용하므로 성능이 미세하게 향상된다.Java // 컴파일 전static final int AGE = 20;int userAge = AGE;// 컴파일 후 (바이트코드 수준)int userAge = 20; // AGE 변수를 거치지 않고 직접 20이 주입됨 2. 메서드..

Java 2026.01.09

[Java] 객체지향

Q. final에 대해서 설명해보세요. final은 총 3개의 자리에서 쓸 수 있다. 사용되는 위치에 따라서 역할이 조금씩 다르다. - 변수(상수화)변수에 final을 붙이면 초기화 이후에 값을 변경할 수 없다. 본 타입 변수: 저장된 값을 변경할 수 없다.참조 타입 변수 (객체): 해당 변수가 가리키는 객체 주소를 바꿀 수 없음을 의미. (객체 내부의 필드 값은 변경 가능!) - 메서드 (재정의 금지)메서드에 final이 붙으면 해당 메서드는 하위 클래스에서 오버라이딩(Overriding)할 수 없다.부모 클래스에서 정의한 로직을 자식 클래스가 마음대로 바꾸지 못하게 보호해야 할 때 사용.- 클래스(상속 금지)클래스에 final이 붙으면 해당 클래스는 다른 클래스의 부모가 될 수 없다. 즉, 상속이 불..

Java 2026.01.08

[Java] JVM 2

jvm이란 이름에 자바가 붙었지만 자바만 사용할 수 있는 건 아니다. jvm은 소스 코드(.java)를 직접 읽는 것이 아니라, 컴파일된 결과물인 자바 바이트코드(.class 파일)를 실행합니다. 따라서 어떤 언어든지 컴파일러가 소스 코드를 JVM 바이트코드로 변환해주기만 하면 JVM 위에서 완벽하게 돌아간다.대표적으로 다음과 같은 언어들이 있다. 1. 코틀린 (Kotlin) 2. 스칼라 (Scala) 3. 그루비 (Groovy) 4. 클로저 (Clojure) 그렇다면 jvm 계열 언어를 일반적으로 컴파일해서 사용할 수는 없을까? 가능하다. 네이티브 방식이라고 해서, 실행 시점에 JVM이 코드를 해석하는 게 아니라, 실행하기 전(빌드 타임)에 미리 기계어로 다 번역해 버리면 된다. 구분JVM 실행 방식..

Java 2026.01.07

[Java] JVM에 대하여

오늘은 자바의 기초 개념에 대해서 정리해보겠습니다. 1. JVM이란? 자바가상머신이라고도 하며 자바를 실행할 수 있도록 해주는 엔진 역할을 합니다.컴파일러가 .java파일을 .class로 바꾸면, jvm은 .class 파일을 컴퓨터가 이해하는 기계어로 바꿔 실행시켜줍니다. 2. JVM의 주요 구성 요소와 기능JVM 내부에는 크게 세 가지 영역이 있습니다.① 클래스 로더 (Class Loader)작성한 .class 파일을 읽어와서 JVM의 메모리 영역에 배치하는 역할을 합니다. 프로그램 실행 중에 필요한 클래스를 그때그때 동적으로 로드합니다.② 런타임 데이터 영역 (Runtime Data Areas)프로그램을 실행하기 위해 OS로부터 할당받은 메모리 공간입니다. 가장 중요한 두개는 스택과 힙이 있습니다.스..

Java 2026.01.05