inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

토비의 스프링 부트 - 이해와 원리

@Component 스캔

애노테이션 관련 질문입니다.

해결된 질문

473

이찬원

작성한 질문수 19

1

안녕하세요 토비님 강의 잘 듣고 있습니다.

다름이 아니라 항상 스프링을 공부하면서 궁금한내용이 있어서 질문 드립니다.

스프링을 보면 정말 많은 곳에서 애노테이션을 사용합니다.

해당 강의에서도 @Controller안에 @Component를 적용해서 마치 자바에서 상속을 받는 것 처럼 작동합니다.

하지만 제가 자바를 공부 할때 애노테이션을 이용해서 해당 클래스를 불러와 코드를 작성하거나 혹은 애노테이션 끼리의 상속 관계를 만드는 방법은 없었던 걸로 알고 있습니다.

그렇다면 누군가가 애노테이션을 불러와서 이러한 작업을 대신 수행하고 있다는 뜻인데 이런 작업들은 '자바'를 이용해서는 어렵다고 생각합니다.

그럼 이러한 작업은 스프링이 어떻게 하는지 궁급합니다.

많이 부족한 질문 읽어 주셔서 감사합니다. ㅎㅎ

 

 

spring spring-boot

답변 1

2

토비

자바의 애노테이션은 그 자체로 상속이라는 개념이 없습니다. 애노테이션이 붙은 클래스의 하위 클래스가 있을 때 그 클래스까지 애노테이션이 적용되는지를 명시해주는 @Inherited라는 개념은 있지만, 애노테이션 자체를 상속해서 확장하는 방법은 언어 차원에서는 제공되지 않습니다. 따라서 알고 계신 내용이 맞습니다.

애노테이션은 각주라는 의미입니다. 코드에 부가적인 정보를 제공하기 위한 수단일 뿐이지 그 자체로 어떤 기능이 동작하도록 만들어주지는 않습니다. 그런데 이런 애노테이션을 런타임에 일종의 설정 정보로 활용해서 코드가 동작하는데 참고하는 방법을 많이 사용합니다. 자바 표준은 물론이고, 스프링이나 각종 자바 프레임워크에서도 이 방식을 적극 활용합니다. 그런데 이게 명시적이지가 않으니 애노테이션을 해당 기술이 어떤식으로 활용하는지를 일일히 학습하고 기억을 해야 합니다. 이게 애노테이션의 어려운 점이죠.

게다가 스프링이나 JUnit 같은 프레임워크는 메타 애노테이션이나 합성 애노테이션 같은 자체적인 개념을 만들고 이를 일괄적으로 기술에 활용합니다. 그래서 애노테이션이 상속으로 확장되는 듯한 효과를 줍니다. 이건 애노테이션을 어떤식으로 활용하는지에 대한 해당 기술이 만든 방법이 그런 것이지, 자바 언어에서 직접 제공하는 것은 아닙니다.

그나마 스프링과 같은 대표적인 기술은 애노테이션의 활용 방식을 스프링 생태계의 모든 기술에 일관된 방식으로 적용하고 있어서 한번 동작 방식을 명확히 익혀두시면 이후에 어렵지 않게 코드를 이해하고, 활용하실 수 있을 겁니다. 강의에서 스프링에서 애노테이션을 활용하는 방식에 대해서 자세히 설명 드립니다.

 

0

이찬원

친절한 답변 감사합니다.

11강에서 cmd에서 spring shell에 $ init 하면 Fail 메세지

0

75

2

TestRestTemplate 을 통해 테스트 실행시 웹 요청 정보가 콘솔에 표시되지 않습니다.

0

85

1

섹션7. 자동구성 정보파일분리 강의 질문(@MyAutoConfiguration 붙힌 이유)

0

202

2

WebApplicationContext를 DispatcherServlet에 this로 넘기는 것

0

279

2

인프라 빈 구성 정보의 분리에서 EnableMyAutoConfiguration 질문드립니다.

0

210

2

질문드립니다.

0

233

2

spring boot 3.3.7로 학습중입니다.

0

370

2

Serverproperties 객체 생성 후 @Impor 어노테이션 사용 이유 용도

0

162

2

spring start io 에서 이제더이상 2.x버전은 지원하지 않는 것 같습니다.

1

298

2

Springboot 3.2 이상에서 파라미터 추론관련

0

915

4

binding error

0

222

3

Arrays.copyOf 메서드의 타입 세이프

1

155

2

MyOnClassCondition에 있는 matches method의 Invoke 횟수

1

233

3

인용구의 출처가 궁금합니다.

0

259

1

프로퍼티 빈의 후처리기 도입 AnnotationUtils의 사용

0

236

2

SimpleCacheConfiguration과 빈 등록

0

169

2

MyAutoConfigImportSelector 에서 생성자로 ClassLoader를 주입받을 수 있는 점

0

244

1

IntelliJ project jenerator spring initailizr

0

150

1

강의 자료 레퍼지토리에 업로드

0

216

1

강의자료

0

388

1

Hikari 라이브러리가 없으면 오류가 나는거 아닌가요

0

314

2

Tomcat 포트 프로퍼티 미설정시 랜덤 포트 설정 문의

0

476

5

@Import 로 Bean을 등록해야하는 기준이 뭔지 궁금합니다.

0

342

2

application.properties파일내 프로퍼티 이름

0

213

1