한정적 와일드카드를 사용해 API 유연성을 높이라 아이템 28 에서도 나온 얘기이지만 매개변수화 타입은 불공변입니다. 즉 서로 다른 타입 Type1과 Type2가 있을 때 List은 List의 하위 타입도 상위 타입도 아닙니다. 조금 더 쉽게 표현하면 List은 List의 하위타입도 아니고 상위 타입도 아닙니다. 그냥 타입이 다르며, List는 모든 것을 담을 수 있지만 List은 문자열만 담을 수 있기에 List은 List가 하는일을 제대로 수행하지 못합니다. 💡결함이 있는 메서드(컴파일 에러 발생) Integer는 Number의 하위 타입이니 논리적으로는 문제가 없을거 같지만 실제로는 컴파일 에러가 발생합니다. 원인은 매개변수화 타입이 불공변이기 때문에 Number로 변환할 수 없다는 것입니다. pu..
이왕이면 제네릭 타입으로 만들라 제네릭은 타입 안정성을 보장해주고 그렇기 때문에 형변환과 타입추론을 생략해줍니다. 그래서 이런 장점을 최대한 살려서 제네릭 타입으로 코드를 작성해주는것이 좋습니다. 💡제네릭을 사용하지 않은 Stack 아래 Stack 예제는 제네릭을 사용하지 않은 Object 배열 기반의 Stack입니다. 아래 예제를 사용해도 문제는 발생하지 않지만 왜 제네릭으로 리펙토링을 해야할까요? 그 이유는 pop 메서드를 통해 꺼낸 객체를 형변환을 해야하는데 이때 런타임 오류가 발생할 수 있습니다. 또한 형변환을 위해 매번 형변환하는 코드를 작성해야 합니다. 아래 예제에서는 Food 객체로 형변환을 했지만 런타임시에는 예외가 발생하게 됩니다. public class ObjectStack { priv..
배열보다는 리스트를 사용하라 배열과 제네릭 타입에는 중요한 차이가 2가지 있습니다. 💡 차이점 1) 배열은 공변이고, 제네릭은 불공변입니다. 배열은 공변입니다. 공변이란 예를들어 Sub가 Super의 하위 타입이라면 배열 Sub[]는 배열 Super[]의 하위 타입입니다.(공변 = 함께 변한다.) 반면 제네릭은 불공변입니다. 즉 서로 다른 타입 Type1, Type2가 있을 때 List은 List의 하위 타입도 상위 타입도 아닙니다. 그냥 서로 다른 타입입니다. 하지만 문제가 되는 것은 배열입니다. 🧨 예제 코드 Case 1같은 경우는 문법적으로는 허용되며 컴파일 단계에서 문제를 발견하지 못하고 런타임시에 예외가 발생합니다. Case 2같은 경우는 컴파일 에러가 발생하여 개발자가 바로 알 수 있습니다. ..
- Total
- Today
- Yesterday
- spring boot redisson 분산락 구현
- space based architecture
- spring boot redisson sorted set
- 공간 기반 아키텍처
- spring boot poi excel download
- spring boot redisson destributed lock
- @ControllerAdvice
- 트랜잭셔널 아웃박스 패턴 스프링부트
- spring boot excel download paging
- JDK Dynamic Proxy와 CGLIB의 차이
- java userThread와 DaemonThread
- 람다 표현식
- 레이어드 아키텍처란
- pipeline architecture
- redis sorted set으로 대기열 구현
- 자바 백엔드 개발자 추천 도서
- spring boot excel download oom
- polling publisher spring boot
- spring boot 엑셀 다운로드
- redis 대기열 구현
- 트랜잭셔널 아웃박스 패턴 스프링 부트 예제
- microkernel architecture
- transactional outbox pattern
- transactional outbox pattern spring boot
- service based architecture
- java ThreadLocal
- redis sorted set
- pipe and filter architecture
- spring boot redis 대기열 구현
- 서비스 기반 아키텍처
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |