Java 14

[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