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
- dbeaver
- lambda
- node.js
- access modifier
- finalize
- identityHashCode
- has-a
- Stream
- extends
- public static final
- shebang
- 엔드포인트
- arraycopy
- 스트림
- pycharm
- 얕은 복사
- 파이참
- singletone
- down casting
- Java
- constructor
- Up Casting
- 셔뱅
- Inbound
- 내부클래스
- generic programming
- parameter group
- Wrapper class
- 자바
- 깊은 복사
Archives
- Today
- Total
٩(๑•̀o•́๑)و
20200308 - Generic 프로그래밍 본문
자바 컬렉션 프레임워크
- 자바에서 여러가지 자료구조와 알고리즘을 구현해 놓은 라이브러리
- 배열, 링크드 리스트 등이 구현되어있는 종합 라이브러리
제네릭 프로그래밍
- 컬렉션 프레임워크에 전부 적용이 되어있음
- java5부터 나온 프로그래밍 방식
- 어떤 변수가 여러개의 타입으로 변경되어 사용될 수 있을 경우 제네릭 프로그래밍 방식을 사용
- 변수의 선언이나 메서드의 매개변수를 하나의 참조 자료형이 아닌 여러 자료형을 변환할 수 있도록 프로그래밍하는 방식
- 실제 사용되는 참조 자료형으로의 변환은 컴파일러가 검증하므로 안정적인 프로그래밍 방식
- 어떤 타입이 들어갈지는 클래스를 사용하는 시점에 결정
- 자료형 매개 변수 T : 여러 참조 자료형으로 대체될 수 있는 부분을 하나의 문자로 표현. type의 의미로 T 사용. 클래스 선언시엔 <T> 와 같이 <>으로 감싸준다. 자료형 매개변수가 2개 이상일 경우에도 <> 안에 쭉 쓰면 됨. - <T,V>
- generic타입의 클래스만 생성했다고 해서 생성되는건 아님. 여기에 set을 해서 값을 넣어줘야함.
- <T extends 클래스> : T대신에 사용될 자료형을 제한하기 위해 사용 - 상위클래스를 하나 생성한 후 이 클래스를 상속받은 클래스에 한해서만으로 제한이 가능하다. - public GenericPrinter <T extends Material>
- 이때 사용하는 상위클래스를 추상메서드를 포함한 abstract클래스로 선언하여 추상메서드를 공유할 수도 있다
- 제네릭 메서드 : 제네릭 타입으로 작성된 메서드 - 일반 클래스에서도 작성이 가능하다.
GenericPrinter<Powder> powderPrinter = new GenericPrinter<Powder>();
//<>안에 자료형 Powder를 생략해도 자동으로 유추하여 넣어준다.
GenericPrinter<Powder> powderPrinter = new GenericPrinter<>();
//<> 자체를 생략할 수도 있음. 이 경우에는 경고가 나며, 내부를 모두 Object로 취급을 함
//대부분의 generic programming시엔 <>을 사용한다.
GenericPrinter powderPrinter = new GenericPrinter();
제네릭 메서드
- 메서드의 매개변수를 자료형 매개 변수로 사용하는 메서드
- 일반 클래스 내에서도 선언이 가능 - 이때의 자료형 매개변수는 해당 클래스 내부에서만 의미가 있다.
class GenericMethod { //generic클래스가 아닌 일반 클래스
//메서드선언부에서 static뒤의 <T,V>가 있어야 Point<T,V> 사용가능
public static <T,V> double makeRectangle(Point<T,V> p1, Point<T,V> p2){
/* 자료형 매개변수의 유효 범위 - 메서드 내에서만 유효(지역변수와 같은 개념) */
}
}
class Shape<T> {
public static <T,V> double makeRectangle(Point<T,V> p1, Point<T,V> p2){
}
} // Shape의 T와 makeRectangle의 T는 전혀 다른 의미
'Java' 카테고리의 다른 글
20200309, 20200310 - 내부 클래스, 람다식, 스트림 (0) | 2020.03.11 |
---|---|
20200308 - 컬렉션 프레임워크 (0) | 2020.03.09 |
20200308 - String, Wrapper Class (0) | 2020.03.08 |
20200307 - Object Class (0) | 2020.03.07 |
20200307 - 인터페이스 (0) | 2020.03.07 |