본문 바로가기
Study with me/TECH!T back-end shcool 7

week_04 Optional +@

by 외계나무 2023. 11. 8.

Optional +@

import java.util.Optional;

public class Main {
    public static void main(String[] args) {
        // Not Optional
        System.out.println("== Not Optional ==");
        Person person1 = new Person();
        boolean isHandNull = true;

        if (person1 != null) {
            if (person1.getLeftArm() != null) {
                if (person1.getLeftArm().getHand() != null) {
                    isHandNull = false;
                    person1.getLeftArm().getHand().grab();
                }
            }
        }

        if (isHandNull) {
            System.out.println("hand is null");
        }

        // Optional, v1
        System.out.println("== Optional, v1 ==");
        Optional<Person> person2 = Optional.ofNullable(new Person());

        person2
                .map(p -> p.getLeftArm()) // person2 안에 있는 Person 객체를 꺼내서 getLeftArm()을 실행, 없으면 실행안됨
                .map(arm -> arm.getHand()) // arm 객체를 꺼내서 getHand()을 실행, 없으면 실행안됨
                .ifPresentOrElse(
                        hand -> hand.grab(),
                        () -> System.out.println("hand is null")
                );

        // Optional, v1
        System.out.println("== Optional, v2 ==");
        Optional<Person> person3 = Optional.ofNullable(new Person());

        person3
                .map(Person::getLeftArm) // person2 안에 있는 Person 객체를 꺼내서 getLeftArm()을 실행, 없으면 실행안됨
                .map(Arm::getHand) // arm 객체를 꺼내서 getHand()을 실행, 없으면 실행안됨
                .ifPresentOrElse(
                        Hand::grab,
                        () -> System.out.println("hand is null")
                );
    }
}

class Person {
    private Arm leftArm;
    private Arm rightArm;

    public Person() {
        this.leftArm = new Arm();
        this.rightArm = new Arm();
    }

    public Arm getLeftArm() {
        return leftArm;
    }

    public Arm getRightArm() {
        return rightArm;
    }
}

class Arm {
    private Shoulder shoulder;
    private Hand hand;

    public Arm() {
        this.shoulder = new Shoulder();
        this.hand = new Hand();
    }

    public Shoulder getShoulder() {
        return shoulder;
    }

    public Hand getHand() {
        return hand;
    }
}

class Shoulder {

}

class Hand {
    public void grab() {
        System.out.println("Grabbing");
    }
}

// -> arm, shoulder, hand 뭐 하나라도 없으면 'hand is null' 출력, 다 있으면 grab 실행.

'Study with me > TECH!T back-end shcool 7' 카테고리의 다른 글

week_05 JAVA 11/11  (0) 2023.11.13
week_04 Java 10/11  (0) 2023.11.09
week_04 JAVA 9/11  (0) 2023.11.07
week_04 JAVA 8/11  (0) 2023.11.06
week_03 HTML&CSS&JavaScript 2/2  (8) 2023.11.03