티스토리 뷰

Java

Collection, Polymorphism, Generic

살구르 2018. 1. 23. 14:16

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 타입으로 캐스팅하여 반환해줌




댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함