Loading...

공공 데이터 / / 2022. 1. 25. 16:28

공공 데이터 3강. 리플렉션

반응형

리플렉션(Reflection) : 객체를 통해 클래스의 정보를 분석해 내는 프로그램 기법

(투시, 반사라는 사전적 의미를 가지고 있음)

 

쉽게 말해 리플렉션은 내부를 훔쳐보는 기법이라는 말이다.

 

과일가게에 1차 판매자는 사과와 딸기를 파는데

과일들을 더 맛있게 해주는 향신료를 가지고 있다.

 

1차 판매자에게 물건을 받아

되파는 2차 판매자가 바나나가 팔고 싶어 져서

1차 판매자에게 요청을 하면

추가로 넣어줄 수도 있다.

 

하지만 바나나 물건 구하고, 사 와서 향신료와 함께 파는 건 괜찮지만

2차 판매자가 많아질수록 요구사항도 많아지고

1차 판매자는 너무 귀찮아지게 될 것이다.

 

1차 판매자는 2차 판매자가 어떤 과일을 추가로 요구할지 모르기 때문에

1차 판매자는 결국 향신료의 레시피는 공개하지 않은 채

필요한 2차 판매자에게 향신료를 제공하게 된다.

 

프로그래밍에서 생각해보자.

 

1차 판매자가 라이브러리의 메서드를 제공하는 사람(1차 개발자)이고,

2차 판매자가 라이브러리를 활용하여 사용하는 사람(2차 개발자)이다.

 

int 타입의 매개 변수만 받는 메서드를 사용하려는 2차 개발자가

메서드의 매개변수에 String 타입도 받고 싶을 때

1차 개발자에게 요구할 수 있다.

그러면 1차 개발자는 String 타입도 사용 가능하도록

오버 로딩 기법을 사용해 만들어 버전 업데이트를 해줄 것이다. 

 

이렇게 1차 개발자는 2차 개발자에게 어떤 메서드가 필요한지, 가지고 있는지를 모르기 때문에

리플렉션 기법을 사용하여 2차 개발자의 클래스를 투시하는 것이다.

 

투시를 하기 위해서는 추가해주어야 하는 문장이 있다.

 

우리는 주석을 사용할 때 // 기호를 사용했다.

이것은 컴파일러가 컴파일 시점에 읽지 말고 무시하고 넘어가라는 기호이다.

 

리플렉션을 사용하기 위해서는 어노테이션을 사용해주어야 한다.

어노테이션은 투시하려는 클래스 위에 달아주고 @ 기호를 사용한다.

 

예를 들어

 

클래스의 private 상태를 불러오기 위해 getter를 사용했었다.

getter를 만들려면 클래스에서 Alt + 엔터키를 눌러 직접 생성했다.

하지만 어노테이션을 사용하여 @ Getter를 클래스명 위에 적어주면

 

JVM이 런타임 때 리플렉션 기법을 사용해

클래스가 가지고 있는 필드와 메서드를 분석한 다음

어노테이션이 붙어있는 곳을 모두 찾아서

실제 코드에는 없지만 런타임 때 getter 코드가 만들어지게 된다.

 

따라서 리플렉션 기법을 사용하는 주체는 JVM이고,

리플렉션을 사용하는 시점은 런타임 때이고,

리플렉션을 하는 JVM을 위한 주석이 어노테이션인 것이다.

 

리플렉션의 원리는 아직 궁금해하지 않아도 괜찮다 ^_^

 

 

 

 

 

[출처]

 

https://cafe.naver.com/metacoding

 

메타코딩 : 네이버 카페

코린이들의 궁금증

cafe.naver.com

 

메타 코딩 유튜브

https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9

 

메타코딩

문의사항 : getinthere@naver.com 인스타그램 : https://www.instagram.com/meta4pm 깃헙 : https://github.com/codingspecialist 유료강좌 : https://www.easyupclass.com

www.youtube.com

 

반응형