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