객체지향은 너무 유연성이 없다. 이상적으로는 현재의 클래스 구조가 대상의 실제 구조를 정확하게 반영하고 있어서 요구사항이 바뀌더라도 쉽게 대응할 수 있어야 하지만, 실제로는 그건 불가능하다. 동물을 분류한다면 어떻게 해야 할까? 계통학적으로? 가축처럼 용도에 따라서? 아니면 형태? 서식지? 클래스를 만들 기준은 얼마든지 많이 있기 때문에, 실제로는 요구사항에 맞는 기준에 맞춰서 디자인 패턴을 결정하고 클래스 구조를 짜게 된다. 따라서 요구사항이 바뀌면 클래스 구조를 뜯어고치느라 시간과 노력이 많이 들어갈 수밖에 없다. 요즘은 대체로 함수형 프로그래밍 등의 다른 개념과 섞어쓸 수 있으니 다행이지만.
내 게임에서 리플렉션이 사용되는 경우는 딱 3가지임. 카드에서 멤버 참조, 몹에서 멤버 참조, 스태틱 클래스에서 메소드 서치. 직접 부를 수 있는데 리플렉션을 사용하는 이유는 유니티 인스펙터 환경에서 접근해야 하기 때문임. 부연설명을 하자면 내 게임의 카드 종류 1개는 '상속받은 하위 클래스'가 아니라 '직렬화된 개체'임. 이렇게 짠 이유는 내가 대충 300개 카드를 만들기 위해 300개의 클래스를 선언해야 하면 진짜 에바잖슴. 여튼 '개체'인 카드 1개의 효과를 짤려면 직렬화되는 구조체와 클래스를 이용해서 고급화된 코딩환경을 구성해야 함. 이 과정에서 내가 '몹의 hp의 반 깎는 딜'을 코딩한다고 하면, 몹의 hp를 어떻게 가져올 것인지에 대한 문제가 생김. 왜냐하면 카드를 개체로 잡은 이상 코드를 각각 적어줄 수가 없으니까. 그래서 string과 멤버가 대응될 필요가 생기는데, 이걸 수동으로 연결시켜 줘도 되지만 '그것이 귀찮아서' 리플렉션을 쓰게 됨.