> Java > java지도 시간 > 본문

공분산, 불변성, 반공변성은 프로그래밍의 유형 관계에 어떤 영향을 미칩니까?

Barbara Streisand
풀어 주다: 2024-11-12 03:28:01
원래의
214명이 탐색했습니다.

How do Covariance, Invariance, and Contravariance Affect Type Relationships in Programming?

일반 영어의 공분산, 불변성, 반공변성: 종합적인 설명

공분산, 불변성, 반공변성은 다음과 같은 프로그래밍 개념입니다. 유형과 하위 유형 간의 관계는 유형 변환의 영향을 받습니다. 이러한 개념은 프로그래밍 언어의 다형성과 유형 안전성을 이해하는 데 중요한 역할을 합니다.

공분산

공분산은 하위 유형 관계가 유형 변환에 의해 유지된다는 것을 나타냅니다. 즉, 유형 A가 유형 B의 하위 유형인 경우 변환된 유형 f(A)도 f(B)의 하위 유형입니다. 예를 들어 f(A) = List 변환을 생각해 보세요. 여기서 List는 다음과 같이 선언됩니다.

class List<T> { ... }
로그인 후 복사
로그인 후 복사

Since List 는 List의 하위 유형이므로 f(String) = List; f(Object) = List의 하위 유형입니다. 따라서 f는 공변적입니다.

반공변성

반공변성은 공분산의 반대입니다. 이는 유형 변환에 의해 하위 유형 관계가 역전됨을 나타냅니다. A가 B의 하위 유형이면 f(B)는 f(A)의 하위 유형입니다. 예를 들어 f(A) = A[] 변환을 생각해 보세요. 변환은 배열 간의 하위 유형 관계를 반대로 바꿉니다. Object[]는 String[]의 하위 유형이지만 String[]은 Object[]의 하위 유형이 아닙니다. 이는 f를 반공변성으로 만듭니다.

불변성

불변성은 공분산도 반공변성도 성립하지 않을 때 발생합니다. 즉, 하위 유형 관계는 유형 변환에 의해 보존되거나 역전되지 않습니다. 예를 들어, f(A) = Map 변환을 고려해보세요. A가 B의 하위 유형인 경우 f(A) = Map f(B) = Map의 하위 유형입니다. 따라서 f는 불변입니다.

언어 특성의 응용