📖
Kyu9's Repo
  • Library of mameil
  • 이슈 경험
    • 20230220_트랜잭션
    • 20230306_캐싱이슈
    • 20230722_테스트코드에서 @Transactional
    • 20230807_deadlock
  • 인턴 스터디
    • Gradle
    • Stream, Optional, 람다식
    • JVM의 메모리 구조, Garbage Collector
    • RESTful API
    • Microservice Architecture
    • HTTP
    • 웹서버란 무엇인가
    • Git Branch
    • TDD
    • Redis을 이용한 캐시
    • Thymeleaf
    • 정리가 필요한 자료들
    • SpringBoot Management
    • 테스크 코드 분할
  • 동아리 스터디
    • 기본 SQL 공부
      • SQL의 기본 개념
      • SELECT 문장을 이용하여 원하는 데이터 출력하기
        • 집합 연산자 사용하기
        • where절에 비교 연산자를 사용해보기
        • SELECT_EX
        • 산술 연산자 사용해보기
      • 단일 행 함수 사용
        • lower/upper 함수 사용하기
        • length함수 사용하기
        • concat함수 사용
        • substr/mid/substring 함수 사용
        • instr함수 사용하기
        • lpad/rpad 함수 사용하기
        • trim/ltrim/rtrim 함수 사용하기
        • replace 함수 사용하기
        • round 함수 사용하기
        • truncate 함수 사용하기
        • mod함수 사용하기
        • ceil함수 사용하기
        • floor함수 사용하기
        • power 함수 사용하기
        • Date fn(날짜 함수)
        • 형 변환 함수
        • 일반함수란
    • a-ha 실습
    • 혼자서 만들어본 게시판
    • AWS 강의
  • 학교 나머지 공부 자료
    • 웹프레임워크(Spring)
      • Spring이란?
      • Webframework1-1
      • Webframework1-2
      • SpringBoot의 특징
      • SpringBoot 생성 방법
      • Spring Data JPA
      • SpringBoot Security
      • SpringBoot HATEOAS
  • 공부 자료들
  • WS 온라인 자바 스터디
    • Week1(JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가.)
    • Week2(자바 데이터 타입, 변수 그리고 배열)
    • Week3(연산자)
    • Week4(제어문)
    • Week5(클래스)
    • Week6(상속)
    • Week7(패키지)
    • Week8(인터페이스)
    • Week9(예외처리)
    • Week10(멀티쓰레드 프로그래밍)
    • Week11(Enum)
    • Week12(Annotation)
    • Week13(I/O)
    • Week14(Generic)
    • Week15(람다식)
  • 백준문제
    • 입출력과 사칙연산
      • We love kriii(10718)
      • 고양이(10171)
      • 개(10172)
      • A+B(1000)
      • A-B(1001)
      • AxB(10998)
      • A/B(1008)
      • 사칙연산(10869)
      • 나머지(10430)
      • 곱셈(2588)
    • for문
      • 구구단(2739)
      • A+B - 3(10950)
      • 합(8393)
      • 빠른 A+B(15552)
      • N 찍기(2741)
      • 기찍 N(2742)
      • A+B - 7(11021)
      • A+B - 8(11022)
      • 별 찍기 - 1(2438)
      • 별 찍기 - 2(2439)
      • X보다 작은 수(10871)
    • if문
      • 두 수 비교하기(1330)
      • 시험 성적(9498)
      • 윤년(2753)
      • 사분면 고르기(14681)
      • 알람 시계(2884)
      • 오븐 시계(2525)
      • 주사위 세개(2480)
      • 영수증(25304)
    • While문
      • A+B - 5(10952)
      • A+B - 4(10951)
      • 더하기 사이클(1110)
    • 1차원 배열
      • 최소, 최대(10818)
      • 최댓값(2562)
      • 숫자의 개수(2577)
      • 나머지(3052)
      • 평균(1546)
      • OX퀴즈(8958)
      • 평균은 넘겠지(4344)
    • 함수
      • 정수N개의 합(15596)
      • 셀프 넘버(4673)
      • 한수(1065)
    • 문자열
      • 아스키코드(11654)
      • 숫자의 합(11720)
      • 알파벳 찾기(10809)
      • 문자열 반복(2675)
      • 단어 공부(1157)
      • 단어의 개수(1152)
      • 상수(2908)
      • 다이얼(5622)
      • 크로아티아 알파벳(2941)
      • 그룹 단어 체커(1316)
    • 기본수학-1
      • 손익분기점(1712)
      • 벌집(2292)
      • 분수찾기(1193)
      • 달팽이는 올라가고 싶다(2869)
      • ACM 호텔(10250)
      • 부녀회장이 될테야(2775)
      • 설탕 배달(2839)
      • 큰 수 A+B(10757)
      • Fly me to the Alpha Centauri(1011)
    • 기본수학-2
      • 소수 찾기(1978)
      • 소수(2581)
      • 소인수분해(11653)
      • 소수 구하기(1929)
      • 베르트와 공존(4948)
    • 재귀
      • 하노이 탑 이동 순서(11729)
      • 피보나치 수 5(10870)
      • 별 찍기(2447)
    • 브루트 포스
      • 블랙잭(2798)
      • 분해합(2231)
      • 덩치(7568)
      • 체스판 다시 칠하기(1018)
      • 영화감독 슘(1436)
    • 집합과 맵
      • 숫자 카드(10815)
      • 문자열 집합(14425)
      • 숫자 카드2(10816)
      • 듣보잡(1764)
      • 대칭 차집합(1269)
      • 서로 다른 부분 문자열 갯수(11478)
    • 정렬
      • 수 정렬하기(2750)
      • 수 정렬하기 2(2751)
      • 수 정렬하기 3(10989)
      • 통계학(2108)
      • 소트인사이드(1427)
      • 좌표 정렬하기(11650)
      • 좌표 정렬하기2(11651)
      • 단어 정렬(1181)
      • 나이순 정렬(10814)
      • 커트라인(25305)
      • 좌표압축(18870)
    • 백트래킹
      • N과 M - 1(15649)
      • N과 M - 2(15650)
      • N과 M - 3(15651)
      • N과 M - 4(15652)
      • N-Queen(9663)
      • 스도쿠(2580)
      • 연산자 끼워넣기(14888)
      • 스타트와 링크(14889)
    • 이분 탐색
      • 수 찾기(1920)
    • 동적계획법
      • 피보나치 함수(1003)
      • 신나는 함수 실행(9184)
      • 01타일(1904)
      • 파도반 수열(9461)
      • RGB거리(1149)
      • 정수 삼각형(1932)
      • 계단 오르기(2579)
      • 1로 만들기(1463)
      • 쉬운 계단 수(10844)
      • 포도주 시식(2156)
      • 가장 긴 증가하는 부분 수열(11053)
      • 가장 긴 바이토닉 부분 수열(11504)
      • 전깃줄(2565)
      • LCS(9251)
      • 연속합(1912)
      • 평범한 배낭(12865)
      • 더하기(9095)
    • DFS와 BFS
      • 미로탐색(2178)
      • 바이러스(2606)
      • DFS와 BFS(1260)
      • 단지번호붙이기(2667)
      • 전쟁 - 전투(1303)
      • 숨바꼭질(1697)
      • 데스 나이트(16948)
      • 나이트의 이동(7562)
      • 녹색 옷 입은 애가 젤다지?(4485)
      • 음식물 피하기(1743)
      • A->B (16953)
      • 숨바꼭질 3(13549)
      • 숨바꼭질 2(12851)
    • 구현
      • 치즈(2636)
  • 프로그래머스 문제
    • SQL
      • Animal Table - Oracle
      • Animal Table - MySQL
      • Animal Table2 - Oracle
      • Animal Table 3,4 - Oracle
    • Lv1
      • 두 개 뽑아서 더하기
      • 제일 작은 수 제거하기
      • 문자열 내 p와 y의 개수
      • 예산
      • 자릿수 더하기
      • 두 정수 사이의 합
      • 같은 숫자는 싫어
      • 가운데 글자 가져오기
      • 수박수박수박수박수박수?
      • 나누어 떨어지는 숫자 배열
      • 2016년
      • 폰캣몬
      • 서울에서 김서방 찾기
      • 문자열을 정수로 바꾸기
      • 소수 만들기
      • 문자열 다루기 기본
      • 소수 찾기(에라토스테네스의 체)
      • 숫자 문자열과 영단어
      • 이상한 문자 만들기
      • 없는 숫자 더하기
      • 문자열 내림차순으로 배치하기
      • 문자열 내 마음대로 정렬하기
      • 약수의 개수와 덧셈
      • 콜라츠 추측
      • 자연수 뒤집어 배열로 만들기
      • 신규 아이디 추천
      • 비밀지도
      • 크레인 인형뽑기 게임
      • 실패율
      • 로또의 최고 순위와 최저 순위
      • 키패드 누르기
      • 정수 내림차순으로 배치하기
    • Lv2
      • 행렬의 곱셈
      • 영어 끝말잇기
      • 영어 끝말잇기
      • N개의 최소 공배수
      • 피보나치 수
      • 124 나라의 숫자
      • 짝지어 제거하기
      • 프린터
      • 다음 큰 숫자
      • 최댓값과 최솟값
      • 최소값 만들기
      • 숫자의 표현
      • JadenCase 문자열 만들기
      • 오픈채팅방
      • 영어 끝말잇기
      • 멀쩡한 사각형
      • 올바른 괄호
      • 위장
      • 기능개발
      • 더 맵게
      • 스킬트리
    • 완전탐색
      • 모의고사(Lv1)
      • 카펫(Lv2)
      • 소수 찾기(Lv2)
    • 정렬(Sorting)
      • K번째 수(Lv1)
      • 가장 큰 수(Lv2)
      • H-Index(Lv2)
    • 해시(Hash)
      • 완주하지 못한 선수(Lv1)
      • 전화번호 목록(Lv2)
    • 탐욕법(Greedy)
      • 체육복(Lv1)
      • 큰 수 만들기(Lv2)
      • 구명보트(Lv2)
    • 동적계획법(DP)
      • 정수 삼각형(Lv3)
    • 깊이/너비 우선 탐색(DFS/BFS)
      • 타겟 넘버(Lv2)
      • 네트워크(Lv3)
      • 단어 변환(Lv3)
  • 스프링부트 책
    • Day 1
    • Day 2
    • Day 3
    • Day 4
    • Day 5
    • Day 6
    • Day 7
    • Day 8
    • Day 9
    • Day 10
    • Day 11
    • Day 12
    • Day 13
    • Day 14
    • Day 15
    • Day 16
    • Day 17
  • JPA 책
    • 프로젝트 세팅 및 기본설정
    • 영속성 관리 개념
    • 엔티티 매핑
      • 실습 예제
    • 연관관계 매핑 기초
      • 실습 예제
    • 다양한 연관관계 매핑
      • 다대일, 일대다 관계
      • 일대일, 다대다 관계
      • 실습 예제
    • 고급 매핑
      • 상속 관계 매핑
      • @MappedSuperclass
      • 복합 키와 식별 관계 매핑
      • 조인 테이블
    • 프록시와 연관관계 관리
      • 프록시
      • 즉시 로딩과 지연 로딩
      • 영속성 전이, 고아 객체
    • 값 타입
      • 임베디드 타입
      • 값 타입과 불변 객체
      • 값 타입의 비교, 컬렉션
    • 객체지향 쿼리 언어
      • JPQL part1
      • JPQL part2
      • JPQL part3
      • QueryDSL
      • NativeSQL
      • 객체지향 쿼리 심화
    • 응용 애플리케이션
      • 엔티티 설정
    • 스프링 데이터 JPA
      • 공통 인터페이스
  • Kotlin In Action
    • 코틀린의 특징
    • 코틀린의 기초
    • 함수 정의와 호출
    • 클래스, 객체, 인터페이스
    • 람다 방식
    • 코틀린 타입 시스템
    • 연산자 오버로딩과 기타 관례
    • 고차함수
    • 제네릭스
    • 애노테이션과 리플렉션
    • 코루틴
  • Oracle
    • Oracle 기본
    • Oracle 심화
  • SQL_연습
    • Revising the Select Query
    • Basic Select
    • Advanced Select
    • Basic Select 2
  • SQL 첫걸음(책)
    • Day 1
    • Day 2
    • Day 3
    • Day 4
    • Day 5
    • Day 6
    • Day 7
    • Day 8
    • Day 9
    • Day 10
    • Day 11
    • Day 12
    • Day 13
    • Day 14
    • Day 15
    • Day 16
    • Day 17
    • Day 18
    • Day 19
    • Day 20
    • Day 21
    • Day 22
    • Day 23
    • Day 24
    • Day 25
    • Day 26
    • Day 27
    • Day 28
    • Day 29
    • Day 30
  • 더 자바 코드를 조작하는 다양한 방법
    • JVM 이해하기
    • 바이트코드 조작
    • 리플렉션
    • 다이나믹 프록시
    • 애노테이션 프로세서
  • 더 자바, 애플리케이션을 테스트하는 다양한 방법
    • JUnit5
    • Mockito
    • 도커와 테스트
    • 성능, 운영이슈, 아키텍처 테스트
  • 이펙티브 자바
    • item1 - 생성자 대신 정적 팩토리 메소드를 고려하라
    • item2 - 생성자에 매개변수가 많다면 빌더를 고려하라
    • item3 - 생성자나 열거타입으로 싱글턴임을 보증하라
    • item4 - 인스턴스화를 막기 위해선 private 생성자를 사용하라
    • item5 - 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
    • item6 - 불필요한 객체 생성을 피하라
    • item7 - 다 쓴 객체 참조를 해제하라
    • item8 - finalizer와 cleaner 사용을 피하라
    • item9 - try-finally 보다 try-with-resources을 사용하라
    • item10 - equals는 일반 규약을 지켜 재정의하라
    • item11 - equals을 재정의하려면 hashCode도 재정의하라
    • item12 - toString을 항상 재정의하라
    • item13 - clone 재정의는 주의해서 진행하라
    • item14 - Comparable을 구현할지 고민하라
  • Elastic Search
    • 강의 Summary
    • Elastic Summary 개념 정리
    • Elastic Summary 적용 정리
  • 토비의 스프링 강의
    • 스프링부트 살펴보기
    • 독립 실행형 서블릿 애플리케이션
  • k8s
    • minikube 설치
    • jenkins 추가
  • Article
    • Choosing the Right MessageBroker
