마트철수

[037] Java: 제네릭, 컬렉션 자료구조 본문

KB IT's Your Life/교육

[037] Java: 제네릭, 컬렉션 자료구조

마트스 2024. 7. 1. 17:33

 

2024.07.01(월)
 
JAVA 9일차
 
클래스는 필드, 생성자, 메서드 → #필생메
상속은 메소드 오버라이딩,  다형성, 추상 → #메오다추
문자열은 String 타입 → substring, indexOf, split
main 메소드(혹은 생성자) 안에 위치하면 → 로컬 클래스
 


 

ch13 제네릭

 

장점보다 단점이 많음

그래서 컬렉션으로 그 단점을 보완할 수 있음


제너릭이란

: 결정되지 않은 타입을 파라미터로 처리

 

#Object로 모든 객체가 참조할 수 있도록 선언하면, 다운캐스팅할 때 instance of로 검사하고 호출해야함

#이러한 어려움을 줄여주기 위한 기능이 제네릭

 

<T>: T가 타입 파라미터임을 뜻하는 기호

public T content; ... 데이터 타입으로 선언

Box<Integer> box = new<Integer>( ); ... 업캐스팅, 다운캐스팅 필요없음

 

Primitve에는 사용 불가 / 참조형에만 가능 ex) Box<int> 불가

 

제너릭 메소드

: 특정 메소드에만 적용시키는 제너릭

[037] Java: 제네릭, 컬렉션 자료구조

→ 리턴타입 앞에 정의

 

제한된 타입 파라미터

: 모든 타입이 아닌,자식 또는 구현 관계에 있는 타입만 대체할 수 있는 타입 파라미터

: 인스턴스 변수 .getClass( ); 로 가져옴 ... ex) ti.getClass( )

 

상속 관계 이용 #extends(자식) #super(부모)

 

ch15 컬렉션 자료구조

 

컬렉션 프레임워크

: 널리 알려진 자료구조를 바탕으로 관련 인터페이스와 크래스들을 포함시켜 놓은 java.util 패키지

 

List 컬렉션

: 객체를 인덱스로 관리함

 

- boolean add(E e), E get(int index), int size( )

- boolean contains(Object o), boolean remove(Object o) ... equals( ) 구현되어 있어야함

 

ArrayList

모델 클래스 / 수식 없이 답만 있음

 

//모든 객체를 하나씩 가져오기

for(int i = 0; i < list.size( ); i++ ){

...

for( Board b : list ) {

...

 

Vector

#두 번째 구현체 #동기화시켜서 락을 건다(syncronized)

: 멀티 스레드 환경엣서 안전하게 객체 추가 또는 삭제 가능

→ 비권장

 

LinkedList

: 인접 객체를 체인처럼 연결해서 관리

: 객체 삭제와 삽입이 빈번한 곳에서 유리함 (ArrayList의 단점 보완)

 

Set 컬렉션

: 저장 순서 유지 X / 객체 중복 저장 X / 하나의 null만 저장 가능

 

HashSet

: 동등 객체를 중복 저장하지 않음

 

LinkedHashSet

: 순서 유지됨

 

Map 컬렉션

: 키와 값으로 구성된 엔트리 객체를 저장

#Map.Entry = Map 클래스 안에 있는 Entry

 

Map<K, V> map = new HashMap<K, V>( );

Map<String, Integer> map = new HashMap<String, Integer>( );

→ key는 Hashcode, equals( )가 정의되어있어야함 

 

!이전에 배웠던 개념!

advances for문(향상된 for문)

: for(String key: map.keySet( )){

 

Map할 때 key는 문자열로 구성함(value는 계속 변함)

 

Properties

: 키와 값을 String 타입으로 제한한 컬렉션 ... Map<string, string>와 같은 특수한 경우

해당 내용으로 실습하며 내용 추가 예정

 

이후부터는 정렬에 대한 내용임

!이전에 배웠던 내용!

배열 정렬: Array.sort( )

 

실습

 

 

package ch13.sec02.exam01; public class Product { // public T kind; // public T model; // kind, model을 제너릭으로 운영 / Getter, Setter 메서드를 직접 정의 // 모르겠슈 .. 해설 봄 private K kind; private M model; public K getKind() { return this.kind; } public M getModel() { return this.model; } public void setKind(K kind){ this.kind = kind;} public void setModel(M model){ this.model = model; } }

 


 

1. ch13.sec02.exam02 혼자 꼭 다시 한 번 작성해보기!

2. Set 부분 강의 다시 듣기