- 참조

 

기본형 데이터 (int long char float 등등)는 해당 데이터 변수를 만들게 되면 각각의 값을 가짐

기본형 데이터를 제외한 나머지 참조형 데이터(New를 사용해 인스턴스를 만드는, String은 제외)는 해당 데이터 변수를 만들게 되면 값을 직접 저장하는게 아닌 그 값을 참조하는 형태가 됨.

 

, 변수에 담겨있는 데이터가 기본형이면 그 안에는 실제 데이터가 들어있고, 기본형이 아니면 변수 안에는 데이터에 대한 참조 방법이 들어있다고 할 수 있다.

Case. 기본형 데이터

 

Case. 참조형 데이터

 

- 제네릭 (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);

}

}

 

}

 

일단 ArrayListimport 해줘야 함.

배열은 length 메소드로 몇개의 값을 담고 있는지 체크한다면 ArrayListsize 메소드로 몇개의 값이 현재 저장되어 있는지 알 수 있다.

제네릭을 이용해 ArrayList가 받는 데이터를 String으로 지정해주면 따로 형변환을 하지 않아도 String 값이 된다.

 

 

- Collections framework의 구성

List는 추가하는 모든 값이 새 배열에 들어간다.

Set는 중복되는 값은 새 배열에 추가되지 않는다.

 


내일 Collections framework를 이어서 공부할 예정.
Java 중급 부분은 여러번 보면서 이해를 꾸준하게 시켜줘야 할 듯...

 

 

'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

+ Recent posts