-
제네릭으로 중복 코드 줄이기TIL 2021. 3. 1. 12:32
예제는 백기선님 라이브에서 다뤘던 예제입니다.
기본 구조
- Apple
- Banana
- AppleDao
- BananDao
- Store
제네릭을 사용하기 전의 구조로
Dao쪽에서 중복된 코드들이 발생한다.
상속을 이용한 방법도 있지만 제네릭을 사용해 중복을 줄여보자.
GenericDao 선언하기
E : 엔티티 , K : 키
엔티티는 임의의 타입이기에 getId()를 모르는 게 당연하다.
에러를 해결하기 위해 타입을 제한선을 걸어줘야한다.
상한선이 될 엔티티를 선언해 주고
Apple은 그 Entity를 상속을 받는다. 중복도 어느 정도 해결이 됐다.
이제 GenericDao에 extends를 걸어 상한선을 걸어준다.
Entity포함 그 밑의 클래스들만 올 수 있기에 E는 getId()를 사용할 수 있다.
하지만 Entity에서 id를 Integer로 선언했기에 타입 오류가 발생을 한다. (K로 타입 캐스팅을 여기서 하던가 -> 성능 저하, Entity를 제네릭하게 바꿔야 한다.)
Entity를 사용할 때 타입을 정해줘야 한다.
GenericDao도 바꿔주자
Entity 상한선에 사용되는 Entity는 제네릭을 사용하고 있다. getId의 리턴 타입은 그 제네릭 타입이다.
메소드들의 리턴 타입이나 매개변수도 제네릭으로 바꿔준다.
AppleDao은 GeneicDao를 상속받아 중복을 줄일 수 있다.
main을 보면 AppleDao도 사용하지 않고 GenericDao를 통해 바로 사용이 가능하다.
그럼 AppleDao는 왜 남겨놓을까?
나중에 Apple만의 특화된 기능이 생길 수 있기 때문에 AppleDao를 삭제하지 않는 것이다.
결과물은 다음과 같다.
- Apple
- Banana
- Entity
- BananaDao
- AppleDao
- GenericDao
- Store
'TIL' 카테고리의 다른 글
2021.03.03 기록장 (0) 2021.03.03 2021.03.02 기록장 (0) 2021.03.01 2021.03.01 기록장 (0) 2021.02.28 오버로딩 , 오버라이딩 (0) 2021.02.28 Clone() 알아보기 (0) 2021.02.28