본문 바로가기
Java/JAVA 문법

자바 기초 배우기 29일차 [ 제네릭, 컬렉션 - Vector ]

by lchit 2020. 1. 5.

1. 제네릭

2. 컬렉션

-Vector

1. 제네릭

[ 제네릭이란? ]

클래스 구현 시 클래스명 뒤에 <E>, <K>, <V> 등 < 알파벳 >이 포함한 기법

클래스 객체 생성 시 여러 자료형이 올 수 있도록 구현할 수 있다.

예제를 통하여 보는 게 더 이해가 빠르다.(후 예제 참조)

[ 제네릭 클래스 구현법 ]

<클래스 생성부>

class 클래스명 <제네릭 타입> { }

*일반적으로 널리 사용되는 제네릭 타입

E- Element(요소)- 컬렉션 라이브러리에서 많이 사용

K- Key

N- Number

T- Type

V- Value

S, U- 2번째, 3번째 타입을 지정

Ex) class ClassA <T> { }

[ 제네릭 클래스 사용 시 ]

<클래스 객체 생성 부>

클래스명 <Wrapper class> 객체 변수명 = new 생성자();

Wrapper 클래스 사용 참조 25일 차

https://lchit.tistory.com/41

 

자바 기초 배우기 25일차 [ Wrapper, ForEach문, 객체배열, toStinrg(), 박싱,언박싱, 오토박싱 ]

1.Wrapper 1) Wrapper설명 2) Wrapper 예제 3) 박싱 언박싱 ​ 2.ForEach 1) ForEach문 설명 2) ForEach문 예제 3) ForEach문 문제, 정답 ​ ​ ​ 1.Wrapper Wrapper? Wrapper는 기본 타입의 자료형을 다루기 위..

lchit.tistory.com

즉,

Ex)

구현

class ClassA <T> { }

생성

ClassA <Integer> c1 = new ClassA();

[ 활 용 ]

예제 1)

Main 클래스에서 클래스 객체 생성 시

Wrapper 클래스로 각각 정수형 실수형 문자형을

입력받는 변수 x를 가진 제네릭 클래스를 만들어보자.

예제 1 풀이)

제네릭 클래스 생성

클래스명 GenricTest 뒤에 <T>

T x;

1.

즉, 제네릭 클래스를 생성한 뒤

T x; 생성부에서 T자리에 어떤

Wrapper클래스가 오는지에 따라

x의 자료형은 바뀌게 된다.

T: 타입이란 뜻으로 일종의 그저 약속이다

다른 철자가 와도 무관하긴 하다.

2.Main

객체 생성 시 Wrapper 클래스를 명시해주며

각각 서로 다른 제네릭 클래스 객체를 생성하자

클래스 변수 x 하나만을 가지고

서로 다른 Wrapper 클래스를 이용하여

여러 자료형이 변수에 담을 수 있다.

이 처럼 제네릭은 형을 미리 지정하지 않고

객체 생성부에서 자료형을 정할 수 있다!!

예제 2)

하나 이상의 자료형, 하나이상의 변수를

하나의 제네릭 객체로 생성해보자

제네릭은 다중 제네릭을 지원한다

일단 클래스 생성부부터 살펴보자

별로 다를 게 없다

제네릭 형지정 개수가 4개로 늘었고

변수도 4개로 늘었다.

이는 생성부에서도

4개를 동시에 입력받을 수 있다는 것이다

그것도 무려 각각 다른 자료형으로 말이다.

이번엔 메인 부다

하나의 제네릭 객체로 <4개의 Wrapper클래스>를 입력받아

서로 다른 자료형의 변수 4개를 만들고 출력해보았다

대박대박 물론 x에 문자형을 t에 실수형을 순성, 중복에 상관없이

대입할 수 있다 순서대로 입력했다고 헷갈리지 말아 주세요!

제네릭 최종예제)

제네릭을 활용

매게 변수로 입력받는

자료의 타입을 알려주는

메서드를 만들고

객체. 메서드를 활용하여 출력해보자

클래스, 메서드 생성

클래스는 기본 클래스로 만들어주고

이번엔 메서드에 제네릭을 활용해 보았다.

이 메서드는 제네릭형 매게 변수를 입력받아

if data instanceof 즉

만약 data변수의 자료형이 뭐뭐뭐 라면

작업을 실행하라는 코드이다.

Main에서 사용해 보겠다

객체를 생성하고 만들어놓은 제네릭 메서드를

이용하여 아무 자료형의 값을 입력 시

메서드 내의 if문에 의해 자료형을 판독하고

그 자료형을 알려주는 그런 프로그램이었다.

제네릭은 장점이 많다.

이 제네릭은 벡터라는 컬렉션에서도 사용된다.

2. 컬렉션

컬렉션 collection?

자바에서 자료구조를 제공하는 방법으로,

컬렉션 클래스를 제공한다.

*컬렉션의 특징

Vector <E>

ArrayList <E>

[ Vector <E> ]

*만든 목적?

배열을 가변 크기로 다룰 수 있게 하고,

객체의 삽입, 삭제, 이동이 쉽게 할 수 있도록 구성한 클래스

*특징?

- 삽입되는 요소의 개수에 따라 자동으로 크기 조절

- 요소 삽입, 삭제가 되면 자동으로 위치가 이동

*사용방법?

Vector <WC> 객체 변수 = new Vector <>();

WC = Wrapper class

*요소 추가

-add(추가할 요소);

-add(int idx, 추가할 요소); : index위치에 요소 추가

-벡터 A.addAll(벡터 B): 벡터 A의 맨뒤에 벡터 B가 추가

* 요소 가져오기

- get(위치): 해당 위치에 있는 값 가져오기

- elementAt(위치): 해당 위치에 있는 값 가져오기

*요소 삭제하기

-remove(int 위치): 해당 위치에 있는 값 삭제

-remove(Object 삭제할 요소): 삭제할 요소 지정

*요소 전체 삭제

- removeAllElements()

- clear()

- remove(Obejct o) boolean 값 리턴

* 요소 개수 확인

- size()

- isEmpty(): 비어있으면 true 리턴

몇 가지만 예제를 들어보겠다

추가하기, 요소 가져오기, 요소 삭제하기

예제 1)

추가하기

잡다한 말이 많은데 돌아가는걸

역동적으로 표현하고 싶어서;;

그냥 파란 박스만 잘 보면 된다.

일단 백터 생성 법을 따라 Integer형

의 벡터를 만들었다 갑자기 배그 생각난다.

여하튼

우리가 알던 배열과는 다르게

크기가 고정이 아니라 가변크기이다

배열을 사용했다면 얼마나 값을 넣을 건지

크기 지정을 해줬어야 할 텐데

이제 참 편해졌다 벡터를 배워서

예제 2)

삭제하기, 요소 확인하기

numList에 1,2,3,4,5를

add로 추가하였다

remove(인덱스 번호)로

0번 위치의 값과 2번 위치의 값을 삭제하였다

numList.remove( Integer.valueOf( 5 ) )로

이 벡터 안에 Integer형 값 중에 '5'라는 애가 있냐?

결과 - true

numList.clear 마지막으로 벡터 값을 탈탈탈! 다 지워줬다

그 외에도 많은 기능이 있으니

여러분도 Vector 객체 하나 만드시고

객체. ctrl + space 해서 여러 기능들을

활용해보세요

그럼 전 과제하러~