[section 1] Java 심화(1) - 애너테이션, 람다

수경·2022년 11월 14일
0

코드스테이츠

목록 보기
19/57

애너테이션 Annotation

프로그램에게 유용한 정보를 제공하기 위한 주석
❗️개발자의 코드 작성을 위한 주석 comment와 다름

특징

  1. 컴파일러에 문법 에러 체크를 위한 정보 제공
  2. 프로그램 빌드 시 코드를 자동 생성하도록 정보 제공
  3. 런타임에 특정 기능을 실행하도록 정보 제공
  4. 명확한 타겟 이외의 대상에는 아무런 영향을 주지 않음

표준 애너테이션

표준 애너테이션설명
@Override컴파일러에게 메서드를 오버라이딩 하는 것이라 알림
@Deprecated앞으로 사용하지 않을 대상을 알림
@FunctionalInterface함수형 인터페이스라는 것을 알림
@SuppressWarning컴파일러가 경고 메세지를 나타내지 않음

메타 애너테이션

메타 애너테이션설명
@Target애너테이션을 정의할 때 적용 대상을 지정하는데 사용
@Documented애너테이션 정보를 javadoc으로 작성된 문서에 포함시킴
@Inherited애너테이션이 하위 클래스에 상속되도록 함
@Retention애너테이션이 유지되는 기간을 정하는데 사용
@Repeatable애너테이션을 반복해서 적용

사용자 정의 애너테이션

사용자가 직접 정의해서 사용할 수 있는 애너테이션

❗️java.lang.annotation 인터페이스를 상속받기 때문에 다른 클래스나 인터페이스를 상속 받을 수 없음

@interface 애너테이션명 {
	타입 요소명();
}

람다 Lambda

메소드를 더 간단하고 편리하게 표현하기 위해 고안된 문법

람다식 작성법

두 파라미터의 합을 구해서 반환하는 메소드 sum

int sum (int num1, int num2) {
	return num1 + num2;
}

위 메소드를 람다식으로 표현

(num1, num2) -> num1 + num2;

✔️ 함수의 이름 x -> 익명 함수
✔️ return 문 삭제
✔️ 한 줄 이내면 중괄호 생략
✔️ 매개변수 타입을 유추할 수 있는 경우 매개변수 타입 생략


위 람다식을 객체로 표현

new Object() {
	int sum (int num1, int num2) {
		return num1 + num2;
	}
}

함수형 인터페이스

익명 클래스(람다식)의 경우, 하나의 객체를 생성하여 단 한번만 사용하는 일회용 클래스이다. 따라서 인스턴스에 접근할 방법이 없어서 해당 메소드를 사용할 수 없는데, 이를 보안하기 위해 고안된 것이 함수형 인터페이스이다.

작성방법

// 함수형 인터페이스 애너테이션 추가
@FunctionalInterface
interface ExampleSum {
	// 추상메소드 sum 작성
	public abstract int sum (int num1, int num2);
}

❗️주의사항

함수형 인터페이스는 람다식과 1대1 매칭을 이뤄야하기 때문에 단 한개의 추상메소드만 선언해야 한다.

참고

Java 공식문서 - 함수형 인터페이스

codechacha - 함수형 인터페이스

메소드 레퍼런스

람다식으로 간단해진 익명 객체를 더욱 간단하게 사용하고자 고안된 문법 요소

람다식에서 불필요한 매개변수를 제거할 때 주로 사용

(left, right) -> Math.max(left, right);

위 람다식은 두 개의 값을 Math.max의 파라미터로 넘기는 역할을 함
➡️ 입력값 유추 가능
➡️ 메소드 레퍼런스로 변환으로 깔끔하게!

// 클래스 이름 ::메소드 이름
Math :: max;

// int 타입인 경우
IntBinaryOperator operato = Math::max;

정적메소드 참조
클래스 :: 메소드

인스턴스 메소드 참조
참조 변수 :: 메소드

생성자 참조
클래스 :: new
❗️함수형 인터페이스의 추상 메소드와 동일한 매개변수 타입과 개수를 갖는 생성자를 찾아 실행
❗️없으면 컴파일 오류 발생

profile
어쩌다보니 tmi뿐인 블로그😎

0개의 댓글