[커널아카데미] 백엔드 12기 4주차 - 자바_컬렉션 프레임웍& 지네릭스

jh5959·2025년 4월 20일
0

컬렉션 프레임웍

컬렉션: 객체를 모아둔 것, 다수의 데이터
프레임웍: 만들어진 것을 가져다 씀, 표준화된 프로그래밍 방식

컬렉션 프레임웍의 핵심 인터페이스

  • List: 컬렉션이 조상
  • Set: 컬렉션이 조상
  • Map: 얘는 아님

List

List: 순서O 중복O

  • ArrayList: 배열구조, 추가삭제 불리, 순차적 추삭은 제일 빠름, 읽기빠름(접근성 뛰어남)
  • LinkedList: 위에서 보완, 연결기반, 중간에 추삭(비순차적) 가능, 읽기 느림(접근성 별로)

Stack과 Queue

Stack: 후입선출, 밑이 막힌 상자, 배열과 비슷한 구조, Vector를 상속받아 구현
Queue: 선입선출, 줄서기, LinkedList와 비슷한 구조(LinkedList가 Queue인터페이스 구현)

Iterator

  • 자료구조 읽는 것을 표준화한 것
  • 있니 없니
  • HasNext(): 있니?
  • Next(): 줘

Arrays

: 배열을 다루는데 유용한 메서드가 많음

Comparator와 Comparable

Comparator : 정렬할 때 기준찾음 , 기본 그외
Comparble: 기본 정렬 기준

  • 두 객체 비교결과를 반환
  • 같으면 0, 오른쪽이 크면 음수, 작으면 양수

Set

Set: 순서 X 중복X

  • HashSet: Set중 가장 기본적, HashMap를 이용해서 구현
  • TreeSet: 자식이 0~2개만 가능, TreeMap를 이용해서 구현, 중위순회 -> 정렬됨, 정렬과 검색에 유리(특히 범위검색),이진 검색 트리

Map

Map(딕셔너리): 순서X , 중복(키X,값O)

  • HashMap: 배열과 연결이 결합된 형태, 추삭검접 모두 뛰어남, 검색에서 최고성능 보임 , 키 값이 쌍
  • HashTable: 배열+연결, 같은키는 같은 해시코드여야 함
  • TreeMap: 연결기반, 정렬과 검색(특히 범위검색)에 적합, TreeSet과 비슷

탐색 방법 2가지

  • 순차탐색: 순서대로 탐색
  • 이진탐색: 반씩 나눠서 탐색, 정렬해야 함

Properties

: 파일 읽고 쓰기 할 때

Collections

: 컬렉션을 위한 메서드 제공 ex)동기화 메서드


지네릭스

지네릭스란

: 클래스나 메서드를 선언할 때, 실제 사용할 타입을 나중에 지정할 수 있도록 함, 타입체크를 해주는 기능
장점

  • 타입 안정성 제공
  • 타입체크와 형변환 생략, 코드가 간결해짐

Object를 쓰는 문제점

Box b = new Box();
b.set("Hello");
Integer i = (Integer) b.get(); // ❗ 런타임 오류!
  • 컴파일 시 오류 안남
  • 실행하면 ClassCastException 위험

지네릭 클래스의 선언

class Box<T>{
	private T item;

    public void set(T item) { this.item = item; }
    public T get() { return item; }
}

Box 클래스 객체를 생성할 때 실제 타입 지정

Box<String> b = new Box<>();
b.set("Hello");
System.out.println(b.get());  // Hello

지네릭 클래스의 객체 생성과 사용

참조변수와 생성자에 대입된 타입(매개변수화된 타입)이 일치해야 함

Box<Apple> appleBox = new Box<Apple>();

Box<Apple> appleBox = new fruitBox<Apple>(); //다형성, 가능함

제한된 지네릭 클래스

지네릭 타입에 extends를 사용하면 특정타입의 자손들만 대입 할 수 있게 제한

와일드 카드

