soogoori

Java/๐Ÿ“• Effective Java

[๐Ÿ“• Effective Java] ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ํŒŒ๊ดด ไธ‹

4. ์ธ์Šคํ„ด์Šคํ™”๋ฅผ ๋ง‰์œผ๋ ค๋ฉด private ์ƒ์„ฑ์ž ์‚ฌ์šฉ   5. ์ž์›์„ ์ง์ ‘ ๋ช…์‹œํ•˜์ง€ ๋ง๊ณ  ์˜์กด ๊ฐ์ฒด ์ฃผ์ž… ์‚ฌ์šฉ ์‚ฌ์šฉํ•˜๋Š” ์ž์›์— ๋”ฐ๋ผ ๋™์ž‘์ด ๋‹ฌ๋ผ์ง€๋Š” ํด๋ž˜์Šค์—๋Š” ์ •์  ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋‚˜ ์‹ฑ๊ธ€ํ„ด ๋ฐฉ์‹ ์ ํ•ฉ X๐Ÿ‘‰ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ƒ์„ฑ์ž์— ํ•„์š”ํ•œ ์ž์›์„ ๋„˜๊ฒจ์ฃผ๋Š” ๋ฐฉ์‹ = ์˜์กด ๊ฐ์ฒด ์ฃผ์ž…   ์ƒ์„ฑ์ž์— ์ž์› ํŒฉํ† ๋ฆฌ๋ฅผ ๋„˜๊ฒจ์คŒโœจ ํŒฉํ† ๋ฆฌ๐Ÿ‘‰ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ํŠน์ • ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฐ์ฒด public class SpellChecker{ private final Lexicon dictionary; public SpellChecker(Lexicon dictionary){ this.dictionary = Objects.requireNonNull(dictionary); } ..

Java/๐Ÿ“• ์˜ค๋ธŒ์ ํŠธ : ์ฝ”๋“œ๋กœ ์ดํ•ดํ•˜๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„

[์˜ค๋ธŒ์ ํŠธ : ์ฝ”๋“œ๋กœ ์ดํ•ดํ•˜๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„] ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (๊ฐ์ฒด, ์„ค๊ณ„)

์บก์Šํ™” (Encapsulation)๋ชฐ๋ผ๋„ ๋˜๋Š” ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ์„ธ๋ถ€์ ์ธ ์‚ฌํ•ญ์„ ๊ฐ์ถ”๋Š” ๊ฒƒ๐Ÿ‘‰ ๋ชฉ์  : ๋ณ€๊ฒฝํ•˜๊ธฐ ์‰ฌ์šด ๊ฐ์ฒด ๋งŒ๋“ค๊ธฐ ์บก์Šํ™”๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด ๋‚ด๋ถ€๋กœ์˜ ์ ‘๊ทผ์„ ์ œํ•œํ•˜๋ฉด ๊ฐ์ฒด์™€ ๊ฐ์ฒด ์‚ฌ์ด์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ์Œ โž” ์„ค๊ณ„ ์ข€๋” ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ โžก๏ธ ๊ฐ์ฒด๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์œผ๋กœ ๋‚˜๋ˆ„๊ณ  ์ธํ„ฐํŽ˜์ด์Šค๋งŒ์„ ๊ณต๊ฐœํ•ด ๊ฐ์ฒด ์‚ฌ์ด์˜ ๊ฒฐํ•ฉ๋„ ๋‚ฎ์ถ”๊ณ  ๋ณ€๊ฒฝํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ ์ž‘์„ฑ    ์‘์ง‘๋„ (Cohesion)๋ฐ€์ ‘ํ•˜๊ฒŒ ์—ฐ๊ด€๋œ ์ž‘์—…๋งŒ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์—ฐ๊ด€์„ฑ ์—†๋Š” ์ž‘์—…์€ ๋‹ค๋ฅธ ๊ฐ์ฒด์—๊ฒŒ ์œ„์ž„ ๐Ÿ‘‰ ์‘์ง‘๋„๊ฐ€ ๋†’์Œ ์ž์‹ ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์Šค์Šค๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ์ž์œจ์ ์ธ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๋ฉด ๊ฒฐํ•ฉ๋„↓, ์‘์ง‘๋„↑   โœจ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (Object-Oriented Programming)๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์†Œ์œ  ๐Ÿ‘‰ ๋ฐ์ดํ„ฐ์™€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์ผํ•œ ๋ชจ..

Java/๐Ÿ“• Effective Java

[๐Ÿ“• Effective Java] ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ํŒŒ๊ดด ไธŠ

1. ์ƒ์„ฑ์ž ๋Œ€์‹  ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ! ๐Ÿ”น ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ (static factory method) ๐Ÿ‘‰ ํ•ด๋‹น ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ๋ฐ˜ํ™˜์ด๋ฏธ ์บ์‹œ๋œ ๊ฐ์ฒด ๋ฐ˜ํ™˜ํ•˜์—ฌ ๊ฐ์ฒด ์ƒ์„ฑ ์ค„์ž„๐Ÿ‘ ์žฅ์ ์ด๋ฆ„์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์–ด์„œ ๋ฐ˜ํ™˜๋  ๊ฐ์ฒด์˜ ํŠน์„ฑ์„ ์ œ๋Œ€๋กœ ์„ค๋ช… ๊ฐ€๋Šฅ ex) BigInteger(int, int, Random) vs BigInteger.probablePrime ๐Ÿ‘‰ ๋‘˜ ์ค‘ '๊ฐ’์ด ์†Œ์ˆ˜์ธ BigInteger๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋‹ค'๋Š” ์˜๋ฏธ๋ฅผ ๋” ์ž˜ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๋ฐ”๋กœ ํŒŒ์•… ๊ฐ€๋Šฅ ํ•œ ํด๋ž˜์Šค์— ์‹œ๊ทธ๋‹ˆ์ฒ˜๊ฐ€ ๊ฐ™์€ ์ƒ์„ฑ์ž๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ํ•„์š”ํ•  ์‹œ ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋”์šฑ ์œ ์šฉpublic class Account { private String owner; private double balance; ..

๐Ÿ‘ฉ‍๐Ÿ’ป ์ •๋ฆฌ๊ธ€/๐Ÿ“ ํšŒ๊ณ 

[๐Ÿ“˜ ํšŒ๊ณ ] ์ธํ„ด 3๊ฐœ์›” ํ›„ . . .

์ฑ„์šฉ ์—ฐ๊ณ„ํ˜• ์ธํ„ด ํ•ฉ๊ฒฉ์ด๋ผ๋Š” ์†Œ์‹์„ ๋“ฃ๊ณ  3๊ฐœ์›”์ด ์ง€๋‚ฌ๋‹ค. 3๊ฐœ์›” ๊ฐ„ ์ง€๋‚ด๋ฉด์„œ ๋Š๊ผˆ๋˜ ์ ๊ณผ ์•ž์œผ๋กœ์˜ ๊ณ„ํš์„ ์„ธ์›Œ๋ณด๊ณ ์ž ํ•œ๋‹ค..3๊ฐœ์›” ๋™์•ˆ...ํšŒ์‚ฌ ์ƒํ™œ ์ ์‘ (9-6)ํ”„๋กœ์ ํŠธ ์ฐธ์—ฌํ•˜๊ธฐ ๋™๊ธฐ๋“ค๊ณผ ์นœํ•ด์ง€๊ธฐ์—…๋ฌด ํŒŒ์•…ํ•˜๊ธฐPT ๋ฐ ์ „ํ™˜ ์‹ฌ์‚ฌ ์ค€๋น„์ฃผ๋ง๊ณผ ํ‡ด๊ทผ ํ›„์˜ ์ƒํ™œ์„ ์—ฌ์œ ๋กญ๊ฒŒ ์ฆ๊ธฐ๊ธฐ ๋Œ€๋žต ์ž‘์„ฑํ•ด๋ณด๋ฉด ์œ„์™€ ๊ฐ™๋‹ค.  ์›ํ•˜๋˜ ํŒ€์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜์–ด์„œ Kotlin, WebFlux, AWS, Spring, NoSQL ๋“ฑ๋“ฑ,,,์˜ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ์–ธ์–ด๋“ค์„ ์‚ฌ์šฉํ•˜๋ฉฐ ์‹ค๋ฌด ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•˜๊ธฐ๋„ ํ–ˆ๋‹ค.  ์ฝ”ํ…Œ์—์„œ ์‚ฌ์šฉํ–ˆ๋˜ DFS๋ฅผ ์‹ค๋ฌด์— ํ™œ์šฉํ•˜๋ฉด์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํšจ์œจ์„ฑ์„ ๋Š๊ปด๋ณด๊ธฐ๋„ ํ–ˆ๋‹ค.  ์‹œ๊ฐ„์ด ๋‚  ๋•Œ๋งˆ๋‹ค ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ๊นƒํ—ˆ๋ธŒ์— ๋“ค์–ด๊ฐ€์„œ ์–ด๋–ค ํ”„๋กœ์ ํŠธ๋ฅผ ์ฐธ์—ฌํ–ˆ๋‚˜ ๊ตฌ๊ฒฝํ•˜๊ธฐ๋„ ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ๋ณด๋ฉด ๋‚ด๊ฐ€ ์•„์ง๋„ ๋ถ€์กฑํ•˜๋‹ค๋Š” ๊ฒƒ์„ ํ™•์‹คํžˆ ๋Š๋‚„ ์ˆ˜..

FE

[Vue] devServer ๊ตฌ์„ฑํ•˜๊ณ  proxy ์„ค์ •ํ•˜๊ธฐ

๋กœ์ปฌ์—์„œ ์‹คํ–‰์‹œํ‚ฌ ๋•Œ ๊ฐ„ํ˜น ์•ˆ ๋Œ์•„๊ฐˆ ๋•Œ๊ฐ€ ์žˆ์—ˆ๋‹ค. (400๋ฒˆ๋Œ€ ์—๋Ÿฌ)๊ทธ๋Ÿด ๋•Œ๋งˆ๋‹ค ํ•ญ์ƒ ์š”์ฒญํ•˜๋Š” url๋กœ ์ž˜ ๋‚ ์•„๊ฐ€๊ณ  ์žˆ๋Š”์ง€, ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด์˜ ์—ฐ๊ฒฐ์ด ์ž˜ ์„ค์ •๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผํ•œ๋‹ค.vue.config.js๋Š” Webpack ์„ค์ •์„ ํ™•์žฅํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž ์ •์˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ตฌ์„ฑ ํŒŒ์ผ์ด๋‹ค.๐Ÿ”” vue.config.js๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ - ๊ธฐ๋ณธ ์„ค์ •์„ ๋„˜์–ด ํ”„๋กœ์ ํŠธ์— ํŠน์ • ์š”๊ตฌ์‚ฌํ•ญ์ด ์žˆ์„ ๋•Œ- ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ webpack ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ถ”๊ฐ€ํ•  ๋•Œ- API ํ”„๋ก์‹œ๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์™ธ๋ถ€ CSS/JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ์œ„์™€ ๊ฐ™์ด ํ•ด๋‹น ํŒŒ์ผ์„ ํ†ตํ•ด ๊ธฐ๋ณธ์ ์ธ ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ํŒŒ์ผ์—์„œ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.   ๐Ÿ”น ์ฃผ์š” ์„ค์ • ์˜ต์…˜๋“ค publicPat..

Spring/Spring & Spring Boot

[Spring] Spring Batch 5 ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

Spring Batch 5 ์ตœ์†Œ Java 17 ํ•„์š” @EnableBatchProcessing ์–ด๋…ธํ…Œ์ด์…˜ ๊ถŒ์žฅ X ๐Ÿ‘‰ ์‚ฌ์šฉํ•  ์‹œ autoConfiguration ์ผ๋ถ€ ๊ธฐ๋Šฅ ์‚ฌ์šฉ ๋ถˆ๊ฐ€   Spring Batch ์ดˆ๊ธฐ ์„ค์ •spring: profiles: active: local batch: job: names: ${job.name:NONE}---spring: config: activate: on-profile: local datasource: url: jdbc:mysql://127.0.0.1:3306/house driver-class-name: com.mysql.cj.jdbc.Driver username: root password: jpa: ..

Spring/Spring & Spring Boot

[Spring] Spring Batch๋กœ ํ•œ ๋‹ฌ ์ง€๋‚œ ๋ฐ์ดํ„ฐ ์‚ญ์ œํ•˜๊ธฐ

Amazon EventBridge ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์ด์šฉํ•ด์„œ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋””๋ฐ”์ด์Šค๋ฅผ ์‹คํ–‰์‹œ์ผฐ๋‹ค.์Šค์ผ€์ค„ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ณ„์† ๋Š˜์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ update (๋˜๋Š” create)ํ•œ์ง€ ํ•œ ๋‹ฌ์ด ์ง€๋‚˜๋ฉด ์ž๋™์œผ๋กœ ์‚ญ์ œ๋˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•ด์•ผํ–ˆ๋‹ค. Spring Batch ์‚ฌ์šฉ์€ ์ฒ˜์Œ์ด๋ผ ์–ด๋–ป๊ฒŒ ํ• ์ง€ ๊ตฌ๊ธ€๋งํ•˜๋˜ ์ค‘์— ๋„ค์ด๋ฒ„ ๊ฐœ๋ฐœ์ž ๋ถ„ ์ค‘ Spring Batch๋ฅผ ๋” ์šฐ์•„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์‹œํ•œ ๊ฒŒ์‹œ๊ธ€์„ ๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค. ์‹ฌ์ง€์–ด ์ฝ”ํ‹€๋ฆฐ์œผ๋กœ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊นŒ์ง€ ์žˆ์–ด์„œ ์ฐธ๊ณ ํ•˜๊ธฐ ์ข‹์€ ๊ธ€์ด์—ˆ๋‹ค๋งŒ..๐Ÿ˜Š๐Ÿ‘‰ํ•˜์ง€๋งŒ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ๋œฏ์–ด๋ณด๋‹ˆ..  ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด์„œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ํƒํ–ˆ๋‹ค๐Ÿฅฒ (๋ฐ‘ ๊ธ€ ์ฐธ๊ณ ) Spring Batch๋ฅผ ํ™œ์šฉํ•ด ๊ฐœ๋ฐœํ•œ ๊ฒƒ์„ ๊ธฐ๋กํ•ด๋ณด๊ฒ ๋‹ค(์ฐธ๊ณ ๋กœ ํ”„๋กœ์ ํŠธ์—์„œ ํ™œ์šฉํ•œ Spring Batch๋Š” 4.X.X์ด๋‹ค.)๐Ÿ’ช ๋ชฉํ‘œ : up..

Spring/Spring WebFlux

[WebFlux] Reactor ์—ฐ์‚ฐ์ž ์ •๋ฆฌ

flatMapManyflatMapManyMono์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ ์š”์†Œ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉ ๐Ÿ‘‰ Mono์—์„œ ๋ฐ˜ํ™˜๋œ ๊ฒฐ๊ณผ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์š”์†Œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ Flux๋กœ ์ฒ˜๋ฆฌํ•  ๋•Œ ์œ ์šฉ   fromIterableIterable ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ(list, set, map ๋“ฑ์˜ ์ปฌ๋ ‰์…˜)๋ฅผ Flux๋กœ ๋ณ€ํ™˜ ๐Ÿ‘‰ ์ปฌ๋ ‰์…˜ ๋‚ด์˜ ์š”์†Œ๋“ค์„ ๋ฆฌ์•กํ‹ฐ๋ธŒ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌ  map, mapNotNullmap์€ onNext ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์•„์„œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์•„๋ž˜๋กœ ์ „๋‹ฌ Flux.range(1, 5) .map(value -> value * 2) .doOnNext(value -> { log.info("doOnNext: " + value); }) .subscribe();โ€‹mapNotNull์€ ๋ณ€๊ฒฝ๋œ ๊ฐ’์ด nu..

soogoori
'๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (8 Page)