Minwoo Dev.

[Java] 컬렉션(Collection)과 제네릭(Generic), Wrapper 클래스 본문

Java

[Java] 컬렉션(Collection)과 제네릭(Generic), Wrapper 클래스

itisminu 2024. 5. 20. 21:39
728x90
반응형
SMALL

컬렉션이란 ?

 

  • 요소(element)라고 불리는 가변 개수의 객체들의 저장소
  • 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합
  • 요소로는 객체 타입만 가능!!!

 

출처 - https://www.google.com/url?sa=i&url=http%3A%2F%2Fwiki.hash.kr%2Findex.php%2F%25EC%259E%2590%25EB%25B0%2594_%25EC%25BB%25AC%25EB%25A0%2589%25EC%2585%2598&psig=AOvVaw1G9WrQ1OqT-HrEPBK34gyl&ust=1716293393789000&source=images&cd=vfe&opi=89978449&ved=0CBQQjhxqFwoTCPCUpqSZnIYDFQAAAAAdAAAAABAE

 

컬렉션의 종류는 위 사진과 같다.

 

위 설명으로는 충분히 이해가 되지 않을 것이다.

예를 들어, 연결리스트를 사용한다고 할 때, 우리는 연결리스트를 직접 구현하여 사용하게 된다.

하지만 Java 에서는 LinkedList라는 컬렉션이 존재하기에 이것을 우리는 그냥 사용하면 된다.

 

이처럼 컬렉션은 자료구조와 이를 구현하는 클래스를 정의하는 인터페이스를 제공하게 된다.

 


 

 

제네릭이란 ?

  • 클래스에서 사용할 데이터 타입을 미리 지정하지 않고 외부에서 지정하도록 하는 기법

 

위 사진에서는 Person이라는 클래스를 제네릭을 사용하여 작성하였다.

Person 클래스에서 사용할 자료형을 정하지 않고 싶은 경우에, 제네릭을 <T>와 같이 사용할 수 있다.

 

그러면 객체를 생성할 때 입력된 자료형으로 해당 객체는 변수 타입이 정해지게 된다.

이와 같이 클래스를 여러 개 작성하지 않고 다른 변수 타입의 객체를 생성해낼 수 있는 것이다.

 

 

 

보통 컬렉션을 사용할 때, 제네릭과 함께 사용하게 된다.

Stack을 제네릭을 사용하여 예시로 사용해 보겠다.

 

import java.util.Stack;

public class test {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<Integer>();
        stack.push(1);
        stack.push(4);
        stack.push(2);
        stack.push(7);
        while (!stack.isEmpty()){
            System.out.println(stack.pop());
        }
    }

}

 

Stack의 제네릭으로 Integer을 사용하였다.

왜 int 가 아닌 Integer를 사용한 것일까 ?

그 이유는 위의 컬렉션의 특징에서 언급했던 "컬렉션의 요소로는 객체 타입만 가능하다" 에 있다.

 

기본 타입인 int, char, double 등을 사용하는 것이 아닌 Wrapper 클래스를 사용해야 한다.


Wrapper 클래스

 

  • 객체만 사용할 수 있는 컬렉션에 기본 타입의 값을 사용하기 위해 사용함
  • 기본 데이터형과 관련된 다양한 연산을 지원
public class test {
    public static void main(String[] args) {
        Integer i = Integer.valueOf(10);
        Character c = Character.valueOf('c');
        Double d = Double.valueOf(3.14);
        Boolean b = Boolean.valueOf(true);
    }
}

 

위와 같이 사용하게 된다.

 

wrapper 클래스의 박싱과 언박싱에 대해서도 알아보자.

 

 

박싱(Boxing)

  • 기본 타입의 값을 Wrapper 객체로 변환하는 것

 

언박싱(UnBoxing)

  • Wrapper 객체에 들어있는 기본 타입의 값을 빼내는 것
  • 박싱의 반대

 

 

JDK 1.5부터는 박싱과 언박싱을 자동으로 지원한다.

import java.util.Stack;

public class test {
    public static void main(String[] args) {
        Integer ten = 10;
        int n = ten;
        System.out.println(n);
    }
}

 

 

위 코드에서 Wrapper 클래스를 선언해두고,  그 값을 int 변수에 넣었더니 정상적으로 값이 들어갔다.

import java.util.Stack;

public class test {
    public static void main(String[] args) {
        Integer ten = 10;
        int n = Integer.valueOf(ten); // 형변환을 해서 하는 경우.
        System.out.println(n);
    }
}

 

명시적으로 위 코드처럼 Integer.valueOf를 사용할 수도 있다.

두 코드 모두 결과는 10이 나온다.

 

 

이렇게 Wrapper 클래스부터, 제네릭과 컬렉션까지 정리해 보았다.

 

728x90
반응형
LIST