목차
1. 레퍼런스 형변환: 업캐스팅, 다운캐스팅
2. 자료구조(Collection): Set, List, Vector
1. 레퍼런스 형변환
- 두개의 클래스 사이에 상속관계가 있어야함
1) 업캐스팅(자동 형변환) →★CastingEx 참고
- 서브클래스에서 슈퍼클래스로 형변환 하는 것
- 참조 가능한 영역이 축소가 된다.
- 컴파일러에 의해서 암시적 형변환(자동 형변환) 된다.
- 주로 메소드의 매개변수가 Object인 경우 업캐스팅이 일어난다.
Parent p;
Child c = new Child();
p = c; // 업캐스팅(자동 형변환)
Parent p = new Child();
ex1) Calendar cal = new GregorianCalendar(); // 업캐스팅
ex2) List li = new ArrayList(); // 업캐스팅
ex3) boolean equals(Object an)
if("java".equals("jsp"){
if("java".equals(new String("jsp")){
// Object an = new String("jsp"); // 업캐스팅
if(new Integer(30).equals(new Integer(50))
// Object an = new Integer(50); // 박싱 + 업캐스팅
// Object an = 50; // 오토박싱 + 업캐스팅
if(new Integer(30).equals(50)) // 오토박싱 + 업캐스팅
2) 다운캐스팅(강제 형변환) →★CastingEx 참고
- 슈퍼클래스에서 서브클래스로 형변환 하는 것
- 참조 가능한 영역이 확대가 된다.
- 컴파일러에 의해서 암시적 형변환(자동 형변환)이 되지 않기 때문에 자료형을 생략할 수 없다.(강제 형변환)
- 주로 메소드 앞의 자료형이 Object인 경우 다운캐스팅이 일어난다.
// Child c = (Child) new Parent(); 오류 발생
Child c;
Parent p = new Child(); // 업캐스팅
c = (Child) p; // 다운 캐스팅(명시적 형변환)
ex1)
Vector v = new Vector();
v.add("java");
v.add("jsp");
// Object get(int index)
for(int i=0; i<v.size(); i++){
String s = (String) v.get(i); // 다운 캐스팅
Object s1 = v.get(i);
}
2. 자료구조(Collection)
1) 자료구조의 종류와 특징
- java.util 패키지에 있으므로 import 해야 한다.
ex) Set, List, Vector, Map, Queue, Stack etc
- 같은 자료구조라 하더라도 인터페이스 형태로 제공되는 것도 있고, 클래스 형태로 제공되는 것도 있다.
- 인터페이스는 자체적으로 객체 생성이 불가능하기 때문에 상속을 받는 구현 클래스를 통해 객체를 생성할 수 있다.
2) 자료구조의 대표적인 인터페이스&클래스 →★SetTest / TreeSetTest 참고
① Set 인터페이스 - HashSet, TreeSet (상속받는 클래스)
- 여러가지 자료형의 Data를 모두 저장할 수 있다. (ex. int, double, char, boolean, String etc.)
(→ 메소드의 매개변수가 최상위 클래스인 ‘Object’로 되어 있기 때문)
- 순서 없이 입출력 한다.
(→ 순차적인 자료구조가 아니기 때문, 그래서 제어하기가 힘들다는 특징을 갖는다.)
- 중복된 Data를 저장하지 못한다.
- 입력: boolean add(Object e) – ex. s.add(3.42);
- 출력: 반복자 iterator로 출력 – ex. Iterator it = hs.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
* TreeSet은 자체적인 기능으로 오름차순으로 정렬해주는 기능을 가지고 있다.
② List 인터페이스 - ArrayList (상속받는 클래스) →★Collections02 / Collections04 참고
- 여러가지 자료형의 Data를 모두 저장할 수 있다. (ex. int, double, char, boolean, String etc.)
- 순서 있는 입.출력 처리(index번호 순으로 저장됨)
- 중복된 Data를 저장할 수 있다.
- 입력: boolean add(Object e) – ex. list.add(3.42);
- 출력: Object get(int index) – ex. String s =(String)(list.get(i));
③ Vector 클래스 →★VectorConstructor / EnumIterVector / StoredVector / VectorTest01 참고
- 여러가지 자료형의 Data를 모두 저장할 수 있다. (ex. int, double, char, boolean, String etc.)
- 순서 있는 입출력 처리(index번호 순으로 저장됨)
- 중복된 Data를 저장할 수 있다.
- 입력: 1) boolean add(Object e) – ex. v.add(30);
2) void addElement((Object e) v.addElement(30);
- 출력: 1) get() 메소드
2) 나열형(Enumeration)
3) 반복자(Iterator)
'Java' 카테고리의 다른 글
16일차: Java 예외처리/Thread- 2021.07.06 (0) | 2021.07.06 |
---|---|
15일차: Java 자료구조/제네릭/예외처리 - 2021.07.05 (0) | 2021.07.05 |
13일차: Java 추상클래스/인터페이스/레퍼런스형변환 - 2021.07.01 (0) | 2021.07.01 |
12일차: Java 상속(필드/메소드 오버라이딩/생성자) - 2021.06.30 (0) | 2021.06.30 |
11일차: Java split()메소드/Wrapper클래스/상속 - 2021.06.29 (0) | 2021.06.29 |