1. 제너릭(Generic) 개념1, 개념2, 개념3, 개념4
1) 제너릭이란?
- 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법
(변수 타입을 '구현할 때 결정'하는 것이 아니라 클래스 외부에서 '실행할 때' 동적으로 결정한다)
- 변수 타입을 동적으로 사용하기 위해 선언 되는 <E>, <T>를 타입 파라미터라고 한다
- '자바5'부터 도입되었으며, C++의 템플릿 클래스와 유사한 개념이다. (장점 : 타입 안정성, 간결해지는 코드)
- 클래스 정의: 클래스 이름 <T>
- 변수 정의: T 변수 이름
- 제네릭이 정의된 클래스 생성: 클래스 이름<데이터 타입>
3) 조건 지정 개념1
- 특정 클래스를 상속하는 타입만 조건으로 지정: 클래스 이름 <T extends 상속 클래스 이름>
4) 와일드 카드 개념1, 개념2, 예제1, 예제2
- <?> : 어떤 형태의 타입이든지 허용하겠다는 의미
- <? extends 상속 클래스 이름> : 상속 클래스의 모든 하위 클래스 타입을 허용하겠다는 의미
- 제네릭 타입은 두 개 이상의 멀티 타입 파라미터를 사용할 수 있는데, 이 경우 각 타입 파라미터를 콤마로 구분한다
- <T, N> 형태로 여러개의 타입 파라미터 지정이 가능하다
6) 제너릭 클래스와 메소드 개념1, 개념2, 개념3, 예제1
- 제네릭은 클래스와 메소드에서 사용할 수 있으며, 제네릭 타입을 선언한 클래스를 제네릭 클래스라 한다 개념
- 제너릭 메소드 : 매개 타입과 리턴 타입으로 타입 파라미터를 갖는 메소드를 말한다
- 제네릭 메소드 호출 방법:
a. 코드에서 타입 파라미터의 구체적인 타입을 명시적으로 지정
b. 컴파일러가 매개값의 타입을 보고 구체적인 타입을 추정
7) 가변인수(varargs) 개념1, 개념2, 예제1
- 가변인수(가변길이인수)로 선언된 메소드는 동적인 인자의 개수를 전달 받을 수 있다
- 가변인수와 제너릭은 함께 사용하기 위해서는 주의가 필요하다
*주의: varargs 매개변수 배열에 아무것도 저장하지 않는다. / 그 배열(혹은 복제본)을 신뢰할 수 없는 코드에 노출하지 않는다.
- 가변인수의 매개변수는 1개만 가능하며, 맨 마지막에 위치해야한다
- 제너릭으로 선언된 클래스 상속 시 상위 클래스에서 선언된 타입 파라미터가 선언되어야 한다
- 하위 클래스에서 추가적으로 타입 파라미터를 선언 할 수 없다
2. 열거형(enum) 개념1, 개념2, 개념3, 예제1, 예제2, 예제3
- 요일, 계절 등 제한적인 데이터를 선언하여 재사용할 수 있도록 한다
- 열거형을 선언 하면 자동적으로 열거형 메소드를 사용할 수 있다
- 열거형 메소드는 열거형의 값, 위치 등을 추출하는 기능을 지원한다
3. 어노테이션(Annotation) 개념1, 개념2, 종류, 예제1
1) 어노테이션이란? 개념1, 개념2
- 코드 사이에 주석처럼 쓰이면서 특별한 기능을 수행하도록 하는 기술로 프로그램에게 추가적인 정보를 제공해주는 메타 데이터이다
- 컴파일러에게 코드 문법 에러를 체크하도록 정보를 제공한다
- 소프트웨어 개발 툴이 빌드나 배치에서 코드를 자동으로 생성할 수 있도록 정보를 제공한다
- 실행시 특정 기능을 실행하도록 한다
- @SuppressWarnings : 컴파일러가 일반적으로 경고하는 내용 중 이 내용은 제외시킬 때 사용
- @Override : 오버라이딩된 메소드
- 사용자가 정의하여 사용 할 수 있다
- 사용 방법 : public @interface 어노테이션 이름 { }
- @Target : 어디에 어노테이션을 넣을 수 있는지 대상을 지정
- @Retention : 어떻게 저장할 것인지 유효한 범위를 지정
'개발 > JAVA' 카테고리의 다른 글
4. 라이브러리 활용 (7) 람다식 (0) | 2022.06.28 |
---|---|
4. 라이브러리 활용 (5) 스레드(thread) (0) | 2022.06.28 |
4. 라이브러리 활용 (4) 입출력 (0) | 2022.06.27 |
4. 라이브러리 활용 (3) 예외처리 - 예외API, Throws (0) | 2022.06.26 |
4. 라이브러리 활용 (2) Collection API - List, Set, Map (0) | 2022.06.25 |