✅ Type Erasure타입 소거제네릭은 컴파일 타임에 더 엄격한 타입 체크를 제공하고 제네릭 프로그래밍을 지원하기 위해 Java 언어에 도입되었습니다. 제네릭을 구현하기 위해 Java 컴파일러는 타입 소거(Type Erasure)를 다음에 적용합니다: 제네릭 타입의 모든 타입 파라미터를 Bounds로 바꾸거나 타입 파라미터가 제한되지 않은 경우 Object로 바꿉니다. 따라서 생성된 바이트코드에는 일반 클래스, 인터페이스 및 메서드만 포함됩니다.타입 안전을 유지하기 위해 필요한 경우 타입 캐스트를 삽입하십시오.확장된 제네릭 타입에서 다형성을 유지하기 위해 브리지 메서드를 생성합니다. 타입 소거는 파라미터화된 타입에 대해 새 클래스가 생성되지 않도록 합니다. 결과적으로 제네릭은 런타임 오버헤드를 발생시..
❗오라클의 Java Documentation에서 Learning the Java Language의 Generics 부분을 번역하여 정리한 부분입니다. 공식 문서를 통한 학습을 위해 번역되었습니다. 공식 문서에서 설명이 추가로 더 필요하다고 생각한 부분은 👉 표시하여 개인적으로 추가하였습니다. 번역이 매끄럽지 않은 부분은 계속 고쳐나가고 있습니다. ✅ Wildcards일반 코드에서 와일드카드라고 하는 물음표(?)는 알 수 없는 타입을 나타냅니다. 와일드카드는 다양한 상황에서 사용할 수 있습니다. 때로는 반환 타입으로 사용됩니다. 와일드카드는 제네릭 메서드 호출, 제네릭 클래스 인스턴스 생성 또는 상위 타입에 대한 타입 아규먼트로 사용되지 않습니다.다음 섹션에서는 상한 와일드카드(Upper Bounded W..
❗오라클의 Java Documentation에서 Learning the Java Language의 Generics 부분을 번역하여 정리한 부분입니다. 공식 문서를 통한 학습을 위해 번역되었습니다. 공식 문서에서 설명이 추가로 더 필요하다고 생각한 부분은 👉 표시하여 개인적으로 추가하였습니다. 번역이 매끄럽지 않은 부분은 계속 고쳐나가고 있습니다. ✅ Type Inference타입 추론(Type Inference)는 메서드 호출에 적용할 수 있는 타입 아규먼트(또는 아규먼트)를 결정하기 위해 각 메소드 호출 및 해당 메서드 선언을 살펴보는 Java 컴파일러의 기능입니다. 추론 알고리즘은 아규먼트의 타입과 (가능한 경우)반환되는 타입을 보고 결정합니다. 마지막으로 추론 알고리즘은 모든 아규먼트와 함께 작동하..
💡유니코드와 유니코드를 인코딩하는 방식인 UTF-8, UTF-16을 이해하기 위해선 bit, Byte, binary, Hex, Dex에 대해서 알고 있어야 합니다.✅ bit, Byte컴퓨터는 0과 1로 이루어진 binary code, 0과 1로 이루어진 이진 숫자 체계를 사용하는 코드만 인식할 수 있습니다. "bit"과 "Byte"는 데이터를 표현하고 저장하는 데 사용됩니다. 컴퓨터가 이해할 수 있는 데이터를 이진(binary) 데이터로 나타내기 위해서 사용하는 단위입니다. 이 두 용어는 데이터의 크기, 데이터의 전송 등을 나타낼 때 중요한 역할을 합니다. Hex : 16진수 ( hexadecimal )Dec : 10진수 ( decimal ) Bit (비트)"bit"는 이진(binary) 디지털 정보의 ..
How are the Line feed character different between Linux and Windows? ✅ ASCII code리눅스와 윈도우 텍스트 줄바꿈 개행 문자가 어떻게 다른지 알아보기 전에 아스키 코드에 대해서 먼저 알아야 합니다. Hex : 16진수 ( hexadecimal )Dec : 10진수 ( decimal )Oct : 8진수 ( octal ) 아스키코드(ASCII 코드)는 컴퓨터에서 문자와 숫자를 표현하기 위해 사용되는 일련의 표준화된 숫자 코드입니다. "ASCII"는 "American Standard Code for Information Interchange"의 약자이며, 미국 표준 협회(ANSI)가 개발하였습니다. 아스키코드는 Non-Graphics 문자와 Grap..
JVM도 하나의 애플리케이션이라고 할 수 있습니다.자바 가상 머신(JVM)의 메모리 구조(Runtime Data Area)는 크게 다음과 같은 영역으로 나뉩니다. 메소드 영역(Method Area)힙 영역 (Heap)스택 영역 (Stacks)PC 레지스터 (PC Registers)네이티브 메소드 스택 (Native Method Stacks) Runtime Data Area ✅ 메소드 영역(Method Area)메서드 영역은 JVM의 메모리 구조 중 하나로, JVM이 시작될 때 생성됩니다.메소드 영역은 클래스의 메타데이터 즉, 클래스 레벨의 정보들을 저장하는 공간입니다.클래스 레벨의 정보는 다음과 같습니다.클래스 이름수퍼클래스 이름인터페이스 코드메소드의 바이트 코드런타임 상수 풀필드와 메서드 데이터생성자메..
✅ Natvie 키워드란?Java의 native 키워드는 Java 언어로 작성된 코드에서 네이티브 코드(다른 언어로 작성된 코드)를 사용하기 위해 선언하는 키워드입니다. native 메서드는 Java 언어로 작성된 메서드가 아니라, 네이티브 코드로 작성된 메서드를 참조하고 호출할 수 있도록 합니다. native 키워드가 사용된 메서드는 메서드의 구현부가 Java 코드가 아니라, 외부 언어로 작성된 네이티브 코드로 제공됩니다. 네이티브 코드는 주로 C, C++ 등의 언어로 작성되며, 특정 플랫폼 또는 하드웨어와 밀접하게 연관된 기능을 사용하기 위해 활용됩니다. 예를 들어, 운영체제의 API 호출, 하드웨어 접근, 외부 라이브러리와의 상호작용 등을 네이티브 코드를 통해 구현할 수 있습니다. ➡️ native..
❗오라클의 Java Documentation에서 Learning the Java Language의 Generics 부분을 번역하여 정리한 부분입니다. 공식 문서를 통한 학습을 위해 번역되었습니다. 공식 문서에서 설명이 추가로 더 필요하다고 생각한 부분은 👉 표시하여 개인적으로 추가하였습니다. 번역이 매끄럽지 않은 부분은 계속 고쳐나가고 있습니다. ✅ 왜 제네릭을 사용하는가?간단히 말해서, 제네릭은 클래스, 인터페이스 및 메서드를 정의할 때 타입(클래스 및 인터페이스)을 파라미터로 사용할 수 있습니다. 메소드 선언에 사용되는 더 친숙한 formal 파라미터와 마찬가지로, 타입 파라미터는 다른 입력으로 동일한 코드를 재사용할 수 있는 방법을 제공합니다. 차이점은 formal 파라미터에 대한 입력은 값인 반면..
How does JVM compile and execute java code? 매번 JAVA 프로그래밍을 위해서 JDK를 설치하지만 그것이 무엇인지는 제대로 몰랐습니다. 왜 JDK가 필요하며 JAVA 코드를 작성하고 이것이 어떻게 컴파일되어 실행될 수 있는지 알아보겠습니다. JDK = JRE + Developer toolsJRE = JVM + Class Library ✅ JDKJDK(Java Development Kit)는 자바 개발을 위한 개발 도구 세트입니다. JDK에는 자바 프로그래밍 언어를 작성, 컴파일, 디버그 및 실행하기 위한 여러 도구와 라이브러리가 포함되어 있습니다. JDK는 Java 개발에 사용되며, Java 프로그램을 컴파일하고 디버그하는 데 필요한 모든 실행 파일, 이진 파일 및 도구..
✅ List Interface List 인터페이스는 자바 프로그래밍 언어에서 제공하는 인터페이스 중 하나입니다. 이 인터페이스는 순서가 있는 요소의 컬렉션을 나타내며, 중복된 요소를 포함할 수 있습니다. List 인터페이스는 자바의 컬렉션 프레임워크에 속하며, 배열과 유사한 동작을 수행하는 동적인 크기의 리스트를 제공합니다. List 인터페이스는 java.util 패키지에 정의되어 있으며, java.util.Collection 인터페이스를 확장하고 있습니다. 따라서 List는 Collection 인터페이스에서 정의된 모든 메서드를 상속받습니다. 또한 List 인터페이스는 자체적으로 인덱스를 사용하여 요소에 접근하는 메서드를 추가로 정의하고 있습니다. . ➡️ List 인터페이스의 주요 특징은 다음과 같습..