๋ชฉ๋กSpring๐ŸŒฑ (22)

EEALL@ONCE

๐ŸŒฑMethod Chaining ( ๋ฉ”์†Œ๋“œ ์ฒด์ด๋‹)

๋ฉ”์†Œ๋“œ ์ฒด์ด๋‹(Method Chaining)์€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํŒจํ„ด ์ค‘ ํ•˜๋‚˜๋กœ, ๋ฉ”์„œ๋“œ๋ฅผ ์—ฐ์ด์–ด ํ˜ธ์ถœํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ฃผ๋กœ Java์™€ ๊ฐ™์€ ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ฉ”์†Œ๋“œ ์ฒด์ด๋‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ค ๋ช…ํ™•ํ•˜๊ณ  ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฉ”์†Œ๋“œ ์ฒด์ด๋‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์†์„ฑ์„ ์„ค์ •ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Person person = new Person() .setName("John") .setAge(30) .setAddress("123 Main St"); ์—ฌ๊ธฐ์„œ `Person` ํด๋ž˜์Šค์˜ ๊ฐ ๋ฉ”์„œ๋“œ๋Š” ํ•ด๋‹น ์†์„ฑ์„ ์„ค์ •ํ•˜๊ณ , ๋งˆ์ง€๋ง‰์—๋Š” ์ดˆ๊ธฐํ™”๋œ ๊ฐ์ฒด๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์„ ํ•˜๋‚˜์˜ ์ค„์— ..

Spring๐ŸŒฑ 2023. 11. 7. 19:18
๐ŸŒฑ@Builder ์–ด๋…ธํ…Œ์ด์…˜

@Builder ์–ด๋…ธํ…Œ์ด์…˜์€ Lombok ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณต๋˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ด ์–ด๋…ธํ…Œ์ด์…˜์€ ์ฃผ๋กœ Java ํด๋ž˜์Šค์˜ ๋นŒ๋” ํŒจํ„ด์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋นŒ๋” ํŒจํ„ด์€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ•„๋“œ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฃผ๋Š” ํŒจํ„ด ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. @Builder ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค์— ๋Œ€ํ•œ ๋นŒ๋” ํด๋ž˜์Šค๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ, ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ•„๋“œ ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ฃผ๋กœ ๋ถˆ๋ณ€(immutable) ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜, ๊ฐ์ฒด ์ƒ์„ฑ ๊ณผ์ •์„ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋กœ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” @Builder ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•œ ํด๋ž˜์Šค์˜ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค. import lombok.Builder; import lombok.Getter; @Getter @B..

Spring๐ŸŒฑ 2023. 11. 7. 19:16
๐ŸŒฑ ํ˜„์—…์—์„œ System.out.println ๋Œ€์‹  ๋กœ๊น…์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ (SLF4J(๊ฐ„๋‹จํ•œ ๋กœ๊น… ํŒฉ์‚ฌ๋“œ)์™€ Logback)

ํ˜„์—…์—์„œ System.out.println ๋Œ€์‹  ๋กœ๊น…์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ๋กœ๊ทธ ๋ ˆ๋ฒจ ๊ด€๋ฆฌ: ๋กœ๊น… ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ ๋‹ค์–‘ํ•œ ๋ ˆ๋ฒจ๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ DEBUG, INFO, WARN, ERROR, ๋“ฑ์˜ ๋ ˆ๋ฒจ๋กœ ๋กœ๊ทธ๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์–ด๋–ค ์ข…๋ฅ˜์˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์–ด๋–ค ์กฐ๊ฑด์—์„œ ๋ฐœ์ƒํ•˜๋Š”์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์  ์„ค์ •: ๋กœ๊น… ๋ ˆ๋ฒจ์„ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์–ด์„œ ํ”„๋กœ๊ทธ๋žจ์„ ๋Ÿฐํƒ€์ž„์— ๋กœ๊น… ๋ ˆ๋ฒจ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋””๋ฒ„๊น… ์‹œ์— ์œ ์šฉํ•˜๋ฉฐ, ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•ด ๋กœ๊ทธ ์ˆ˜์ค€์„ ๋†’์ด๊ฑฐ๋‚˜ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๊น… ์œ„์น˜ ์„ค์ •: ๋กœ๊ทธ๋ฅผ ํŒŒ์ผ, ์ฝ˜์†”, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“ฑ ์—ฌ๋Ÿฌ ์œ„์น˜์— ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ ์ค‘์•™ ์ง‘์ค‘ํ™”ํ•˜๊ฑฐ๋‚˜, ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•˜๊ฑฐ๋‚˜, ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ..

