Java API를 활용한 객체 활용 및 데이터 처리 기법

Jiyeong·2022년 1월 25일
0

JAVA

목록 보기
6/31

Java Array

: 동일한 타입의 데이터를 여러 개 가질 때 사용하는 자료 구조.
String[] stringArray;와 같이 정의
Array의 생성은 new String[size]와 같이 생성.
Array가 생성되었다고 Array에 들어가는 객체가 생성된 것은 아니다. 해당 값은 null.
Array의 크기는 stringArray.length로 획득.
Array에 대한 연산은 java.util.Arrays class를 사용.

Java Array 연산(java.util.Arrays)

  • Array로부터 List 생성 : asList(T...array)
  • Array에서 검색, 정렬 : binarySearch, sort
  • Array 복사 : copyOf, copyOfRange
  • Array의 값 비교 : deepEquals, equals
  • Array에 값 채우기 : fill

Java Collection Framework

: 자료의 집합 형태에 대한 표준적인 Framework를 정의한 인터페이스/유틸리티들의 목록이며 J2SE1.2에서 명명됨
Java SE API java.util Package에 속함.
자바를 이용한 자료구조/알고리즘을 정의하고 동작시키는 클래스 라이브러리 의미.
자바에서 객체를 저장하는 방법 의미.
배열도 일종의 Collection.

Data Structure / Algorithm

스택(Stack)

: 탑(Top)이라고 한 끝에서 모든 삽입과 삭제가 일어나는 순서 리스트
구조 : 후입 선출(LIFO)
자바에서 스택이 표준 API로 구현되어 제공

큐(Queue)

: 한 쪽 끝에서 데이터가 삽입되고 반대쪽 끝에서 삭제가 일어나는 순서 리스트
구조 : 선입 선출(FIFO)
자바에서는 보통 ArrayList 또는 Vector를 이용해서 사용

연결리스트(Linked List)

: 크기가 변하는(삽입, 삭제) 순차 리스트를 요구할 때 각각의 노드들의 연결로 이뤄져있는 리스트의 구조 필요.
연결 리스트들의 노드들은 메모리의 순차적 위치에 존재하지 않음(보통 포인트 또는 참조를 통함)
이러한 연결은 다음 노드를 가리키기 위한 연결자를 가지고 연결되고 노드들의 위치는 실행 시마다 바뀔 수 있음
구조 : 데이터부(data field)와 연결부(linked field)로 구성되며 각각은 여러 개의 서브부로 나눠짐
JCF에서는 LinkedList가 대표적 구현체

구조(Hash 알고리즘)

: Key와 그에 대응되는 Value의 쌍으로 구현
검색 속도가 제일 빠르며, Dictionary(사전) 형태의 데이터 구조를 의미함.
associative array라고도 하며, JCF에선 Map 계열의 구현체가 이에 해당함.
Java의 Heap Memory는 바로 이 구조를 일컫는다.

그 외 Tree 등 다양한 자료구조와 알고리즘이 존재.

Java Collection Framework 구조[J2SE 1.4]

Collection Interface

: 객체들의 모임을 저장하기 위한 공통적 행위들을 선언, 개별적인 요소들을 모아 둠.
List, Set, Queue(1.5 추가)가 대표적 하위 인터페이스

Map Interface

: 키와 그에 대응되는 값의 쌍으로 구성되는 객체들을 모아 놓은 구조로 연관 배열이라고도 함.

Iterator Interface

: 보통 Collection, Map의 실체 구현체의 데이터를 반복해서 찾아 가는 역할 담당(Enumeration(1.1), Iterator, ListIterator)

java.util.Collection

'객체의 모임'을 저장하기 위한 클래스의 최상위 자료형으로 List 인터페이스와 Set 인터페이스로부터 유도
컬렉션 내에서 adding, clearing, comparing, retaining와 같은 동작을 모든 컬렉션들이 포함
컬렉션은 각각의 요소에 접근할 수 있도록 Iterator(반복자)라고 불리우는 인터페이스와 객체를 얻을 수 있는 메소드 제공
컬렉션 인터페이스의 이외에도 컬렉션에 사이즈, 해쉬코드, 빈 상태인지 검사하는 동작들을 제공함
용량이 부족할 시 자동 증가

java.util.Collection의 메소드 종류

객체를 더하기 위한 메소드 : add, addAll
내용을 조사하기 위한 메소드 : contains, containsAll, isEmpty, size
객체를 제거하기 위한 메소드 : clear, remove, removeAll
배열도 전환하기 위한 메소드 : toArray
반복자로 전환하기 위한 메소드 : iterator

  • All이 붙은 건 Collection 내 전체 데이터 추가

Collection의 연산(java.util.Collections)

Collection에 데이터 추가 : addAll(Collection<? super T> c, T... a)
검색 및 정렬, 복사 : binarySearch, indexOfSubList, lastIndexOfSubList, sort, copy, nCopies
연산 : max, min, frequency, reverse, rotate, shuffle(임의로 난수를 발생시켜 섞음), singleton(set을 만들어 줌), replaceAll, swap
Enumeration : enumeration, list(Enumeration enumeration)

java.uti.List 계열

sequence로 요소들을 유지 관리.
Collection의 하위 인터페이스.
Collection의 메소드를 포함해 중간 추가, 삭제가 포함됨.
메소드가 추가되어 구현됨.
ArrayList, LinkedList가 대표적인 구현 클래스.
Vector, Stack 클래스들은 J2SE1.0, J2SE1.1에서 많이 사용됨
Array로 부터 List 생성 : List list = Array.asList("text1", "text2", "text3"); //여기서 add 함수 쓰면 에러 남!

ArrayList

