Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Lv.1
- 단지번호붙이기
- 2색칠하기
- 이분그래프판별
- 운영체제
- 해시
- 동적계획법
- LV.3
- Lv.2
- 그래프
- 쿠쉬쿠쉬
- 코딩테스트준비
- hash
- 파이썬
- 면접질문
- Python
- BruteForceSearch
- 프로그래머스
- BFS
- Algorithm
- 코딩테스트
- 문제풀이
- 알고리즘
- C++
- 고득점Kit
- C
- OS
- 코테준비
- Java
Archives
- Today
- Total
쿠쿠의기록
제네릭 클래스 (generic class)에 사용법(간결하게!) 본문
제네릭(generic) 이란?
=> 자바에서 제네릭(generic)이란 데이터의 타입(data type)을 일반화한다(generalize)는 것을 의미
: 제네릭은 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법이다
장점 (컴파일 시에 미리 타입 검사(type check)를 수행 시)
1. 클래스나 메소드 내부에서 사용되는 객체의 타입 안정성을 높일 수 있다
2. 반환값에 대한 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있다
JDK 1.5 이전 - 여러 타입을 사용하는 대부분의 클래스나 메소드에서 인수나 반환값으로 Object 타입을 사용
=> 하지만 반환된 Object 객체를 다시 원하는 타입으로 타입 변환해야 하며, 이때 오류가 발생할 가능성도 존재
sol) JDK 1.5부터 도입된 제네릭 사용하여 컴파일 시(타입 지정), 타입 검사나 변환과 같은 작업을 생략할 수 있게 됨
제너릭 선언 및 생성
##선언##
class MyArray<T> {
T element;
void setElement(T element) { this.element = element; }
T getElement() { return element; }
}
=> 'T'를 타입 변수, 임의의 참조형 타입 의미, 다른 문자 사용 가능, 여러 개일 경우 쉼표(,)로 구분
=> 클래스에서뿐만 아니라 메소드의 매개변수나 반환값으로 사용 가능
##생성
MyArray<Integer> myArr = new MyArray<Integer>();
##인스턴스 생성 시 타입 생략 가능
MyArray<Integer> myArr = new MyArray<>(); // Java SE 7부터 가능함.
=> Integer 타입 사용하는 예제
=> 제네릭 클래스 생성 시 실제 타입 명시 (정의된 타입 변수 => 실제 타입 변환 처리)
제네릭 예제
import java.util.*;
class LandAnimal { public void crying() { System.out.println("육지동물"); } }
class Cat extends LandAnimal { public void crying() { System.out.println("냐옹냐옹"); } }
class Dog extends LandAnimal { public void crying() { System.out.println("멍멍"); } }
class Sparrow { public void crying() { System.out.println("짹짹"); } }
class AnimalList<T> {
ArrayList<T> al = new ArrayList<T>();
void add(T animal) { al.add(animal); }
T get(int index) { return al.get(index); }
boolean remove(T animal) { return al.remove(animal); }
int size() { return al.size(); }
}
public class Generic01 {
public static void main(String[] args) {
AnimalList<LandAnimal> landAnimal = new AnimalList<>(); // Java SE 7부터 생략가능함.
landAnimal.add(new LandAnimal());
landAnimal.add(new Cat());
landAnimal.add(new Dog());
// landAnimal.add(new Sparrow()); // 오류가 발생함.
for (int i = 0; i < landAnimal.size() ; i++) {
landAnimal.get(i).crying();
}
}
}
##실행 결과
#육지동물
#냐옹냐옹
#멍멍
=> Cat, Dog 클래스 LandAnimal 클래스 상속 클래스 : AnimalList<LandAnimal>에 추가 가능
=> Sparrow 클래스 타입 다름 (추가 불가능)
'개발에 대한 기본 지식 > 쿠쉬쿠쉬블로깅' 카테고리의 다른 글
[DB] MSSQL IDENTITY 초기화 (0) | 2023.06.26 |
---|---|
SourceTree 갑자기 실행 안될 때 / 원인 / 해결방법 (0) | 2023.06.20 |
5. Instagram Crawling(2) - Hashtags (0) | 2020.08.19 |
4. Instagram Crawling(1) - Image (0) | 2020.08.18 |
3. API 적용해서 사이트 만들기 (0) | 2020.07.30 |