목차
- 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 : <E>
- 클래스, 메서드 , 컬렉션 내부에 사용되는 클래스 타입을 제한하는 기능
* 장점
1) 하나의 타입으로 제한하므로 instanceof를 이용한 검사 , 다운캐스팅 등의 작업이 필요 없음
==> 컴파일 단계에서 강력한 타입 체크
2) 하나의 코드로 여러 타입을 처리할 수 있음 (다형성)
// generic(제네릭)을 사용하여 Student로 타입을 제한한 ArrayList 생성
ArrayList<Student> stdList = new ArrayList<Student>();
- 생성된 ArrayList에는 Student만 저장 가능
- 다른 타입의 자료가 섞여있을 경우 Student 객체만 찾기 위해서는
instanceof 검사를 해야함
- 제네릭을 통해 해결
컬렉션과 다형성
* 다형성 : 부모 타입의 참조 변수로 상속 관계에 있는 자식 객체를 참조하는 것
* 인터페이스의 특징
- 상속 받은 자식에게 동일한 이름의 기능을 강제로 오버라이딩
-> 상속 받은 자식의 형태가 비슷해짐
- 인터페이스는 객체를 생성할 수 없다 , 참조 변수로는 사용 가능함
// 컬렉션에 다형성 적용
List<String> list2 = new LinkedList<String>();
// 부모 타입(List)로 자식 타입(LinkedList) 참조
// 나중에 다른 종류의 자식 타입으로 변경해도 유지 및 보수가 쉬움
// 매개 변수의 다형성
public void example1(List<String> list){
System.out.println(list);
}
// 매개 변수가 부모 타입인 List<String> == 매개변수의 다형성
public List<String> example2(){
return new ArrayList<String>();
}
// 반환형이 부모 타입인 List<String> == 반환형의 다형성
// 제네릭의 다형성 적용
// => 하나의 코드로 여러 타입 처리가 가능함
// 예) Person 클래스를 상속 받은 Student 클래스
public void example3(){
List<Person> list = new ArrayList<Person>();
list.add( new Person() );
list.add( new Student() );
for(Person p : list){
System.out.println(p.toString());
// 코드 실행 중 동적 바인딩 -> 자식 객체의 toString() 실행
}
}
'Study > 수업 내용 정리' 카테고리의 다른 글
JDBC1 < 2021-10-06 > (0) | 2021.10.06 |
---|---|
Collection - Set / Map < 2021-10-05 > (0) | 2021.10.05 |
PROCEDURE(프로시저) / FUNCTION(함수) / CURSOR(커서) / TRIGGER (트리거) < 2021-09-29 > (0) | 2021.09.29 |
VIEW / SEQUENCE / INDEX + PL/SQL < 2021-09-28 > (0) | 2021.09.29 |
TCL / DDL ( ALTER , DROP ) / DCL < 2021-09-27 > (0) | 2021.09.27 |