나무반
제네릭 등장 이전의 자바
우리가 제네릭을 가장 먼저 접하는 것이 자바에서 리스트를 사용 할 때
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 상한제한
추가 학습 키워드
하한 제한에 대해서 어떤 케이스가 있는지 찾아보기
인터페이스의 네이밍 룰을 찾아보기
오늘 배운 키워드 정리
제네릭
인터페이스
상한
'내일배움캠프 7기' 카테고리의 다른 글
특강(클래스,메모리구조_Heap,Stack) (2) | 2024.10.23 |
---|---|
자바(예외,오류처리)&새싹반 수업(Enum,컬랙션) (0) | 2024.10.21 |
자바(객체지향) (2) | 2024.10.18 |
자바(클래스, 객체, 상속) & Git (4) | 2024.10.17 |
트러블슈팅(계산기 만들기) (0) | 2024.10.16 |