Array / Collection - List < 2021-10-04 >

Array / Collection - List < 2021-10-04 >

목차

Array(배열)

Collection(컬렉션) - List(리스트)

Generics (제네릭)

컬렉션과 다형성

Array (배열)

- 같은 자료형의 변수 여러 개를 묶어 다루는 것

* 단점

- 한 번 지정된 크기를 변경할 수 없음

- 배열의 중간 부분에 데이터를 추가, 삭제하기 어렵다.

- 한 타입의 데이터만 저장할 수 있음

// * 매개 변수로 전달 받은 Student 객체 주소를 stdList에 순서대로 추가 // * 배열 공간이 꽉차면 2배 크기로 늘리기 private Student[] stdList = new Student[3]; // Student 객체 배열 3개 선언 private int index = 0; // 메서드 호출 시 추가할 index 변수 선언 public boolean add(Student std){ if(index == stdList.length){ // 만일 index가 배열 길이만큼 꽉차면 Student[] newList = new Student[stdList.length * 2]; // 기존 배열의 2배 크기의 newList라는 새로운 객체 배열을 생성 System.arraycopy(stdList , 0 , newList , 0 , stdList.length); // 깊은 복사 (기존 배열이 가진 데이터를 새로운 배열에 모두 복사) stdList = newList; // 얖은 복사 (기존 배열에 새로운 배열주소를 덮어씀) } stdList[index] = std; index ++; return true; }

Collection(컬렉션)

- 컬렉션(Collection)은 자바에서 제공하는 자료구조를 담당하는 프레임워크

* 장점

- 추가 , 삭제 , 정렬 등의 기능 처리를 간단하게 해결할 수 있음

- 저장 크기의 제약이 없음

- 여러 가지 데이터 타입 저장 가능 ( 객체만 저장 가능, But 제네릭을 통해 데이터 타입을 제한하는 것이 좋음 )

Collection의 주요 Interface - List , Set , Map

List

- 자료들을 순차적으로 나열한 자료구조

- 인덱스로 관리된다

- 중복해서 객체 저장 가능

- ArrayList , Vector , LinkedList

ArrayList

- List의 후손 클래스

- 배열과 비슷한 형태의 List ( 가장 기본 적이고 많이 사용함 )

- 초기 저장 용량은 10 ( 따로 지정 가능 )

- 저장 용량을 초과한 객체가 들어오면 자동으로 늘어나며 크기 고정 가능

- 동기화 제공 X

- 검색에 효율적인 구조

LinkedList

- 요소 하나하나가 줄로 연결된 모양으로 추가와 삭제 기능에 효율적임

ArrayList list = new ArrayList(); // 기본 생성자로 생성하면 초기 용량 10 ArrayList stdList = new ArrayList(3); // 초기 용량 3 // 1. add (E e) : 리스트 맨 끝에 추가 stdList.add(new Student("이름" , 나이 , 학년 ) ) // 2. toString() System.out.println(stdList.toString()); // 3. add(int index , E e) : 지정된 index에 삽입 stdList.add( 2 , new Student ( "홍길동" , 15 , 2 ) ) // 4. size() : 리스트에 저장된 데이터 개수 반환 System.out.println(stdList.size()); // 5. get(int index) : 리스트에 저장된 index번 요소를 반환함 System.out.println(stdList.get(0)); System.out.println(stdList.get(1)); ... // 6. Object set(int index , E e) : 리스트 index번 요소를 e로 변경하고 기존 값을 반환 Object obj = stdList.set(0 , new Student("홍길동" , 19 , 3)); // 7. Object remove(int index) : 리스트의 index번 요소를 삭제하고 기존 값을 반환 Object obj = stdList.remove(1);

* 향상된 for문 (for each문)

- 컬렉션이나 배열의 모든 요소를 처음부터 끝까지 순서대로 접근하는 용도의 for문

for ( 값을 담을 변수 : 컬렉션 또는 배열명 )

Generics (제네릭)

- 간단한 개념만 찍먹...

- 컬렉션 타입의 제한 기능의 제네릭부터 천천히 공부하기

- Generics :

- 클래스, 메서드 , 컬렉션 내부에 사용되는 클래스 타입을 제한하는 기능

* 장점

1) 하나의 타입으로 제한하므로 instanceof를 이용한 검사 , 다운캐스팅 등의 작업이 필요 없음

==> 컴파일 단계에서 강력한 타입 체크

2) 하나의 코드로 여러 타입을 처리할 수 있음 (다형성)

// generic(제네릭)을 사용하여 Student로 타입을 제한한 ArrayList 생성 ArrayList stdList = new ArrayList(); - 생성된 ArrayList에는 Student만 저장 가능 - 다른 타입의 자료가 섞여있을 경우 Student 객체만 찾기 위해서는 instanceof 검사를 해야함 - 제네릭을 통해 해결

컬렉션과 다형성

* 다형성 : 부모 타입의 참조 변수로 상속 관계에 있는 자식 객체를 참조하는 것

* 인터페이스의 특징

- 상속 받은 자식에게 동일한 이름의 기능을 강제로 오버라이딩

-> 상속 받은 자식의 형태가 비슷해짐

- 인터페이스는 객체를 생성할 수 없다 , 참조 변수로는 사용 가능함

// 컬렉션에 다형성 적용 List list2 = new LinkedList(); // 부모 타입(List)로 자식 타입(LinkedList) 참조 // 나중에 다른 종류의 자식 타입으로 변경해도 유지 및 보수가 쉬움 // 매개 변수의 다형성 public void example1(List list){ System.out.println(list); } // 매개 변수가 부모 타입인 List == 매개변수의 다형성 public List example2(){ return new ArrayList(); } // 반환형이 부모 타입인 List == 반환형의 다형성 // 제네릭의 다형성 적용 // => 하나의 코드로 여러 타입 처리가 가능함 // 예) Person 클래스를 상속 받은 Student 클래스 public void example3(){ List list = new ArrayList(); list.add( new Person() ); list.add( new Student() ); for(Person p : list){ System.out.println(p.toString()); // 코드 실행 중 동적 바인딩 -> 자식 객체의 toString() 실행 } }

from http://bank-coder.tistory.com/19 by ccl(A) rewrite - 2021-10-04 22:27:36