java week14, 제네릭


목차



람다 함수는 프로그래밍 언어에서 사용되는 개념으로 익명 함수(Anonymous functions)를 지칭하는 용어이다.

익명함수?

함수에 이름이 없는 함수이다. 익명함수들은 공통으로 일급객체(First Class citizen)라는 특징을 가지고 있다.

이 일급 객체란 일반적으로 다를 객체들에 적용 가능한 연산을 모두 지원하는 개체를 가르킵니다. 함수를 값으로 사용 할 수도 있으며 파라메터로 전달 및 변수에 대입 하기와 같은 연산들이 가능하다.

람다의 장단점

장점

    1. 코드의 간결성
      • 람다를 사용하면 불필요한 반복문의 삭제가 가능하며 복잡한 식을 단순하게 표현할 수 있다.
    1. 지연연산 수행
      • 람다는 지연연상을 수행 함으로써 불필요한 연산을 최소화 할 수 있다.
    1. 병렬처리 가능
      • 멀티쓰레디를 활용하여 병렬처리를 사용 할 수 있다.

단점

  1. 람다식의 호출이 까다롭다.
  2. 람다 stream 사용 시 단순 for문 혹은 while문 사용 시 성능이 떨어진다.
  3. 불필요하게 너무 사용하게 되면 오히려 가독성을 떨어 뜨릴 수 있다.

람다식 사용법


기본

int max(int a, int b){
    return a > b ? a: b;
}
  1. 반환 타입과 메서드 이름을 지운다.
  2. 매개변수 선언부와 몸통 사이를 활살표 (->)로 연결한다.

람다식 1

(int a,int b) - > {return a>b?a:b; }
  1. return문 대신 식으로 대신할 수 있다. 문장이 아닌 식이므로 끝에 세미콜론이 붙지 않는다.
  2. 선언된 매개변수의 타입이 추론 가능한 경우 타입을 생략할 수 있다.

람다식 2

(a, b) -> a > b ? a : b 

단 매개변수의 타입을 생략 시 모든 매개변수의 타입을 생략해야한다.

(int a, b) -> .... //컴파일 에러
  1. 만약 매개변수가 하나라면 괄호()를 생략할 수 있다. (단. 매개변수의 타입을 생략하지 않았다면 괄호()생략이 불가능 하다.)

람다식 3

a -> a * a
  1. 바디부의 문장이 하나일 때는 괄호를 생략할 수 있다. 주의할 점은 이 때 문장의 끝에 세미콜론을 붙이지 않아야 한다.

    기본

    (String name, int i) -> {
     System.out.println(name + "=" + i);
    }
    

    람다식 4

    (name, i) -> System.out.println(name + "=" + i)
    

    함수형 인터페이스


함수형 인터페이스(Functional interface)는 1개의 추상 메소드를 갖고 있는 인터페이스를 말한다.

사용하는 이유?

함수형 인터페이스를 사용하는 이유는 자바의 람다식은 함수형 인터페이스로만 접근이 되기 때문이다.

public interface FunctionalInterface {
     public abstract void doSomething(String text);
}

기본 사용 (익명 클래스의 활용)

FunctionalInterface func = new FunctionalInterface() {
    @Override
    public void doSomething(String text) {
        System.out.println(text);
    }
};
func.doSomething("do something");

람다식 활용

함수형 인터페이스와 람다식으로 익명 클래식을 간단하게 표현

FunctionalInterface func = text -> System.out.println(text);
func.doSomething("do something");

람다식의 타입과 형변환

람다식은 익명 객체다. 익명 객체는 타입이 없다.(컴파일러가 임의로 타입을 지정하긴한다.) 함수형 인터페이스로 람다식을 참조할 수 있는 것을 뿐, 람다식의 타입이 함수형 인터페이스의 타입과 일치하는 것은 아니다. 그래서 대입연산자의 양변의 타입을 일치시키려면 아래와 같이 형변환을 해주어야한다.




© 2019.04. by salmon2

Powered by theorydb