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
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๊ฐ์ ๋์...ํ์ฌ ์ํ ์ ์ (9-6)ํ๋ก์ ํธ ์ฐธ์ฌํ๊ธฐ ๋๊ธฐ๋ค๊ณผ ์นํด์ง๊ธฐ์
๋ฌด ํ์
ํ๊ธฐPT ๋ฐ ์ ํ ์ฌ์ฌ ์ค๋น์ฃผ๋ง๊ณผ ํด๊ทผ ํ์ ์ํ์ ์ฌ์ ๋กญ๊ฒ ์ฆ๊ธฐ๊ธฐ ๋๋ต ์์ฑํด๋ณด๋ฉด ์์ ๊ฐ๋ค. ์ํ๋ ํ์ ๋ค์ด๊ฐ๊ฒ ๋์ด์ Kotlin, WebFlux, AWS, Spring, NoSQL ๋ฑ๋ฑ,,,์ ํ๋ ์์ํฌ์ ์ธ์ด๋ค์ ์ฌ์ฉํ๋ฉฐ ์ค๋ฌด ํ๋ก์ ํธ์ ์ฐธ์ฌํ๊ธฐ๋ ํ๋ค. ์ฝํ
์์ ์ฌ์ฉํ๋ DFS๋ฅผ ์ค๋ฌด์ ํ์ฉํ๋ฉด์ ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ์ ๋๊ปด๋ณด๊ธฐ๋ ํ๋ค. ์๊ฐ์ด ๋ ๋๋ง๋ค ๋ค๋ฅธ ์ฌ๋๋ค์ ๊นํ๋ธ์ ๋ค์ด๊ฐ์ ์ด๋ค ํ๋ก์ ํธ๋ฅผ ์ฐธ์ฌํ๋ ๊ตฌ๊ฒฝํ๊ธฐ๋ ํ๋ค. ๊ทธ๋ฌ๋ค ๋ณด๋ฉด ๋ด๊ฐ ์์ง๋ ๋ถ์กฑํ๋ค๋ ๊ฒ์ ํ์คํ ๋๋ ์..
FE
๋ก์ปฌ์์ ์คํ์ํฌ ๋ ๊ฐํน ์ ๋์๊ฐ ๋๊ฐ ์์๋ค. (400๋ฒ๋ ์๋ฌ)๊ทธ๋ด ๋๋ง๋ค ํญ์ ์์ฒญํ๋ url๋ก ์ ๋ ์๊ฐ๊ณ ์๋์ง, ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์ ์ฐ๊ฒฐ์ด ์ ์ค์ ๋์ด์๋์ง ํ์ธํด์ผํ๋ค.vue.config.js๋ Webpack ์ค์ ์ ํ์ฅํ๊ฑฐ๋ ์ฌ์ฉ์ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ตฌ์ฑ ํ์ผ์ด๋ค.๐ vue.config.js๊ฐ ํ์ํ ๊ฒฝ์ฐ - ๊ธฐ๋ณธ ์ค์ ์ ๋์ด ํ๋ก์ ํธ์ ํน์ ์๊ตฌ์ฌํญ์ด ์์ ๋- ๊ฐ๋ฐ ์๋ฒ ์ค์ ์ ๋ณ๊ฒฝํ๊ฑฐ๋ webpack ํ๋ฌ๊ทธ์ธ์ ์ถ๊ฐํ ๋- API ํ๋ก์๋ฅผ ์ค์ ํ๊ฑฐ๋ ์ธ๋ถ CSS/JS ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํ ๋ ์์ ๊ฐ์ด ํด๋น ํ์ผ์ ํตํด ๊ธฐ๋ณธ์ ์ธ ์ค์ ์ ๋ณ๊ฒฝํ๊ฑฐ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋ค. ์ด ํ์ผ์์ ์ค์ ํ ์ ์๋ ์ต์
๋ค์ ๋ค์๊ณผ ๊ฐ๋ค. ๐น ์ฃผ์ ์ค์ ์ต์
๋ค publicPat..
Spring/Spring & Spring Boot
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
Amazon EventBridge ์ค์ผ์ค๋ฌ๋ฅผ ์ด์ฉํด์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋๋ฐ์ด์ค๋ฅผ ์คํ์์ผฐ๋ค.์ค์ผ์ค ๋ฐ์ดํฐ๊ฐ ๊ณ์ ๋์ด๋๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ update (๋๋ create)ํ์ง ํ ๋ฌ์ด ์ง๋๋ฉด ์๋์ผ๋ก ์ญ์ ๋๋ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํด์ผํ๋ค. Spring Batch ์ฌ์ฉ์ ์ฒ์์ด๋ผ ์ด๋ป๊ฒ ํ ์ง ๊ตฌ๊ธ๋งํ๋ ์ค์ ๋ค์ด๋ฒ ๊ฐ๋ฐ์ ๋ถ ์ค Spring Batch๋ฅผ ๋ ์ฐ์ํ๊ฒ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ์ํ ๊ฒ์๊ธ์ ๋ณด๊ฒ ๋์๋ค. ์ฌ์ง์ด ์ฝํ๋ฆฐ์ผ๋ก ํ์ฉํ๋ ๋ฐฉ๋ฒ๊น์ง ์์ด์ ์ฐธ๊ณ ํ๊ธฐ ์ข์ ๊ธ์ด์๋ค๋ง..๐๐ํ์ง๋ง ์ฌ์ฉํ๋ ค๊ณ ๋ฏ์ด๋ณด๋.. ๋ฌธ์ ๊ฐ ์์ด์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ํํ๋ค๐ฅฒ (๋ฐ ๊ธ ์ฐธ๊ณ ) Spring Batch๋ฅผ ํ์ฉํด ๊ฐ๋ฐํ ๊ฒ์ ๊ธฐ๋กํด๋ณด๊ฒ ๋ค(์ฐธ๊ณ ๋ก ํ๋ก์ ํธ์์ ํ์ฉํ Spring Batch๋ 4.X.X์ด๋ค.)๐ช ๋ชฉํ : up..
Spring/Spring WebFlux
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..