컬렉션(Collection)

강호수·2022년 9월 13일
0

열거형(Enum)

  • 여러 상수들을 보다 편리하게 선언할 수 있도록 만들어진 문법요소
  • 관련있는 내용들을 모아 한번에 간편하게 관리할 때 사용
enum Seasons { SPRING, SUMMER, FALL, WINTER }

public class Main {
	public static void main(String[] args) {
    	Seasons seasons = Seasons.FALL;
        switch (seasons) {
        	case ~~
            
            case FALL :
            	~~
                break;
		}
    }
}

위와 같이 enum의 경우에는 switch 문에도 적용이 가능하다.
-> switch문 : 사용자 정의 타입에는 쓸 수 없다.

제네릭(Generic)

  • 하나의 클래스에서 같은 기능을 하면서 변수에 다른 타입의 데이터도 저장할 수 있게 만들어준다
  • 타입을 구체적으로 지정하는 것이 아니라, 추후에 저장할 수 있도록 일반화 해두는 것
class Basket<T> { //T는 그냥 변수로 생각 (Type)
	private T item;
   	
    public Basket(T item){
    	this.item = item;
    }
    
    public T getItem() {
    	return item;
	}
    
    public void setItem(T item) {
    	this.item = item;
	}
}

Basket<String> basket1 = new Basket<String>();
Basket<Integer> basket2= new Basket<>(); // 오른쪽의 Integer는 생략 가능(유추 가능)

Basket<K,V> 또한 가능하다. (Key, Value)

class Basket<T extends Plant> {
	...
}

Plant 상속받은 클래스만 타입으로 지정 가능

class ~<T> {
	...
    public <T> void add (T element) {
    	...
    }
}

~<T> a = new ~<>();
a.<Integer>add(10); // 두번째 T가 Integer로 지정됨
a.add(10); // 타입 생략 가능

예외처리

  • Compile Error
    • 컴파일 할 때 발생하는 에러 (보통 Syntax 에러)
    • 자바 컴파일러가 오류를 감지해 알려준다 (수정 쉬움)
  • Run Time Error
    • 코드를 실행하는 과정에서 발생하는 에러 (겉보기에는 문제 없다)
    • 컴퓨터가 수행할 수 없는 특정한 작업을 요청할 때 발생 (ex. 4/0 연산)
try {
	// 실행할 코드 삽입 (예외 발생할 수도 있음)
}
catch (Exception1 e1) {
	// Exception1 발생하면 실행할 코드
}
catch (Exception2 e2) {
	// Exception2 발생하면 실행할 코드
}
finally {
	// 예외 발생 여부와 관계 없이 항상 실행 (Optional)
}
  1. try 안에 있는 코드를 먼저 실행한다. 이 때 예외가 발생한다. (예를 들어 nullPointerException)
  2. catch (NullpointerException e) { ... } 라고 되어있는 곳에 있는 코드를 실행한다
  3. finally 안에 있는 것은 무조건 실행
public static void main(String[] args) {
	try {
    	throwException();
    } catch (ClassNotFoundException e) {
    	...
    }
}

static void throwException() thorws ClassNotFoundException {
	...
}

위와 같이 throws 키워드를 사용해 메서드를 호출한 곳으로 예외를 떠넘길 수도 있다.

public static void main(String[] args) {
    try {
        Exception intendedException = new Exception();
        throw intendedException;
    } catch (Exception e) {
        System.out.println("고의로 예외 발생시키기 성공!");
    }
}

위와 같이 throw 키워드를 사용해 의도적으로 예외를 발생시킨다. 이는 개발자의 실수 등으로 예기치 않게 발생할 수 있는 에러에 대응할 수 있는 코드를 사전 작성해 오작동과 비정상적인 종료를 방지한다.

컬렉션 프레임워크

  • List
    • 데이터 순서 유지, 중복 저장 가능
    • ArrayList, Vector, Stack, LinkedList
  • Set
    • 데이터 순서 유지X, 중복 저장 불가능
    • HashSet, TreeSet
  • Map
    • Key와 Value의 쌍으로 데이터 저장
    • 데이터 순서 유지X, Key는 중복 저장 불가능, Value는 중복 저장 가능
    • HashMap, HashTable, TreeMap, Properties

List

ArrayList
-> 객체가 인덱스로 관리된다
-> 객체들이 추가되면 저장용량 자동으로 늘어난다
-> 데이터가 연속적으로 존재 (객체의 삭제와 삽입이 일어날 때 하나하나 다 뒤로 미뤄야한다)
LinkedList
-> 데이터가 불연속적으로 존재 (서로 연결되어있다)
-> 주소값만 바꿔주면 되기 때문에 삭제 혹은 삽입이 일어날 때 더 빠르다

Iterator


0개의 댓글