두 객체를 합친 객체를 정의하고싶다
JAVA로 개발을 하면서 데이터 중복과 사용하는 멤버의 범위 제한 등을 위해서 객체의 상속을 사용하게됩니다. 저는 이번에 데이터 중복을 줄이기 위해 상속을 사용하고 싶었습니다. A라는 객체와 B라는 객체의 멤버가 합쳐진 C 객체, 정확히 말하면 DAO A와 B가 있고 두 Entity가 join된 DAO인 C를 정의해야했습니다.
만약 다중상속이 된다면, 저는 A와 B를 모두 C가 상속하여 멤버변수를 다시 정의할 필요없이 관련 메서드만 작성하면 간단하게 C를 정의할 수 있습니다. 멤버가 많을수록 C를 정의하기 편하기도 하고, 중복된 이름의 변수가 줄어들기 때문에 더 선호하는 방식일 수 있습니다.
다중 상속을 지원하지 않는 이유
C++은 다중 상속이 지원되는 것으로 알고있습니다. 그러나 JAVA는 다중상속을 지원하지 않습니다. 이유는 다중상속하는 객체들 중, 중복된 멤버 이름이 있으면 선택해야할 멤버를 특정할 수 없기 때문입니다. C++에서는 virtual을 사용하여 같은 이름의 멤버를 중복생성하지 않게 처리한다고 하네요.
대책안
작성하면서 떠오른 대책방법은 C에 A와 B를 멤버로 선언하면 될 것 같습니다. 생성자, getter/setter 등이 Lombok이 자동 생성해줄 수 없을 듯 하여 더 지저분해질 수 있으니... 완벽한 대첵은 아닐 수 있네요. 경험을 쌓으면서 더 좋은 방법을 고민해봐야겠습니다.
'CS > 언어' 카테고리의 다른 글
[JAVA] Hash와 Thread-Safe (0) | 2022.01.19 |
---|---|
[JAVA] ArrayList에서 특정 값을 가진 원소들 찾기 (0) | 2022.01.14 |
[JAVA] Long에 대하여 (0) | 2022.01.12 |
[JAVA] POJO(Plain Old Java Object) (0) | 2022.01.06 |
[Python] Pypy와 CPython (구현체) (0) | 2021.10.01 |