Powered by GitBook
On this page
  • Functional Programming(함수형 프로그래밍)?
  • 람다식?
  • Functional Interface(함수형 인터페이스)?
  • Stream? Optional?
  • Stream?
  • Optional?

Was this helpful?

  1. 인턴 스터디

Stream, Optional, 람다식

java8에서부터 제공해주는 유용한 기능들

Functional Programming(함수형 프로그래밍)?

대입문을 사용하지 않은 프로그래밍

부수효과가 없는 순수 함수를 1급 객체로 간주하여 인자로 넘기거나 반환 값으로 사용할 수 있다.

  • 부수효과 : 변수의 값이 변경 or 객체의 필드 값을 변경함 or 예외나 오류가 발생해서 실행이 중단 or 콘솔 또는 파일 IO가 발생

  • 1급 객체

    • 변수나 데이터 구조 안에 담을 수 있다.

    • 인자로 전달할 수 있다.

    • 반환 값으로 사용할 수 있다.

    • 할당에 이용된 이름과 무관하게 고유한 구별이 가능하다.

람다식?

함수를 하나의 식으로 표현한 것이다. 메소드의 이름을 따로 지정해서 사용하지 않기 때문에 익명 함수의 한 종류이다.

익명함수들은 모두 1급 객체이고 1급 객체는 변수처럼 사용 가능하다는 것이 특징이다.

