인터페이스가 있을 땐 그걸 써야 하는 이유 (퀴즈)

Поділитися
Вставка
  • Опубліковано 24 вер 2024
  • 스프링을 쓸 때 인터페이스가 있음에도 굳이 클래스 타입으로 빈 주입을 받고 계시다면 언젠가는 이런 상황을 만나게 될지도 모릅니다.
    추천 영상
    ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
    더 나은 개발자로 성장하는 팁 "스터디는 왜? 어떻게 하는 거야?" (feat Outsider)
    링크: • 더 나은 개발자로 성장하는 팁 "스터디는...
    더 나은 개발자로 성장하는 팁 ”나는 그런 개발자가 좋더라"
    링크: • 더 나은 개발자로 성장하는... 더 나은 개발자로 성장하는 팁 "어! 에러가 났네? 어떡하지?"
    링크: • 더 나은 개발자로 성장하는...
    인프런 강좌
    ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
    스프링 부트 개념과 활용
    링크: goo.gl/DMW27C
    스프링 프레임워크 입문
    링크: goo.gl/f6o7aL
    스프링 프레임워크 핵심 기술
    링크: goo.gl/Q2c1iz
    스프링 데이터 JPA
    링크: goo.gl/aeXJAF
    스프링 웹 MVC
    링크: goo.gl/21ZdrM
    스프링 기반 REST API 개발
    링크: goo.gl/PXYsff
    Music
    ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
    raspberry soda by till @tillbeats
    Music provided by Free Music for Vlogs • (Free Music for Vlogs)...
    Broken by Jorm @iamjorm
    Music provided by Free Music for Vlogs • ** No Copyright Music ...
    Sparks by Chaël @chael_music
    Music provided by Free Music for Vlogs • (Free Music for Vlogs)...

КОМЕНТАРІ • 8

  • @styx0822
    @styx0822 5 років тому +5

    @Transactional, @Cacheable등의 aop 적용이 필요한 bean이라면
    spring.aop.proxy-target-class=true : cglib 기반의 proxy 대상의 subclass 생성
    spring.aop.proxy-target-class=false : jdk dynamic proxy로 proxy 대상 클래스의 interface 구현을 proxy하는 instance 생성
    jdk dynamic proxy인 경우 Proxy instance나 DefaultMyService나 MyService의 implementation 이지만 DefaultMyService타입의 레퍼런스에 MyService 타입의 레퍼런스를 set(inject) 할 수 없음.
    cglib의 경우는 proxy insntace가 DefaultMyService를 extends한 subclass이기 때문에, DefaultMyService의 레퍼런스에 DefaultMyService$CGLIB... 형태로 child class의 레퍼런스 전달 가능
    DefaultMyService ref = (MyService) jdkProxyInstance (X)
    DefaultMyService ref = (DefaultMyService$CGLIB...) cglibProxyInstance (O)
    추측해봤습니다.

    • @keesun.b
      @keesun.b  5 років тому +1

      정답 입니다.

    • @styx0822
      @styx0822 5 років тому

      헉 해설편이 있었군요... 민망 ;;

  • @perfectacle
    @perfectacle 5 років тому

    프록시의 동작원리는 원본 객체를 한 번 래핑해서 래핑한 객체가 원본 객체를 호출하는 방식으로써,
    프록시 객체를 사용하는 클라이언트 측 코드는 그 원본 객체가 아닌 래핑한 객체를 사용하는 것으로 알고있고,
    인터페이스를 기반으로 프록시 객체를 생성하도록 설정하고 AOP 설정?도 인터페이스의 메서드에 지정했으므로
    실제 프록시 객체가 생성되는 코드를 생각해보면 해당 인터페이스를 기반으로 메서드와 관련된 부분에 AOP를 처리하게 끔 프록시 객체가 생성이 됩니다. (프록시 객체의 타입은 인터페이스 타입으로 생성됨)
    하지만 이 때 구현체를 사용하게 되면 AOP 코드가 있는 프록시 객체를 사용하는 게 아니라서 그냥 비즈니스 로직만 있는 부분을 실행하게 되는 것이고,
    인터페이스 타입을 써야 인터페이스를 기반으로 생성된 프록시 객체를 호출하게 돼서 실제 AOP까지 적용됨
    이라고 생각했는데 혹시 정답에 근접했을까요?
    설마 cglib의 동작방식이나 JDK의 다이나믹 프록시의 동작방식과 관련된 문제는 아니겠죠?? 그 부분까지는 제대로 공부를 안 해봐서 ㅠㅠ

    • @keesun.b
      @keesun.b  5 років тому

      가깝기는 한데.. 조금 아쉽네요 ㅎㅎ

  • @우성환-d4j
    @우성환-d4j 3 роки тому

    프록시를 생성하는 라이브러리는 둘째치고 간단히 설명하면 아들이 두놈인데 동생을 형한테 주입하는 모양새...? 이걸 이제 봤네요..

  • @devfuner
    @devfuner 5 років тому

    오늘은 맞추지 않겠습니다. ㅋㅋㅋ 몰라서 안맞추는건...... 사실 아직 영상도 못봤네요.

    • @keesun.b
      @keesun.b  5 років тому +1

      감사합니다. 너무 빨리 맞춰주시면 재미없으니까 참아주세요 ㅋㅋ