: List의 크기 변경이 가능한 배열
내부적인 동작은 Vector 클래스와 유사
ArrayList의 생성자 : public ArrayList(), public ArrayList(int initialCapacity), public ArrayList(Collection c)
특징적인 메소드 : public void ensureCapacity(int capacity), public void trimToSize()

LinkedList

: ArrayList가 하듯이 List Interface를 구현
ArrayList보다 중간에 요소를 삭제, 삽입에 유리
무작위로 액세스 할 땐 불리.
LinkedList는 queue, stack, deque로써 확장되는 메소드를 가짐.
생성자 : LinkedList(), LinkedList(Collection c)

Iterator

: 임의의 컬렉션 클래스에서 구성원 객체를 차례로 검색하며 경우에 따라 제거할 수 있게 함
반복자에 관련된 인터페이스의 각각의 특징 :

  • Enumeration : 단방향 방문(Java 2 이전에 Vector와 같이 사용됨)
  • Iterator : 단방향 방문 및 제거
  • ListIterator : 양방향 방문 및 추가, 대치, 제거
    반복자 인터페이스의 메소드(Iterator interface)
    public boolean hasNext()
    public Object next() throws NoSuchElementException
    public void remove() throws UnsupportedOperationException, NoSuchElementException

java.util.Set 계열

Collection의 하위 인터페이스
구성원 객체로 중복된 객체를 허용하지 않음
중복된 객체를 허용하지 않으므로 null이 안 됨
각 객체 값에 대해 하나의 인스턴스만 저장
HashSet, TreeSet(정렬 가능)이 대표적인 클래스

TreeSet

하나의 추가된 기능 강황를 가진 클래스로 HashSet과 유사
정렬된 컬렉션(sorted collection)
항목을 원하는 순서로 컬렉션 내에 추가할 수 있으며, 컬렉션을 반복(Iterator)할 때 값들은 자동적으로 정렬된 순서로 제공
정렬은 트리 데이터 구조에 의해서 이뤄짐
항목이 트리에 추가될 때마다 적당히 정렬된 곳에 위치하므로 iteraotr는 항상 정렬된 순서로 항목들을 방문
TreeSet의 생성자 : TreeSet(), TreeSet(Collection elements)

TreeSet 객체 비교

: 정렬을 위해 객체를 비교하므로 이를 위해 추가되는 항목들은 Comparable 인터페이스를 구현했다고 가정

  • compareTo(Object obj) 메소드 : 객체가 정확한 타입이 아닐 시 classCastException 발생
  • Comparable 인터페이스를 구현하지 않은 클래스의 객체를 정렬할 필요가 있을 시 :
    TreeSet 생성자에 Comparator 객체를 전달함으로서 다른 비교 메소드를 사용하도록 TreeSet에게 지시
    Comaparator 인터페이스는 극명한 전달인자를 갖는 단일 메소드 보유

Map

: Key와 Value 쌍을 저장하고 있으며, key 보유시 이에 해당하는 값을 찾을 수 있도록 구성(set의 장단점과 비교)
Map을 위한 일반 목적의 클래스 :

  • HashMap : key들은 해쉬 함수를 사용해 하쉬함
  • TreeMap : 탐색 트리 내에서 키들에 대한 전체적인 정렬을 comparable 또는 comparator 기능을 이용해 정렬

자바 1.0, 1.1의 Dictionary 클래스 대신에 Map 인터페이스를 사용하는 것이 더 바람직함.

Map 인터페이스 메소드

: 항목(Key-Value)의 추가, 제거를 위한 메소드

  • public Object put(Object key, Object value)
  • public void putAll(Map m)
  • public Object remove(Object key)
  • public void clear()

Map에 포함된 내용에 대한 조사를 위한 메소드

  • public boolean containsKey(Object key)
  • public boolean containsValue(Object value)
  • public boolean equals(Object obj)
  • public boolean isEmpty()
  • public int size()
  • public Object get(Object key)
  • public Set keySet() -> Key 값의 중복 불허! 그래서 key 값을 change
  • public Collection values()
  • public Set entrySet()

SortedMap Interface

key 값을 기준으로 key와 value 쌍의 오름차순 정렬 유지
key 값의 비교 :
모든 key 객체의 클래스가 comparable 인터페이스 구현, Comparator로 SortedMap이 생성, 모든 key 값이 이 Comparator로 비교 가능.
메소드 :

  • Comparator comparator()
  • Object firstKey()
  • Object lastKey()
  • SortedMap heapMap(Object toKey)
  • SortedMap subMap(Object fromKey, Object toKey)
  • SortedMap tailMap(Object fromKey)

HashMap Interface

: 해쉬 기법을 사용해 구현되고 구성원의 개수에 상관없이 평균적으로 일정한 실행 속도 제공
key와 value 모두 null 값 허용.
생성자 : HashMap(), HashMap(int initialCapacity), HashMap(int initialCapacity, float localFactor), HashMap(Map t)
메소드 : Object clone()

TreeMap 클래스

:key 값을 기준으로 KEY와 VALUE 쌍의 오름차순 정렬 유지

입출력 및 고급 스트림 연결 기법

Stream : TCP 프로토콜에서 네트워크를 원하는 상대방 사이에 통신을 위한 데이터 교환을 하는 방식에서 유래.
TCP 프로토콜은 네트워크에 가상 경로 설정, 그 경로에 데이터를 바이트로 흘려 보내는 방법이 스트림. -> Java에선 이 방식 그대로 I/O에 적용하여 사용.

  • 스트림은 데이터가 있는 소스와 데이터가 전달되어지는 목적지
profile
깃스타가 되고 싶은 벨플루언서

0개의 댓글