VO Value Object
DAO Data Access Object
- DB의 데이터에 접근하기 위한 객체
- DB에 직접 접근하여 data를 삽입/삭제/조회 등 데이터를 처리하는 객체
Collection
- Java에서 제공하는 객체를 수집하고 관리(CRUD)
- 추가, 삭제, 검색이 효율적이다
- java.util 패키지
- Collection 계층의 root interface이다
- Iterable을 상속 받는다
List Interface(순서o, 중복o)
- 배열 -> 인덱스가 있다 = 순서가 있다 -> 중복 저장이 가능하다
- 구현 클래스 : ArrayList, Vector, LinkedList...
SingleLinkedList
Set Interface(순서x, 중복x)
- 집합 -> 중복 저장이 불가능하다(주머니 안의 공) = 같은 타입의 객체가 저장될 수 없다 = hashcode와 equals에서 둘 다 false 여야 한다 -> 순서가 없다
- 구현 클래스 : HashSet, TreeSet...
Map Interface
- Key 와 Value 로 구성된 Entry -> Key로 Value를 조회할 수 있다, Key는 중복 저장 불가
- 구현 클래스 : HashMap, HashTable, TreeMap, Properties...
properties
- String 타입으로 제한한 컬렉션
- 확장자가 .properties인 프로퍼티 파일을 읽을 때 사용
- 외부 리소스를 객체를 통해 자바 메모리 영역으로 가져올 때 사용
MapOf
- key, value를 최대 10개까지 넣을 수 있는 메서드
- 초기화 후 put을 사용해 entry를 추가 할 수 없다 = immutable 이기 때문에 -> list를 선언 후 mapof로 할당 -> list에 add는 가능
검색 기능이 강화된 Collection
Tree
- 사이클이 이루어지지 않도록 구성한 데이터 구조
TreeSet
- 이진 트리를 기반으로 한 Set Collection
- 루트 노드에서 시작해 최대 2개의 노드를 연결 할 수 있다
- 부모 노드와 비교해서 낮은 것은 왼쪽, 높은 것은 오른쪽에 저장 -> 객체를 저장하면 자동정렬 된다
TreeMap
- 이진 트리를 기반으로 한 Map Collection
- 부모 키 값과 비교하여 낮은 것은 왼쪽, 높은 것은 오른쪽에 Entry 객체를 저장
Comparable
- 정렬 수행시 정렬 기준이 되는 메서드를 정의해 놓는 인터페이스
- Cpmparable 인터페이스를 implements 하여 구현
- compareTo() 메서드를 원하는 정렬 기준대로 구현한다
- String, Integer, Double 등 -> compareTo()오름차순이 기본
public class ... implements Comparable<T> {
@Override
public int compareTo(int x, int y) {
if (x < y) return -1;
else if (x==y) return 0;
else return 1;
}
Comparator
- properties -> dictionary
- iterator : collection에서 객체들을 꺼내올 수 있는 반복자
- 해시 테이블 : 해시 맵과 다르게 멀티 스레드를 구현?한다
- 컬렉션을 쓰는 이유 : 객체를 이용해서 머더라..조작...어쩌구..
- Arrays.sort 는 확정 정렬 -> 사용시 배열를 아예 재정렬한다
Generic
- 컴파일시 강한 체크 타입을 할 수 있다.
- 자바 프로그래밍 언어의 타입 안전성 강화를 위해 JAVA5부터 도입된 기능
- 타입을 매개변수화 할 수 있다 -> 동일한 코드를 다양한 타입으로 사용할 수 있다
- 제너릭 타입의 매개변수로 사용 가능한 종류
1. 클래스
2. 인터페이스
3. 메서드
-> 컴파일 시 실제 타입으로 대체되어 타입 안정성을 보장
- 제너릭 클랙스 : 하나 이상의 타입 매개변수가 있는 클래스
class MyGenericClass<T>{...}
- 제너릭 메서드 : 자체 타입 매개변수를 갖는다 -> 클래스 수준 타입 매개변수와 다른 자체 타입 매개변수를 가질 수 있다
public<T> void MyGenericMethod(T param1, T param2){...}
- 제너릭의 와일드 카드 : 와일드 카드 유연성을 제공하고 알 수 없거나 여러 타입을 사용할 수 있도록 지원
- 지정된 상한 또는 하한 타입의 모든 타입을 사용할 수 있도록 허용
특정 타입이 중요하지 않는 객체 컬렉션을 작업할 때 유용
1. 상한 와일드 카드 : <?>
2. 하한 와일드 카드 : <? extends T> or <? super T>
- 지정된 하한 클래스와 동일하거나 상위 타입의 모든 타입을 사용할 수 있다
- 타입 삭제 : 타입 지우기 기능 지원
- 자바에서 제너릭이 필요한 이유 -> 다양한 타입의 데이터를 작동할 수 있는 재사용 가능한 코드를 만드는데 유용하기 때문에
1. 코드 중복 최소화
2. 유지 관리의 용이성
3. 컴파일 시 타입 안전성을 제공하여 런타임 오류의 가능성을 줄일 수 있다
4. 타입 캐스팅의 필요성을 제거
5. 다양한 타입에서 재사용할 수 있는 제너릭 코드를 제공
- 타입 매개 변수란? 자리 표시자(대문자)
- Constructor Injection : 생성자로만 값을 할당 이후 값을 변경할 수 없다
와일드 카드
- 자바 제너릭에서 알 수 없는 타입을 나타내는데 사용한다
- 제너릭 타입 매개변수를 다른 타입으로 대체할 수 있도록 지정 가능하다
- 필요성
- 매개변수의 정확한 타입을 알 수 없거나, 관련이 없는 상황에서 타입 안전성을 희생하지 않고 알 수 없는 타입을 처리할 수 있는 방법 제공
- 자바 제너릭 와일드 카드는 물음표 기화로 표시한다 <?>
1. 바인딩 되지 않은 와일드 카드 ('?') : 알 수 없는 타입을 표현. 실제 타입 인수에 관심이 없는 상황에서 사용
- 상한 바운드 와일드카드(? extends Type) : 지정된 타입의 하위 타입인 알 수 없는 타입을 표현. 특정 클래스나 인터페이스에 파생된 모든 타입 허용에 사용
제네릭와 와일드카드 <?>의 차이