My Melody Is Cute JAVA 컬렉션
본문 바로가기

개발공부🌷/JAVA

JAVA 컬렉션

열거형(Enum)

서로 연관된 상수(변하지 않는 값) 들의 집합

enum Seasons { SPRING, SUMMER, FALL, WINTER }
enum Frameworks { DJANGO, SPRING, NEST, EXPRESS }

enum으로 정의한 상수는 switch문에서도 사용이 가능하다

enum은 클래스다

 

제네릭

타입을 구체적으로 지정하는게 아니라 추후에 지정할 수 있도록 일반화 해두는것

Basket 클래스 내의 T를 String 으로 바꿔라

Basket<String> basket1 = new Basket<String>("기타 줄");

T = 타입 매개변수

클래스 변수(static변수,메서드)에는 타입매개변수를 사용할 수 없다

사용하면 타입이 인스턴스별로 달라져서 같은 변수를 공유하는게 아니게 된다

class Basket<T> {
    private T item;

    public Basket(T item) {
        this.item = item;
    }

    public T getItem() {
        return item;
    }

    public void setItem(T item) {
        this.item = item;
    }
}

<> 안에 Integer를 넣어 인스턴스화 하면 T들이 모두 Integer로 치환된다

Integer: int

Double: double

Boolean: boolean

Character: char

Byte: byte

Short: short

Long: long

Float: float

래퍼클래스 : 프리미티브 데이터 타입을 객체로 감싸서 프리미티브 데이터타입을 객체로 다룰수 있도록 해준다

int : 값 자체를 나타내는 프리미티브 데이터 타입

Integer : int를 객체로 래핑한 래퍼 클래스

 

 

클래스 전체를 제네릭으로 선언할 수 도 있지만 내부의 특정 메서드만 제네릭으로 선언 할 수도 있다

제네릭 메서드

class Basket<T> {                        // 1 : 여기에서 선언한 타입 매개 변수 T와 
		...
		public <T> void add(T element) { // 2 : 여기에서 선언한 타입 매개 변수 T는 서로 다른 것입니다.
				...
		}
}

제네릭메서드의 타입 매개변수선언은 반환타입 앞에서 이루어지며  해당 메서드 내에서만 선언한 타입 매개변수를 이용할 수 있다

제네릭 메서드의 타입매개변수는 제네릭 클래스의 타입매개변수와 별개의 것

타입 지정되는 시점이 다르기때문

클래스명 앞 에서 선언할 때는 클래스가 인스턴스화 될때 타입지정

제네릭메서드의 타입지정은 메서드가 호출될 때 이루어진다

class Basket {
		...
		static <T> int setPrice(T element) {
				...
		}
}

메서드타입 매개변수는 static메서드에서도 선언가능

 

와일드카드

어떠한 타입으로든 대체될 수 있는 타입 파라미터

extends와 super를 조합하여 사용

<? extends T> //상한제한 T와 T를 상속받는 하위 클래스타입만 타입파라미터로 받을 수 있음
<? super T> //하한제한 T와 T의 상위 클래스타입만 타입파라미터로 받을 수 있음

 

컬렉션 프레임워크

컬렉션(집합)을 다루는데 있어 편리한 메서드를 미리 정의 해 놓은 것

List : 데이터의 순서 유지 중복저장 가능

Set : 데이터의 순서 x 중복저장 불가능

Map :  키와 값의 쌍으로 데이터를 저장 순서유지 x 키는 중복저장 불가능 값은 중복저장가능

List와 set의 공통점을 추출해 추상화 한 것이 Collection이다

 

ArrayList

List 인터페이스를 구현한 클래스

 

LinkedList

 

데이터의 잦은변경 LinkedList

개수가 변하지 않는다면 ArrayLive

 

Iterator

컬렉션에 저장된 요소를 순차적으로 읽어오는 역할