JavaRush /Java Blog /Random-KO /커피 브레이크 #95. Java의 다중 상속 문제를 해결하는 방법

커피 브레이크 #95. Java의 다중 상속 문제를 해결하는 방법

Random-KO 그룹에 게시되었습니다
출처: FreeCodeCamp Java는 오늘날 사용되는 가장 인기 있는 객체 지향 프로그래밍 언어 중 하나입니다. 플랫폼 독립적이므로 모든 유형의 장치와 모든 운영 체제에서 Java 애플리케이션을 찾을 수 있습니다. 그리고 자바는 상대적으로 배우기 쉽기 때문에 많은 프로그래머들이 마스터하는 언어 중 하나입니다. 여러분이 숙지해야 할 Java의 중요한 기능은 클래스 상속입니다. 상속을 사용하면 코드를 최적화하여 클래스를 더 쉽게 재사용할 수 있습니다. 이미 테스트 및 디버깅된 코드를 재사용할 수 있으면 소프트웨어 개발 수명 주기가 더 짧아지고 비용도 저렴해집니다. 커피 브레이크 #95.  Java의 다중 상속 문제를 해결하는 방법 - 1이론적으로는 단순한 개념이지만 상속 관계를 코딩하려면 세부 사항에 주의가 필요합니다. 특히 다중 상속과 관련하여 하나의 하위 클래스가 여러 상위 클래스의 속성을 상속합니다. Java는 다중 상속 관계가 모호함을 야기하기 때문에 거부하지만, 무엇을 해야 할지 안다면 동일한 효과를 얻을 수 있는 여러 가지 방법이 있습니다. 이 기사에서는 다중 상속 문제를 살펴보고 Java의 대체 코딩 옵션에 대해 논의합니다.

상속 용어

때로는 성공적인 프로그래머가 되기 위해 일반적인 오류나 문제에 대한 해결 방법을 찾는 문제 해결사가 되어야 합니다. 이는 안전하고 스마트한 코딩의 필수적인 부분입니다. 그러한 문제 중 하나는 Java의 다중 상속(또는 상속의 부족)과 관련이 있습니다. 커피 브레이크 #95.  Java의 다중 상속 문제를 해결하는 방법 - 2Java의 상속을 완전히 이해하려면 객체 지향 프로그래밍(OOP)의 기본 상속 용어를 잘 알고 있어야 합니다.
  • 클래스는 객체 지향 프로그래밍 언어의 기본 패턴 구조입니다. 클래스는 객체 그룹의 공통 속성을 정의합니다.
  • 상위 클래스 : 기본 클래스 또는 슈퍼 클래스라고도 합니다. 상위 클래스는 하위 클래스에 기능을 제공하는 확장 가능한 클래스입니다. 재사용이 가능해졌습니다. 상위 클래스의 정의와 함수는 하위 클래스를 생성할 때 재사용됩니다.
  • 하위 클래스 : 보다 일반적으로 하위 클래스라고 불리는 하위 클래스는 다른 클래스의 기능을 상속합니다. 하위 클래스는 확장 또는 파생 클래스입니다.
  • 상속 : 부모 클래스와 자식 클래스 간의 관계입니다.

OOP 상속 유형

Java, C++, JavaScript, Python, PHP, Ruby 및 Perl을 포함하여 오늘날 널리 사용되는 객체지향 프로그래밍 언어가 많이 있습니다. 상속은 이러한 OOP 언어에서 일반적인 개념이지만 각 언어에 모든 유형의 상속이 존재하는 것은 아닙니다. 일반적인 상속 유형과 사용 중인 특정 언어의 상속 제한 사항을 아는 것이 매우 중요합니다. 상속에 대해 더 많이 알수록 더 효과적인 개발자가 될 수 있습니다. Java가 지원하는 상속 유형은 다음과 같습니다.
  • 단일 수준 상속 : 하위 클래스가 단일 상위 클래스의 기능을 상속하는 경우입니다.
  • 다중 수준 상속 : 단일 수준 상속의 다중 수준 형태입니다. 다중 수준 상속에서는 하위 클래스가 다른 하위 클래스의 상위 클래스 역할을 할 수도 있습니다. 각 수준 간의 관계는 선형입니다. 다중 상속보다 더 높은 분기는 없습니다. 이 경우 마지막 하위 클래스에는 위의 모든 수준의 기능이 있습니다.
  • 계층적 상속 : 다중 상속의 반대입니다. 계층적 상속에서는 단일 상위 클래스에 둘 이상의 하위 클래스가 있습니다. 따라서 위에 가지가 있는 대신 아래에 가지가 있습니다.
  • 하이브리드 상속 : 이름에서 알 수 있듯이 하이브리드 상속은 다른 유형의 상속을 조합한 것입니다.
위에 나열된 상속 유형 외에도 Java가 지원하지 않는 다른 유형이 있습니다.
  • 다중 상속 : 다중 상속에서는 자식 클래스에 부모 클래스가 두 개 이상 있습니다. Java와 JavaScript는 다중 상속을 지원하지 않지만 C++와 같은 OOP 언어는 지원합니다.
  • 다중 경로 상속 : 다중, 다중 레벨 및 계층적 상속의 하이브리드인 다중 경로 상속에서 하위 클래스는 상위 클래스와 상위 클래스의 여러 하위 클래스로부터 특성과 기능을 상속받습니다. 다중 경로 상속은 다중 상속을 기반으로 하기 때문에 Java에서는 해당 사용을 지원하지 않습니다.

