[인프런 워밍업 클럽_0기] BE 세 번째 과제 (진도표 3일차)

2024. 2. 19. 21:53·공부/인프런 워밍업 클럽_BE
반응형

배너를 클릭하면 해당 사이트로 이동

 

강의 출처

 

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인

Java와 Spring Boot, JPA, MySQL, AWS를 이용해 서버를 개발하고 배포합니다. 웹 애플리케이션을 개발하며 서버 개발에 필요한 배경지식과 이론, 다양한 기술들을 모두 학습할 뿐 아니라, 다양한 옵션들

www.inflearn.com

 

 

진도표 3일차와 연결됩니다
우리는 JdbcTemplate을 사용하는 과정에서 익명 클래스와 람다식이라는 자바 문법을 사용했습니다. 익명 클래스는 자바의 초창기부터 있던 기능이고, 람다식은 자바 8에서 등장한 기능입니다. 다음 키워드를 사용해 몇 가지 블로그 글을 찾아보세요! 아래 질문을 생각하며 공부해보면 좋습니다! 😊
 
[키워드]
익명 클래스 / 람다 / 함수형 프로그래밍 / @FunctionalInterface / 스트림 API / 메소드 레퍼런스
 
[질문]
자바의 람다식은 왜 등장했을까?람다식과 익명 클래스는 어떤 관계가 있을까? - 람다식의 문법은 어떻게 될까?

 

키워드

익명 클래스

  • 클래스 선언과 객체의 생성을 동시에 하기 때문에 단 한 번만 사용 가능 → 일시적으로 한 번만 사용되고 버려지는 객체  → 재사용 불가
  • 이름이 없기 때문에 생성자도 가질 필요가 없다.
  • 단 하나의 클래스를 상속받거나 단 하나의 인터페이스만을 구현할 수 있음.
  • 클래스 파일명 : '외부 클래스명$숫자.class' 형식
  • 오버라이딩한 메서드 사용만 가능하고 새로 정의한 메서드는 외부에서 사용이 불가능하다.
  • 사용 이유
    • 프로그램 내에서 일시적으로(단발성으로) 한 번만 사용되어야 하는 객체일 경우
    • 재사용성이 없고, 확장성을 활용하는 것이 유지보수에서 더 불리할 때
  • 선언 위치
    • 클래스 필드로 이동
    • 지역 변수로서 이용
    • 메서드 아규먼트로 이용

 

반응형

 

람다

  • 메서드를 하나의 식(expression)으로 표현
  • 함수를 간략하면서도 명확한 식으로 표현할 수 있게 함
  • 메서드의 이름과 반환값이 없어짐 → 익명 함수(anonymous function)라고도 함
  • 메서드를 변수처럼 다루는 것이 가능함
  • 스트림 API의 매개변수로 전달 가능
  • 람다식 내에서 사용되는 지역변수는 final이 붙지 않아도 상수로 간주
  • 형식
// 기존 메서드
반환타입 메서드이름 (매개변수 선언) {
	문장들
}


// 람다식
(매개변수 선언) -> {
	문장들
}
  • 반환값이 있는 메서드의 경우 return문 대신 '식(expression)'으로 대신할 수 있음.
  • 식의 연산결과가 자동적으로 반환값이 됨. 문장이 아닌 '식'이므로 끝에 ';' 붙이지 않음.
  • 매개변수는 타입 추론으로인해 타입 생략이 가능하다. 단, 두 매개변수 중 어느 하나의 타입만 생략하는 것은 허용되지 않음
  • 매개변수가 하나만 있을 경우 괄호 생략 가능. 단, 매개변수의 타입이 있으면 생략 불가능함
  • 괄호{} 안의 문장이 하나일 때는 괄호{}를 생략할 수 있음.
  • 단점
    • 람다를 사용하면서 만든 무명함수는 재사용 불가
    • 디버깅 어려움
    • 람다를 남발하면 비슷한 함수가 중복 생성되어 코드가 지저분해짐
    • 재귀로 만들 경우에 부적합

 

함수형 프로그래밍 /  @FunctionalInterface

  • 람다식을 다루기 위한 인터페이스
  • 함수형 인터페이스에는 오직 하나의 추상 메서드가 정의되어야 함 → 람다식과 인터페이스의 메서드가 1:!
  • @FunctionalInterface를 붙이면 컴파일러가 함수형 인터페이스를 올바르게 정의했는지 체크해줌
    • @Overrie 어노테이션과 비슷한 역할을 한다.

 

스트림(Streame) API

  • 스트림이란 데이터를 운반하는데 사용되는 연결 통로
  • 스트림은 데이터를 추상화하여 다룸. 
  • 스트림 API의 특징
    • 스프림은 외부 반복을 통해 작업하는 컬렉션과 달리 반복을 통해 작업 수행
    • 스트림은 최소한 재사용이 가능한 컬렉션과 달리 단 한 번만 사용할 수 있음
    • 스트림은 원본 데이터를 변경하지 않음
    • 스트림의 연산은 필터 -> 맵(filter-map) 기반의 API를 사용하여 지연(lazy) 연산을 통해 성능 최적화
    • 스트림은 paralleSTream() 메서드를 통해 손쉬운병렬 처리 지원

 

반응형

 