람다 방식은 메소드 명이 필요없으며, 괄호와 화살표를 이용해서 함수를 선언한다.

람다 방식을 사용하면 불필요한 코드를 줄일 수 있고, 가독성을 높이는 것이 가능하다.

코드를 간결하게 만들어서 가독성이 높고 병렬 프로그래밍이 용이하다.

하지만, 재사용이 불가능하고, 디버깅이 어렵고 재귀로 만들 경우에는 부적합하다.

Functional Interface(함수형 인터페이스)?

람다식 와 같은 순수 함수와 일반 함수를 구분하기 위해서 함수형 인터페이스가 등장

  • 순수 함수 : 동일한 입력을 받았을 때, 항상 동일한 출력을 해야 하는 함수

functional interface란 함수를 1급 객체처럼 다룰 수 있게 해주는 애노테이션(@FunctionalInterface)으로, 인터페이스에 선언해서 단 하나의 추상 메소드만을 갖도록 제한한다.

이미 정의되어있는 함수형 인터페이스

  • Supplier<T> : 매개변수 없이 반환 값만을 갖는 함수형 인터페이스, T get()을 추상 메소드로 가지고 있다.

    • input값이 없기 떄문에 내부에서 랜덤함수를 사용하는게 아니라면 항상 같은 값을 리턴해주는 특징!!!

  • Consumer<T> : 객체 T를 매개변수로 받아서 사용하고, 반환 값은 없는 함수형 인터페이스이다.

    • 인자를 받아서 소모한다는 의미

    • 추상 메소드로 accept와 andThen을 가지고 있다.

    • void accept(T t)를 호출하면서 인자를 전달하게 되면, 구현된 내용이 수행된다.

    • andThen이라는 함수를 사용해서 다음 Consumer를 연쇄적으로 사용 가능 → 원하는 순서대로 andThen을 붙혀주고, accept에 계산하려는 값 넣어줌!

  • Function<T, R> : 객체 T를 매개변수로 받아서 처리하고 R로 반환하는 함수형 인터페이스이다.

    • 전형적인 함수를 지원한다 = 하나의 인자와 리턴타입을 가지고 있다.(제네릭으로 지정가능)

    • R apply(T t)를 추상 메소드로 가지고 있다. Consumer와 동일하게 andThen 이라는 함수를 지원하고, compose이라는 함수를 사용해서 첫 번째 함수 실행 이전에 먼저 함수를 실행할 수 있다(andThen과 반대), 그리고 identity 라는 static 함수를 사용해서 자기 자신을 반환할 수 있다.

    • compose를 사용하게 되면 인자값으로 준 함수를 먼저 수행하고, 그리고 처음의 값을 먼저 수행한다.

  • Predicate<T> : 객체 T를 매개변수로 받아 처리한 후, Boolean을 반환한다.

    • Function과 비슷하지만 리턴 타입이 Boolean으로 고정

    • test()함수를 사용해서 안에 인자 값에 대한 함수 계산이 true인지 false인지 확인

    • and()함수를 통해서 연결해서 사용 - 논리연산의 and와 같음

    • or()함수를 통해서 연결해서 사용 - 논리연산의 or와 같음

    • isEqual()

<? super 클래스>

매개변수의 자료형을 특정 클래스와 그 클래스의 상위 클래스로만 제한함

<?> 은 어떤 자료형도 매개변수로 받을 수 있는 와일드카드이다.

메소드 참조 : 함수형 인터페이스를 람다식이 아닌 일반 메소드를 참조시켜서 선언하는 방법

3가지 조건을 만족해야한다.

  1. 함수형 인터페이스의 매개변수 타입 = 메소드의 매개변수 타입

  2. 함수형 인터페이스의 매개변수 개수 = 메소드의 매개변수 개수

  3. 함수형 인터페이스의 반환형 = 메소드의 반환형

이렇게 참조 가능한 메소드는 클래스이름::메소드이름 이렇게 사용할 수 있다.

Stream? Optional?

why? - 기존에 길었던 코드들을 짧게 사용할 수 있도록 보완하고자 나온 기능들이다.

Stream?

Stream API는 데이터를 추상화해서 다루기 때문에 다양한 방식으로 데이터를 읽고 쓰기 위한 공통된 방법을 제공한다.

그렇기 때문에 Stream API를 이용하면 배열이나 Collection뿐만 아니라 파일에 저장된 데이터도 모두 같은 방법으로 다룰 수 있게 된다 - Collection에서 Stream기능을 지원!

데이터를 모아서 원하는 방식으로 처리할 때 사용한다. - DB관련해서 사용할 때 많이 사용된다.

Stream은 데이터를 읽어들여서 처리만 할 뿐, 소스를 변경하지 않는 것이 장점이다.

Stream은 작업을 내부 반복하기 때문에 간결하게 할 수 있다.

Stream API은 이러한 데이터 소스에서 사용할 수 있다.

  1. 컬렉션

  2. 배열

  3. 가변 매개변수

  4. 지정된 범위의 연속된 정수

  5. 특정 타입의 난수들

  6. 람다 표현식

  7. 파일

  8. 빈 스트림

Stream 의 기본 타입

  • IntStream

  • LongStream

  • DoubleStream

Stream 중계 연산과 그 메소드

  • filter : 내부에서 메소드를 사용해서 원하는 조건만 찾는 메소드

  • map : 모든 값들에 대해서 메소드를 적용시켜서 결과값으로 바꿔주는 메소드

    • mapTo자료형 : 원하는 자료형으로 변경해주는 메소드

  • sorted : comparator를 사용해서 스트림을 정렬해주는 메소드

  • forEach : list가 들어왔을때 list의 모든 값들에 대해서 원하는 작업을 해주는 메소드

  • ifPresent : 값이 만약 존재한다면 원하는 작업을 해주는 메소드

List<OnlineClass> springClasses = new ArrayList<>();
        springClasses.add(new OnlineClass(1, "spring boot", true));
        springClasses.add(new OnlineClass(2, "spring data jpa", true));
        springClasses.add(new OnlineClass(3, "spring mvc", false));
        springClasses.add(new OnlineClass(4, "spring core", false));
        springClasses.add(new OnlineClass(5, "rest api development", false));

        System.out.println("==============================================");
        System.out.println("spring으로 시작하는 수업 ");
        springClasses.stream()
                .filter(c -> c.getTitle().startsWith("spring"))
                    .forEach(onlineClass -> System.out.println(onlineClass.getTitle()));
        System.out.println("==============================================");

        System.out.println("==============================================");
        System.out.println("close 되지 않은 수업 ");
        springClasses.stream()
                        .filter(Predicate.not(OnlineClass::isClosed))
                                .forEach(onlineClass -> System.out.println(onlineClass.getTitle()));
        System.out.println("==============================================");

        System.out.println("==============================================");
        System.out.println("수업 이름만 모아서 스트림 만들기 ");
        springClasses.stream()
                        .map(OnlineClass::getTitle)
                                .forEach(System.out::println);
        System.out.println("==============================================");


        List<OnlineClass> javaClasses = new ArrayList<>();
        javaClasses.add(new OnlineClass(6, "The Java test", true));
        javaClasses.add(new OnlineClass(7, "The Java, Code manipulation", true));
        javaClasses.add(new OnlineClass(6, "The Java, 8 to 11", false));

        List<List<OnlineClass>> keesunEvents = new ArrayList<>();
        keesunEvents.add(springClasses);
        keesunEvents.add(javaClasses);

        System.out.println("==============================================");
        System.out.println("두 수업 목록에 들어있는 모든 수업 아이디 출력");
        keesunEvents.stream()
                .flatMap(Collection::stream)
                        .forEach(oc -> System.out.println(oc.getId()));
        System.out.println("==============================================");

        System.out.println("==============================================");
        System.out.println("10부터 1씩 증가하는 무제한 스트림 중에서 앞에 10개 빼고 최대 10개 까지만");
        Stream.iterate(10, i -> i+1)
                        .skip(10)
                                .limit(10)
                                        .forEach(System.out::println);
        System.out.println("==============================================");

        System.out.println("==============================================");
        System.out.println("자바 수업 중에 Test가 들어있는 수업이 있는지 확인 ");
        System.out.println(javaClasses.stream().anyMatch(oc -> oc.getTitle().contains("Test")));
        System.out.println("==============================================");

        System.out.println("==============================================");
        System.out.println("스프링 수업 중에 제목에 spring이 들어간 제목만 모아서 List로 만들기 ");
        List<String> list = springClasses.stream().filter(oc -> oc.getTitle().contains("spring"))
                        .map(OnlineClass::getTitle)
                                .collect(Collectors.toList());
        list.forEach(System.out::println);
        System.out.println("==============================================");

Optional?

Optional 객체는 null이 아닌 값을 포함하거나 포함하지 않을 수 있는 컨테이너 객체이다.

Optional 객체는 자체적으로 null을 사용하면 오류가 발생할 가능성이 있는 메서드 반환 유형으로 사용하기 위한 것이다.

Optional 유형인 변수는 자체적으로 null이면 안된다! = 예측하지 못하는 null을 예방(nullsafe!)

Optional 객체 생성

  • Optional.empty() : 빈 Optional 객체 생성

  • Optional.of(value) : value값이 null이 아닌 경우에 사용

  • Optional.ofNullable(value) : value값이 null인지 아닌지 확실하지 않은 경우에 사용

Optional이 담고 있는 객체에 접근 및 사용법

  • IfPresent(함수) : Optional 객체가 non-null인 경우에 인자로 넘긴 함수를 실행 / null이면 함수 실행X

  • orElse(값) : Optional 객체가 null인 경우에 인자로 넣어준 값을 리턴

  • orElseGet(함수) : orElse와 같은 기능이지만 인자로 넣어준 함수가 리턴하는 것을 리턴 / null인 경우에만!!!!! 함수 실행

  • orElseThrow : null인 경우에 기본 값을 리턴하지 않고 예외를 리턴할 수 있다.

PreviousGradleNextJVM의 메모리 구조, Garbage Collector

Last updated 3 years ago

Was this helpful?

참고 :

https://mangkyu.tistory.com/113