북극곰의 개발일기

lambda (1) 헬로, 람다 표현식





posted by purplebeen on Sat Feb 03 2018 23:54:13 GMT+0900 (KST) in JAVA


2014년, 자바 8이 공식으로 릴리즈 되었다.

람다 표현식의 사용이 가능해지면서 함수 지향적인 프로그래밍이 가능해졌고,

인터페이스에서 디폴트 메소드 작성이 허용되는 등 많은 부분이 변경되었다.

또한 JVM의 최적화가 상당히 진행되었다.

워낙 큰 변화가 나타나다 보니 자바 8을 기준으로 이전버전의 클래식 자바(Classic JAVA),

이후 버전을 모던 자바(Modern JAVA)로 분류하기도 한다.

오늘부터 람다 표현식을 시작으로 자바 8에서 달라진 새로운 기능들을 학습하고자 한다.

명령형 스타일 (Imperative Style) : 초창기 자바에서 제공하는 방식

개발하려고 하는 작업의 모든 과정을 직접 자바 코드로 작성해야 하며 각 과정이 제대로 실행 되는지 매번 확인해야 한다.

ex) cities라는 컬렉션에서 Chicago라는 도시 이름이 있는지 찾아보는 방법

  1. 명령형
boolean found = false; 
for(String city : cities) { 
	if(city.equals("Chicago")) { 
		found = false; 
		break; 
	} 
} 
System.out.println("Found Chicago?:" + found);

깔끔 하지 않고 너무 자세하게 코딩 되어 있어 로우 레벨 프로그래밍 방식이라 할 수 있다.

  1. 서술형(declarative) 스타일
System.out.println("Found Chicago?:" + cities.contains("Chicago"));

contains() 메소드를 이용하면 우리가 원하는 결과를 바로 얻을 수 있다.

서술형 스타일이 명령형 스타일에 비해서 개선된 점

  • 난잡한 가변 변수(Multable Variable)의 사용을 방지
  • 이터레이션(Iteration)을 단계별로 래핑(Wrapping)
  • 어수선한 코드의 사용을 막아줌
  • 코드에 대한 설명이 명확해짐 : 개발자가 원하는 바를 유지할 수 있음
  • 비지니스 의도는 유지하면서 코드는 명료해짐
  • 오류의 발생 확률을 줄여줌
  • 이해하기 쉽고 유지 보수가 쉬움

람다식의 장점

  • 코드가 어수선하지 않고 더 짜임새 있게 구성됐다.
  • 로우-레벨 오퍼레이션을 사용하지 않는다.
  • 로직을 강화하거나 변경하기에 더 쉽다.
  • 메소드를 사용할 때 이터레이션은 라이브러리에 의해 제어된다.
  • 더 효율적이다. 루프에 대한 레이지 이밸류에이션(lazy evaluation)이 가능하다.
  • 원하는 부분을 병렬화하기 더 쉽다.

함수형 스타일 코드의 큰 이점

  • 변수의 명시적인 변경이나 재할당의 문제를 피할 수 있다.
  • 함수형 버전은 쉽게 병령화가 가능하다.
  • 함수형 버전은 더 간결하다.
  • 함수형 스타일 버전은 직관적이다