Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Spring
- 프로젝트
- react
- MySQL
- Spring Boot
- 도커
- 배열
- 팀프로젝트
- Kotlin
- Repository
- Java
- 기초설정
- 네티 클라이언트
- 백엔드 설정
- toyproject
- recoil
- 코틀린
- 자료형
- 스프링부트
- 자바
- Security
- controller
- service
- 채팅
- netty
- JWT
- springboot
- 클래스
- 네티 서버
- axios
Archives
- Today
- Total
hyuko
함수형 인터페이스와 람다 본문
728x90
반응형
함수형 인터페이스란(Functional Interface)?
- 추상 메소드를 딱 하나만 들고 있는 인터페이스
- SAM (Single Abstract Method) 인터페이스
- @FunctionalInterface 어노테이션을 가지고 있는 인터페이스
@FunctionalInterface
public interface Run {
void doIt();
static void printName() {
System.out.println("batman");
}
default void printAge(){
System.out.println("20");
}
}
👏🏻 주로 오해 하는 점이 있다.
위에서 말한 추상 메소드를 딱 하나만 들고 있는 인터페이스 라는 것이다.
위의 코드에서는 메소드가 총 세개가 있다. 하지만 나머지 두개인
static 메소드와 default 메소드는 추상 메소드가 아니기 때문에
위의 interface는 추상메소드가 하나 이다!
🐥 @FunctionalInterface 라는 어노테이션을 붙여주게되면
함수형 인터페이스를 정의할 일이 있을 때는 인터페이스에 이 어노테이션을
붙혀주게 되면 더 명시적으로 구분이 되고 규칙을 위반하게 되면 컴파일시에 에러가 난다.
기존의 방법
: 익명 내부 클래스를 만들어서 사용을 했다.
public class Test {
public static void main(String[] args) {
Run run = new Run() {
@Override
public void doIt() {
....
};
}
}
}
Java 8 이후 람다가 나온 다음
: 람다 표현식을 이용해서 간략하게 구현이 가능해졌다.
public class Test{
public static void main(String[] args) {
Run run = () -> System.out.println("Hello World!");
// 예를 들어 여러가지의 행동을 해야 할 경우는
Run run = () -> {
System.out.println("Hello");
System.out.println("World");
};
// 위와 같이 중괄호로 범위를 지정해주면 가능하다.
}
}
람다 표현식
- 함수형 인터페이스의 인스턴스를 만드는 방법으로 사용이 될 수 있다.
- 코드를 간단하게 줄일 수 있다.
- 메소드 매개변수, 리턴타입, 변수로 만들어서 사용도 가능하다.
자바에서의 함수형 프로그래밍
- 함수를 (일급 객체)First class object로 사용할 수 있다.
일급 객체 : 간단하게 말하자면 함수를 일반 객체 처럼 운용이 가능하다라는 것이다.
변수에 할당하거나 매개변수로 준다거나 함수의 매개변수에 인자로 들어갈 수 있다는 것이다.
이렇기 때문에 람다가 return 의 값이 될 수도 있고 변수에 담아서 사용도 가능하다.
- 고차 함수(Higher-Order Function)
- 함수가 함수를 매개변수로 받을 수 있고 함수를 리턴할 수 있다. (일급 객체이기 때문에 가능) - 순수 함수 : 입력받은 값이 동일한 값일 때 결과가 항시 같아야 한다.
- 사이드 이펙트가 없다.(함수 밖에 있는 값을 변경하지는 않는다)- 상태가 없다(함수 밖에 있는 값을 사용하지 않는다)
정리
자바에서는 함수형 프로그래밍을 할 수 있도록 제공되어진 함수형 인터페이스와 람다 표현식이 있고
굳이 함수형 프로그래밍을 안하더라도 사용을 할 수 있지만 이 두가지를 사용하게 되면
순수 함수, 불변성에 대한 고려해야할 것이 있습니다.
Reference
728x90
반응형
'Java > Java 심화편' 카테고리의 다른 글
예외처리 및 익명 클래스 (0) | 2023.04.24 |
---|