열거형(Enum)
- 개념
- 비슷한 상수의 모음
- 등장배경, 장점
- 상수명이 중복되는 경우 컴파일 에러 => 인터페이스 사용으로 구별 가능하지만, 타입 안정성 문제 발생(== 연산자를 사용하면 두 상수의 의미가 달라도 같게 표시함) => 객체 생성으로 해결 가능하지만 코드가 길어지고, 스위치문 사용불가 => enum을 사용하면 같은 값의 구별과 스위치문 사용이 가능함
- 문법 요소
- enum 열거형이름 {상수명1, 상수명2, 상수명3, ...}
- 관례적으로 대문자로 작성
- 자동으로 0부터 정수값이 할당
제네릭
- 장점
- 한 클래스에 다양한 타입의 인자를 전달할 수 있음
- 제네릭 클래스
- class <class name><타입 매개변수 T>{...}
- class <class name> <K, V>{...}
- Type,Key,Value, Element, Number, Result
- 해당 클래스로 만든 모든 인스턴스와 변수를 공유해야 하는 클래스 변수는 타입 매개변수로 작성 못함
- 타입 매개변수에 치환될 타입은 참조 타입만 가능
- 다형성 적용 가능
- 제한된 제네릭 클래스
- class <class name> extends <interface name>
- class <class name> extends <class name>
- class <class name> extends <class name & interface name>
- 제네릭 메서드
- 와일드카드
- <? extends T>: 상한 제한, T와 T를 상속받는 하위 클래스
- <? super T>: 하위 제한, T와 T의 상위 클래스
예외처리
- 예외 처리란
- 예기치 못한 에러로 프로그램이 비정상적으로 종료되는 것을 막기 위한 처리
- 컴파일 에러와 런타임 에러
- 컴파일 에러: IDE가 미리 려줘서 수정하기 쉬움,세미콜론 생략, 오탈자, 잘못된 자료형 등
- 런타임 에러: AritimeticException, NullPointerException, ArrayIdexOutOfBoundsException
- 에러와 예외: 에러느 복구하기 어려운 수준의 심각한 오류. 메모리부족, 스택오버플로우 등. 엄밀히 말하면 위의 에러들은 예외라고 하는게 정확
- 예외 클래스 상속 계층도
- try-catch문
- e.getMessage(), e.toString()
- 예외 전가
- throws: 메서드를 호출한 곳으로 예외 전달
- throw : 의도적을 예외 발생 시키기
컬렉션 프레임워크
- 특정 자료 구조를 이용해 데이터를 추가,삭제,수정,검색 등의 동작을 가능하게 함
- 컬렉션 프레임워크 구조
- 구현된 클래스들 기억하기
- List
- 중복가능, 순서있음
- Set
- 중복불가능, 순서없음
- Map(collection과 별개)
- 삽입되는 순서와 위치 관련없음
- Entey 객체를 저장
- 키는 중복 불가능, 값은 중복가능
- collection interface 메소드설명
boolean add(E e) | 해당 컬렉션(collection)에 전달된 요소를 추가함. (선택적 기능) |
void clear() | 해당 컬렉션의 모든 요소를 제거함. (선택적 기능) |
boolean contains(Object o) | 해당 컬렉션이 전달된 객체를 포함하고 있는지를 확인함. |
boolean equals(Object o) | 해당 컬렉션과 전달된 객체가 같은지를 확인함. |
boolean isEmpty() | 해당 컬렉션이 비어있는지를 확인함. |
Iterator<E> iterator() | 해당 컬렉션의 반복자(iterator)를 반환함. |
boolean remove(Object o) | 해당 컬렉션에서 전달된 객체를 제거함. (선택적 기능) |
int size() | 해당 컬렉션의 요소의 총 개수를 반환함. |
Object[] toArray() | 해당 컬렉션의 모든 요소를 Object 타입의 배열로 반환함. |
- HashMap<K, V> 메서드 설명
void clear() | 해당 맵(map)의 모든 매핑(mapping)을 제거함. |
boolean containsKey(Object key) | 해당 맵이 전달된 키를 포함하고 있는지를 확인함. |
boolean containsValue(Object value) | 해당 맵이 전달된 값에 해당하는 하나 이상의 키를 포함하고 있는지를 확인함. |
V get(Object key) | 해당 맵에서 전달된 키에 대응하는 값을 반환함. 만약 해당 맵이 전달된 키를 포함한 매핑을 포함하고 있지 않으면 null을 반환함. |
boolean isEmpty() | 해당 맵이 비어있는지를 확인함. |
Set<K> keySet() | 해당 맵에 포함되어 있는 모든 키로 만들어진 Set 객체를 반환함. |
V put(K key, V value) | 해당 맵에 전달된 키에 대응하는 값으로 특정 값을 매핑함. |
V remove(Object key) | 해당 맵에서 전달된 키에 대응하는 매핑을 제거함. |
boolean remove(Object key, Object value) | 해당 맵에서 특정 값에 대응하는 특정 키의 매핑을 제거함. |
V replace(K key, V value) | 해당 맵에서 전달된 키에 대응하는 값을 특정 값으로 대체함. |
boolean replace(K key, V oldValue, V newValue) | 해당 맵에서 특정 값에 대응하는 전달된 키의 값을 새로운 값으로 대체함. |
int size() | 해당 맵의 매핑의 총 개수를 반환함. |
- 어떤 컬렉션을 사용할지
- 컬렉션에는 object만 저장가능
- ArryList는 리스트와 달리 메모리를 초과하면 자동으로 메모리가 증가/ 처음 기본은 10byte, 증가는 저장용량의 1.5배씩
- ArryList 순차적으로 추가/제거할 때 성능이 좋음
- LinkedList는 검색할 때는 성능이 좋지 못하지만 중간에 요소를 추가/삭제할 때는 성능이 좋음
- ArryList 는 내부적(물리적)으로 참조값들이 모여서 저장되지만 LinkedList는 아님
- HashSet은 해시코드와 equals 메서드로 중복을 확인하고 특정 조건에 따라서 두 메서드를 오버라이딩해서 어떤 요건에서 중복인지 정의할 수 있음
- Map은 keySet()을 이용해서 iterator 사용 가능
- Map 의 keySet() 반환값은 set, set이 중복을 허용하지 않는 특징을 이용
- value는 반환값이 컬렉션, 중복 가능
- Q. hashMap의 Key가 Integer타입이고, Value가 Boolean 타입일 때, 아래 빈칸에 들어갈 코드는?
__________________es_ = hashMap.entrySet();
A. Set<Map.Entry<Integer, Boolean>> - ArrayList<>(Collection);
- ArrayList<>(20);
사진 출처
1) https://www.geeksforgeeks.org/exceptions-in-java/
2) https://www.javatpoint.com/collections-in-java
3) https://www.javatpoint.com/java-map
4) https://stackoverflow.com/questions/21974361/which-java-collection-should-i-use
'부트캠프 기록 > Section1' 카테고리의 다른 글
[Java] 심화(Effective)/ 16일차 기록 (0) | 2022.09.18 |
---|---|
[Java] 컬렉션 페어프로그래밍 회고/ 15일차 기록 (0) | 2022.09.17 |
[Java] 객체지향 프로그래밍 심화/ 13일차 기록 (0) | 2022.09.09 |
[Java] 객체지향 프로그래밍 심화/ 12일차 기록 (0) | 2022.09.06 |
[Java] 객체지향 프로그래밍 기초/10- 11일차 기록 (0) | 2022.09.05 |