728x90

📌 Wrapper 클래스
8가지 기본 데이터 타입을 객체로 표현하기 위해 제공되는 클래스이다.
- byte - Byte
- short - Short
- int - Integer
- long - Long
- float - Float
- double - Double
- char - Character
- boolean - Boolean
Wrapper의 사용
- 자바의 컬렉션(ex. ArrayList)은 기본 데이터 타입을 직접 저장할 수 없어, Wrapper 클래스를 사용하여 저장해야 한다.
- 오토박싱(auto-boxing): 기본 데이터 타입을 Wrapper 클래스 객체로 자동 변환한다.
- 오토언박싱(auto-unboxing): Wrapper 클래스 객체를 기본 데이터 타입으로 자동 변환한다.
- 오토박싱, 오토언박싱으로 자동으로 타입 변환되어도, 성능 저하를 막기 위해 명시해주는 것이 좋다.
📌 제네릭
형 안전성을 높이기 위해 도입된 프로그래밍으로, 컴파일 시간에 타입 오류를 효과적으로 찾아낼 수 있고 클래스, 인터페이스, 메소드에 대한 타입을 파라미터로 전달할 수 있다.
제네릭 특징
- 타입 안전성: 잘못된 타입의 객체가 저장되는 것을 컴파일 시간에 방지한다.
- 형 변환 필요성 감소: 명시적인 형 변환이 필요없다.
- 코드 재사용성: 일반 클래스나 메소드로 다양한 타입에 대해 동작하는 코드를 작성할 수 있다.
제네릭 클래스
- <T>를 이용하여 제네릭을 지정한다. (K, V 등..)
- 인스턴스를 생성할 때 형을 지정한다.
import java.util.ArrayList;
class MyClassGeneric<T> {
ArrayList<T> list = new ArrayList<>();
public void addElement (T element) {
list.add(element);
}
public void removeElement (T element) {
list.remove(element);
}
}
public class Generic {
public static void main(String[] args) {
MyClassGeneric<String> list = new MyClassGeneric<>();
list.addElement("element1");
list.addElement("element2");
// list.addElement(1); // 타입 오류
String text = list.get(1);
}
}
제네릭 제한
- extends 키워드를 이용하여 제네릭 타입을 제한할 수 있다.
- 원하는 타입의 가장 상위 클래스를 입력하여 지정하면 된다.
(ex. Integer의 가장 상위클래스: Number, String은 그 자체가 가장 상위 클래스)
class Box<T extends Number> {
private T item;
public void setItem(T item) {
this.item = item;
}
public T getItem () {
return item;
}
}
public class GenericExample1 {
public static void main(String[] args) {
// Box<String> stringBox = new Box(); // String은 Number의 하위클래스가 아니므로 타입 오류.
Box<Integer> intBox = new Box<>();
Box<Double> doubleBox = new Box<>();
intBox.setItem(5);
doubleBox.setItem(2.2);
}
}
- 특정 인터페이스를 구현하는 클래스로도 제네릭 타입을 제한할 수 있다.
interface Movable {
void move();
}
class Car implements Movable {
@Overrid
public void move() {
System.out.println("자동차 출발");
}
}
class Container<T extends Movable> {
// Container 클래스는 Movable 인터페이스를 구현하는 클래스만 허용한다.
private T item;
public Container {
this.item = item;
}
public void makeItMove() {
item.move();
}
}
public class GenericExample2 {
public static void main(String[] args) {
Container<Car> carContainer = new Container<>(new Car());
carContainer.makeItMove();
}
}
📌 Collection
데이터 구조와 알고리즘을 제공하는 프레임워크로, 객체의 그룹을 효율적으로 관리하기 위한 다양한 클래스와 인터페이스를 제공한다.
💡 List
순서가 있는 데이터의 집합을 다룰 때 사용하며, 데이터의 중복을 허용한다.
주요 메소드
- add(E element): 요소를 리스트이 끝에 추가
- add(int idx, E element): 지정된 위치에 요소를 삽입
- get(int idx): 지정된 위치의 요소를 반환
- remove(int idx): 지정된 위치의 요소를 삭제하고 반환
- set(int idx, E element): 지정된 위치의 요소를 지정된 요소로 교체
- indexOf(Object o): 지정된 요소의 인덱스를 반환 (존재하지 않으면, -1 반환)
- size(): 리스트의 크기를 반환한다.
ArrayList
- 초기 크기가 있지만, 요소가 추가되면 자동으로 크기가 확장된다.
- 배열 기반이므로 인덱스를 사용한 요소 접근이 빠르지만, 중간 요소를 삽입하거나 삭제하는 연산은 느린 편이다.
LinkedList
- 연결 리스트 기반이므로 중간 요소를 삽입하거나 삭제하는 연산이 빠르지만, 인덱스를 사용한 요소 접근은 느린 편이다.
💡 Set
순서가 없는 데이터의 집합을 다룰 때 사용하며, 데이터의 중복을 허용하지 않는다. (중복을 제거함)
주요 메소드
- add(E element): 요소를 Set에 추가한다. (이미 존재할 경우 추가되지 않음)
- remove(Object o): 지정된 요소를 Set에서 제거한다.
- contains(Object o): Set이 지정된 요소를 포함하고 있는지 확인한다.
- size(): Set의 크기 (요소의 수)를 반환한다.
- isEmpty(): Set이 비어있는지 확인한다.
- clear(): Set의 모든 요소를 제거한다.
HashSet
- Set의 대표적인 클래스로, 해시 테이블을 사용하여 요소를 저장한다.
- 순서를 보장하지 않는다.
LinkedHashSet
- 요소의 삽입 순서를 기억한다.
TreeSet
- 요소를 자동으로 정렬된 순서로 저장한다. (사용자 정의 정렬도 가능)
💡 Map
키-값의 쌍으로 데이터를 저장하며, 키는 고유해야 한다.
주요 메소드
- put(K key, V value): 지정된 키와 값을 Map에 저장한다.
- get(Object key): 지정된 키에 연관된 값을 반환한다.
- remove(Object key): 지정된 키와 그에 연관된 값을 제거한다.
- containsKey(Object key): 지정된 키를 포함하고 있는지 확인한다.
- containsValue(Object value): 지정된 값을 포함하고 있는지 확인한다.
- size(): Map에 저장된 키-값 쌍의 수를 반환한다.
- clear(): Map의 모든 키-값 쌍을 제거한다.
HashMap
- 해시테이블을 사용하여 키-값 쌍을 저장한다.
- 순서를 보장하지 않는다.
LinkedHashMap
- 삽입 순서를 기억한다.
TreeMap
- 키에 따라 자동으로 정렬되어 저장한다.
package java_generic;
import java.util.*;
public class Collection {
public static void main(String[] args) {
// LinkedList
List<String> linkedList = new LinkedList<>();
linkedList.add("A");
linkedList.add("B");
linkedList.add(1, "C");
System.out.println(linkedList);
// Set
// HashSet
Set<String> hashSet = new HashSet<>();
hashSet.add("A");
hashSet.add("B");
hashSet.add("A");
System.out.println(hashSet);
// LinkedHashSet - 순서를 기억함
Set<String> linkedHashSet = new LinkedHashSet<>();
linkedHashSet.add("C");
linkedHashSet.add("B");
linkedHashSet.add("A");
linkedHashSet.add("A");
System.out.println(linkedHashSet);
// TreeSet - 자동 정렬
Set<String> treeSet = new TreeSet<>();
treeSet.add("B");
treeSet.add("C");
treeSet.add("A");
System.out.println(treeSet);
// Map
// HashMap
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("one", 1);
hashMap.put("two", 2);
hashMap.put("three", 3);
System.out.println(hashMap);
// LinkedHashMap - 순서를 기억함
Map<String, Integer> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("one", 1);
linkedHashMap.put("three", 3);
linkedHashMap.put("two", 2);
System.out.println(linkedHashMap);
// TreeMap - 키에 따라 자동 정렬
Map<String, Integer> treeMap = new TreeMap<>();
treeMap.put("one", 1);
treeMap.put("two", 2);
treeMap.put("three", 3);
System.out.println(treeMap);
}
}728x90
'포스코x코딩온 웹 풀스택 양성과정' 카테고리의 다른 글
| [포스코x코딩온] 웹 풀스택 과정 18주차 회고 | Spring Bean (0) | 2024.04.18 |
|---|---|
| [포스코x코딩온] 웹 풀스택 과정 17주차 회고 | Spring (0) | 2024.04.18 |
| [포스코x코딩온] 웹 풀스택 과정 16주차 회고 | JAVA 클래스 상속 (0) | 2024.04.18 |
| [포스코x코딩온] 웹 풀스택 과정 16주차 회고 | JAVA 클래스와 인스턴스 (0) | 2024.04.05 |
| [포스코x코딩온] 웹 풀스택 과정 16주차 회고 | JAVA 배열과 예외처리 (0) | 2024.04.05 |