리플렉션

Jan 30, 2024
리플렉션

라이브러리를 쓰면 생기는 단점 - 그래서 리플렉션이…!

우리가 앞에서 짠 코드를 유지보수 한다고 생각해 보자 BankController에 withdraw() 메소드를 새로 만들 것이다!
notion image
근데... 디스패처(라우터)에 withdraw() 메소드가 없잖아ㅠㅠ 실행이 되겠니? 절대.안됨
notion image
withraw() 있나 보세요. 없지요? 그럼 라이브러리 만든 사람에게 전화해서 witrhraw() 좀 만들어주세요 ㅠㅠ 해야함 그래서 그분이 else if (url.equals(”withraw”) { con.withraw(); 이렇게 새로 메소드를 만들어줬어... 근데 이번엔 deposit()을 만들어야 해. 그럼 또 deposit()을 만들어달라고 전화하고…… > 라이브러리 단점

[ 그런데 왜 라우터를 라이브러리로 사용할까? ]

개발자가 수동으로 모든 URL 주소를 라우터에 일일이 작성하는 번거로움을 줄이기 위해서다. (URL 주소 분기를 일일이 router에다가 다 적을셈이냐 50000개를??)
💡
주소 분기? 사용자가 입력한 주소를 보고 그에 맞는 페이지나 기능으로 연결해주는 역할 주소가 "/users"인 경우, 주소 분기는 "/users"에 대응하는 컨트롤러를 찾아서 해당 코드를 실행한다 ex. 사용자가 웹 브라우저에서 "https://www.example.com/products"라는 주소를 입력했다고 가정. 이때 주소 분기는 "/products"라는 주소를 보고, 이에 해당하는 상품 목록 페이지로 사용자를 연결해 준다.

[ 그래서 나왔다! 리플렉션! ]

리플렉션은 내가 무슨 메소드를 만들든 다 때려준다. 앞에서 설명한대로 라이브러리를 만들어준 사람이 내가 어떤 메소드의 이름을 쓸지 모르는데, 유지보수도 안해주고 다 동작하게 만들어준다! 그게 바로 리플렉션!
리플렉션은 내가 컨트롤러에서 무슨 메소드를 만들든, 디스패처에 직접 추가할 필요 없이 자동으로 else if (url.equals("withdraw") { con.withdraw(); } 를 만들어 주는 것... 정도로 생각하면 될 듯
프로그램의 실행 중에 클래스의 정보를 분석하고 조작할 수 있기 때문에, 사용자가 만든 메소드의 이름이 무엇인지 미리 알지 못해도 동적으로 해당 메소드를 찾아서 실행할 수 있다. 이를 통해 사용자는 라우터에 메소드를 등록하거나 수정할 필요 없이 원하는 기능을 추가하고 실행할 수 있다.
 

리플렉션과 어노테이션

[ 리플렉션 ]

프로그램 실행 중에 클래스의 정보를 분석하고, 클래스의 멤버(필드, 메소드, 생성자 등)에 접근하고 조작하는 기능을 제공
notion image
기본 코드와 리플렉션 중 기존코드가 속도가 훨씬 빠르다 리플렉션은 동적으로 모두 다 확인하고 가기 때문에 분석하는 시간이 오래 걸린다. 때문에 리플렉션을 적절하게 쓰는게 좋다 그림 상으로... 모든 나무를 다 분석해가면서 올라가는게 바로 리플렉션

[ 리플렉션은 언제 쓰나? ]

1. 동적일 때 사용자가 입력한 데이터에 따라 다른 로직이 실행되어야 할 때는 미리 해당 입력 값을 알 수 없으므로 동적으로 처리해아 한다. (즉, 미리 코딩을 못한다는 뜻) 2. 1차 개발자 / 2차 개발자 나뉘는 경우 메소드를 돌릴 때마다 라이브러리 만드는 사람한테 유지보수 해달라 말해야할 때

[ 리플렉션 ♥ 어노테이션 ]

어노테이션을 붙이면 리플렉션을 효율적으로 사용할 수 있다. (어노테이션은 깃발이다. 즉, 나무에 깃발을 꽂아놓고, 이것만 봐!! 라고 하는 것. 덕분에 깃발이 있는 것만 보고 관리할 수 있으니까, 전부 다 안들러도 됨! = 속도 빨라짐?) 어노테이션을 안쓰면 전부.. 전부 검사...
 
 

TIP!

리플렉션을 우리가 만들 일은..없다. 우린 깃발을 꽂을 줄만 알면 된다!!
 
Share article

codingb