본문 바로가기

Java

(31)
Java Collection Framework-2 Hash 해시(Hash)는 임의의 크기를 갖는 데이터[Key]를 고정된 크기의 값으로 변환하는 알고리즘입니다. 이렇게 변환된 값은 해시 값 또는 해시 코드라고도 합니다. 해시 함수는 입력 데이터의 작은 변화에도 결과 값이 크게 달라지도록 설계되어 있습니다. 따라서 입력 데이터가 달라지면 해시 값도 크게 달라집니다. Key로 많이 사용되는 것은 다양한데, 일반적으로 다음과 같은 요소들이 키로 많이 활용됩니다 1. 숫자: 숫자는 고유한 값을 가지고 있고, 비교적 간단하게 처리할 수 있으므로 키로 많이 사용됩니다. 예를 들어, 고객 ID, 주문 번호, 학번 등은 숫자로 된 키로 사용될 수 있습니다. 2. 문자열: 문자열도 키로 많이 사용됩니다. 예를 들어, 이메일 주소, 사용자명, 도메인 이름 등은 문자열로 ..
Java Collection Framework-1 자바 공식 Collection Framework 튜토리얼 Trail: Collections (The Java™ Tutorials) The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Java Language Changes for a summary of updated docs.oracle.com https://en.wikipedia.org/wiki/Java_collections_frame..
Functional Interface 함수형 인터페이스 함수형 인터페이스(Functional Interface)는 자바 8에서 소개된 개념으로, 오직 하나의 추상 메소드만 가지는 인터페이스를 말합니다. 이러한 함수형 인터페이스는 람다 표현식(Lambda Expressions)와 메소드 참조(Method References) 등과 함께 사용됩니다. Java 8에서는 java.util.function 패키지를 통해 많은 표준 함수형 인터페이스를 제공하고 있습니다. 이들 중 몇 가지를 예로 들면: 1. Predicate: T 타입의 객체를 인자로 받아 boolean을 반환하는 함수입니다. `test(T t)`라는 메소드를 가집니다. 2. Consumer: T 타입의 객체를 인자로 받아 결과를 반환하지 않는 함수입니다. `accept(T t)`라는..
자바 예외 처리 Linux Exception Handling CPU에서 발생하는 대부분의 예외는 Linux에서 오류 조건[error conditions]으로 해석됩니다. 그 중 하나가 발생하면 커널은 예외를 발생시킨 프로세스에 비정상적인 조건을 알리는 신호를 보냅니다. 예를 들어 프로세스가 0으로 나누기를 수행하면 CPU는 "나누기 오류"를 발생시킵니다." 예외가 발생하고 해당 예외 처리기가 현재 프로세스에 SIGFPE 시그널를 보낸 다음 복구 또는 (해당 신호에 대해 시그널 핸들러가 설정되지 않은 경우) 중단하는 데 필요한 단계를 수행합니다. ※ Linux Signal # kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8..
Callable & ExecutorService Callable 자바에서 Callable 인터페이스는 멀티스레드 프로그래밍에서 비동기적으로 실행할 작업을 나타내는데 사용됩니다. Runnable 인터페이스와 유사하게 작동하지만, Callable은 작업 실행 후 결과를 반환할 수 있으며, 실행 중에 예외를 던질 수 있다는 점에서 차이가 있습니다. 기본 구조 Callable 인터페이스는 java.util.concurrent 패키지에 정의되어 있으며, 다음과 같은 단일 메서드를 가지고 있습니다: public interface Callable { V call() throws Exception; } 여기서 V는 메서드가 반환할 결과의 타입입니다. 사용 방법 Callable 인터페이스를 구현하는 클래스는 call() 메서드를 구현해야 하며, 이 메서드는 비동기적으..
Generics 4 Type Erasure 제네릭은 컴파일 타임에 더 엄격한 타입 체크를 제공하고 제네릭 프로그래밍을 지원하기 위해 Java 언어에 도입되었습니다. 제네릭을 구현하기 위해 Java 컴파일러는 타입 소거(Type Erasure)를 다음에 적용합니다: 제네릭 타입의 모든 타입 파라미터를 Bounds로 바꾸거나 타입 파라미터가 제한되지 않은 경우 Object로 바꿉니다. 따라서 생성된 바이트코드에는 일반 클래스, 인터페이스 및 메서드만 포함됩니다. 타입 안전을 유지하기 위해 필요한 경우 타입 캐스트를 삽입하십시오. 확장된 제네릭 타입에서 다형성을 유지하기 위해 브리지 메서드를 생성합니다. 타입 소거는 파라미터화된 타입에 대해 새 클래스가 생성되지 않도록 합니다. 결과적으로 제네릭은 런타임 오버헤드를 발생시키지 않..
Jenerics 3 Wildcards 일반 코드에서 와일드카드라고 하는 물음표(?)는 알 수 없는 타입을 나타냅니다. 와일드카드는 다양한 상황에서 사용할 수 있습니다. 때로는 리턴 타입으로 사용됩니다(좀 더 구체적으로 프로그래밍하는 것이 더 나은 방법이긴 하지만). 와일드카드는 제네릭 메서드 호출, 제네릭 클래스 인스턴스 생성 또는 상위 타입에 대한 타입 아규먼트로 사용되지 않습니다. 다음 섹션에서는 상한 와일드카드(Upper Bounded Wildcards) 하한 와일드카드(Lower Bounded Wildcards) 와일드카드 캡처(Wildcards Capture) 를 포함하여 와일드카드에 대해 자세히 설명합니다. Upper Bounded Wildcards Upper Bounded Wildcards를 사용하여 변수에 대..
Jenerics 2 Type Inference 타입 유추는 메서드 호출에 적용할 수 있는 타입 아규먼트(또는 아규먼트)를 결정하기 위해 해당 메소드 호출 및 해당 메서드 선언을 살펴보는 Java 컴파일러의 기능입니다. 추론 알고리즘은 타입 아규먼트의 타입과 (가능한 경우)리턴되는 타입을 결정합니다. 마지막으로 추론 알고리즘은 모든 아규먼트와 함께 작동하는 특정 타입을 찾으려고 시도합니다. 이 마지막 요점을 설명하기 위해 다음 예제에서 타입 추론은 pick 메서드에 전달되는 두 번째 아규먼트가 Serializable 유형임을 확인합니다. static T pick(T a1, T a2) { return a2; } Serializable s = pick("d", new ArrayList()); Type Inference and G..
Jenerics 1 자바 공식 Jenerics 튜토리얼 Why Use Generics? 간단히 말해서, 제네릭은 클래스, 인터페이스 및 메서드를 정의할 때 타입(클래스 및 인터페이스)을 파라미터로 사용할 수 있습니다. 메소드 선언에 사용되는 더 친숙한 formal 파라미터와 마찬가지로, 타입 파라미터는 다른 입력으로 동일한 코드를 재사용할 수 있는 방법을 제공합니다. 차이점은 formal 파라미터에 대한 입력은 값인 반면, 타입 파라미터에 대한 입력은 타입이라는 것입니다. 제네릭을 사용하는 코드는 제네릭이 아닌 코드에 비해 많은 이점이 있습니다: 컴파일 시간에 더 강력한 타입 검사. 자바 컴파일러는 제너릭 코드에 강력한 타입 검사를 적용하고 코드가 타입 안전을 위반하는 경우 오류를 발행합니다. 컴파일 타임 오류를 수정하는 ..
Cloneable 인터페이스 clone() 메서드는 객체를 복사하기 위해 사용됩니다. 주로 다음과 같은 상황에서 clone() 메서드를 사용할 수 있습니다: 1. 객체의 복사본을 생성해야 할 때: 객체의 필드들을 복사하여 독립적인 새로운 객체를 생성할 수 있습니다. 이는 원본 객체와 복사본 객체가 서로 독립적으로 동작하며, 필드 값의 변경이 서로에게 영향을 주지 않는 상황에서 유용합니다. 2. 프로토타입 패턴을 사용할 때: 프로토타입 패턴은 객체 생성 비용을 줄이기 위해 기존 객체를 복사하여 새로운 객체를 생성하는 패턴입니다. clone() 메서드를 사용하면 객체의 복사본을 쉽게 생성할 수 있어 프로토타입 패턴을 구현하는 데에 활용될 수 있습니다. 3. 상속을 통해 객체의 복사를 확장할 때: clone() 메서드를 사용하여 객체의 ..