본문 바로가기
반응형

전체 글66

[Java] 제네릭이란 무엇인가, 왜 사용할까 제네릭(Generic)은 프로그래밍 언어에서 데이터 타입을 일반화하여 코드의 재사용성과 안정성을 높이기 위한 프로그래밍 기법입니다. 제네릭을 사용하면 컬렉션, 메소드, 클래스 등에서 사용하는 데이터 타입을 런타임이 아닌 컴파일 타임에 안전하게 지정할 수 있습니다. 이는 컴파일러가 코드 유효성을 검사하고 타입 불일치에 의한 에러를 사전에 방지할 수 있도록 해줍니다. List list = new ArrayList(); HashSet hs = new HashSet(); 등과 같이 안에 타입이 명시되어있는 형태를 제네릭이라고 한다. 제네릭을 사용하는 이유 💡타입 안정성(Type Safety) 제네릭을 사용하면 컴파일러가 타입 체크를 수행할 수 있어 런타임 시점의 ClassCastException과 같은 타입 관.. 2023. 10. 17.
[Java] Java의 GC(Garbage Collector)는 어떻게 동작할까 Java의 가비지 컬렉터(Garbage Collector, 이하 GC)는 메모리 관리를 자동화하여 개발자가 메모리 누수와 메모리 관리에 대한 걱정을 줄이는 역할을 합니다. GC는 더 이상 사용되지 않는 객체를 식별하고 해제하여 메모리를 회수합니다. Java의 GC는 다양한 알고리즘과 방식으로 동작할 수 있으며, 주요 구성 요소 및 작동 방식에 대해 설명하겠습니다. 💡객체 생성 Java 프로그램에서 객체가 생성되면 메모리 힙(heap) 영역에 저장됩니다. 이 힙 영역은 Java 프로그램의 모든 객체 인스턴스를 저장하는 곳입니다. 💡 객체 참조 객체는 변수나 다른 객체에 의해 참조됩니다. 객체가 더 이상 참조되지 않을 때 GC가 필요해집니다. 💡 Reachability(도달 가능성) GC는 도달 가능한(re.. 2023. 10. 16.
[Java] 리플렉션(Reflection)과 자바 다이나믹 프록시(Java Dynamic Proxy) 💡리플렉션(Reflection) 리플렉션은 자바 언어의 런타임(Runtime) 환경에서 클래스 및 객체의 메타데이터(예: 클래스의 이름, 메서드, 필드, 생성자 등)를 다루는 기술입니다. 이는 자바에서 다음과 같은 일을 할 수 있게 해줍니다. 클래스 정보 가져오기: Class 클래스를 사용하여 클래스의 정보를 동적으로 가져올 수 있습니다. 예를 들어, 클래스 이름으로 클래스를 동적으로 로드하거나 클래스의 패키지, 부모 클래스, 인터페이스를 확인할 수 있습니다. 객체 생성 및 메서드 호출: Class 객체를 사용하여 객체를 동적으로 생성하거나, 클래스의 메서드를 호출할 수 있습니다. 이것은 객체의 동적 로딩 및 실행을 가능하게 합니다. 필드 값 변경: 리플렉션을 사용하여 클래스의 필드 값을 읽거나 수정할 .. 2023. 10. 15.
[Java] new String()과 ""(리터럴 방식)의 차이 new String() 및 ""(빈 문자열 리터럴)은 문자열을 생성하는 두 가지 다른 방법입니다. 이 두 방법 간에 중요한 차이점이 있습니다. 다음은 이 차이점을 자세히 설명합니다. 💡 메모리 할당 new String(): new String() 생성자를 사용하여 문자열을 만들면 새로운 문자열 객체가 힙(heap) 메모리에 항상 생성됩니다. 이것은 메모리를 더 많이 사용하며 문자열이 같은 내용을 가진 다른 문자열과 비교할 때 참조 비교(Reference Comparison)가 아닌 내용 비교(Content Comparison)를 수행해야 합니다. ""(빈 문자열 리터럴): 빈 문자열 리터럴(또는 문자열 리터럴)을 사용하면 문자열 풀(String Pool)에 있는 기존 문자열 객체를 재사용합니다. 따라서 .. 2023. 10. 14.
[Java] HashMap vs HashTable vs ConcurrentHashMap의 차이 HashMap, HashTable 및 ConcurrentHashMap은 모두 자바에서 사용되는 해시 맵 데이터 구조를 구현하는 클래스입니다. 이러한 클래스들은 키-값 쌍을 저장하고 검색하는 데 사용됩니다. 그러나 이러한 클래스 간에 중요한 차이점이 있습니다. 다음은 그 차이점에 대한 자세한 설명입니다 💡 Thread Safety (스레드 안전성) HashMap: HashMap은 스레드 안전하지 않습니다. 따라서 동시에 여러 스레드에서 접근하거나 수정하려면 외부에서 동기화를 제공해야 합니다. HashTable: HashTable은 스레드 안전하게 설계되었습니다. 모든 메서드가 스레드 안전하도록 동기화되어 있어 여러 스레드가 동시에 접근하더라도 데이터 일관성이 유지됩니다. 하지만 이로 인해 성능 저하가 발생.. 2023. 10. 13.
[Java] Java가 Call by Value인 이유 [Java] Call by Reference와 Call by Value의 차이 Call by Reference와 Call by Value는 프로그래밍 언어에서 함수나 메소드로 값을 전달하는 방식에 관한 중요한 개념입니다. 두 방식의 주요 차이점은 값을 어떻게 전달하고 메모리에 어떻게 저장하는가 richwish.tistory.com 자바는 Call by Value 방식을 사용합니다. 자바에서 메소드에 인자를 전달할 때 변수의 값을 복사하여 전달하므로, 함수 내에서 변수 값을 변경해도 호출자에게 영향을 미치지 않습니다. 이것은 기본 데이터 타입(정수, 실수, 불린, char 등)을 다룰 때 해당됩니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public class CallByValu.. 2023. 10. 12.
[Java] Call by Reference와 Call by Value의 차이 Call by Reference와 Call by Value는 프로그래밍 언어에서 함수나 메소드로 값을 전달하는 방식에 관한 중요한 개념입니다. 두 방식의 주요 차이점은 값을 어떻게 전달하고 메모리에 어떻게 저장하는가에 있습니다. 이제 두 방식을 자세히 알아보겠습니다. 💡 Call by Value (값에 의한 호출) 매개변수로 전달되는 값(인자)의 복사본이 함수에 전달됩니다. 이 복사본을 함수 내에서 사용하며, 함수 내에서 변수 값 변경은 호출자(caller)에게 영향을 미치지 않습니다. Call by Value는 주로 기본 데이터 타입(정수, 실수, 불린 등)에 대해 적용됩니다. 호출자와 호출된 함수가 서로 다른 메모리 공간에 위치한 복사본을 사용하는 방식입니다. 1 2 3 4 5 6 7 8 9 10 1.. 2023. 10. 12.
[Java] CheckedException과 UncheckedException의 차이 💡CheckedException 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class CheckedExceptionExample { public static void main(String[] args) { try { File file = new File("non_existent_file.txt"); Scanner scanner = new Scanner(file); while (scanner.hasNextLine()) { System.out.println(scanner.nextLine()); } sca.. 2023. 10. 11.
반응형