제네릭(Generics) 이란?
제네릭(Generics)은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법
다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크를 해주는 기능이다.
> 특정타입을 미리 지정해주는 것이 아닌 필요에 의해 지정할 수 있도록 하는 일반(Generic) 타입이라는 것
제네릭을 쓰는 이유?
- 형변환이 필요없고, 타입의 안정성이 보장된다.
- 코드가 간결해지고 재사용성이 높아진다.
- 제네릭 타입을 사용함으로써 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거가능
클래스명 뒤에 <>를 붙여서 선언한다.
public class ApiResponse<T> {
private final boolean success;
private String message = null;
private T data;
public ApiResponse(boolean success, T data) {
this.success = success;
this.data = data;
}
public ApiResponse(boolean success, String message) {
this.success = success;
this.message = message;
}
public ApiResponse(boolean success, String message, T data) {
this.success = success;
this.message = message;
this.data = data;
}
}
제네릭 메소드
제네릭은 클래스 레벨에서만 사용할 수 있는게 아니라 메소드 레벨에서도 사용할 수 있다.
제네릭 타입을 선언한 메소드를 제네릭 메소드라 한다.
@GetMapping(value = "/")
public ApiResponse<BoardDTO> getBoardList(){
List<BoardDTO> list = boardService.getBoardList();
return new ApiResponse(true, list);
}
제네릭 타입을 메소드에서 선언할 때는 접근제어자와 반환타입 사이에 선언한다
<접근 제어자>
제어자 | 같은 클래스 | 같은 패키지 | 자손 클래스 | 전체 |
public | O | O | O | O |
protexted | O | O | O | X |
deafult | O | O | X | X |
provate | O | X | X | X |
주의) 타입 파라미터로 명시할 수 있는 것은 참조 타입(Reference Type)밖에 올 수 없다. 즉, int, double, char 같은 primitive type은 올 수 없다는 것이다. 그래서 int형 double형 등 primitive Type의 경우 Integer, Double 같은
Wrapper Type으로 쓰는 이유가 바로 위와같은 이유다.
또한 바꿔 말하면 참조 타입이 올 수 있다는 것은 사용자가 정의한 클래스도 타입으로 올 수 있다는 것이다.
(출처 : https://st-lab.tistory.com/153 )
'수업 & 공부 > 용어 정리' 카테고리의 다른 글
52 : @Entity, @Builder, @GeneratedValue (0) | 2021.10.25 |
---|---|
48 : REST API (2) (0) | 2021.10.13 |
39 : Springboot (Rest API - @PathVariable ) (0) | 2021.09.30 |
32- Hash에 대해 알아보자 (0) | 2021.09.10 |
29- 컴파일 언어& 인터프리터 언어 (0) | 2021.09.06 |