Optinal +안티패턴

minjun kim·2024년 12월 2일

Optional

널이 들어있는 레퍼런스 변수의 멤버에 접근 하려고 할때 발생하는 NullPointException을 우아하게 해결하기 위해 등장

package EBD._3;

public class Main1 {
    private  static String getSomeString() {
        return null;
    }


    public static void main(String[] args) {
        String isThisNull = getSomeString();

        // 만약 null을 체크하지않으면 NullPointException 발생 
        if (null != isThisNull) {
            System.out.println(isThisNull.toUpperCase());
        }

    }
}
Exception in thread "main" java.lang.NullPointerException
	at EBD._3.Main1.main(Main1.java:14)

Optional 사용

optional로 선언된 메서드에서 반환된 문자열이 비어 있지 않은 경우에는 ifPresent의 인자로 들어간 람다표현식을 실행
비어있으면 실행 X

package EBD._3;

import java.util.Optional;

public class Main1 {
    private  static Optional<String> getSomeString() {
        return Optional.empty(); // null을 반환하는 것이 아니라 비어 있는 Optional을 반환 
    }


    public static void main(String[] args) {
        Optional<String> isThisNull = getSomeString();

        isThisNull.ifPresent(str -> System.out.println(str.toUpperCase()));
    }
}

비어있는 Optional이 아니라 값을 포함시 작성법

package EBD._3;

import java.util.Optional;

public class Main1 {
    private  static Optional<String> getSomeString() {
        return Optional.ofNullable("public static void"); // null을 반환하는 것이 아니라 비어 있는 Optional을 반환
    }


    public static void main(String[] args) {
        Optional<String> isThisNull = getSomeString();

        isThisNull.ifPresent(str -> System.out.println(str.toUpperCase()));
    }
    // PUBLIC STATIC VOID
}

isPresent() 메서드를 if문으로 사용으로 인한 안티패턴 및 ifpresent사용으로 해결

package EBD._3;

import java.util.Optional;

public class Main1 {
    private  static Optional<String> getSomeString() {
        return Optional.ofNullable("public static void"); // null을 반환하는 것이 아니라 비어 있는 Optional을 반환
    }


    public static void main(String[] args) {
        Optional<String> str = getSomeString();

        // 안티패턴
//        if (str.isEmpty()) {
//            System.out.println(str.get().toUpperCase());
//        }

        str.ifPresent((string) -> System.out.println(string.toUpperCase()));
    }
 
}

실행결과 : // PUBLIC STATIC VOID
profile
배움의 흔적을 남기고 싶습니다.

0개의 댓글