Collection에서 "hash"라는 용어는 일반적으로 해시 기반 자료구조(Hash-based data structure)와 관련된 의미로 사용됩니다. 이러한 자료구조들은 객체를 저장하고 검색하기 위해 해시 함수(hash function)를 사용하여 객체를 해시 값으로 변환하고, 해당 해시 값을 인덱스로 사용하여 객체를 저장하거나 검색합니다. 해시(Hash)는 임의의 크기를 갖는 데이터[Key]를 고정된 크기의 값으로 변환하는 알고리즘입니다. 이렇게 변환된 값은 해시 값 또는 해시 코드라고도 합니다. 해시 함수는 입력 데이터의 작은 변화에도 결과 값이 크게 달라지도록 설계되어 있습니다. 따라서 입력 데이터가 달라지면 해시 값도 크게 달라집니다. ➡️ Key로 많이 사용되는 것은 다양한데, 일반적으로 다..
final 키워드는 자바에서 사용되는 한정자(modifier)로, 변수, 메서드, 클래스에 적용될 수 있습니다. final 키워드가 적용된 요소는 변경될 수 없는 불변성(Immutability)을 가지게 됩니다. final 필드final 키워드로 선언된 필드는 상수(Constant)로 취급됩니다. 한 번 초기화되면 그 값을 변경할 수 없습니다. final 필드는 일반적으로 대문자로 작성되며, 초기화는 선언 시 또는 생성자에서 이루어집니다. 상수의 값은 프로그램 실행 도중에 변경할 수 없기 때문에 일반적으로 고정된 값이나 설정값에 사용됩니다.final int MAX_VALUE = 100; final double PI = 3.14159; final String APPLICATION_NAME; public M..
✅ 제네릭(Generic)이란?제네릭(Generic)은 자바에서 타입 안정성을 확보하고 재사용성을 높이기 위해 도입된 기능입니다. 제네릭은 클래스, 인터페이스, 메서드 등에서 사용할 수 있으며, 컴파일 시에 타입 체크를 수행하여 타입 안정성을 보장합니다. 🔎—간단하게 알아보는 컴파일과 런타임 컴파일 : JVM이 해석할 수 있는 바이트 코드로 변환되는 과정( .java → .class ) 런타임 : 바이트 코드가 JIT에 의해 기계어로 변환되어 프로그램이 실행 🔹제네릭이점타입 안정성(Type Safety)제네릭은 컴파일 시에 타입 체크를 수행하여 타입 안정성을 보장합니다. 즉, 잘못된 타입 사용으로 인한 런타임 에러를 사전에 방지할 수 있습니다. 타입 체크를 통해 컴파일러는 프로그램에서 발생할 수 있는 타..
🔎static 필드 == class 필드 == static 변수 == class 변수 == 공유변수 위의 단어들은 문맥에 따라 약간의 차이가 있을 수 있지만 대부분 비슷한 의미로 쓰입니다. ✅ static 필드자바에서 static 필드는 클래스 수준의 변수로, 해당 클래스의 모든 인스턴스가 공유하는 필드입니다. static 필드는 클래스가 처음으로 로드될 때 초기화되며, 프로그램이 실행되는 동안 메모리에 상주하게 됩니다. static 필드는 JVM의 메모리의 Method Area에 저장됩니다. 정적 변수(즉, static 변수)는 클래스 수준의 변수이기 때문에 해당 클래스의 인스턴스화 여부와는 관계없이 메모리에 유지됩니다. 이러한 변수는 해당 클래스의 모든 인스턴스에서 공유되며, 클래스 이름을 통해 직접..
✅ Set Interface 자바에서 Set은 중복된 요소를 허용하지 않는 컬렉션 인터페이스입니다. Set은 수학적인 집합 개념을 모델링하며, 고유한 요소들의 모음을 나타냅니다. Set은 다양한 구현체를 가질 수 있으며, 가장 일반적인 구현체로는 HashSet, TreeSet, LinkedHashSet이 있습니다. 중복되는 요소(원소)를 허용하지 않습니다.저장 순서를 유지하지 않습니다. (LinkedHashSet 만 예외) Set 인터페이스는 Collection 인터페이스를 확장하고 있으며, 다양한 메서드를 제공합니다. 예를 들어, Set에 요소를 추가하려면 add() 메서드를 사용하고, 요소를 삭제하려면 remove() 메서드를 사용합니다. 또한, Set의 크기를 확인하려면 size() 메서드를 사용할..
✅ 생성자(Constructor)자바에서 생성자(Constructor)는 클래스의 인스턴스를 초기화하는 특별한 메서드입니다. 객체를 생성할 때 호출되며, 주로 객체의 멤버 변수를 초기화하고 객체의 초기 상태를 설정하는 데 사용됩니다. 생성자는 클래스 이름과 동일한 이름을 가지고 있으며, 반환 값(return)이 없고 실제로 반환 타입을 선언하지 않습니다. 생성자의 특징생성자는 클래스의 인스턴스를 초기화하는 데 사용됩니다.생성자는 객체를 생성할 때 자동으로 호출됩니다.생성자는 클래스 이름과 동일한 이름을 가지고 있습니다.생성자는 반환 값(return)이 없고, 반환 타입을 선언하지 않습니다.클래스에 생성자를 명시적으로 선언하지 않으면 컴파일러가 기본 생성자를 자동으로 생성합니다.(default Constr..
✅ Throwable자바에서 Throwable은 모든 예외와 오류의 최상위 클래스입니다. Throwable은 예외와 오류 모두를 포함하며, 이를 통해 예외 처리 및 오류 처리를 일관되게 다룰 수 있습니다. Throwable은 다음과 같은 주요 특징을 갖습니다. 🔎—예외(Exception)예외는 프로그램이 실행 중에 예측 가능하고 처리 가능한 상황을 나타냅니다. 예외는 예외 처리 코드를 통해 프로그램의 정상적인 흐름을 제어할 수 있습니다. 예를 들어, 파일이 존재하지 않거나 유효하지 않은 데이터를 입력받는 경우 등이 예외 상황에 해당합니다. 예외는 java.lang.Exception 클래스를 상속받는 클래스들로 표현됩니다. —오류(Error)오류는 프로그램이 심각한 상황에 직면하여 복구할 수 없는 상태에 ..
💡Java에서는 제네릭 배열을 지원하지 않습니다. 이는 배열의 공변성 때문입니다. 배열의 공변성은 프로그래밍 언어에서 타입 시스템의 개념 중 하나입니다. 공변성은 주로 타입 변환(타입 캐스팅)과 관련이 있습니다. ✅ 배열의 공변성배열의 공변성(covariance)은 자바 배열의 특징 중 하나입니다. 공변성은 자식 타입의 배열이 부모 타입의 배열의 참조 변수에 대입될 수 있는 성질을 의미합니다. 이는 배열의 타입이 배열 요소의 타입의 하위 타입이면 형변환이 가능하다는 것을 의미합니다. 공변성을 통해 부모 타입의 배열 참조변수가 자식 타입 배열을 참조할 수 있습니다. 예를 들어, 자식 클래스가 부모 클래스의 모든 기능을 상속받은 경우, 부모 타입의 배열을 자식 타입의 배열로 취급할 수 있습니다. 이는 공변성..
🔎메소드를 호출할 때 파라미터를 전달하는 방법에는 크게 두 가지가 있습니다. 이는 값에 의한 전달(Call by Value)과 참조에 의한 전달(Call by Reference)입니다. 각각의 전달 방식에 대해 설명하고, 샘플 코드를 통해 알아보겠습니다. ✅ 값에 의한 전달(Call by Value)값에 의한 전달은 메소드에 파라미터로 전달되는 값의 복사본을 전달하는 방식입니다. 메소드 내에서 전달된 값을 변경하더라도 원본 변수에는 영향을 주지 않습니다. Call by Value는 메서드를 호출할 때 값을 넘겨주기 때문에 Pass by Value 라고도 부릅니다. 메서드를 호출하는 호출자 (Caller) 의 변수와 호출 당하는 수신자 (Callee) 의 파라미터는 복사된 서로 다른 변수입니다. publi..
✅ Java에서 말하는 복사란?복사는 원본을 그대로 둔 채, 동일한 데이터를 가진 새로운 객체를 생성하는 것입니다. 그래서 Java에서 복사는 clone() 메소드를 반드시 사용해야 합니다. 해당 메소드를 사용하지 않고 단순히 참조 변수에 기존 변수를 대입하는 것은 복사가 아닙니다. 단지 대입에 불과합니다. 반드시 clone() 메소드를 통해서 새로운 객체를 생성해야합니다. 객체 안에 필드의 참조 변수를 원본 참조 객체를 참조할지, 원본 참조 변수를 토대로 새로운 참조 객체를 생성할지 여부에 따라 얕은 복사와 깊은 복사로 나뉘는 것입니다. ➡️ Java에서 복사에 필요한 조건은 다음과 같습니다.Clonealbe Interface를 구현해야 한다.Object.clone() 메소드를 오버라이드해서 정의해야 ..