해결된 질문
작성
·
381
1
안녕하세요 토비님 강의 잘 듣고 있습니다.
다름이 아니라 항상 스프링을 공부하면서 궁금한내용이 있어서 질문 드립니다.
스프링을 보면 정말 많은 곳에서 애노테이션을 사용합니다.
해당 강의에서도 @Controller안에 @Component를 적용해서 마치 자바에서 상속을 받는 것 처럼 작동합니다.
하지만 제가 자바를 공부 할때 애노테이션을 이용해서 해당 클래스를 불러와 코드를 작성하거나 혹은 애노테이션 끼리의 상속 관계를 만드는 방법은 없었던 걸로 알고 있습니다.
그렇다면 누군가가 애노테이션을 불러와서 이러한 작업을 대신 수행하고 있다는 뜻인데 이런 작업들은 '자바'를 이용해서는 어렵다고 생각합니다.
그럼 이러한 작업은 스프링이 어떻게 하는지 궁급합니다.
많이 부족한 질문 읽어 주셔서 감사합니다. ㅎㅎ
답변 1
2
자바의 애노테이션은 그 자체로 상속이라는 개념이 없습니다. 애노테이션이 붙은 클래스의 하위 클래스가 있을 때 그 클래스까지 애노테이션이 적용되는지를 명시해주는 @Inherited라는 개념은 있지만, 애노테이션 자체를 상속해서 확장하는 방법은 언어 차원에서는 제공되지 않습니다. 따라서 알고 계신 내용이 맞습니다.
애노테이션은 각주라는 의미입니다. 코드에 부가적인 정보를 제공하기 위한 수단일 뿐이지 그 자체로 어떤 기능이 동작하도록 만들어주지는 않습니다. 그런데 이런 애노테이션을 런타임에 일종의 설정 정보로 활용해서 코드가 동작하는데 참고하는 방법을 많이 사용합니다. 자바 표준은 물론이고, 스프링이나 각종 자바 프레임워크에서도 이 방식을 적극 활용합니다. 그런데 이게 명시적이지가 않으니 애노테이션을 해당 기술이 어떤식으로 활용하는지를 일일히 학습하고 기억을 해야 합니다. 이게 애노테이션의 어려운 점이죠.
게다가 스프링이나 JUnit 같은 프레임워크는 메타 애노테이션이나 합성 애노테이션 같은 자체적인 개념을 만들고 이를 일괄적으로 기술에 활용합니다. 그래서 애노테이션이 상속으로 확장되는 듯한 효과를 줍니다. 이건 애노테이션을 어떤식으로 활용하는지에 대한 해당 기술이 만든 방법이 그런 것이지, 자바 언어에서 직접 제공하는 것은 아닙니다.
그나마 스프링과 같은 대표적인 기술은 애노테이션의 활용 방식을 스프링 생태계의 모든 기술에 일관된 방식으로 적용하고 있어서 한번 동작 방식을 명확히 익혀두시면 이후에 어렵지 않게 코드를 이해하고, 활용하실 수 있을 겁니다. 강의에서 스프링에서 애노테이션을 활용하는 방식에 대해서 자세히 설명 드립니다.
친절한 답변 감사합니다.