목록분류 전체보기 (181)
초보개발자 긍.응.성
배열과 제네릭 타입의 차이 배열 공변(covariant)이다 (Sub가 Super의 하위 타입이라면 배열 Sub[]는 배열 Super[]의 하위 타입이 된다) 런타임에도 자신이 담기로 한 원소 타입을 인지하고 확인한다. 제네릭 불공변(invariant)이다 타입 정보가 런타임에는 소거(erasure)된다. 원소타입을 컴파일 타임에만 검사하며 런타임에는 알 수 없다. 이러한 차이로 배열과 제네릭은 잘 어우러지지 못한다. 제네릭 배열은 만들 수 없는데 타입 안전하지 않기 때문이다. 실체화 불가 타입 (non-reifiable type) 실체화되지 않아서 런타임에는 컴파일타임보다 타입 정보를 적게 가지는 타입이다. E, List, List 같은 타입이 실체화 불가 타입에 해당된다. 제네릭 타입과 가변 인수 메..
할 수 있는 한 모든 비검사 경고를 제거하라 제네릭을 사용하기 시작하면 수많은 컴파일러 경고를 보게 된다. 비검사 형변환 경고 비검사 메서드 호출 경고 비검사 매개변수화 가변인수 타입 경고 비검사 변환 경고 할 수 있는 한 모든 비검사 경고를 제거하라. 모두 제거한다면 그 코드는 타입 안전성이 보장된다. 즉, 런타임에 ClassCastException이 발생할 일이 없으며, 의도한 대로 잘 동작한다. @SuppressWarning 경고를 제거할 수는 없지만 타입 안전하다고 확신할 수 있다면 @SuppressWaring("unchecked") 애너테이션을 달아 경고를 숨기자. Type Safety를 검증하지 않은 채 경고를 숨기면 스스로에게 잘못된 보안 인식을 심어주게 된다. 코드는 경고 없이 컴파일되겠지..
용어 제네릭 클래스 : 클래스의 선언에 타입 매개변수가 쓰인 클래스 제네릭 인터페이스 : 인터페이스의 선언에 타입 매개변수가 쓰인 인터페이스 제네릭 타입 : 제네릭 클래스와 제네릭 인터페이스를 통틀어 제네릭이라고 부른다 매개변수화 타입 (parameterized type) : 제네릭 타입에 실제 매개변수가 함께 선언된 타입 로 타입 (raw type) : 제네릭 타입에서 타입 매개변수를 사용하지 않을 때의 타입 예를 들어 매개변수화 타입이 List 이라면 실제 타입 매개변수는 String이며 로 타입은 List이다. 제네릭 타입을 하나 정의하면 그에 딸린 로 타입(raw type)도 함께 정의된다. 로 타입의 사용 제네릭 대신 로 타입을 사용해도 동작을 하지만 좋은 예가 아니다 (하위 호환성을 위해 지원..
이전 글에서 SpringBoot에서 Redis를 사용해 Object를 캐싱하는 방법을 알아보았습니다. SpringBoot에서 Redis를 사용해 Object 캐시하기 이전 글에는 문자열에 대하여 @Cacheable, @CacheEvict을 사용해 redis에 캐싱하는 방법을 알아보았습니다. Redis와 Springboot 연결하기 앞선 글에서 Redis 설치 및 실행하는 과정에 대하여 알아보았습니다. R ckddn9496.tistory.com 하지만, @CacheEvict 애노테이션을 이용해 캐시를 삭제할 때, @Cacheable 메서드와 동일한 파라미터로 전달하여야만 캐시가 삭제되는 것을 확인할 수 있었습니다. 이번 글에서는 캐시의 key를 생성할 수 있는 Spring의 KeyGenerator를 알아보..
이전 글에는 문자열에 대하여 @Cacheable, @CacheEvict을 사용해 redis에 캐싱하는 방법을 알아보았습니다. Redis와 Springboot 연결하기 앞선 글에서 Redis 설치 및 실행하는 과정에 대하여 알아보았습니다. Redis 설치 및 실행하기 앞선 글에서 Redis가 무엇인지에 대해 간략하게 알아보았습니다. Redis 란? What is Redis? Redis는 Remote Dictiona. ckddn9496.tistory.com 이번 글에서는 문자열이 아닌 Object에 대하여 캐싱하는 방법에 대해 알아보겠습니다. Model 캐싱의 대상 모델로 다음과 같은 User 클래스를 정의하겠습니다. public class User { private String id; private Str..
톱 레벨 클래스 톱레벨톱 레벨 클래스는 소스파일에서 가장 바깥에 존재하는 클래스를 말한다. 일반적으로 하나의 소스파일에서는 하나의 톱 레벨 클래스를 가진다. 예로 파일 이름이 SimpleService.java라면 클래스 이름도 SimpleService로 하나의 톱 레벨 클래스를 갖는다. 사실 소스 파일 하나에 톱레벨 클래스를 여러 개 선언하더라도 자바 컴파일러의 동작에는 아무런 문제가 없다. 단 이런 사용은 아무런 득이 없을뿐더러 심각한 위험을 감수해야 하는 행위다. 다수의 톱레벨 클래스 정의의 문제점 한 클래스를 여러 가지로 정의할 수 있으며, 그중 어느 것을 사용할지는 어느 소스 파일을 먼저 컴파일하냐에 따라 달라진다. public class Main { public static void main(S..