ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 제네릭으로 중복 코드 줄이기
    TIL 2021. 3. 1. 12:32

    예제는 백기선님 라이브에서 다뤘던 예제입니다.

     

    기본 구조

    • Apple
    • Banana
    • AppleDao
    • BananDao
    • Store

    제네릭을 사용하기 전의 구조로 

    Apple.class
    Banana.class
    AppleDao.class

     

    BananaDao.class

     

    Store.class

    Dao쪽에서 중복된 코드들이 발생한다.

    상속을 이용한 방법도 있지만 제네릭을 사용해 중복을 줄여보자.

     

     

    GenericDao 선언하기

    GenericDao.class

    E : 엔티티 , K : 키

    엔티티는 임의의 타입이기에 getId()를 모르는 게 당연하다.

    에러를 해결하기 위해 타입을 제한선을 걸어줘야한다.

     

    Entity.class

    상한선이 될 엔티티를 선언해 주고

    Apple.class

    Apple은 그 Entity를 상속을 받는다. 중복도 어느 정도 해결이 됐다.

    GenericDao.class

    이제 GenericDao에 extends를 걸어 상한선을 걸어준다.

    Entity포함 그 밑의 클래스들만 올 수 있기에 E는 getId()를 사용할 수 있다.

    하지만 Entity에서 id를 Integer로 선언했기에 타입 오류가 발생을 한다. (K로 타입 캐스팅을 여기서 하던가 -> 성능 저하, Entity를 제네릭하게 바꿔야 한다.)

    Entitiy.class

    Entity를 사용할 때 타입을 정해줘야 한다.

    Apple.class

    GenericDao도 바꿔주자

    GenericDao.class

    Entity 상한선에 사용되는 Entity는 제네릭을 사용하고 있다. getId의 리턴 타입은 그 제네릭 타입이다.

    메소드들의 리턴 타입이나 매개변수도 제네릭으로 바꿔준다.

     

    AppleDao.class

    AppleDao은 GeneicDao를 상속받아 중복을 줄일 수 있다.

     

     

    Store.class

    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

    댓글

Designed by Tistory.