2021-09-02

0902 generic과 wildcard 2

 

1. wildcard는 메서드의 파라메터로서만 사용할 수 있다. 안그러면 저렇게 에러를 뱉는다.

return 값으로 ? 가 된다니 타입에 엄격한 자바세계에서는 말도 안된다!

알지도 못하는 타입으로 내가 어떻게 돌려주랴?! 하는 컴파일러의 툴툴거림이 들리는 듯하다.



2. Bounded경계를 정할 수 있다.

PECS원칙에 따라,producer-extends, consumer-super 


출처: https://starblood.tistory.com/entry/Java-PECS-producerextends-consumersuper-에-관하여 [Drink and Be happy]

하도록 설계한다. ( 이부분 어렵다. ㅜㅜ)



  이와같은 Car를 상속한 Bus 클래스가 있다.

Bus클래스는 자기만의 메소드 getPassenger를 추가로 가지고 있다.



3. 당연하게도 Bus타입만의 메소드는 부를 수 없다. 

4. 언제 ?를 사용하고, 언제 T 를 사용하는가

: ?는 보통 해당 원소의 데이터와 상관없을 때 사용한다고 한다. ?의 의미자체가, '들어오는 너가 어떤 타입이든 상관하지 않는다' 라는 뜻을 내포하고 있기 때문이다.

이를 테면 - <? extends Number> 같은 경우를 들수있겠다. 너가 어떤타입이든간에, Number의 하위타입이기만 하면된다. 그런뜻. 추측컨대 이러한 경우는 -  ?로 들어오는 타입의 기능을 사용하는 것이 아니라 Number의 기능만 있으면 되는 메서드 일 것이다.

물론 기능적으로는 <? extends Number>이라고 쓰던, <T extends Number> 이라고 쓰던, 똑같이 동작할 수도 있다. 하지만 어떠한 내용의 메소드를 구현하고자 하는지, 해당 목적에 따라 적절하게 타입파라메터를 작성하는 것이, 훨씬 명확해질 것이다.

댓글 없음:

댓글 쓰기

0328 fdisk, mkfs, mount, fstab

 1. 하드디스크를 붙인다. 2. fdisk -l로 하드디스크를 확인한다.  - interactiive한 커맨드모드 사용하여 (m) 붙인 하드디스크의 파티셔닝을 한다.  - 마지막에 w를 해야 실제로 반영이 된다.  3. mkfs를 하여 어떤 파일시스...