내일배움캠프 7기

자바(제네릭,인터페이스)_나무반

suuuki 2024. 10. 22. 23:30

나무반


제네릭 등장 이전의 자바

우리가 제네릭을 가장 먼저 접하는 것이 자바에서 리스트를 사용 할 때

new Arraylist<> 안의 <>는 <Integer>이 생략된 상태임

 

 

이전에는 리스트에 뭐가 들어 있을지 알 수 없음

->매번 타입 체크를 해야함, 여러 타입이 있어 공통적인 처리 불가능

보통 아래와 같이 변수명에 타입을 표시하여 어떤 리스트인지 알 수 있도록 처리함

List intList = new Arraylist();

 

 

제네릭의 등장

라벨을 안 붙이면, 어떤게 들어 있는지 모른다

그래서 라벨링=> 그제 제네릭

제네릭이 사용되는 시점에 어떤것으로 사용할지 반드시 표기(구체화) 되어야 제대로 사용 할 수 있음

 

 

 

ex)'김재호'라는 부분이 변경되는 값이고 나머지는 고정된 값, 제네릭에 비유하자면'김재호= T'라는 글자가 위치하는 곳

 

 

제네릭을 왜 쓸까?

아해와 같은 구조의 모델이 있다 가정

 

 

각 필터의 메소드 시그니처를 보면

List가 가지는 제네릭 타입만 다름

코드를 보면 매개변수 이름만 다르고 로직이 완전히 동일

=>브랜드 필터가 추가되거나 상품의 종류가 늘어나면 수정해야하는게 너무 많다

 

제네릭 적용

필터 로직이 동일함으로, 클래스 하나를 파악해보면

숫자에서 50_000 '_'는 자바에서 무시여서 ',' 대신' _' 써도 된다

 

상환(Upper-Bounded)과 하한(Lower-Bounded)

[Q]T에 들어 갈 수 있는 타입은 어떤게 있을까?

      ->모든객체가 다 들어갈 수 있음

그래서 결과가 오류가 날 수 있다 String타입이 getPrice() 메소드를 가지고 있지 않아서

사실은 String 타입이 아니더라도 밑에 코드는 오류이다

 

 

getPrice()를 알라면 어떻게 해야할까?


인터페이스(상한과 하한을 이해하기 위해 필요)

인터페이스는 말 그대로 어떤 클래스가 가져야 할 동작을 미리 정해주는 설계도라고 생각

ex)택배= 인터페이스

     대한통운, 우체국, 한진택배 = 인터페이스의 구현체

 

 

각 택배사들이 구체적으로 어떤 경로, 어떤 방식으로 내부에서 운영하는지는 우리는 알 수 없다

하지만 배달을 해준다라는 사실은 예상 할 수 있다

 

구체적으로 어떻게 어떤 경로, 어떤 방식으로 내부에서 운영하는지 우리는 알 수 없다

하지만 "배달을 해준다"라는 사실은 예상 할 수 있음 =>인터페이스 

 

인터페이스를 보고 우리는 "구체적으로 어떻게 하는지 모르겠지만, 최종적으로 이런 기능을 제공하는구나"라고 알 수 있게 됨

 

 

예제로 다시 돌아가면

T는 getPrice() 모른다

 

 

extends 상한제한

추가 학습 키워드

하한 제한에 대해서 어떤 케이스가 있는지 찾아보기

인터페이스의 네이밍 룰을 찾아보기

 

 

오늘 배운 키워드 정리

제네릭

인터페이스

상한