본문 바로가기
반응형

Language45

자바 제네릭 공변, 반공변, 무공변 자바에서 제네릭(Generic) 은 기본적으로 무공변(Invariant) 입니다. 무공변이란 타입 S, T가 있을 때 서로 관계가 없다는 것을 의미합니다. S와 T가 서로 상속 관계이면 공변성이 있지만 제네릭은 상속 관계가 호환되지 않습니다. 따라서 타입이 정확히 일치하지 않으면 컴파일 에러가 발생합니다.public class Animal {}public class Cat extends Animal {}List animals = new ArrayList(); // 컴파일 에러List cats = new ArrayList(); // 컴파일 에러해당 코드는 제네릭의 불공변성(Invariance) 때문에 컴파일 에러가 발생합니다. 간단히 말해, Cat이 Animal의 하위 타입이라고 해서 List이 List의.. 2025. 7. 21.
자바 Object value String 타입 캐스팅 vs String.valueOf() 차이점 두 방식 모두 String 타입으로 변환하는 것은 동일하지만, 동작 방식과 예외 처리에서 차이가 있습니다.(String) value로 타입 캐스팅 하는 것은 value가 String 타입이 아닌 경우 ClassCastException이 발생하며, value가 null인 경우 그대로 null을 반환하여, 이후 메서드를 호출할 때 NullPointerException이 발생합니다. 타입 캐스팅은 타입 안정성이 부족하기 때문에 캐스팅하는 타입이 확실할 때만 사용해야 합니다.Object intValue = 10;String str1 = (String) intValue; // ClassCastExceptionObject nullValue = null;String str2 = (String) nullValue; /.. 2025. 7. 17.
자바 클래스 정보 가져오는 방법 자바에서 클래스 정보를 가져오기 위해서 Reflection API를 사용할 수 있습니다. reflection 패키지에서 제공하는 클래스를 사용하면, JVM에 로딩되어 있는 클래스와 메서드의 정보를 읽어올 수 있습니다. 대표적으로 Class 클래스, Method 클래스, Field 클래스가 존재합니다.Reflection API를 사용하면 구체적인 클래스의 타입을 몰라도, 클래스의 정보에 접근할 수 있습니다. 개발자는 이러한 특성을 이용하여 인스턴스를 감싸는 프록시를 만들거나, 사용자로부터 전달된 값을 처리할 메서드를 유연하게 선택하는 등 다양한 구현을 할 수 있습니다. Reflection API는 특히 프레임워크나 라이브러리를 개발하는 과정에서 사용되는 경우가 많습니다. 프레임워크나 라이브러리의 개발자는 .. 2025. 6. 30.
Record DTO 사용 이유 Record는 Java 16에서 정식 출시된 특별한 유형의 클래스로 불변성(Immutable) 을 기본으로 한다.기존의 클래스와 달리 모든 필드가 final 키워드로 선언되며, 객체 생성 후 변경할 수 없다. 또한 필드 선언만으로 자동으로 생성자, getter, equals(), hashCode(), toString() 등 메서드를 자동으로 생성해 주어 보일러 플레이트 코드(반복 코드)를 줄일 수 있다. 이러한 특성으로 인해 멀티 스레드 환경에서 데이터가 의도치 않게 변경되지 않고 안전하게 전달할 수 있다.// 기존 클래스 기반 DTOpublic class MemberDto { private final String name; private final String email; private final in.. 2025. 4. 9.
MutableList MutableList는 Kotlin에서 제공하는 변경 가능한 리스트 (mutable list) 입니다.즉, 요소를 추가, 삭제, 수정할 수 있는 리스트 타입입니다. 1. MutableList 생성 방법mutableListOf() 또는 ArrayList() 등을 사용하여 생성할 수 있습니다.val numbers = mutableListOf(1, 2, 3) // 변경 가능한 리스트val names = ArrayList() // Java의 ArrayList와 동일한 동작2. 주요 함수(1) 요소 추가 (add)val list = mutableListOf("Apple", "Banana")list.add("Cherry") // ["Apple", "Banana", "Cherry"]list.add(1, "Orange.. 2025. 3. 12.
Java Checked, Unchecked Exception Checked Exception컴파일 시점에 확인되며, 반드시 처리해야 하는 예외다.자바에서는 IOException, SQLException 등이 이에 속한다.Checked Exception을 유발하는 메서드를 호출하는 경우, 메서드 시그니처에 throws를 사용하여 호출자에게 예외를 위임하거나, 메서드 내에서 try-catch를 사용하여 해당 예외를 반드시 처리해야합니다.사용처정답이 없는 영역이므로, 자신의 주관을 만들면서 학습!외부 환경과의 상호작용에서 발생할 가능성이 높은 예외에 적합하다.ex) 파일 입출력, 네트워크 통신 등에서 발생할 수 있는 예외를 처리한다.이러한 예외는 예측 가능하며, 호출하는 쪽에서 적절히 처리할 수 있는 여지가 있다.Unchecked Exception런타임 시점에 발생하는.. 2025. 3. 6.
동시성 프로그래밍을 위한 유용한 클래스와 인터페이스 ≣ 목차# 요약ExecutorService: 스레드 풀을 추상화한 인터페이스로, 작업을 제출하고 실행하는 기능을 제공한다.Executors: 다양한 유형의 스레드 풀을 생성하는 팩토리 메서드를 제공하는 유틸리티 클래스이다.CountDownLatch: 다른 스레드가 주어진 작업을 완료할 때까지 대기하는 동기화 도구이다.CompletableFuture: 비동기적으로 작업을 실행하고 결과를 처리하는 클래스로, 다양한 비동기 작업 처리 기능을 제공한다.ExecutorService스레드 풀을 추상화한 인터페이스이다. 주어진 작섭을 실행하고 관리하는 기능을 제공한다.ExecutorService executorService = Executors.newFixedThreadPool(10); // 스레드 풀 생성// 작업.. 2024. 7. 16.
[Java] Math 클래스 제곱 pow, 제곱근 sqrt 함수 ⏩ Math.pow() 제곱 연산을 수행할 수 있는 메소드 double형 인자를 가지고 제곱 연산을 수행한다. double a = Math.pow(3, 2); // 3 * 3 = 9.0 double b = Math.pow(2.5, 3); // 2.5 * 2.5 * 2.5 = 15.625 int c = (int) Math.pow(1.3, 2); // 형변환 가능. (int) 1.3 * 1.3 = 1 ▶️ 사용 예제 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOExce.. 2024. 2. 21.
[JAVA] 문자열 반복 메소드 repeat ➡️ 문자열 반복 메소드 repeat ▶️ 사용 방법 문자열.repeat(반복 횟수) s.repeat(3) ▶️ 코드 예시 문자열을 입력 받아 각 문자를 반복하는 문제 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = ne.. 2024. 2. 15.
728x90
반응형