Java 16

[Java] static 영역을 활용한 변수 중복 제거

final 필드 static을 활용한 중복 제거💡문제 상황final 변수를 생성자를 통해 초기화하는 것이 아닌 필드에서 초기화하는경우, 객체를 생성할 때 마다 똑같은 값을 가진 변수들이 메모리에 저장되면서 중복이되고 메모리가 낭비된다. ✅ 예시 : final 필드를 인스턴스마다 중복 초기화public class Person { // 매 객체마다 "KOREA" 문자열이 생성됨 → 메모리 낭비 private final String country = "KOREA"; public void printCountry() { System.out.println(country); }}public class Main { public static void main(String[] ar..

[Java] main() 메서드

main() 메서드란?public static void main(String[] args)Java에서 main() 메서드는 JVM이 프로그램 실행을 시작하는 지점입니다. 모든 Java 애플리케이션은 다음과 같은 시그니처를 가진 main() 메서드를 포함해야 합니다. In the Java programming language, every application must contain a main method whose signature is : public static void main(String[] args).main()이 static인 이유 → 프로그램 시작 시 객체를 생성할 수 없으니 클래스 로딩만으로 실행 가능해야 한다.static 메서드는 같은 클래스의 다른 static 메서드만 직접 호출 가능p..

[Java] static 변수와 메서드 VS 인스턴스 변수와 메서드

static 1️⃣ static 메서드는 인스턴스 변수와 메서드에 직접 접근할 수 없습니다.static 메서드는 클래스에 속하며, 특정 인스턴스에 속하지 않기 때문에 인스턴스 변수나 인스턴스 메서드에 직접 접근할 수 없습니다. "Class methods cannot access instance variables or instance methods directly—they must use an object reference."public class MyClass { private int instanceVar = 10; public static void staticMethod() { // System.out.println(instanceVar); // 컴파일 에러 발생 }} ➡️..

[Java] 클래스의 멤버 메서드 종류 : static 메서드, 인스턴스 메서드

static 메서드💡static 메서드란?static 키워드로 선언된 메서드는 클래스에 속하며, 특정 인스턴스에 속하지 않습니다. 따라서 객체를 생성하지 않고도 클래스 이름을 통해 직접 호출할 수 있습니다. "Static methods, which have the static modifier in their declarations, should be invoked with the class name, without the need for creating an instance of the class."정적 메서드, 클래스 메서드라고도 부릅니다.static 메서드 사용 방법static 메서드는 클래스 이름을 통해 호출합니다.ClassName.methodName();예를 들어, Math 클래스의 abs 메서..

[Java] 클래스 멤버 변수(필드) 종류 : static 변수, 인스턴스 변수

static 변수란? 💡static 변수란?static 키워드로 선언된 필드는 클래스 변수이며, 클래스 인스턴스의 수와 관계없이 하나의 복사본만 존재한다.“A class variable is any field declared with the static modifier; this tells the compiler that there is exactly one copy of this variable in existence, regardless of how many times the class has been instantiated.” static 변수는 본질적으로 전역 변수와 유사하다.“Static variables are, essentially, global variables.” 💡static 변수..

[Java] static 변수

static 변수란? Java에서 static 변수(클래스 변수 또는 정적 변수라고도 불립니다)는 클래스에 속한 변수로, 해당 클래스가 JVM에 로딩될 때 단 한 번만 생성되며 클래스당 하나만 존재합니다. 이 변수는 모든 인스턴스가 공유하므로, 클래스의 모든 객체가 공통적으로 접근하거나 공유해야 하는 값이 있을 때 사용됩니다. static 변수는 JVM의 메서드 영역(Method Area) 내 static 영역에 저장되며, Java 8 이상에서는 Metaspace에 저장됩니다. 한 번 생성되면 프로그램이 종료될 때까지 존재합니다. JVM Spec §2.5.4 : "The method area stores per-class structures such as the run-time constant pool..

[Java] 변수 생명 주기

변수 생명 주기❓왜 중요한걸까?불필요하게 낭비되는 메모리 사용을 관리해주기때문에?지역 변수 (Local Variables)💡저장 위치JVM 스택 영역의 각 스레드별 스택 프레임 내의 로컬 변수 배열(Local Variable Array)에 저장됩니다. 💡생명 주기메서드 호출 시 스택 프레임이 생성되며, 해당 프레임 내에 지역 변수와 매개변수가 저장됩니다. 메서드 실행이 종료되면 스택 프레임이 제거되며, 이와 함께 지역 변수도 사라집니다. 💡특징지역 변수는 메서드 실행 동안에만 존재하므로 생명 주기가 짧습니다. 또한, 각 스레드는 독립적인 스택을 가지므로, 지역 변수는 스레드 간에 공유되지 않습니다.인스턴스 변수 (Instance Variables)💡저장 위치힙(Heap) 영역에 저장됩니다. 객체가..

[Java] JVM 런타임 데이터 영역 : 메서드, 스택, 힙 영역

JVM의 메서드, 스택, 힙 영역JVM 메모리는 총 5가지 영역으로 구성되며, 그중 메서드, 힙, 스택 영역은 자바 애플리케이션에서 변수나 객체를 저장하는 주요 런타임 메모리입니다.메서드 영역 (Method Area) 메서드 영역은 JVM이 시작될 때 생성되는 메모리 공간으로 모든 스레드가 공유하는 구조입니다. 이 영역은 클래스 단위의 정보를 저장하는 공간으로, 크게 3가지의 데이터가 저장됩니다.첫번째로는 클래스의 바이트 코드가 로딩됩니다. 즉, 클래스에 선언된 메서드, 생성자, 필드 등에 대한 모든 실행 코드인 클래스 정보가 이곳에 저장됩니다.두번째로는 static 변수입니다. 클래스 레벨에서 공유되는 static 필드는 인스턴스와 무관하게 메서드 영역에 저장됩니다. 예를 들어, Math.PI 같은 ..

[Java] 생성자 (Constructor)

생성자 (Constructor)💡생성자란?객체가 생성될 때 자동으로 호출되어, 객체의 초기 상태를 설정하는 특별한 메서드 클래스 이름과 동일한 이름을 가져야 하며, 리턴 타입이 없다.한마디로 정리하면, 생성자는 객체가 생성될 때 필드 값을 초기화하기 위해 자동으로 호출되는 특별한 메서드이며, 반환 타입이 없고 클래스 이름과 동일해야 한다.A class contains constructors that are invoked to create objects from the class blueprint. Constructor declarations look like method declarations—except that they use the name of the class and have no return..

[Java] 절차 지향 프로그래밍 vs 객체 지향 프로그래밍

절차 지향 프로그래밍 (Procedural Programming)💡절차 지향 프로그래밍 이란?절차 지향 프로그래밍은 프로그램의 실행 흐름이 위에서 아래로 순차적으로 진행되는 방식입니다.절차적 프로그래밍 언어는 시간의 흐름에 따라 코드를 작성합니다. ✅ 예시C 언어는 절차 지향 프로그래밍의 대표적인 예로, 프로그램을 함수의 집합으로 구성하며, 각 함수는 특정 작업을 수행합니다.#include int sum(int a, int b) { return a + b;}int main() { int result = sum(5, 3); printf("Sum: %d\n", result); return 0;}객체 지향 프로그래밍 (Object-Oriented Programming, OOP)💡객체 ..