티스토리 뷰
1. Collection
- 데이터를 그룹으로 처리할 수 있는 방법은 배열
[배열의 제약 사항]
1) 크기 변경 불가
2) 하나의 데이터 타입만 저장 가능
- Collection 객체를 사용하면 이러한 제약사항에서 벗어나 데이터를 그룹으로 처리할 수 있음
- Set, List, Map 등
- 크기를 얼마든지 유동적으로 변경할 수 있으며,
- 서로 다른 타입의 데이터를 저장할 수 있음
- Collection 객체 중 Enumeration, Iterator 는 그룹 안에 있는 요소에 접근할 때 인덱스, 키가 아닌 커서 개념으로 접근
- 주로 모든 요소를 차례로 접근할 때 사용하면 편리하며, 속도 면에서도 빠름
2. Polymorphism(다형성)
- 상속받고 있는 상위 객체 타입으로 하위 객체를 참조할 수 있음
- Collection 객체에는 서로 다른 타입의 데이터들을 저장할 수 있음
- 이 때, 저장된 데이터를 추출할 때 어떤 타입으로 반환해야 할지 문제가 생김
- 자바의 모든 클래스는 Object의 자손
- 따라서, Object 타입으로 반환해줌으로써 한 곳에 저장된 서로 다른 데이터를 추출하는 것을 해결할 수 있음
- 즉, 서로 다른 타입의 데이터를 한 곳에 저장할 때는 Collection 객체에, 추출할 때는 Object 타입으로 반환
- Object 타입으로 추출한 데이터를 사용할 때 문제가 있음
- 실제 메모리에 만들어져 있는 객체는 하위 객체인데, 이 객체의 메모리 시작 주솟값을 가지는 참조변수의 타입을 상위 객체 타입(Object)으로 선언했기 때문에, 이 참조변수를 통해 메모리에 만들어진 하위 객체의 멤버에 접근이 불가능
- 강제 Type Casting 필요
Object <- A(n1) <- B(n2) <- C(n3)
- 위와 같은 상속 관계를 가지면서 각 각 변수 n1, n2, n3가 있다고 가정
Object r = new C(); // 가능 : 다형성(상위 객체 타입으로 하위 객체 참조)
r.n3 = 10; // 오류
(C)r.n3 = 10; // 이렇게 강제 캐스팅 후 접근 가능
3. Generics(제네릭)
- 실제 개발하다 보면 하나의 Collection 안에 같은 타입의 객체들이 한 곳에 저장되는 경우가 많음
- 이 경우, Collection에서 데이터를 추출한 후 사용할 때마다 매번 타입 캐스팅이라는 불필요한 작업을 해야함
- 이를 생략할 수 있게 해주는 것이 제네릭
- Collection 객체를 선언할 때 어떤 타입의 데이터가 저장될 것인지 미리 설정
(예)
ArrayList<String> list = new ArrayList<String>();
- 이렇게 선언하면 저장할 때 String 객체만 가능하고 다른 타입은 불가능하며
- 추출할 때는 자동으로 String 타입으로 캐스팅하여 반환해줌
'Java' 카테고리의 다른 글
자바의 변수 (0) | 2018.01.26 |
---|---|
자바의 call by reference? call by value? (0) | 2017.02.09 |
try catch finally 실행 순서 (0) | 2017.02.01 |
String==null 과 String.isEmpty() 의 차이 (0) | 2017.01.24 |
ArrayList의 contains 메서드를 활용하는 방법 (0) | 2017.01.24 |