💡 이전 포스팅과 이어집니다! 이전 포스팅에선 제너릭 함수, 제너릭 클래스 등의 용법과 제약 조건에 대해서도 배워보았다. 이번 시간엔 더 나아가 불변성 및 공변성, 반공변성의 개념에 대해서 알아보고자 한다. 용어는 생소할 수 있지만, 개념은 그리 어렵지 않으니 천천히 하나씩 살펴보도록 하자. Invariance (불변성) 이전 포스팅에서 우리는 아래와 같은 제너릭 클래스를 만들었다. 일단 한 번 Rectangel 클래스를 만드는 상황을 가정해보자. Double 이라는 자료형 (클래스) 는 아래와 같은 상속관계가 있다. Double 의 부모 클래스는 Number 이고, Comparable 을 구현하고 있다. 그런데, **
Generics 는 자바에도 있었던 개념이다. 클래스나 함수 등을 정의할 때, 파라미터 및 변수의 타입을 명시하지 않는 것이다. 즉, 어떤 타입이든 수용할 수 있는 형태가 된다. 따라서 클래스나 함수를 다양한 타입으로 오버로딩하여 여러 가지 정의해두지 않아도, 외부에서 타입을 정해줄 수 있다. 이번 포스팅에선 이 Generics 를 활용한 클래스와 함수 등을 정의하는 방법에 대해서 알아보자. Generic 함수 타입이 정해지지 않는 변수 및 파라미터의 경우, 함수의 이름 앞에 명시를 해줘야 한다. 아래 예시는 T 라는 제너릭 타입 변수를 사용하기 때문에 함수 이름 앞에 ` 라고 명시해주었다. T 타입 파라미터 a 과 b` 를 더하여 T 타입 형태로 결과를 리턴하는 동작을 한다. 제너릭 함수를 정의할 땐, 호환성을 높이기 위해 최대한 특정 데이터 타입과 관계없이 동작을 하게끔 해야 하는 것이 중요하다