객체 지향의 4대 특성 - 캡 상 추 다
- 클래스는 개념이다 → 객체는 실체다
- 클래스 : 객체 = 펭귄 : 뽀로로 = 사람 : 황준호 = 쥐 : 미키마우스
- 세성에 존재하는 유일무이한 객체의 특성 (속성 + 기능)에 따라 분류해 보니 객체를 통칭할 수 있는 집합적 개념, 즉 클래스(분류)가 나오게 된다.
추상화: 모델링
“객체 지향의 추상화는 곧 모델링이다”
- 모델은 실제 사물을 정확히 복제하는 것이 아닌, 목적에 맞게 관심 있는 특성만을 추출해 표현하는 것이다.
추상화란 구체적인 것을 분해해서 관심 영역에 대한 특성만을 가지고 재조합하는 것 = 모델링
- 넓은 의미의 추상화 :
- 상속을 통한 추상화, 구체화
- 인터페이스를 통한 추상화
- 다형성을 통한 추상화
- 자바는 객체 지향의 추상화를 class 키워드를 통해 지원하고 있다.
상속: 재사용 + 확장
- 객체 지향에서의 상속은 상위 클래스의 특성을 하위 클래스에서 상속(특성 상속)하고 거기에 더해 필요한 특성을 추가, 즉 확장해서 사용할 수 있다는 의미다.
- 상위 클래스 - 하위 클래스 / 슈퍼 클래스 - 서브 클래스라 표현하는게 더 의미적으로 와닿음
- 객체 지향의 상속은 부모 - 자식 같은 계층도나 조직도가 아닌 동물 - 포유류 같은 분류도이다.
- 반드시 상속관계에서 만족해야 할 문장 : 하위 클래스는 상위 클래스다
- [중요!]
Animal
클래스를 상속한 Penguin
클래스가 있다면, Penguin
클래스를 new로 인스턴스화 하면heap 영역에 Penguin
과 Animal
둘 다 만들어 진다.
상속은 IS-A
관계를 만족해야 한다?
- 상속 관계의 더 명확한 표현은
is a kind of
관계이다.
- 하위클래스 is a kind of 상위 클래스
- 다중 상속의 다이아몬드 문제 때문에 자바와 C#은 과감히 다중 상속을 포기했다.