TIL 8일차 모던 자바(람다, 스트림)

Seo_Thousand_Won·2024년 4월 29일

TIL

목록 보기
10/16

함수형 프로그래밍

1. 객체 지향 프로그래밍의 핵심 아이디어

  1. 프로그램을 객체들의 협력과 상호작용으로 구현
  2. 객체들을 정의하기 위해서 추상화 개념을 사용
  3. 재사용성이 높음
  4. 유지 보수 및 확장하기 용이함
  5. 신뢰성 있는 코드 작성으로 쉬움

2. 함수형 프로그래밍의 핵심 아이디어

  1. 수학의 함수와 같이 특정 데이터에 의존하지 않고, 관련 없는 데이터를 변경하지 않으며, 결과값이 오직 입력값에만 영향을 받는 함수를 순수 함수라고 한다.
  2. 순수한 함수의 모음으로 구현
  3. 검증 및 성능 최적화가 쉬움
  4. 동시성 문제 해결
ex)
// 수학의 함수
f(x, y) = x + 2xy

// 순수한 메서드
// input에 따라 output은 항상 일정하죠!
public int someMethod(int x, int y) {
	return x + 2y;
}

class notFunc {
	private int y = 0;
	private int result;

	// 순수 메서드가 아닌 메서드
	// 메서드 안에서 제어할 수 없는 y라는 값에 의해 output이 바뀔 수 있죠
	public int anotherMethod(int x) {
		return x + this.y * 2;
	}

	// 순수 메서드가 아닌 메서드 2
	// 메서드 내에서 this.result 값을 변경하고 반환하기 때문에
	// 순수 메서드라고 보기는 어렵습니다!
	public int otherMethod(int x, int y) {
		int result = x + 2 * y;
		this.result = result;
		return result;
	}
}

3. Java 8에서 새로운 추가된 개념들

  1. 함수형 프로그래밍 1 : 함수를 일급 값으로
  • 지금까지 자바에서 "조작할 수 있는"값이란
    a. 기본값(기본타입)
    b. 객체
  • 위의 a, b의 특징
    a. 함수에 인자로 넘길 수 있다.
    b. 함수의 결과로 반환할 수 있다.
    c. 값을 수정할 수 있다.
    d. 값을 변수에 대입할 수 있다.
  • 이러한 모든 연산을 지원하고 있고, 지원하는 "값"들을 일급 객체라고 한다.
  1. 함수형 프로그래밍 2 : 람다 - 익명함수
    • 람다는 익명 함수를 지칭한다.
      - 익명 함수 : 이름이 없는 함수, 일급 객체로 취급
    • 함수를 값으로 사용할 수도 있으며 파라미터에 전달
    • 변수에 대입 하기와 같은 연산 가능
  2. 스트림
    • Stream은 데이터 처리 연산을 지원하도록 소스에 추출된 연속된 요소
    • 컬렉션이 데이터를 저장하거나 접근하는 데 초점을 맞춘 인터페이스
    • Stream은 데이터를 처리하는 데 초점을 맞춘 인터페이스

0개의 댓글