Java가 다중 상속을 지원하지 않는 이유

다중 상속의 주요 문제점은 하위 클래스에 모호성을 만들 수 있다는 것입니다. 1995년 백서에서 수석 Java 디자이너인 James Gosling은 다중 상속 문제가 Java가 탄생한 이유 중 하나라고 밝혔습니다. 다중 상속에 내재된 복잡성은 다이아몬드 문제에서 가장 분명하게 드러납니다. 다이아몬드 문제에서 부모 클래스 A에는 두 개의 서로 다른 자식 클래스 B와 C가 있습니다. 즉, 자식 클래스 B와 C는 클래스 A를 확장합니다. 커피 브레이크 #95.  Java의 다중 상속 문제를 해결하는 방법 - 3이제 클래스 B와 클래스 C를 모두 확장하는 새로운 자식 클래스 D를 만듭니다. 다중 상속(D는 B와 C를 확장), 계층적 상속(B와 C는 확장) A) 및 다중 수준 상속(D는 A, B 및 C를 확장함). 다이아몬드 문제에서 하위 클래스 B와 C는 상위 클래스 A의 메서드를 상속합니다. B와 C는 모두 상속된 메서드를 재정의합니다. 그러나 B와 C의 새로운 방법은 서로 모순됩니다. 마지막 자식 클래스 D는 여러 부모 B와 C로부터 두 개의 독립적이고 충돌하는 메서드를 상속받습니다. 클래스 D의 어떤 메서드를 사용해야 하는지 명확하지 않으므로 모호성이 발생합니다. 다른 OOP 프로그래밍 언어는 다중 상속의 모호함을 해결하기 위해 다양한 방법을 구현합니다.

Java의 다중 상속 문제를 해결하는 방법

다중 상속이 문제가 있다고 해서 그것이 쓸모없다는 의미는 아닙니다. 하나의 클래스가 여러 다른 클래스의 함수를 갖기를 원하는 상황이 많이 있습니다. 당신이 매우 성공적인 소프트웨어 개발자가 되었을 때 구입하게 될 Tesla Roadster에 대해 생각해 보십시오. 기술적 특성은 스포츠카 클래스와 전기차 클래스를 모두 기반으로 합니다. 또 다른 예: 이 기사를 읽고 있는 브라우저입니다. 인터넷 개인정보 보호 솔루션 클래스와 일반 인터넷 브라우저 클래스의 기능을 갖추고 있습니다. 그러나 Java에서는 여러 클래스를 확장할 수 없습니다. 그렇다면 이 언어는 다중 상속 문제를 어떻게 처리할까요? Java는 인터페이스라는 구조를 사용합니다. 인터페이스는 클래스에 의해 구현될 동작을 정의하는 추상 유형입니다. 인터페이스는 추상적이기 때문에 해당 동작에 대한 자세한 지침이 포함되어 있지 않습니다. 대신 클래스는 인터페이스 동작의 구체적인 구현을 제공합니다. 인터페이스에는 다음과 같은 몇 가지 정의적인 특성이 있습니다.
  • 클래스와 달리 인터페이스를 인스턴스화하지 않습니다. 대신 클래스는 인터페이스를 구현합니다.
  • 인터페이스에는 공개 상수 정의와 메서드 헤더만 포함됩니다.
  • 인터페이스는 클래스가 아닌 다른 인터페이스만 확장할 수 있습니다.
  • 인터페이스는 여러 인터페이스를 확장할 수 있고, 클래스는 여러 인터페이스를 구현할 수 있습니다.
이제 인터페이스를 사용하여 다이아몬드 문제를 효과적으로 해결할 수 있습니다. 인터페이스만이 다른 인터페이스만 확장할 수 있으며 다중 상속 특성이 필요한 모든 클래스는 다중 인터페이스를 구현해야 한다는 점을 기억하면 다이아몬드 문제 클래스를 재정의할 수 있습니다. 클래스 A, B, C였던 것이 이제는 인터페이스 A, B, C가 됩니다. 인터페이스 B와 C는 여전히 인터페이스 A를 확장하지만 이러한 인터페이스 중 어느 것도 특정 기능을 갖고 있지 않고 특정 동작만 갖고 있습니다. 클래스 D는 인터페이스 B와 C의 동작을 구체적으로 구현하는 클래스로 남아 있습니다. 한 가지 주요 차이점에 유의하세요. 클래스 D는 인터페이스 B와 C를 확장하지 않고 대신 구현합니다. 이렇게 하면 실제로 다중 상속이 없습니다. 대신에 문제를 재구성하기만 하면 됩니다.

결론

효과적인 Java 개발자에게는 상속을 이해하는 것이 필수적입니다. 상속의 한계와 전통적인 다중 상속 문제에 대한 Java의 내장 해결 방법을 아는 것도 똑같이 중요합니다. Java에서 다중 상속의 효과를 재현하기 위해 인터페이스를 만드는 방법을 배우면 생산성과 채용 기회가 향상됩니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION