본문 바로가기
EXTERNAL ACTIVITY/Code Presso -웹개발 트랙 체험단-

<코드 프레소 웹개발 트랙> Java 프로그래밍 초급 [3]

by jaeaemin 2022. 1. 19.

 

 

컬렉션 프레임워크 ( collection Framework )

  • 다양한 여러 자료형 데이터를 다루기 위해서 array와 같은 데이터를 다루기 위한 자료구조의 구현체
  • 다양한 자료구조의 구현을 위한 클래스와 인터페이스의 집합이다.
예시
매분 마다 수집 된 하루 치 주식의 가격 데이터는 시계열 데이터로 순서와 중복 데이터가 존재 
전 세계 모든 국가들의 이름을 Gdp순으로 저장하면, 데이터 순서(gdp)가 존재하고 중복 데이터는 없음 
한 사람의 정보를 저장하면, 사람을 설명하기 위한 여러 속성 정보가 필요하고 순서가 없고 속성은 단일 값을 가진다.
  • JAVA는 앞의 예시를 포함해 다양한 자료구조의 구현체를 클래스 라이브러리 형태로 제공한다
java.util.ArrayList<E> - 매분마다 수집된 하루 치 주식 데이터
[ 100, 102 , 102, 103 , 101 .. ]
java.util.HashSet<E> - 전 세계 모든 국가들의 이름을 GDP순으로 저장
[ Korea, Usa, Italy, China ... ]
java.util.HashMap<K,V> - 한 사람의 정보를 저장 
{ 'name' : 'jaemin' , 'gender' : 'Male' , ... }
  • 각 클래스는 자료 구조에 저장된 데이터를 다루기 위한 알고리즘 구현체를 제공 
java.util.ArrayList<E> - add() , get() , size(), remove() , etc..
java.util.HashSet<E> - add() , addAll(), size(), remove(), etc..
java.util.HashMap<K,V> - put(), get(), size(), remove(), etc..

 

 

 

컬렉션 프레임워크 클래스 VS Array

 

1. 컬렉션 프레임워크의 클래스들은 데이터 개수의 동적인 변경이 가능하다

 

2. 컬렉션 프레임워크는 객체만을 원소로 가진다.

 

 

컬렉션 프레임 워크의 주요 인터페이스

  • 컬렉션 프레임워크에는 주요한 인터페이스들이 정의되어 있다.
  • List INF , Set INF는 모두 Collection 인터페이스를 상속받아 정의된다.
java.util.Collection
  • Map INF는 구조상 차이로 Collection 인터페이스를 상속받지 않고 독자적으로 구현함
java.util.Map<K,V>

 

> java.util.List<E> - 순서가 있는 데이터의 집합
- 데이터들의 중복을 허용
-  ArrayList<E>, LinkedList<E>, Stack<E> 구현
> java.util.Set<E> - 순서가 없는 데이터의 집합
- 데이터들의 중복을 허용하지 않음
-  HashSet<E>, TreeSet<E>
> java.util.Map<K,V> - Key와 Value로 이루어진 pair를 가진 데이터의 집합
- 데이터들 간의 순서가 없다.
- Key는 중복 허용X , Value는 중복 허용
-  HastMap<K,V> , TreeMap<K,V>

 

 

 

 

 

 

제네릭과 컬렉션 프레임워크

제네릭(generic)이란

제네릭이란 데이터의 타입을 일반화하는 것을 의미한다.

클래스와 메소드에서 사용할 데이터 타입을 컴파일 시, type check를 통해 런타임 시 안정성이 보장되낟.

 

제네릭을 사용한 클래스 정의 문법 

class ClassName<T> ()

- <T> : 클래스 내부에서 사용될 임의의 데이터 타입을 'T'라는 type variable로 지정

       > "T"는 Type의 약어로 관행적으로 사용, <> : 브레스

- type variable "T"를 이용해 클래스 내부 변수 생성 및 메서드 인자, 반환 값의 타입 지정 가능 

- 코드 예시는 아래와 같다. 

public class MyGenric<T> {
    T member;
    
    public void setMember(T member) {
    	this.member = member;
    }
    public T getMember() {
    	return member;
    }
}

 

 

제네릭의 사용

제네릭을 사용한 클래스 객체 생성 문법.

ClassName <Type-Class> object-name = new ClassName<>();

- ClassName : 생성하고자 하는 class 지정

- <Type-Class> : 클래스 정의 시 지정한 type variable에 사용할 실제 데이터 유형 class

- Primitive Type 데이터의 경우 Wrapper class를 사용한다.

     - int=>Integer , double=>Double , float=>Float , etc...

 

제네릭의 장점 

  • 매개 변수의 범용성(generality) 확보
  • 컴파일 시 type check를 통해서 런타임 안정성을 확보

  • 클래스 내 임의의 변수를 매번 다른 데이터 타입으로 지정해서 객체 생성 가능

  • Object Class를 인자로 이용한 Class 정의할 수 있지만, 단점 존재

- object는 최상위 클래스이므로 제네릭과 같은 범용성 확보가 가능함

- 컴파일 시 type check 미수행으로 안정성이 저하된다.

- 타입이 맞지 않는 변수들끼리 연산이나 메소드 활용으로 런타임 시 에러가 발생

- 불필요한 명시적 형변환으로 인한 성능 저하

 


