일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 원격저장소
- assume That
- 부스트코스
- assuming That
- assume True
- assume
- springframeworkruntime
- .idea
- CS50
- securityconfig
- c언어
- MVC
- 스프링프레임워크
- 팀과제
- springsecurity
- Spring
- Junit5
- 컴퓨터과학
- springmvc
- springboot
- Swagger
- gitbash
- Git
- container
- DispatcherServlet
- .out
- swaggerUrl
- GitHub
- 파일삭제
- MVC모듈
- Today
- Total
도담이 먹여 살려야하는 집사
Generic Type 본문
Generic Type (제너릭 타입)
Collection 클래스로 데이터 기본 저장공간은 Object.
일반적인 코드를 작성한 후, 이 코드를 다양한 타입의 객체에 대하여 재사용하는 프로그래밍 기법이다.
Object타입 저항을 타입이 타당한가에 대한 문제점으로부터 도출되었다. 이는 타입 강제가 가능하도록 하게하는 것과 같은 의미이다. (객체생성 >> 타입) == 강제 형변환(Casting) 을 하지 않겠다. >> 클래스에서 사용할 타입을 클래스 외부에서 설정하는 타입
제너릭타입을 사용하는 시점은 클래스 설계시에 제너릭 적용 코드 이다.
ArrayList의 기능은 똑같지만 리스트에 담는 내용물은 다를 경우(= List의 기능은 같음, 사용하는 타입이 서로 다름) -> Generic을 사용
List<String> strList = new ArrayList<>();
List<object> objList = new ArrayList<>();
//List의 기능을 사용하는건 같지만 list에 담는 내용물은 서로 다름 (= 타입이 다름)
class MyGen<T> { //type parameter
T obj;
void add(T obj) {
this.obj = obj;
}
T get() {
return this.obj;
}
}
class Person extends Object{
int age = 100;
}
여기서 T는 Generic변수이고 타입이 아직 정해져 있지 않다.
T는 main method에서 객체가 생성될때 T의 타입이 정해진다.
public class Ex06_Generic {
public static void main(String[] args) {
MyGen<String> mygen = new MyGen<String>();
//<String>을 위에 있는 T에 모두 넣음 T->String 으로 바뀌는게 제너릭
mygen.add("문자열");
String str = mygen.get();
System.out.println(str);
}
}
여기서 T가 String의 타입으로 정해짐. -> 이제 MyGen은 String 타입만 받을 수 있다.

ArrayList list = new ArrayList(); //저장 공간의 타입 : Object[] elements
list.add(10);
list.add(new Person());
list.add("홍길동");
//출력
for(Object obj : list) {
//person 객체는 나이 출력하고 나머지는 값을 출력
//System.out.println(obj);
//Person@6d06d69c 주소값이 나옴 person을 하이캐스팅 해야함
//객체인것과 아닌것
if(obj instanceof Person) {
Person p = (Person) obj;
System.out.println(p.age);
}else {
System.out.println(obj);
}
}
위 코드와 같은경우 person객체는 나이를 출력하고 나머지는 값을 출력 하고자 할때 person을 하이캐스팅 하여야함. 하지만 이 경우 제너릭타입을 사용한다면,
ArrayList<Person> plist = new ArrayList<Person>();
plist.add(new Person());
plist.add(new Person());
for(Person p : plist) {
System.out.println(p.age);
}
person 객체의 나이만 출력이 가능해짐.
Generic Type in Method
메소드 제너릭 타입은 class에 generic type을 선언하지 않고, 각 메소드 마다 Generic Type을 선언해 사용 할 수 있다.
메소드 파라미터의 T가 선언 되어 있다면, 리턴타입 바로 앞에 <T>제너릭 타입을 선언해 주어야 한다.
//사용자 계좌 목록 확인
public ArrayList<Account> findAccounts(String name) {
//제어자(public,static) + <제너릭> + 리턴타입
ArrayList<Account> userAccounts = new ArrayList<Account>();
for (Account act : this.accounts) {
if (name.equals(act.getName())) {
userAccounts.add(act);
}
}
return userAccounts;
}
//******************************************************************************
public class Arrays{
public static <T> void swap(T[] array, int i, int j){
T temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
배열에 들어있는 요소의 타입이 키본타입만 아니면 swap메서드로 배열에 들어있는 요소를 교환할 수 잇음.
'JAVA' 카테고리의 다른 글
This (0) | 2020.08.31 |
---|---|
final (0) | 2020.08.27 |
Array_Basic (0) | 2020.08.23 |
상속(Inheritance)-1 (1) | 2020.08.19 |
Class (클래스) (0) | 2020.08.13 |