<? extends T>
: 와일드 카드의 상한 제한, T와 그 자손들만 가능

<? super T>
: 와일드 카드의 하한 제한, T와 그 조상들만 가능

<?>
:제한 없음, 모든 타입 가능, <? extends object> 와 동일

지네릭 메서드

< T>를 메서드 선언 앞에 붙인다
호출 시 타입을 추론해서 처리함

지네릭 타입의 형변환

  • 지네릭 타입 간에 형변환이 제한적
  • 같은 타입 매개변수를 가진 경우에만 형변환 가능
Box<Object> o = new Box<String>(); // 안됨
Box<?> wildcard = new Box<String>(); // 와일드카드 사용시 가능

지네릭 타입의 제거

  • 자바 컴파일러는 지네릭 정보를 컴파일 시점에서 제거한다
  • 런타임에는 타입 정보가 없다
  • ex) Box< Stirng> 과 Box< Integer>는 컴파일 후에 모두 Box로 처리됨

열거형

열거형이란

: 서로 관련된 상수를 편리하게 선언하기 위한 것

  • 여러 상수를 정의할 때 유용하다
  • 기존의 소스를 다시 컴파일하지 않아도 된다
  • 상수 정의를 enum으로 대체하면 변경 시 영향범위가 줄어든다

열거형의 정의와 사용

enum 열거형이름{상수명1, 상수명2,...}
  • 열거형이름.상수명
  • == 사용가능
  • < , > 비교연산자 사용불가능 -> ordinal 값 비교가 아니가 참조값 비교 때문에
  • compareTo() 사용가능
  • Enum은 모든 열거형의 조상

열겨형에 멤버 추가하기

enum Direction {
	EAST(1), SOUTH(5), WEST(-1),NORTH(10);
	private final int value; //정수를 저장할 필드(인스턴스 변수) 추가
	Direction(int value){this.value=value;}//생성자 추가
	public int getValue(){return value;}
}

열거형의 이해

열거형은 객체이다
모든 열거형은 추상 클래스 Enum의 자손이다

애너테이션

애너테이션이란

: 프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것

표준 애너테이션

  • @Override: 컴파일러에세 오버라이딩하는 메서드라는 것을 알림
  • @Deprecated: 앞으로 사용하지 않을 것을 권장하는 대상에 붙임
  • @Funtionallnterface: 함수형 인터페이스라는 것을 알림

메타 애너테이션

: 애너테이션을 위한 애너테이션, 애너테이션에 붙이는 애너테이션으로 애너테이션을 정의할 때 애너테이션의 적용대상이나 유지기간등을 지정하는데 사용된다

  • @Target*: 애너테이션이 적용가능한 대상을 지정하는데 사용
  • @Documented*: 애너테이션 정보가 javadoc으로 작성된 문서에 포함되게 한다
  • @inherited*: 애너테이션이 자손 클래스에 상속되로록 한다, 자식 클래스에 자동으로 적용되지만 인터페이스에는 적용되지 않는다

애너테이션 타입 정의하기

@interface 애너테이션 이름{
	타입 요소이름(); //애너테이션의 요소를 선언한다
}

애너테이션의 요소: 애너테이션 내에 선언된 메서드를 말한다
규칙

  • 요소의 타입은 기본형, String, enum, 애너테이션, class 만 허용한다
  • ()안에 매개변수를 선언할 수 없다
  • 예외를 선언할 수 없다
  • 요소를 타입 매개변수로 정의할 수 있다

회고

  • 자바가 거의 끝이 났다 완벽하게 공부했다기 보다 전체적으로 한 번 본 느낌이다
  • 복습을 통해 부족한 부분을 보완해야겠다
  • 실습이 부족해서 복습을 하면서 실습을 더 해야겠다
  • 그리고 연습문제를 한 번 더 풀어야겠다
  • 이번달은 정신없이 지나갔다 다음달은 더 공부양을 늘리고 효율적으로 공부를 해야겠다

0개의 댓글