들어가기 전에
다형성의 원리 복습
- Java는, 부모 클래스의 클래스 변수에 자식 클래스의 인스턴스 할당이 가능하다
- 다만, 부모 클래스변수는 부모 클래스에 있는 메서드만 사용이 가능하다
public class Car {
public void openDoor() {
// 문을 연다
}
}
public class SuperCar extends Car {
public void openCell() {
// 뚜껑을 연다
}
}
Car car = new SuperCar(); // 할당 가능
car.openCell(); // 에러 발생!
다형성의 한계
- 부모 클래스변수에서 자식 인스턴스의 메서드를 쓸 수 없다
리플렉션이란?
- 클래스에 대한 정보를 모르더라도 메서드나 멤버변수 등을 사용할수 있게 해주는 것
- 다시 말해, 부모 클래스의 클래스변수에서, 자식 클래스의 메서드를 쓸수 있게 해주는 것
리플렉션이 동작하는 원리
- 자바 프로그램이 시작될때, 사실 모든 클래스는 메모리의 Class Area(=Method Area) 에 바이트코드 형태로 들어간다
- 메모리에 저장된 상속 관계를 타고 들어가서, 자식 클래스에 정의된 필드와 메서드들에 접근할 수 있다
리플렉션이 필요한 상황
- 메모리 영역을 직접 뒤져야 할 필요가 있을 때, 직접 메모리를 찾는 코드를 짜면 지저분하다
- reflect API를 이용해 가독성 좋은 코드를 짤 수 있다
리플렉션 코드
정보 조회
정보 변경
애노테이션 조회