Spring๐ŸŒฑ 2023. 10. 16. 19:21
๐ŸŒฑ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์‹ฑ๊ธ€ํ†ค / ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์˜ ๋ฌธ์ œ์ 

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด๊ฐ€ ๋”ฑ 1๊ฐœ๋งŒ ์ƒ์„ฑ๋˜๊ณ , ๊ณต์œ ํ•˜๋„๋ก ์„ค๊ณ„ ->์‹ฑ๊ธ€ํ†ค ํŒจํ„ด ์–ด๋–ค ํด๋ž˜์Šค๊ฐ€ ์ธ์Šคํ„ด์Šค๋ฅผ ์˜ค์ง ํ•˜๋‚˜๋งŒ ์ƒ์„ฑํ•˜๋„๋ก ๋ณด์žฅํ•˜๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์—์„œ ๊ณต์œ ํ•ด์•ผ ํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋‚˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ฑฐ๋‚˜, ๋ถˆํ•„์š”ํ•œ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์„ ๋ฐฉ์ง€ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ( 100๋ฒˆ ํ˜ธ์ถœํ–ˆ์„ ์‹œ 1๋ฒˆ๋งŒ ๋งŒ๋“ค๊ณ  ๊ณต์œ ํ•˜๋Š” ํ˜•ํƒœ) ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋นˆ(Bean)์˜ ์Šค์ฝ”ํ”„(scope) ์ค‘ ํ•˜๋‚˜๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์Šคํ”„๋ง์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ฑ๊ธ€ํ†ค ์Šค์ฝ”ํ”„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นˆ์„ ๊ด€๋ฆฌํ•˜๋ฉฐ, ํ•œ ๋ฒˆ ์ƒ์„ฑ๋œ ๋นˆ ์ธ์Šคํ„ด์Šค๋Š” ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ๊ณต์œ ๋ฉ๋‹ˆ๋‹ค. ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์€ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋˜๋ฉฐ, ์ฃผ๋กœ ์•„๋ž˜์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค: 1. **Private ์ƒ์„ฑ์ž**: ํด๋ž˜์Šค์˜ ์ƒ์„ฑ..

Spring๐ŸŒฑ 2023. 8. 19. 22:45
๐ŸŒฑ๋นˆ ์„ค์ • ๋ฉ”ํƒ€ ์ •๋ณด

๋นˆ์˜ ์„ค์ • ๋ฉ”ํƒ€ ์ •๋ณด๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—๊ฒŒ ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ์กฐ๋ฆฝํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์Šคํ”„๋ง์—์„œ ๋นˆ ์„ค์ • ๋ฉ”ํƒ€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ ์„ธ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. 1. **XML ์„ค์ •**: ๊ณผ๊ฑฐ์— ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋˜ ๋ฐฉ์‹์œผ๋กœ, XML ํŒŒ์ผ์— ๋นˆ์˜ ์ •์˜์™€ ์˜์กด์„ฑ์„ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค. 2. **Java Config**: Java ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นˆ ์„ค์ • ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ฃผ๋กœ `@Configuration` ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๋ฉฐ, `@Bean` ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•˜์—ฌ ๋นˆ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. 3. **Annotation ๊ธฐ๋ฐ˜ ์„ค์ •**: ํด๋ž˜์Šค๋‚˜ ๋ฉ”์„œ๋“œ์— ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นˆ์„ ์„ค์ •ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ฃผ์š” ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ๋Š” `@Component`, `@Service`, `@Repositor..

Spring๐ŸŒฑ 2023. 8. 19. 22:09
๐ŸŒฑ BeanFactory๔€งฌ& ApplicationContext

๋‘ ๊ฐœ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธด ์ข€ ์–ด๋ ต๋‹ค. ์™œ๋ƒ๋ฉด, ๋ณดํ†ต BeanFactory๋ฅผ ๋ฐ”๋กœ ์“ฐ๊ธฐ๋ณด๋‹จ, BeanFactory๋ฅผ ์ƒ์†ํ•œ ApplicationContext๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋‘˜ ๋‹ค ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ๋ถ€๋ฅด๊ธด ํ•œ๋‹ค. 1. BeanFactory (1) ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์ตœ์ƒ์œ„ ์ธํ„ฐํŽ˜์ด์Šค (2) ์Šคํ”„๋ง ๋นˆ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์กฐํšŒํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹น. (3) getBean()์„ ์ œ๊ณต 2. Application Context (1) BeanFactory ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ์ƒ์†๋ฐ›์•„์„œ ์ œ๊ณต (2) ๋นˆ ํŽ™ํ† ๋ฆฌ๊ฐ€ ์ œ๊ณต ํ•˜์ง€ ์•Š๋Š” ๋ถ€๊ฐ€๊ธฐ๋Šฅ์„ ์ œ๊ณต - MessageSource : ๊ฐ ์–ธ์–ด๋ฅผ ๋“ค์–ด์˜ค๋Š” ๊ฐ’๋Œ€๋กœ ์ถœ๋ ฅ ๊ตญ์ œํ™”(i18n)์™€ ์ง€์—ญํ™”(l10n)๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋ฉฐ, ์‚ฌ์šฉ์ž์˜ ๋กœ์ผ€์ผ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์คŒ - En..

Spring๐ŸŒฑ 2023. 7. 29. 22:41