[TIL] 함수형 인터페이스 FunctionalInterface, Logger
in TIL on Til Last modified at:
2025-03-05 TIL
📝 TIL (Today I Learned)
🔗 원본 이슈: #21
📅 작성일: 2025-03-05
🔄 최종 수정: 2025년 04월 08일
🍀 새롭게 배운 것
- 함수형 인터페이스
@FunctionalInterface
@FunctionalInterface
는 Java에서 함수형 인터페이스를 명시적으로 선언할 때 사용하는 어노테이션입니다.
1. 함수형 인터페이스란?
- 추상 메서드를 단 하나만 가지는 인터페이스입니다.
- 람다 표현식과 메서드 레퍼런스를 사용할 수 있게 해줍니다.
@FunctionalInterface
어노테이션을 사용하면 컴파일러가 함수형 인터페이스 규칙을 강제합니다.- 함수형 인터페이스인지 검증해줍니다.
- 만약 두 개 이상의 추상 메서드를 선언하면 컴파일 오류가 발생합니다.
@FunctionalInterface
interface InvalidInterface {
void method1();
void method2(); // 오류 발생: 함수형 인터페이스는 추상 메서드가 하나만 있어야 함!
}
java: Unexpected @FunctionalInterface annotation
대표적인 함수형 인터페이스 예제 (Java 기본 제공)
Runnable
(메서드:void run()
)Callable<T>
(메서드:T call()
)Supplier<T>
(메서드:T get()
)Consumer<T>
(메서드:void accept(T t)
)Function<T, R>
(메서드:R apply(T t)
)Predicate<T>
(메서드:boolean test(T t)
)
Function<String, Integer> lengthFunction = str -> str.length();
System.out.println(lengthFunction.apply("Hello")); // 5
@FunctionalInterface
를 꼭 써야 하나요?
아니요. 어노테이션 없이도 함수형 인터페이스는 작동합니다. 하지만 @FunctionalInterface
를 사용하면 가독성이 좋아지고, 실수를 방지할 수 있습니다.
즉, “이 인터페이스는 함수형 인터페이스다”라고 명시적으로 선언하는 용도입니다.
✅ 사용하면 좋은 경우:
- 팀원에게 코드의 의도를 명확히 전달하고 싶을 때
- 실수로 여러 개의 추상 메서드를 선언하는 것을 방지하고 싶을 때
결론
@FunctionalInterface
는 단 하나의 추상 메서드를 가지는 함수형 인터페이스를 선언할 때 사용하며, 컴파일러가 이를 검증해 주는 역할을 합니다.
람다와 함께 사용하면 코드를 더 간결하게 작성할 수 있습니다! 🚀
- Logger가 System.out.println보다 좋은 점
- Logger는 println보다 훨씬 강력하고 유용한 기능을 제공
Logger vs println 비교
구분 | Logger | System.out.println |
---|---|---|
출력 방식 | 로그 레벨별로 출력 가능 | 단순한 콘솔 출력 |
출력 조절 | 필요에 따라 로그 출력 On/Off 가능 | 항상 출력됨 |
로그 파일 저장 | 가능 (파일로 기록 가능) | 직접 파일에 저장하려면 추가 코드 필요 |
출력 포맷 | 형식 지정 가능 (날짜, 로그 레벨, 클래스명 포함 가능) | 단순 문자열 출력 |
병렬 처리 | 멀티스레드 환경에서 안전하게 사용 가능 | 동기화가 필요할 수 있음 |
성능 | 대량의 로그를 효율적으로 처리 (필요하지 않은 로그는 출력하지 않고, 비동기적으로 처리할 수도 있어 성능이 우수) | 성능 최적화 없음 |
예외 처리 | log.log(Level.SEVERE, "Error", exception) 처럼 예외 정보를 함께 로깅 가능 | 예외 출력은 e.printStackTrace() 로 별도로 해야 함 |
언제 Logger를 써야 할까?
상황 | Logger 사용 여부 |
---|---|
간단한 테스트 출력 | ❌ System.out.println 사용 |
디버깅 / 오류 분석 | ✅ Logger 사용 |
운영 환경 로그 기록 | ✅ Logger 필수 |
멀티스레드 프로그램 | ✅ Logger 사용 |
로그 파일 저장 필요 | ✅ Logger 사용 |