๐ก ํ์ ๋ณ์๋ ๋ฐ๋์ T์ผ ํ์๊ฐ ์๋ค.
-> ์๋ฌด๊ฑฐ๋ ์ฌ์ฉํด๋ ๋๋ค.
<? extends > : ์์ ์ ํ(Upper Bounded)
<? super > : ํ์ ์ ํ(Lower Bounded)
๐ ํด๋์ค์ ์์ ์ ํ์ ์ธํฐํ์ด์ค๋ ์ง์์ด ๋๋?
public interface RankGame {
}
public class LoL extends Game implements RankGame{
}
public class Game {
}
ํด๋์ค์ ํ์ ์ ํ์ ์ธํฐํ์ด์ค ์ง์์ด ๋์ง ์๋๋ค.
Bridge Method : ์ ๋ค๋ฆญ ํ์ ์ ์ ์ํ๊ณ ์์๋ฐ์ ํด๋์ค๊ฐ ์๋ ๊ฒฝ์ฐ์ ๋คํ์ฑ์ ๋ณด์กดํ๊ธฐ ์ํด ์์ฑ
๐ก ์ ๋ค๋ฆญ์ ์ด์ฉํ์ฌ ๊ณตํต๋๋ Dao์ฝ๋ ์ค์ด๊ธฐ
AppleDao์ BananaDao๋ ๊ฐ์ ์ฝ๋์ด๋ค.
public class AppleDao {
private Map<Integer, Apple> datasource = new HashMap<>();
public void save(Apple apple) {
datasource.put(apple.getId(), apple);
}
public void delete(Apple apple) {
datasource.remove(apple.getId());
}
public void delete(Integer integer) {
datasource.remove(integer);
}
public List<Apple> findAll() {
return new ArrayList<>(datasource.values());
}
public Apple findById(Integer id) {
return datasource.get(id);
}
}
public class BananaDao {
private Map<Integer, Banana> datasource = new HashMap<>();
public void save(Banana banana) {
datasource.put(banana.getId(), banana);
}
public void delete(Banana banana) {
datasource.remove(banana.getId());
}
public void delete(Integer integer) {
datasource.remove(integer);
}
public List<Banana> findAll() {
return new ArrayList<>(datasource.values());
}
public Banana findById(Integer id) {
return datasource.get(id);
}
}
1. Entity ์ธํฐํ์ด์ค ์์ฑ
public interface Entity<K> {
K getId();
}
2. Apple ํด๋์ค์์ Entity์ธํฐํ์ด์ค ๊ตฌํ
public class Apple implements Entity<Integer>{
private Integer id;
public Integer getId() {
return id;
}
public static Apple of(Integer id) {
Apple apple = new Apple();
apple.id = id;
return apple;
}
}
3. GenericDao ์์ฑ
public class GenericDao<E extends Entity<K>, K> {
private Map<K, E> datasource = new HashMap<>();
public void save(E entity) {
datasource.put(entity.getId(), entity);
}
public void delete(E entity) {
datasource.remove(entity.getId());
}
public void delete(K id) {
datasource.remove(id);
}
public List<E> findAll() {
return new ArrayList<>(datasource.values());
}
public E findById(K id) {
return datasource.get(id);
}
}
4. GenericDao๋ฅผ ์์ํด์ ์ฌ์ฉํ๋ฉด ๋๋ค.
SpringDataJPA๋ฅผ ์ฐ๊ธฐ ์ ์ ์๋์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๋ง์ด ์ฌ์ฉํ๋ค๊ณ ํ๋ค.
AppleDaoExtendsGenericํด๋์ค๋ฅผ ๋ง๋ค์ง ์๊ณ ์๋์ฒ๋ผ ๋ฐ๋ก GenericDao์ ํ์ ์ ์ง์ ํ ๋ค ๊ฐ์ฒด ์์ฑํด์ ์ฌ์ฉํด๋ ๋๋ค.
๊ตณ์ด AppleDaoExtendsGeneric๋ฅผ ์์ฑํด์ผ ๋ ๋๋ ํน์ ๊ธฐ๋ฅ์ ์ถ๊ฐํด์ผ ํ ๋์ ๊ฐ์ ๊ฒฝ์ฐ๋ ์๋ค.
๐ ๋ฐํ์ ์ค์ ์ ๋ค๋ฆญ ํ์ ์ ์์๋ผ ์ ์์๊น?
Erasure๋ฅผ ๊ณต๋ถํ๋ฉด ์ปดํ์ผ๋ ํ์ผ์๋ ์ ๋ค๋ฆญ ํ์ ์ ๋ณด๊ฐ ์๋ค๊ณ ๋ฐฐ์ ๋ค.
-> ๋ฆฌํ๋ ์ ์ผ๋ก ์์๋ผ ์ ์๋ค.
public GenericDao() {
this.entityClass = (Class<E>) ((ParameterizedType)this.getClass().getGenericSuperclass())
.getActualTypeArguments()[0];
}
'Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํฐ๋ํ ๋ 14์ฃผ์ฐจ ๊ณผ์ : ์ ๋ค๋ฆญ (0) | 2021.03.06 |
---|---|
(์คํฐ๋ ํ ๋) 15์ฃผ์ฐจ ๊ณผ์ : ๋๋ค์ (0) | 2021.03.05 |
์คํฐ๋ํ ๋ 12์ฃผ์ฐจ ๊ณผ์ : ์ ๋ ธํ ์ด์ (0) | 2021.02.28 |
์คํฐ๋ ํ ๋ 12์ฃผ์ฐจ ๊ณผ์ : ์ ๋ ธํ ์ด์ (ํผ๋๋ฐฑ, feedback) (0) | 2021.02.14 |
์คํฐ๋ํ ๋ 11์ฃผ์ฐจ ๊ณผ์ : Enum(feedback, ํผ๋๋ฐฑ) (0) | 2021.02.13 |