차근차근 개발자 되기

Java

14일차: Java 레퍼런스 형변환/자료구조 - 2021.07.02

wellow 2021. 7. 2. 22:54

목차

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)