본문 바로가기
Study/Java Study

자바스터디 8주차 (1)

by hongchii 2021. 6. 28.
728x90
반응형

2021.06.23 - [Study/Java Study] - 자바스터디 7주차 (2)

 

자바스터디 7주차 (2)

2021.06.22 - [Study/Java Study] - 자바스터디 7주차 (1) 자바스터디 7주차 (1) 2021.06.19 - [Study/Java Study] - 자바스터디 6주차 (2) 자바스터디 6주차 (2) 2021.06.15 - [Study/Java Study] - 자바스터디 6..

hong-chii.tistory.com

1 . 지네릭스

 

1.1 지네릭스란?

지네릭스는 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크를 해주는 기능이다.

객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어든다.

 

지네릭스의 장점

1. 타입 안정성을 제공한다.

2. 타입체크와 형변환을 생략할 수 있으므로 코드가 간결해진다.

 

1.2 지네릭 클래스의 선언

class Box{
   Object item;
   
   void setItem(Object item) { this.item = item; }
   Object getItem() { return item; }
}

 

class Box<T>{
   T item;
   
   void setItem(T item) { this.item = item; }
   T getItem() { return item; }
}

지네릭스의 용어

Box<T> 지네릭 클래스. 'T의 Box' 또는 'T Box'라고 읽는다.
T 타입 변수 또는 타입 매개변수.(T는 타입 문자)
Box 원시타입(raw type)

지네릭스의 제한

지네릭 클래스 Box의 객체를 생성할 때, 객체별로 다른 타입을 지정하는 것은 적절하다.

Box<Apple> appleBox = new Box<Apple>(); // Apple객체만 저장가능
Box<Grape> grapeBox = new Box<Grape>(); // Grape객체만 저장가능

1.3 지네릭 클래스의 객체 생성과 사용

지네릭 클래스 Box<T>가 다음과 같이 정의되어 있다고 가정할때,

class Box<T>{
	ArrayList<T> list = new ArrayList<T>();
    
    void add(T item) { list.add(item); }
    T get(int i) {return list.get(i); }
    ArrayList<T> getList() { return list; }
    int size() { return list.size(); }
    public String toString() { return list.toString(); }
}

참조변수와 생성자에 대입된 타입(매개변수화된 타입)이 일치해야한다.

 

1.4 제한된 지네릭 클래스

지네릭 타입에 extends를 사용하면 특정 타입의 자손들만 대입할 수 있게 제한할 수 있다.

class FruitBox<T extends Fruit> { // Fruit의 자손만 타입으로 지정가능
	ArrayList<T> list = new ArrayList<T>();
    ....
}    

1.5 와일드 카드

<? extends T> 와일드 카드의 상한 제한. T와 그 자손들만 가능
<? super T> 와일드 카드의 하한 제한. T와 그 조상들만 가능
<?> 제한 없음. 모든 타입이 가능 <? extends Object>와 동일

1.6 지네릭 메서드

메서드의 선언부에 지네릭 타입이 선언된 메서드를 지네릭 메서드라 한다.

 

1.7 지네릭 타입의 형변환

지네릭 타입과 넌지네릭 타입간의 형변환은 항상 가능하다. 하지만 대입된 타입이 다른 지네릭 타입 간에는 형변환이 불가능하다. (대입된 타입이 Object여도 불가능하다.)

 

 

2. 열거형

2.1 열거형이란?

열거형은 서로 관련된 상수를 편리하게 선언하기 위한 것으로 여러상수를 정의할 때 사용하면 유용하다.

열거형 상수를 사용하면, 기존의 소스를 다시 컴파일하지 않아도 된다.

 

class Card {
	enum Kind { CLOVER, HEART, DIAMOND, SPADE } // 열거형 Kind를 정의
    enum Value { TWO, THREE, FOUR } // 열거형 Value를 정의
    
    final Kind kind; // 타입이 int가 아닌 Kind임에 유의하자.
    final Value value; 
}

 

2.2 열거형 정의와 사용

enum 열거형이름 { 상수명1, 상수명2, .... }

 

 

 

자바의 정석을 토대로 공부 후 정리한 내용입니다.

728x90
반응형

'Study > Java Study' 카테고리의 다른 글

자바스터디 9주차 (1)  (0) 2021.07.05
자바스터디 8주차 (2)  (0) 2021.07.04
자바스터디 7주차 (2)  (0) 2021.06.23
자바스터디 7주차 (1)  (0) 2021.06.22
자바스터디 6주차 (2)  (0) 2021.06.19

댓글