///
Search
👨‍👩‍👧‍👦

instanceof

태그
JAVA
instanceof

instanceof란?

부모를 상속해서 만들어진 자식 객체가 여러 타입인 경우에 특정 클래스가 맞는지 확인하기 위해서 사용한다.
if(sun instanceof Parents){ return; }
Java
복사

이거 까진 알겠는데 그럼 사용하는 것도 알겠는데 뭐가 문제야?

instanceof 말고 다형성을 이용하여 객체에게 물어보는 것? 그것이 더 좋을 것 같다 왜? 이유는 몇가지 존재한다. 캡슐화 객체지향에서 말하는 캡슐화란 객체가 가진 상태나 행위를 다른 이가 사용하거나 보지 못하도록 숨기는 것을 의미한다. 하지만 instanceof를 사용하는 경우, 각 객체가 무엇인지, 어떤 점수를 돌려주어야하는지 불필요한 외부의 객체가 그 정보를 알게 되는 것이다. 때문에 캡슐화가 깨진다는 것을 알 수 있다. 우리는 각 객체가 가진 책임과 역할을 분리해주고, 이로 인해 유지보수, 확장에 있어 편리함을 얻기 위해 객체지향 프로그래밍을 한다. 캡슐화가 보장되지 않으면 그 의미가 없어진다. instanceof의 사용을 지양해야하는 가장 우선적인 이유 OCP 다형성을 이용하면 새로운 객체를 만들고 그 객체에 구현하면 되는 반면에 instanceof를 사용하는 경우 새로운 메서드를 만들어주기 위해 사용하고 있는 모든 함수를 고쳐야한다. 즉, OCP(개방-폐쇄 원칙)에 위반된다(여담으로 토비에 스프링에서도 이런 비슷한 말이 나왔다. 오히려 확인하려는 주체에 그 확인 방법을 명시해주는 것이 오히려 더 좋을 수 있다.). SRP 과도한 책임이 몰릴 수 있다. 단순히 하나의 타입을 확인하는 것이 아니라 여러타입을 검사한다면 그 객체의 검사 의무가 늘어나는 것이다. 성능(직접적으로 확인하지 못했다.) 하지만 잘 정리된 글을 통하여 확인했다.
나의 결론 사용은 해도 된다. 단, 한 객체의 검사가 아닌 여러 객체의 검사를 해야 하거나, 또 다른 객체가 추가될 여지가 존재한다면 굳이 instanceof를 사용할 것이 아니라 다형성을 이용하여 객체 자신이 자신인지 판별해주게 만들어주는 isXXX()메서드를 만드는 편이 좋은 것 같다.