[JAVA] 참조, 제네릭, collection framework

Coastby·2022년 9월 28일
0

JAVA

목록 보기
27/33

참조

reference

new를 통해 데이터 타입을 생성하는 것은 기본 테이터 타입이 아니라 참조형 데이터 타입 (참조 자료형, 참조 데이터형)이다.

변수가 인스턴스를 가지고 있는 것이 아니라 인스턴스가 저장되어 있는 참조값만을 가지고 있다.

바로가기와 비슷한 방식이다. 아무리 많이 해도 용량을 그만큼 쓰지 않는다. 대신 원본 수정이 있으면 이를 참조하는 변수에서 모두 반영된다.


제네릭

자바에서 가장 늦게 도입된 개념.

type safety : 타입이 안전하지 않다. 컴파일에 잡히지 않는다. 변수를 만들 때 타입을 지정할 수 있는데 이를 Object로 해버리면 안전성이 떨어진다.

<> 안에는 기본데이터 타입은 올 수 없다. 참조형 데이터타입만 사용가능하다.

wrapper class : 기본 데이터 타입은 자바에서 객체가 아니다. 객체가 필요한 상황에서는 애매할 수 있어서 기본 데이터 타입을 객체인 것처럼 만들 수 있는 객체를 제공하는데 이러한 클래스를 wrapper class 라고 한다.

Integer id = new Integer(1);
//The constructor Integer(int) has been deprecacted since version 9 and marked for removal.

Integer id = 1;
//같은 결과를 얻을 수 있는 듯

제너릭의 제한

제네릭을 사용하면 뭐든 올 수 있다는 문제점이있다.

abstract - extends 또는 interface - implements를 사용하면 윗단계의 자식들 클래스만 들어갈 수 있다.

<T extends Info> 로 제너릭에 기입한다. super는 부모를 제한하는 것이다.

collection framework을 사용할 때 제너릭을 알고 있어야한다.


Collection framework

  • ArrayList의 add() 인자는 Object 데이터 타입이다. get() 으로 불러오게되면 역시 Object 타입으로 반환한다. 따라서 변수에 담으려고 하면 형변환이 필요하다.
String value = (String) al.get(i);
  • 그러나 이는 예전 방식이고 generic이 도입되고 나서는 ArrayList를 선언할 때 들어가는 데이터타입을 지정할 수 있다. 따라서 꺼낼 때도 형변환을 하지 않아도 된다.
ArrayList<String> al = new ArrayList<String>();
al.add("one");

String value = al.get(i);

Collection<Integer> hs = new HashSet<Integer> ();

iterator

https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html

package org.opentutorials.javatutorials.collections;

import java.util.*;

public class IteratorDemo {

	public static void main(String[] args) {
		ArrayList<Integer> li = new ArrayList<Integer>();
		li.add(300);
		li.add(500);
		li.add(253);
		
		Iterator i = li.iterator();
		while(i.hasNext()) {
			System.out.println(i.next());
		}
		
		

	}

}

profile
훈이야 화이팅

0개의 댓글