일반화(추상화)는 객체지향 설계의 핵심이다. 일반화와 추상화는 사전적 정의로 구분될 수 있지만 굳이 구분 안 해도 별 탈 없다. 추상화와 일반화를 구분하는 것보다 더 중요한 것이 있다. 바로, 일반화와 특수화를 구분하는 것이다. 일반화(추상화)는 공통된 특성이나 공통된 기능으로 묶는 것을 의미한다. 공통된 특성은 상속으로 구현되고 공통된 기능은 인터페이스로 구현된다. 어떤 관점을 가지냐에 따라 설계 방식이 달라진다. 사용자는 '키는' 기능을 하고 싶다. 근데 만약 전등에 직접 접근한다면 오로지 전등만 킬 수 있다. TV, 에어컨 기타 등등은 킬 수 없다. 이는 비효율적인 설계이고 유지보수에 좋지 못하다. 효율적인 설계를 하려면 사용자는 '키는' 기능에 접근해야한다. 예를 들어 리모컨이 있을 수 있다. p..