메서드 레퍼런스

  • 람다 표현식을 더 간단하게 표현하는 방법
  • 람다식과 함께 사용될 수 있다
  • ClassName::MethodName() 형식으로 입력함.
  • 분류
    • Static 메서드 레퍼런스
    • Instance 메서드 레퍼런스
    • Constructor 메서드 레퍼런스

 

 

자바의 람다식은 왜 등장했을까?

이 부분은 OT날 강사님께 짧막한 '자바의 역사' 강의에서 언뜻 들었던 게 생각이 난다. 자바 8에서 엄청난 기능들이 추가되었고, 그 전에 자바는 영 힘을 못 쓰는 언어라 했다. Node.js 등 새로운 프레임워크나 언어가 유행하면서 자바는 서서히 침체되었다고 한다. 그러면서 함수형 프로그래밍이 덩달아 유행했는데 이러한 변화 때문에 자바에 함수형 프로그래밍을 지원하기 위한 람다식이 추가된 것으로 생각된다..!

아래) 모던 자바 인 액션 참고

프로그래밍 언어 생태계에 변화가 생겼다. 바로 빅데이터. 멀티코어 컴퓨터나 컴퓨팅 클러스터를 이용해서 빅데이틀 효과적으로 처리할 필요성이 커졌다. 즉, 병렬 프로세싱을 활용해야 하는 데 자바 8 이전의 언어를 사용하기엔 미숙했다. 즉, 변화하는 환경에 발맞춰 다양한 기능을 가진 자바 8을 출시한 것이다.

 

람다식과 익명 클래스의 관계?

  • 람다 표현식은 익명 함수의 일종이다. 이름은 없만 파라미터 리스트, 바디, 반환 형식을 가지며 예외을 던질 수 있다.
  • 차이점
    • 익명 내부 클래스는 새로운 클래스를 생성하지만, 람다는 새로운 메서드를 새성하여 포함한다.
    • 익명 내부 클래스의 this: 새로 생성된 클래스, 람다의 this : 람다식을 포함하는 클래스

 

람다식 문법

  • 기본
(타입 매개변수, ...) -> {실행문;... }
  • 타입 매개변수 : 오른쪽 블록을 실행하기 위해 필요한 값 제공
  • -> : 매개변수를 이용해서 블록 실행

 

  • a 메서드 출력
a -> (System.out.println(a));

 

  • 하나의 매개변수가 존재할 때는 소괄호 제거 가능 / 중괄호 안에 실행문이 하나만 있다면 중괄호 제거 가능
a -> System.out.println(a);

 

  • 중괄호 안에 return문만 있을 경우 중괄호와 return문을 제거하고 사용하는 것이 일반적임
(x,y) -> x + y;

 

 

와 오늘은 진짜 엄청 피곤해서 별로 집중을 못했다... 직장인이라 체력 관리를 더 잘해야 더 스터디를 활용할 수 있을 거 같다...ㅠ


 

Reference

https://mangkyu.tistory.com/113

https://gimmesome.tistory.com/209

https://steady-coding.tistory.com/304

 

반응형
저작자표시 비영리 변경금지 (새창열림)
'공부/인프런 워밍업 클럽_BE' 카테고리의 다른 글
  • [인프런 워밍업 클럽_0기] BE 다섯 번째 과제 (진도표 5일차)
  • [인프런 워밍업 클럽_0기] BE 네 번째 과제 (진도표 4일차)
  • [인프런 워밍업 클럽_0기] BE 두 번째 과제 (진도표 2일차)
  • [인프런 워밍업 클럽_0기] BE 첫 번째 과제 (진도표 1일차)
데부한
데부한
어차피 할 거면 긍정적으로 하고 싶은 개발자
    반응형
  • 데부한
    동동이개발바닥
    데부한
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • 방통대 컴퓨터과학과 (27)
        • 잡담 (9)
        • 3학년1학기 (17)
      • 프로젝트 및 컨퍼런스 회고 (1)
        • 프로젝트 (4)
        • 한이음 프로젝트 (0)
        • 회고 (3)
      • 공부 (165)
        • Spring (37)
        • JPA (71)
        • 인프런 워밍업 클럽_BE (10)
        • Java (6)
        • React.js (27)
        • 넥사크로 (11)
        • 기타 (3)
      • 알고리즘 (85)
        • 알고리즘 유형 (10)
        • 알고리즘 풀이 (57)
        • SQL 풀이 (18)
      • 에러 해결 (13)
      • 잡담 (7)
        • 국비교육 (2)
        • 구매후기 (5)
        • 진짜 잡담 (0)
  • 블로그 메뉴

    • Github
    • Linkedin
    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코딩테스트
    자바스크립트
    JPA
    운영체제
    MSA
    기출문제
    토이프로젝트
    토비의스프링부트
    전자정부프레임워크
    개발자
    RESTful
    넥사크로
    IT
    Spring
    알고리즘
    방통대
    프론트엔드
    oracle
    에러해결
    SpringBoot를 이용한 RESTful Web Service 개발
    springboot
    프로그래머스
    Java
    react
    스프링부트
    인프런
    QueryDSL
    백준
    SQL
    egov
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
데부한
[인프런 워밍업 클럽_0기] BE 세 번째 과제 (진도표 3일차)
상단으로

티스토리툴바