제네릭과 컬렉션 프레임 워크

  • 컬렉션 프레임워크의 클래스와 인터페이스들은 제네릭을 이용해 데이터 타입의 범용성을 확보한다.

 

 

 

 

컬렉션 프레임워크 

 

[1] List 컬렉션 프레임 워크 

  • list 자료 구조를 위해 정의된 인터페이스로
  • 여러 건의 데이터를 하나의 객체로 관리하고, 순서가 존재한다.
  • 순서 정보 관리는 인덱스를 통해 이루어진다
  • Collection<E> 인터페이스에 추가로 인덱스르르 이용해 데이터를 메소드로 다룰 수 있다.

 

List<E> 인터페이스

 

ArrayList<E> 클래스

- Array와 가장 유사한 컬렉션 클래스로, 객체 내부 데이터에 접근하기 위해 인덱스가 존재

- Array와 다르게 생성된 객체에서 데이터 추가&삭제가 자유로움

- Java.util 패키지에 존재

import java.util.ArrayList;

ArrayList<Type-Class> arrayList-name = new ArrayList<>();

ArrayList<String> watchHistroy = new ArrayList<>();

 

ArrayList<E> 메소드

데이터 추가 boolean add(E e)
    // 값을 마지막 위치에 추가하고 성공여부 리턴
void add(int index, E e)
    //  값을 인덱스 위치에 추가
boolean addAll(Collection<? extends E> C)
    // <? extends E> collection을 상속받은 모든 자료구조 
    // 즉, 인자로 객체를 넘겨주는 것도 가능하다.
void addAll(int index, Collection<? extends E> C) 
    // 원하는 인덱스 위치에 값들을 넣음
데이터 탐색 E get(int index)
int indexOf(object o)
    // 전달받은 데이터가 저장된 인덱스 정보 반환
    // 존재하지 않는 경우 -1 반환
boolean contains(Obejct o)
int size()
데이터 변경 void celar()
E remove(int index)
      // 제거한 데이터 반환
boolean remove(Object o)
      // 수행 결과 반환
boolean removeAll(Collection<?> c)
E set(int index, E e)
      // 전달받은 인덱스 위치 데이터 수정
데이터 정렬 void java.util.Collections.sort(List<T> list)
void java.util.Collections.reverse(List<T> list)

 

 

ArrayList<E> 객체 생성

  • Array 객체를 생성하여 이용해서 ArrayList 객체 생성

- java.util.Arrays 클래스의 static asList() 메서드를 사용하여 Array 객체를 java.util.Array$ArrayList 객체로 변환하여 ArrayList 객체 생성 시 사용  (java.util.ArrayList 클래스를 이용한 객체와는 다름)

 

 

  • ArrayList 객체 생성 시 초기값 전달 (바로 전달)

- java.util.Arrays 클래스의 static asList() 메서드를 사용하여 초기값을 java.util.Arrays$ArrayList 객체로 변환하여 ArrayList 객체 생성 시 사용

 

 

 

 

 

 

 

[2] Map 컬렉션 프레임 워크

map

  • Map 자료 구조 데이터는 하나의 데이터를 설명하기 위해 여러 속성 정보가 필요하다.
  • 속성 정보 간에는 순서가 필요 없음 ( index X )
  • 동일한 속성으로 여러 개의 값이 존재하지 않는다. ( 속성 -> 값 ) 
  • Pair( key-value) 데이터 여러 건이 하나의 객체로 관리 되는 것이다.
  • Key가 value의 위치 정보를  가지고 있다
  • Collection<E> 인터페이스를 상속받지 않고 독립적으로 구현 됨 ( 왜냐, <K,V>이기 때문에 )
  • 전체 객체를 다루는 메서드는 List<E> 인터페이스와 유사하다.
  • 개별 데이터를 다루는 메서드는 List<E> 인터페이스와 다름

list 와 map 비교

 


Map<K,V> 인터페이스

 

 

HashMap<K,V> 클래스 

 

  • 다른 언어에서는 Dictionary와 유사한 컬렉션 클래스이다.
  • 순서가 없는 자료 구조이다.
  • Key 값이 Hash 알고리즘을 이용해 구조화 되어 있어 Key값을 이용한 탐색 속도가 빠르다.
  • java.util 패키지에 존재함

 

HashMap<K,V> 객체 생성 

import java.util.HsahMap;
HashMap<Key-Type-Class, Value-Type-Class> hashMap-name =
		new HashMap<>();
        
HashMap<String, String> steve = new HashMap<>();

 

HashMap<K,V> 메소드

데이터 삽입 V put(K key, V value);
    - 객체 생성 시 , 지정한 데이터 타입과 유사한 pair를 추가해야함 
    - null 값 허용 , Key에 mutable 한 객체 사용은 지양한다.
void putAll( Map<? extends K, ? extends V> m )
    - map 객체의 데이터 타입<k,v> 는 동일해야 한다.
    - 중복되는 Key값의 데이터가 들어오면 업데이트 된다.
데이터 탐색  V get(Object key)
default V getOrDefault(Object ket, V defaultValue)
boolean containsKey(Object key)
containsValue(Object value)
int size()
데이터 변경 void clear()
V remove(Object key)
boolean remove(Object key, Object value)

 

 

 

 

 

 

 

 



- 코드프레소  Java  웹  개발  체험단  활동  중    
- 코드프레소  웹개발 트랙의 "  " 내용입니다.
- 코드프레소  URL: https://www.codepresso.kr/ 

반응형