가자미의 개발이야기
자바 Optional 클래스 본문
-Optional 클래스를 왜 사용하는가?
--if문을 여러번 써야하는 상황 중 일부를 쉽게 대체할 수 있게 하고자 함.
-기본적 활용법
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import java.util.Optional;
public class OptionalPractice {
public static void main(String[] args) {
Optional<String> os1 = Optional.of(new String("Toy1"));
//of는 null인 인스턴스가 올 수 없음
Optional<String> os2 = Optional.ofNullable(new String("Toy2"));
//ofNullable은 null인 인스턴스가 올 수 있음.
if(os1.isPresent())//존재하는지 확인
System.out.println(os1.get());
if(os2.isPresent())
System.out.println(os2.get());
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import java.util.Optional;
public class OptionalPractice {
public static void main(String[] args) {
Optional<String> os1 = Optional.of(new String("Toy1"));
//of는 null인 인스턴스가 올 수 없음
Optional<String> os2 = Optional.ofNullable(new String("Toy2"));
//ofNullable은 null인 인스턴스가 올 수 있음.
//ifPresent 만약에 존재한다면 어떤 액션을 취하라
os1.ifPresent(s-> System.out.println(s));//람다버전.
os2.ifPresent(System.out::println);//메소드 참조 버전
}
}
|
cs |
-map메소드 활용
--map 메소드는 람다식을 수행하고 나온 결과물을 Optional 클래스에 감싸서 돌려준다.
1
2
3
4
5
6
7
8
9
10
11
12
|
import java.util.Optional;
public class OptionalPractice {
public static void main(String[] args) {
Optional<String> os1 = Optional.of("Optional String");
Optional<String> os2 = os1.map(s->s.toUpperCase());
System.out.println(os2.get());
Optional<String> os3 = os1.map(s->s.replace(' ', '_')).map(s->s.toLowerCase());
System.out.println(os3.get());
}
}
|
cs |
-orElse 메소드 활용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
import java.util.Optional;
public class OptionalPractice {
public static void main(String[] args) {
Optional<String> os1 = Optional.empty();
Optional<String> os2 = Optional.of("So Basic.");
String s1 = os1.map(s->s.toString()).orElse("empty");
//orElse는 실행되지 않을 경우 대신 반환.
String s2 = os2.map(s->s.toString()).orElse("empty");
System.out.println(s1);
System.out.println(s2);
}
}
|
cs |
-FlatMap 메소드 활용
1
2
3
4
5
6
7
8
9
10
11
12
|
import java.util.Optional;
public class OptionalPractice {
public static void main(String[] args) {
Optional<String> os1 = Optional.of("Optional String");
Optional<String> os2 = os1.map(s->s.toUpperCase());
System.out.println(os2.get());
Optional<String> os3 = os1.flatMap(s->Optional.of(s.toLowerCase()));
System.out.println(os3.get());
}
}
|
cs |
-Optional 클래스 활용해보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
import java.util.Optional;
public class OptionalPractice {
Optional<String> phone; //null 일 수 있음
Optional<String> adrs; //null 일 수 있음
public OptionalPractice(Optional<String> ph, Optional<String> ad) {
phone = ph;
adrs = ad;
}
public Optional<String> getPhone(){
return phone;
}
public Optional<String> getAdrs(){
return adrs;
}
public static void main(String[] args) {
Optional<OptionalPractice> ci = Optional.of(
new OptionalPractice(Optional.ofNullable(null),Optional.of("Korea")));
String phone = ci.flatMap(c->c.getPhone()).orElse("no phone number.");
String addr = ci.flatMap(c->c.getAdrs()).orElse("no address.");
System.out.println(phone);
System.out.println(addr);
}
}
|
cs |
'Java > 자바 기본 문법' 카테고리의 다른 글
[자바] 스트림 활용 메소드 (0) | 2021.02.17 |
---|---|
자바 스트림의 기초 (0) | 2021.02.09 |
자바 메소드 참조 (0) | 2021.02.09 |
자바 람다 정의되어 있는 함수형 인터페이스 (0) | 2021.02.04 |
자바 람다의 어노테이션과 제네릭 (0) | 2021.02.04 |