Relationship한 개념을 interface하거나 class에 할지를 결정하면 앞으로 개념과 개념 간의 관계 설정을 통해서 보다 복잡한 문제를 해결할 차례입니다.이 Relationship에는 대표적으로 Inheritance, Composition, Aggregation, Dependency가 있습니다.상속(Inheritance)상속에는 기존의 코드 재사용과 타입 확장이라는 2가지 목적이 있습니다.Class계승은 2개의 개념에도 장착할 수 있지만 Interface승계는 타입 확장만 가능합니다.반 계승은 2가지 다 가능하지만, 모던 OOP에서는 기존 코드 재사용의 목적으로 학급 승계를 사용하고 타입 확장 목적이 Interface승계를 사용합니다.
유형 확장이란 개념 확장과 동의어입니다. Java의 Collection은 하위 Interface로 List, Queue, Set를 두고 있습니다. 자료구조의 기본 개념은 Collection에서 정의하였고 구체적인 List, Queue, Set는 하위에서 확장 구현하였습니다. List, Queue, Set는 Collection에 정의된 메서드에 의해 공통 접근이 가능합니다.
public interface コレクション<E> Iterable<E> {int size(); boolean isEmpty(); boolean contains(Objecto); boolean add(Ee); boolean remove(Objecto); boolean containsAll(Collection<?)?c)c); boolean addAll(Collection<?)? 拡張 E> c); boolean removeAll(Collection<?> c);}
이렇게 하면 세 가지 유형은 세부 구현이 다르지만 Collection으로 대체할 수 있습니다. 이렇게 자녀 유형이 부모 유형으로 변경 가능한 것을 다형성이라고 하며 Interface에서 상속(유형 확장)하는 이유 중 하나이기도 합니다.1.1 Class 상속(Sub Classing) 자녀 클래스는 부모 클래스 데이터와 method를 모두 상속합니다. 그래서 구현(Implementaiton) 상속이라고도 합니다. 부모 클래스의 기능을 자녀 클래스에서 그대로 사용하여 재사용성이 높습니다. Java Stack은 Vector에서 구현된 기능을 재사용하여 기능 중복이 없고 재사용성을 높였습니다.
필요에 따라 오버라이딩으로 부모의 구현과는 다른 자신만의 로직을 만들 수 있습니다.Class 상속이 적극 추천되지 않는 이유는 기능이 복잡해졌을 때 깊이가 깊어지고 상속된 구현의 일부가 새로운 문제 영역에 적합하지 않을 경우 부모 클래스를 다시 쓰거나 더 적합한 것으로 대체해야 하기 때문입니다.상속의 깊이가 깊어지면 유지보수가 어렵다.나는 새와 날지 못하는 새를 구분하여 클래스 상속을 만들었지만 지금은 부르는 새를 만들거라고 생각하면 기존의 상속에서 구현하기 위해서는 Flying Birds, Non-Flying Birds아래에 새 중간 상속을 만들어야 하는 것으로 깊은 됩니다.1.2 Interface상속(Sub Typing)Interface상속은 아이의 Interface가 부모 Interface를 대체할 수 있다는 뜻입니다.부모 Interface를 확장한 아이 Interface는 부모 Interface에 대입해도 문제가 있어서는 안 된다는 것입니다.이런 관계를 isa관계라고 합니다.상위형은 하위 유형의 일반화된 형태가 아니면 안 되며 하위형은 상위형 특화된 형태이어야 한다는 의미입니다.”List는 Collection이다”로 했을 때 말이 돼야 한다는 것입니다.새 mehtod를 추가하고 싶다면, 부모 Interface를 새로 만들고 2개의 부모 Interface를 계승하도록 구현합니다.Collection에서 Linked List이 List타입과 Deque유형의 양쪽을 상속하고 구현한 것이 대표적인 예입니다.나는 새와 날지 못하는 새를 구분하여 클래스 상속을 만들었는데, 지금은 노래하는 새를 만들려고 하면 기존 상속으로 구현하기 위해서는 Flying Birds, Non-Flying Birds 밑에 새로운 중간 상속을 만들어야 하기 때문에 깊어집니다. 1.2 Interface 상속(Sub Typing) Interface 상속은 자녀 Interface가 부모 Interface를 대체할 수 있다는 의미입니다. 부모 Interface를 확장한 자녀 Interface는 부모 Interface로 대입해도 문제가 없어야 한다는 것입니다. 이런 관계를 isa 관계라고 합니다. 상위 유형은 하위 유형의 일반화된 형태여야 하고 하위 유형은 상위 유형의 특화된 형태여야 한다는 뜻입니다. ‘List는 Collection이다.’라고 했을 때 말이 되어야 한다는 거죠.새 mehtod를 추가하고 싶다면 부모 Interface를 새로 만들어 두 개의 부모 Interface를 상속받도록 구현합니다. Collection에서 Linked List가 List 유형과 Deque 유형을 모두 상속받아 구현한 것이 대표적인 예입니다.[Easy!OOP] Relationship 2. 구성(Composition)과 집합(Aggregation) 구성(Composition) 구성(Composition)은 여러 개의 객체를 조합하여 하나의 객체를 만드는 것을 말합니다. 저희는… blog.naver.com[Easy!OOP] Relationship 2. 구성(Composition)과 집합(Aggregation) 구성(Composition) 구성(Composition)은 여러 개의 객체를 조합하여 하나의 객체를 만드는 것을 말합니다. 저희는… blog.naver.com[Easy!OOP] Relationship 2. 구성(Composition)과 집합(Aggregation) 구성(Composition) 구성(Composition)은 여러 개의 객체를 조합하여 하나의 객체를 만드는 것을 말합니다. 저희는… blog.naver.com