제네릭은 클래스 내부에서 사용할 자료형을 나중에 인스턴스 생성할 때 확정한다. 자료형을 검사해 적당한 자료형을 선택할 수 있도록 한다. 객체 자료형의 안정성을 높이고 형 변환의 번거로움을 줄일 수 있다.
앵글 브래킷 사이에 형식 매개변수를 넣어 선언한다. 장점 중 하나는 의도하지 않은 자료형의 객체를 지정하는 것을 막고 객체를 사용할 때 원래의 자료형에서 다른 자료형으로 형 변환 시 발생할 수 있는 오류를 줄이는 것이다.
Box<T>에서 T가 형식 매개변수 이름이다.
val box3 = Box(1) 이렇게 선언해도 된다. 왜냐하면 1은 Int형으로 추론 가능하기 때문이다.
제네릭 클래스는 형식 매개변수를 1개 이상 받는 클래스다. 위 코드의 Box<T>가 제네릭 클래스다.
제네릭 클래스는 가변성을 지정하지 않으면 형식 매개변수에 상, 하위 클래스가 지정되어도 서로 자료형이 변환되지 않는다.
Parent는 상위 클래스, Child는 하위 클래스다.
T는 기본적으로 null을 허용하는 매개변수다.
차례로 false, null을 반환한다.
형식 매개변수의 자료형을 특정하지 않아도 실행 가능하다.
Number형으로 제한했다.
가변성이란 형식 매개변수가 클래스 계층에 영향을 주는 것이다.
가변성의 세가지 유형
1. 공변성 Box<out Cat>
2. 반공변성 Box<in Cat>
3. 무변성
Animal
/
Cat - Spider
상 하위 관계다.
'구체화 된'이란 뜻을 가지고 있다.
arrayOf( )나 Array( ) 생성자를 사용해 배열을 만든다.
toString( )을 사용하면 배열의 내용을 한꺼번에 출력할 수 있다.
0으로 채워진 배열 10개를 생성했고 이후에 값을 지정해주었다.
products를 it 넘겼다.
이름을 먼저 정렬, 그 다음 이름이 동일한 경우 가격 기준으로 정렬한다.
다차원 배열을 단일 배열으로 만드는 것을 말한다.
첫 번째 출력은 배열 자체가 들어있어서 객체의 시그니처가 같이 출력된다.
do~while 문을 사용해 구매가 끝나면 다시 반복해 구매 작업을 진행했다.
exit, q를 입력하면 콘솔을 종료했다.