Java 19

[Java] (2) Hash Algorithm : 해시 충돌과 해결

Hash 충돌 💡 Hash 충돌서로 다른 값이 같은 해시 인덱스로 매핑되는 현상ex. 99 % 10 = 9, 9 % 10 = 9 → 같은 버킷으로 몰림💡 Hash 충돌 예시먼저 99 값 저장 → 해시 인덱스는 9이므로 9번 인덱스에 99 값 저장다음으로 9의 값 저장 → 해시 인덱스는 9이므로 9번 인덱스에 9 값 저장결과적으로 배열의 인덱스 9에는 처음 저장한 99 값은 사라지고, 마지막에 저장한 값 9만 남게된다.Hash 충돌 해결 위 예시에 설명된 Hash 충돌을 해결하기 위한 가장 단순한 방법은 CAPACITY를 값의 입력 범위만큼 키우는 것이다. 하지만 이 방법은 메모리 낭비가 심해진다. 따라서 다른 해결 방안으로는 같은 해시 인덱스의 값을 같은 인덱스에 저장할 수 있게 하는 것이있다. ?..

[Java] (1) Hash Algorithm

Hash 알고리즘 이란? 💡 Hash 알고리즘Hash 알고리즘은 데이터를 입력받아, 배열의 인덱스로 사용할 수 있는 값(해시 인덱스)을 계산하는 방법이다.이를 통해 데이터를 저장하거나 조회할 때 평균 O(1) 성능을 낼 수 있다.Hash 알고리즘이 왜 필요한가? 💡 등장 배경Array(배열)는 인덱스를 알면 O(1)로 값에 접근할 수 있지만, '값이 어느 인덱스에 있는지'를 찾으려면 선형 탐색하는 방법 밖에 없어서 O(n) 시간이 걸린다.Hash 알고리즘은 이 문제를 해결하기 위해 고안되었다.ex. 회원 ID가 저장돼 있다고 할 때, '이 ID가 있는가?'를 빠르게 알고 싶음 → 위치를 찾아야 가능 💡 Array 예시package collection.set;import java.util.Arrays..

[Java] Collection Framework

Collection Framework 💡 컬렉션 프레임워크 (Collection Framework)란?컬렉션을 표현하고 조작하기 위한 통합된 아키텍처 이 프레임워크는 12개가 넘는 컬렉션 인터페이스를 기반으로 하며, 이 인터페이스들의 구현체와 이를 조작하기 위한 알고리즘들을 포함한다.자바 컬렉션 프레임워크(Java Collections Framework, JCF)는 List, Set, Map 같은 인터페이스와, 이를 구현한 ArrayList, HashSet, HashMap 등의 클래스를 제공한다. 이 모든 것들은 java.util 패키지에 속해 있다.컬렉션 프레임워크는 데이터를 저장, 검색, 정렬, 그리고 체계적으로 관리하는 작업을 표준화된 메서드와 패턴으로 더 쉽게 할 수 있게 해준다.Tips : 컬..

[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) 영역에 저장됩니다. 객체가..