일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- nestjs공부
- K8S
- querydsl
- 기술면접공부
- JPA예제
- 스프링
- 프로그래머스
- 스프링공부
- 자바공부
- 스프링부트
- JPA스터디
- DDD
- 코테준비
- 자료구조공부
- nestjs
- 플러터 공부
- JPA 공부
- 코테공부
- 카프카
- Axon framework
- 스프링부트공부
- Flutter
- Kafka
- JPA공부
- 알고리즘공부
- 기술공부
- 플러터 개발
- nestjs스터디
- 스프링 공부
- JPA
- Today
- Total
목록자바 제네릭 (5)
DevBoi
제네릭에 대해서 좀 더 심화된 부분을 공부해보자 ObjectMapper에 대해서 공부를 하다가. 생긴 궁금증은 꼬리의 꼬리를 물었고, 내가 모르는 부분까지 봉착했다. 결과적으로 ObjectMapper를 사용할때 제네릭 관련 변수로 뺄때 왜 TypeReference를 선언해야하는지 이해가 안됬다. 정확히는 이유를 정확하게 몰랐다. 제네릭의 type erasure에 대해서 먼저 알아야 한다. 타입 소거라고도 한다. 런타임에 타입에 대한 정보를 버리는 것이다. bounded type -> bound type unbouned type -> Object 1) Unbounded Type public class SmithTest { public static T unboundedType(T t) { return t; ..
제네릭을 좀 잘 써보자. 제네릭은 개인적인 생각으로는 인터페이스의 존재이유와 비슷하다고 생각한다. 타입이나 제약을두지 않고, 해당 상속받은 개체에서 자유롭게 짜는것을 의미한다. 예를 바로 들어보자 package com.smith.PqrsFramework.Interface; public class OrderInterface { T name; R id; public T getName(){ return this.name; } public R getId(){ return this.id; } public void setName(T name){ this.name = name; } public void setId(R id){ this.id = id; } } 간단하게 제네릭 클래스를 사용하는 방법은 바로 이렇다. 그러..
제네릭 : 클래스에서 사용할 타입을 외부에서 설정하는 것이다. 장점 : 컴파일 시점에, 잘못된 타입 사용을 미리 방지할 수 있다. (메소드,파라미터, 리턴타입등을 설정할 수 있다) 와일드 카드 : 해당 클래스에 대한 제한을 상속 관계까지 둘수있다. -? extends 상위타입 -? supper 하위타입 등등, 해당 상속관계의 클래스로 클래스타입을 설정할 수 있다.
제네릭은 이전에 공부 했듯이, 특별히 어떤 클래스를 사용할떄, 타입에 대한 제약을 걸어두지 않는 것이다. 그런데, 이렇게 제약조건 없이 사용하게 된다면, String 변수에 Integer가 들어가도런타임시에 발견할수 없다. 그래서 제네릭에서는 제약조건을 와일드 카드라는 개념으로 걸어둘수 있다. 간단한 예를 보면서 이해해보자 FuncUtil 이라는 클래스는 utilList라는 녀석을 넣을때, Test1의 하위로 제약을 둔다면, 실제 메인에서 Test2라는 클래스로 걸때 오류가 발생하면서 런타임시에 발견할수 있게 된다. 만약에 Test2가 Test1을 상속 받게된다면, 해당 오류는 사라지게 된다. 자 , 그러면 와일드 카드에 대한 정확한 이해를 해보도록 하자 제네릭에서 만약에 특정 제약조건을 무조건 받지 않..
제네릭은 일반적인 이라는 이름, 뭐이름은 중요하지 않고 클래스 내부에서 지정하는 것이 아닌 , 외부에서 사용자에 의해 지정되는 것을 의미한다. 한마디로, 특정 타입을 미리 지정해주는 것이 아니라 필요에 의해 지정할수 있도록 하는 일반 제네릭 타입이라는 것이다. 제네릭의 장점 - 제네릭을 사용하면 잘못된 타입이 들어올 수 있는 것을 컴파일 단계에서 방지할수 있다. - 클래스 외부에서 타입을 지정해주기 때문에 타입을 체크하고 변환해줄 필요없이 관리가 편하다. - 비슷한 기능을 지원하는 경우 코드의 재사용성이 높아진다. 제네릭을 실제로 구현하고있는 것을 예시로 한번 생각해보자 우리가 많이 쓰는 ArrayList가 있다. 이걸 만들고있는 라이브러리를 보면, 제네릭으로 구현이 되어있다. 우리는 ArrayList,..