- 참조
기본형 데이터 (int long char float 등등)는 해당 데이터 변수를 만들게 되면 각각의 값을 가짐
기본형 데이터를 제외한 나머지 참조형 데이터(New를 사용해 인스턴스를 만드는, 단 String은 제외)는 해당 데이터 변수를 만들게 되면 값을 직접 저장하는게 아닌 그 값을 참조하는 형태가 됨.
즉, 변수에 담겨있는 데이터가 기본형이면 그 안에는 실제 데이터가 들어있고, 기본형이 아니면 변수 안에는 데이터에 대한 참조 방법이 들어있다고 할 수 있다.
- 제네릭 (Generic)
제네릭은 클래스 내부에서 사용할 미정의 데이터 타입을 인스턴스화 할 때 외부에서 지정하는 기법이다.
제네릭은 참조 데이터 타입에 대해서만 사용할 수 있음. 기본 데이터 타입은 사용할 수 없음.
그래서 기본 데이터 타입을 참조 데이터 타입으로 변환해줘야 하는데 이 때 사용하는 클래스를 Wrapper 클래스 라고 함.
ex)
Integer id = 1;
이런식으로 변환해줌
제네릭은 추상클래스나 인터페이스로 제한이 가능함.
제네릭에 들어올 데이터 타입을 특정 추상클래스나 인터페이스를 따르는 데이터 타입으로 제한이 가능하다.
interface Info {
int getLevel();
}
class Person<T extends Info>
이 때, 인터페이스를 따름에도 불구하고 이와 같이 implements 대신 extends를 사용하게 되는데,
이 때의 extends는 상속이 아닌 부모를 가리키는 것이다.
예)
class StudentInfo {
public int grade;
StudentInfo(int grade) {
this.grade = grade;
}
}
class EmployeeInfo {
public int rank;
EmployeeInfo(int rank) {
this.rank = rank;
}
public int getLevel() {
return this.rank;
}
}
class Person <T, S>{
public T info;
public S id;
Person(T info, S id) {
this.info = info;
this.id = id;
}
public <U> void printInfo(U info) {
System.out.println(info);
}
}
public class GenericDemo {
public static void main(String[] args) {
EmployeeInfo e = new EmployeeInfo(1);
Integer id = 10;
// Person<EmployeeInfo, Integer> p1 = new Person<EmployeeInfo, Integer> (e, id);
Person p1 = new Person(e, id); // 윗줄의 코드와 같음. 생성자가 T와 S가 뭔지 나타내기 때문에 생략이 가능.
p1.printInfo(e);
}
}
- Collections framework
- ArrayList
import java.util.ArrayList;
public class ArrayListDemo {
public static void main(String[] args) {
String[] arrayObj = new String[2];
arrayObj[0] = "one";
arrayObj[1] = "two";
// arrayObj[2] = "three"; 오류가 발생한다.
for(int i=0; i<arrayObj.length; i++){
System.out.println(arrayObj[i]);
}
ArrayList<String> al = new ArrayList<String>();
al.add("one");
al.add("two");
al.add("three");
for(int i=0; i<al.size(); i++){
String value = al.get(i);
System.out.println(value);
}
}
}
일단 ArrayList를 import 해줘야 함.
배열은 length 메소드로 몇개의 값을 담고 있는지 체크한다면 ArrayList는 size 메소드로 몇개의 값이 현재 저장되어 있는지 알 수 있다.
제네릭을 이용해 ArrayList가 받는 데이터를 String으로 지정해주면 따로 형변환을 하지 않아도 String 값이 된다.
- Collections framework의 구성
List는 추가하는 모든 값이 새 배열에 들어간다.
Set는 중복되는 값은 새 배열에 추가되지 않는다.
'Java > Java의 정석' 카테고리의 다른 글
220224 Java - Date, Calendar, time패키지 (0) | 2022.02.24 |
---|---|
220223 Java - Collection Framework (0) | 2022.02.23 |
220221 Java - 중급 및 복습 (0) | 2022.02.21 |
220220 Java - 중급 (0) | 2022.02.20 |
220218 Java - 입문 복습 및 보충 (0) | 2022.02.19 |