BackEnd🧡

λΉŒλ” νŒ¨ν„΄(builder pattern)

hae02y 2023. 10. 6. 23:16
λ°˜μ‘ν˜•

Builder Pattern

μžλ°”μ—μ„œ 객체λ₯Ό μ •μ˜ν•˜μ—¬ μƒμ„±ν• λ•Œ 보톡 μƒμ„±μžλ₯Ό 톡해 값을 μ£Όμž…ν•˜μ—¬ μƒμ„±ν•œλ‹€.

Person hae = new Person("ν•΄μ˜", 27, "개발자");

μ΄λ ‡κ²Œ μƒμ„±μžλ₯Ό 톡해 객체λ₯Ό μƒμ„±ν•˜λŠ” 방법은 단점이 μžˆλ‹€.

1. κ°’μ˜ μ„€μ • μˆœμ„œκ°€ μ—†λ‹€.

μƒμ„±μžμ˜ κ²½μš°μ—λŠ” 정해진 νŒŒλΌλ―Έν„°μ˜ μˆœμ„œλŒ€λ‘œ 값을 λ„£μ–΄μ€˜μ•Όν•œλ‹€. μˆœμ„œλ₯Ό λ¬΄μ‹œν•˜κ³  λ„£κ²Œλ˜λ©΄ λ‹€λ₯Έ λ³€μˆ˜μ— λ‹€λ₯Έ 값이 ν• λ‹Ήλ˜λŠ” λ‚­νŒ¨κ°€ 생긴닀.

μ΄μ—λ°˜ν•΄ λΉŒλ”νŒ¨ν„΄μ—μ„œλŠ” ν•„λ“œ μ΄λ¦„μœΌλ‘œ 값을 μ„€μ •ν•˜μ—¬, μˆœμ„œμ— μ’…μ†λ˜μ§€μ•ŠλŠ”λ‹€. μ–΄λ–€ ν•„λ“œλ₯Ό λ¨Όμ € μ„€μ •ν•΄μ•Όν•˜λŠ”μ§€ 생각할 ν•„μš”μ—†μ΄ νŽΈν•˜κ²Œ λ‚˜μ—΄ν•˜λ©΄λœλ‹€.

2. μƒμ„±μžμ˜ νŒŒλΌλ―Έν„°κ°€ 많으면 가독성이 떨어진닀.

μ˜ˆμ‹œμ—μ„œ 처럼 3κ°€μ§€μ˜ νŒŒλΌλ―Έν„°λ§Œ λ°›λŠ” κ²½μš°μ—λŠ” 크게 가독성에 λ¬Έμ œκ°€ 없을것이닀. ν•˜μ§€λ§Œ 10가지 정보λ₯Ό λ°›λŠ”λ‹€κ³  생각해보면...? μƒμ„±ν•˜λ©΄μ„œ λΆ€ν„° 머리가 μ•„ν”Œκ²ƒκ°™λ‹€.

Person hae = new Person("ν•΄μ˜", 27, "개발자", "java", "python", "spring", "blog" ...);

이런 μƒν™©μ—μ„œ λΉŒλ”νŒ¨ν„΄μœΌλ‘œ κ΅¬ν˜„μ„ ν•˜κ²Œ 되면 λΉŒλ”μ˜ 각 값듀을 λ„£μ–΄μ€„λ•Œ, 값이 μ–΄λ–€ 의미λ₯Ό λœ»ν•˜λŠ”μ§€ νŒŒμ•…ν•˜κΈ° μš©μ΄ν•˜κ³ , μƒμ„±μžλ‘œ μ„€μ •ν•΄μ•Όν•˜λŠ” 값이 λ§Žμ€κ²½μš° (IDEκ°€ λ„μ™€μ£ΌκΈ΄ν•˜μ§€λ§Œ...) λΉŒλ”λ₯Ό μ“°λŠ” 것이 가독성 μΈ‘λ©΄μ—μ„œ 훨씬 μ’‹λ‹€.

Person hae = Person.builder()
                    .name("ν•΄μ˜")
                    .age(27)
                    .job("개발자")
                    .lang1("java")
                    .lang2("python")
                    .framework("spring")
                    .profile("blog")
                    ...
                    .build();

λ˜ν•œ 같은 νƒ€μž…μ˜ λ‹€λ₯Έ λ³€μˆ˜μ˜ 값을 μ„œλ‘œ λ°”κΏ”λ„£λŠ”κ²ƒλ„ λ°©μ§€ν• μˆ˜μžˆλ‹€.

λ°˜μ‘ν˜•