JAVA

자바 개발자 양성 과정 4주차 - 2

J휘 2024. 8. 5. 17:27

[제네릭]

: 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법 <>

 

ex) ArrayList<String> list = new ArrayList<>();

이렇게 쓰면  list클래스의 자료형 타입은 String으로 지정돼서 String타입만 리스트에 적재가능해짐

# 변수를 선언할 때 변수의 타입을 지정해주듯 (int a=0;), 제네릭은 타입을 지정해주는 것이라고 보면 됨

List<T>

여기서 <> 안에 있는 T[타입 매개변수] 라고 한다.

 

제네릭에서 가장 중요하다고 보여지는 부분은 바로 다형성과의 연관성이다.

class Fruit { }
class Apple extends Fruit { }
class Banana extends Fruit { }

class FruitBox<T> {
    List<T> fruits = new ArrayList<>();

    public void add(T fruit) {
        fruits.add(fruit);
    }
}

public class Main {
    public static void main(String[] args) {
        FruitBox<Fruit> box = new FruitBox<>();
        
        // 제네릭 타입은 다형성 원리가 그대로 적용된다.
        box.add(new Fruit());
        box.add(new Apple());
        box.add(new Banana());
    }
}

출처: https://inpa.tistory.com/entry/JAVA-☕-제네릭Generics-개념-문법-정복하기 [Inpa Dev 👨‍💻:티스토리]

해당 예제에서 FruitBox<T>{} 안에 있는 add()를 보면

매개변수가 T fruit로 부모클래스로 형변환해서 받을 수 있는데(업캐스팅)

이렇게 다형성을 이용한 부분을 이해하는 게 중요해보인다.

#보통은 매개변수에 object클래스를 넣어서 모든 클래스를 받을 수 있게 한다

 

[컬렉션]

그동안 사용했던 배열의 문제점은

1. 크기 변경(수정) 불가

2. 배열에 기록된 데이터에 대한 중간위치의 추가, 삭제 불편

3. 한 타입의 데이터만 저장이 가능

이 문제점들을 해결해줄 수 있는 게 컬렉션이다

 

컬렉션의 장점은

1. 저장하는 크기의 제약이 없다

2. 추가, 삭제, 정렬 등의 처리가 간단하게 해결된다

ㄴ 자료구조가 내장되어있어서 알고리즘 구현이 필요없음

3. 여러 타입의 데이터가 저장 가능하다.

 

컬렉션의 주요 인터페이스에는 3가지가 있는데

 Collection으로 분류되는 List계열과 Set계열

그리고 컬렉션과는 별개의 Map계열이 있다.

 

<List 계열>

1. ArrayList<E>

장점

◾저장된 인스턴스의 참조가 빠르다(서로 붙어있음)

단점

◾ 저장공간을 늘리는 과정에서 시간 소요가 큼

 

2. LinkedList 

◾ 저장된 인스턴스의 참조과정이 배열에 비해 복잡(느림)

ㄴ 서로 붙어있지 않고 서로를 참조하고 있기 때문

◾ 저장된 인스턴스의 삭제 과정이 단순(같은 이유)

 

<Set계열>

set

특징

◾ 저장 순서 유지 x

◾ 중복 객체 저장 x

구현 클래스 3가지(HashSet, LinkedSet, TreeSet)

 

Set에서 가장 중요한 점은 중복 객체 판별 방법인데

이를 object클래스의

equals() 와 hashCode()의 호출 결과를 기준으로 판별한다.

 

두 인스턴스가 hashCode메소드 호출 결과로 반환하는 값이 동일해야하고

또한 두 인스턴스를 대상으로 equals호출 결과가 true로 반환되면 동일 인스턴스로 판별함.

<Map계열>

Map

키(key)와 값(value)으로 구성되어 있으며 키/값은 모두 객체

키는 중복 저장을 허용하지 않고(set방식), 값은 중복 저장이 가능하다.(List방식)

 

# HashMap는 equals() 와hashCode()를 재정의해서 동등 객체가 될 조건을 정해야 한다.