반응형

개발 17

[제네릭] 제네릭 메서드에 type parameter section이 존재하는 이유가 무엇일까?

이펙티브 자바 스터디에서 제가 발표한 아이템 31의 내용에 대해 스터디원께서 좋은 질문을 해주셨습니다. 바로 제네릭 메서드에서 type parameter section이 존재하는 이유가 무엇일까? 라는 질문이었습니다. 공식 문서 Generic Methods (The Java™ Tutorials > Learning the Java Language > Generics (Updated)) 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 technolo..

개발 2022.02.14

[제네릭] Java에서 배열을 공변(covariant)으로 만든 이유는 무엇인가?

이펙티브 자바 스터디에서 제가 발표한 아이템 28의 내용에 대해 스터디원께서 좋은 질문을 해주셨습니다. 바로 Java에서 배열을 공변(covariant)으로 만든 이유가 무엇일까? 라는 질문이었습니다. 공변과 불공변 질문에 대한 답에 앞서 공변과 불공변에 대해 먼저 알아보도록 하겠습니다. 공변 (covariant) 정의 : 함께 변한다 배열은 공변입니다 Sub가 Super의 하위 타입이라면 배열 Sub[]는 배열 Super[]의 하위 타입이 됩니다 예시 코드 // 런타임에 실패한다 Object[] objectArray = new Long[1]; // 컴파일이 되어 버린다.. objectArray[0] = "Hello"; // 런타임에 ArrayStoreException을 던진다.. 위의 코드에서 배열은 ..

개발 2022.02.14

[제네릭] Unbounded Wildcard Type인 컬렉션에는 왜 null 값만 들어가는가?

이펙티브 자바 스터디에서 제가 발표한 아이템 26의 내용에 대해 한분께서 좋은 질문을 해주셨습니다. 바로 Unbounded Wildcard Type 타입을 가지는 컬렉션에는 (null 외에는) 어떤 원소도 넣을 수 없는데 이를 왜 사용해야 하는가? 라는 질문이었습니다. raw type public class Test { public static void main(String[] args) { List list1 = new ArrayList(); list1.add("fdf"); // 컴파일 가능 list1.add(3); // ?? list1.add(true); // 너넨 왜 담아지는거야? } } 제네릭을 반드시 써야하는 이유를 알기 전에 로 타입을 쓰지 말아야 할 이유부터 알아보겠습니다. 절대 쓰지 말아야..

개발 2022.02.07

[Java] 공급자 Supplier<T>

공급자 내부 코드 @FunctionalInterface public interface Supplier { T get(); } Supplier는 매개변수를 받지 않고 단순히 반환하는 추상 메서드가 존재한다 활용 방식 1. 문자열 return public class SupplierStringReturn { public static void main(String[] args) { Supplier helloSupplier = () -> "Hi"; System.out.println(helloSupplier.get()); } } // 결과 // Hi 2. 객체 return public class SupplierObjectReturn { static class Point { } public static void ma..

개발 2022.01.25

[5분 개념] 제네릭 싱글턴 팩터리

제네릭 싱글턴 팩터리 정의 제네릭으로 타입 설정 가능한 인스턴스를 만들어두고, 반환 시에 제네릭으로 받은 타입을 이용해 타입을 결정한다. 장점 여러 타입으로 내부 객체를 받아도 에러가 나지 않는다 큰 유연성을 제공한다 public class GenericSingletonFactory { public static final Set EMPTY_SET = new HashSet(); public static final Set emptySet() { return (Set) EMPTY_SET; } public static void main(String[] args) { Set set1 = GenericSingletonFactory.emptySet(); Set set2 = GenericSingletonFactory...

개발 2022.01.24

[Java] 예제 코드로 알아보는 다형성 - 2

2022.01.24 - [Java] - [Java] 예제 코드로 알아보는 다형성 - 1 [Java] 예제 코드로 알아보는 다형성 - 1 정의 다형성(polymorphism)이란 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미합니다. 자바에서는 이러한 다형성을 부모 클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조 hwan33.tistory.com 이전 포스팅을 이어가도록 하겠습니다. 다형성 Quiz 1. 다음 코드의 결과를 예측하시오 class SuperClass { String x = "super"; public void method() { System.out.println("super class method"); } } class SubClass extends SuperClass..

개발 2022.01.24

[Java] 예제 코드로 알아보는 다형성 - 1

정의 다형성(polymorphism)이란 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미합니다. 자바에서는 이러한 다형성을 부모 클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조할 수 있도록 하여 구현하고 있습니다. 다형성은 상속, 추상화와 더불어 객체 지향 프로그래밍을 구성하는 중요한 특징 중 하나입니다. 참고 Tcp School 저도 다형성의 정의에 대해서는 이해하고 있다고만 생각했습니다. 왜냐하면 아래와 같은 코드들을 활용한다면 다형성을 충분히 이용하는 것이라 생각했기 때문입니다. class Animal {...} class Human extends Animal {...} class Korean extends Human {...} public class Main { public..

개발 2022.01.24
반응형