[Java] JDK / JRE / JVM
·
Java
JDK, JRE, JVM과 차이점을 알아보자.먼저, 구조는 다음과 같다.JVM(Java Virtual Machine)JVM, 즉 자바 가상 머신은 자바 소스코드를 실행시키기 위한 가상 기계를 의미한다.실행시키기 위한 구체적인 방식은 다음과 같다. 자바 소스코드를 컴파일하여 .class의 바이트코드 파일을 생성한다.컴파일된 바이트코드(중간) 파일을 인터프리터와 JIT 컴파일러를 통해 기계어로 변환하여 실행한다.※ 인터프리터: 바이트코드 명령어를 한 줄씩 읽어 기계어로 변환하는 방식JIT 컴파일러: 반복되는 코드들을 기계어로 변환한 후 캐싱하여, 나중에 해당 코드가 나오면 바로 실행하는 방식 JVM에 대해 더 자세히 알고 싶다면2025.08.30 - [Java] - [Java] JVM(Java Virtual..
[Java] Reflection
·
Java
Reflection이란?자바의 Reflection은 런타임에 동적으로 특정 클래스 정보를 추출·조작할 수 있는 프로그래밍 기법이다.다시 말해, 구체적인 클래스 타입을 알지 못하더라도 해당 클래스의 메소드·타입·변수에 런타임에 접근할 수 있도록 해주는 API이다. Reflection은 Class 라는 클래스로부터 다른 클래스 정보를 얻을 수 있다. Class 클래스Class 클래스(java.lang.Class)는 클래스의 메타데이터(메소드·필드·생성자 등 정보)를 JVM의 메소드 영역에서 가지고 있다.이러한 Class 객체를 얻는 3가지 방법은 다음과 같다. .class 리터럴 사용.class 리터럴은 특정 클래스의 인스턴스가 존재하지 않을 때도 Class 객체를 얻을 수 있다.코드를 컴파일하는 시점에서..
[Java] 익명 클래스, 람다식
·
Java
익명 클래스(Anonymous Class)자바의 익명 클래스는 이름이 없는 클래스이다.익명 클래스는 클래스 정의와 동시에 객체를 생성하며, 해당 객체는 일회성으로만 사용된다.(※ 일회성이기 때문에 메모리 관리에서 효과적이다.) 다음은 Subject 클래스를 상속받아 즉석에서 익명 클래스로 구현한 예제이다.이 익명 클래스(코드 블록)는 Subject의 exam() 메소드를 오버라이딩한 뒤, english로 할당되었다.class Subject { public void exam() { System.out.println("시험을 봅니다."); }}public class Anonymous { public static void main(String[] args) { Subj..
[Java] 제네릭(Generic)
·
Java
제네릭(Generic)제네릭은 클래스 내부가 아닌 외부에서 사용자에 의해 지정되는 타입을 의미한다. 제네릭을 사용하는 이유는클래스의 재사용성이 높아지며,컴파일 과정에서 잘못된 타입이 사용되는 것을 방지할 수 있다.제네릭을 쓰지 않는다면, Object 타입으로 클래스나 메소드를 선언하고객체를 생성할 때 원하는 타입으로 캐스팅을 해야 한다.. (귀찮..😮‍💨) 제네릭 타입 파라미터제네릭은 추후 지정하게 될 타입을 위해 모양 안에 아래 타입을 선언해주어야 한다. : Type, 일반적으로 쓰이는 타입 파라미터: Element, List 내 요소에 주로 사용한다.: Key, Map 형식의 키에 주로 사용한다.: Value, Map 형식의 값에 주로 사용한다.: Number, Integer / Double /..
[Java] 인터페이스 vs 추상 클래스
·
Java
인터페이스와 추상 클래스의 차이를 알아보자. 인터페이스(Interface)1. 인터페이스는 동일한 동작을 보장하는 데 초점을 둔다.💡따라서 인터페이스에 선언한 메소드는 implements하는 하위 클래스에 모두 구현해야 한다.만약 하위 클래스가 수행해야 하는 동작이 여러 개라면 다중 상속도 가능하다. 2. 인터페이스에서 가질 수 있는 메소드는 구현부가 없는 추상 메소드와 구현부를 가지는 default, static 메소드가 있다.인터페이스에서 흔히 볼 수 있는 추상 메소드는 구현부가 없다!implements하는 하위 클래스가 인터페이스에서의 모든 추상 메소드를 오버라이딩 해야 한다.interface Bus { void depart(); void arrive();}class RedBus implem..
[Java] final vs static vs static final
·
Java
finalfinal은 한 번 값을 저장하면, 더 이상 수정이 불가능하다.final을 적용할 수 있는 곳은 총 3곳이다. final을 적용할 경우변수한 번 값을 저장하면, 더 이상 수정이 불가능하다.메소드해당 메소드를 오버라이딩할 수 없다.클래스해당 클래스를 상속할 수 없다. staticstatic은 객체를 생성하지 않고 호출할 수 있다.static을 적용할 수 있는 곳은 총 3곳이다. static을 적용할 경우변수클래스 단위로 변수를 공유한다.메소드객체 생성 없이 클래스명.메소드이름()로 호출할 수 있다.정적 중첩 클래스외부 클래스의 static 멤버에만 접근할 수 있으며, 외부 클래스의 인스턴스 없이 바로 생성하여 사용할 수 있다. static은 JVM이 실행되는 동안 메소드 영역에 유지된다.따라..
[Java] JVM(Java Virtual Machine)
·
Java
JVM(Java Virtual Machine)JVM, 자바 가상 머신은 자바를 실행하기 위한 가상 기계를 의미한다. 가상 기계는 소프트웨어로 구현한 물리적인 컴퓨팅 환경을 의미한다.가상 기계에 대해 더 자세히 알고 싶다면, 2025.08.27 - [Development/개발 공부] - 가상 머신(VM, Virtual Machine) 를 참고하면 된다. 다음은 자바 애플리케이션이 실행되는 과정을 도식화한 것이다. 1) MyProgram.java라는 자바 소스 코드가 존재할 때,2) 컴파일러는 이 소스 코드를 컴파일하여 바이트코드로 이루어진 MyProgram.class 파일을 생성한다.3) 컴파일된 중간 파일은 JVM 위에서 CPU가 이해할 수 있는 기계어로 변환되고, 실제 연산을 수행한다. JVM의 동..
[Java] LocalDate / LocalTime / LocalDateTime 클래스
·
Java
Date 클래스 이후, Java 8 버전에서 새롭게 출시된 3개의 클래스에 관해 소개하려고 한다. > Date 클래스 포스팅2025.06.04 - [Java] - [Java] Date 클래스 LocalDate- 날짜 정보(년, 월, 일)를 나타내는 클래스- 오늘 날짜를 또는 특정 날짜로 LocalDate 객체를 생성할 수 있다. LocalDate ldNow = LocalDate.now();LocalDate ldYesterday = LocalDate.of(2025, 6, 5);System.out.println(ldNow); // 2025-06-06System.out.println(ldYesterday); // 2025-06-05 minus(), plus(): 생성된 LocalDate의 객체로부터 날짜를 ..
[Java] Date 클래스
·
Java
Date- 날짜와 시간 정보를 나타내는 클래스- 1970-01-01 00:00:00 UTC 기준의 시간부터 경과한 밀리초(ms)를 저장하고, 시스템 시간으로 변환하여 출력 Date date = new Date();System.out.println(date); // Wed Jun 04 12:50:45 KST 2025 getTime(): Date 객체가 내부에 저장하고 있는 UTC 기준의 시간부터 경과한 밀리초(ms)를 출력 after(Date date): 정해진 날짜(date)로부터 후의 시점인지 true/false 여부를 출력 before(): 정해진 날짜(date)로부터 전의 시점인지 true/false 여부를 출력 System.out.println(date.getTime()); // 17490090..