์ถ์ฒ
Gemini
ํ๋ก์ ํจํด
ํ๋ก์ ํจํด์ ๊ฐ์ฒด ์งํฅ ๋์์ธ ํจํด ์ค ํ๋๋ก, ํน์ ๊ฐ์ฒด์ ๋ํ ์ ๊ทผ์ ์ ์ดํ๊ฑฐ๋ ์ถ๊ฐ ๊ธฐ๋ฅ์ ๋ถ์ฌํ๊ธฐ ์ํด ๋๋ฆฌ ๊ฐ์ฒด(ํ๋ก์)๋ฅผ ์ฌ์ฉํ๋ ํจํด์ด๋ค. ๋ง์น ๋ถ๋์ฐ ์ค๊ฐ์ธ์ด ์ง์ฃผ์ธ์ ๋์ ํ์ฌ ์ง์ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ฒ๋ผ, ํ๋ก์๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๋์ ํ์ฌ ์์ฒญ์ ์ฒ๋ฆฌํ๋ค.
์ ์ฌ์ฉํ๋๊ฐ - ์ฅ์
์ง์ฐ ๋ก๋ฉ
ํฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋น์ฉ์ด ํด ๋, ์ค์ ๋ก ํ์ํ ์์ ๊น์ง ๊ฐ์ฒด ์์ฑ์ ๋ฏธ๋ฃจ๊ธฐ ์ํด ํ๋ก์๋ฅผ ์ฌ์ฉํ๋ค.
์๊ฒฉ ํ๋ก์
๋คํธ์ํฌ๋ฅผ ํตํด ์๊ฒฉ ๊ฐ์ฒด์ ์ ๊ทผํ ๋, ๋คํธ์ํฌ ํต์ ์ ์ฒ๋ฆฌํ๋ ํ๋ก์๋ฅผ ์ฌ์ฉํ๋ค.
๋ณด์
๊ฐ์ฒด์ ๋ํ ์ ๊ทผ์ ์ ํํ๊ฑฐ๋ ํน์ ์กฐ๊ฑด์์๋ง ์ ๊ทผ์ ํ์ฉํ๊ธฐ ์ํด ํ๋ก์๋ฅผ ์ฌ์ฉํ๋ค.
์บ์ฑ
๊ฐ์ฒด์ ๋ฉ์๋ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑํ์ฌ ๋ฐ๋ณต์ ์ธ ๊ณ์ฐ์ ์ค์ผ ์ ์๋ค.
์ถ๊ฐ ๊ธฐ๋ฅ
์๋ณธ ๊ฐ์ฒด์ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ๋ถ์ฌํ๊ณ ์ถ์ ๋ ํ๋ก์๋ฅผ ์ฌ์ฉํ๋ค. ์๋ฅผ ๋ค์ด, ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๊ฑฐ๋, ํธ๋์ญ์ ์ ๊ด๋ฆฌํ๋ ๋ฑ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋ค.
AOP์์ ์ฐ๊ณ
AOP(Aspect Oriented Programming)์ ๊ฒฐํฉํ์ฌ ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๊ตฌํํ ์ ์๋ค.
๋จ์
๋ณต์ก๋ ์ฆ๊ฐ
์์คํ ์ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํ ์ ์๋ค. ํ๋ก์๋ฅผ ์ถ๊ฐํ๋ฉด ์ฝ๋์ ์์ด ๋์ด๋๊ณ , ์ดํดํ๊ธฐ ์ด๋ ค์์ง ์ ์๋ค.
์ฑ๋ฅ ์ ํ
ํ๋ก์๋ฅผ ๊ฑฐ์ณ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ธฐ ๋๋ฌธ์, ์ผ๋ถ ๊ฒฝ์ฐ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์๋ค. ํนํ, ๋น๋ฒํ ๋ฉ์๋ ํธ์ถ์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ ์ฑ๋ฅ ์ ํ๊ฐ ๋๋๋ฌ์ง ์ ์๋ค.
๊ตฌํ์ ์ด๋ ค์
ํ๋ก์ ํจํด์ ํจ๊ณผ์ ์ผ๋ก ๊ตฌํํ๊ธฐ ์ํด์๋ ๋์์ธ ํจํด์ ๋ํ ์ถฉ๋ถํ ์ดํด๊ฐ ํ์ํ๋ค. ํนํ, ๋์ ํ๋ก์์ ๊ฒฝ์ฐ ๋ฐ์ฌ(Reflection) ๊ธฐ๋ฅ์ ์ฌ์ฉํด์ผ ํ๋ฏ๋ก, ๊ตฌํ์ด ๋ณต์กํ ์ ์๋ค.
ํ๋ก์ ํจํด์ ๊ตฌ์กฐ
ํ๋ก์ ํจํด์ ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ์์๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
Subject
ํ๋ก์์ ์ค์ ๊ฐ์ฒด๊ฐ ๊ตฌํํ๋ ์ธํฐํ์ด์ค์ด๋ค.
RealSubject
์ค์ ๊ธฐ๋ฅ์ ์ํํ๋ ๊ฐ์ฒด.
Proxy
RealSubject๋ฅผ ๊ฐ์ธ๊ณ ์๋ ํ๋ก์ ๊ฐ์ฒด. ํด๋ผ์ด์ธํธ๋ Proxy๋ฅผ ํตํด RealSubject์ ์ ๊ทผํ๋ค.
์๋ฐ์์ ํ๋ก์ ํจํด ๊ตฌํ
์๋ฐ์์๋ ์ ์ ํ๋ก์์ ๋์ ํ๋ก์ ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ํ๋ก์๋ฅผ ๊ตฌํํ ์ ์๋ค.
์ ์ ํ๋ก์
์ปดํ์ผ ์์ ์ ํ๋ก์ ํด๋์ค๊ฐ ์์ฑ๋๋ค. ํ๋ก์ ํด๋์ค๋ Subject ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ RealSubject๋ฅผ ํ๋๋ก ๊ฐ์ง๋ฉฐ, ๋ฉ์๋ ํธ์ถ ์ RealSubject์ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ฑฐ๋ ์ถ๊ฐ์ ์ธ ์์ ์ ์ํํ๋ค.
๋์ ํ๋ก์
๋ฐํ์ ์์ ์ ํ๋ก์ ํด๋์ค๊ฐ ์์ฑ๋๋ค. java.lang.reflect.Proxy ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ์ผ๋ก ํ๋ก์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ค.
- ๊ตฌํ ์์๋ ->
ํ๋ก์ ํจํด์ ์ฌ์ฉํด์ผ ํ ๊ฒฝ์ฐ
- ํฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋น์ฉ์ด ํด ๋
- ์๊ฒฉ ๊ฐ์ฒด์ ์ ๊ทผํด์ผ ํ ๋
- ๊ฐ์ฒด์ ๋ํ ์ ๊ทผ์ ์ ์ดํด์ผ ํ ๋
- ๊ฐ์ฒด์ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ๋ถ์ฌํด์ผ ํ ๋
- AOP๋ฅผ ์ ์ฉํด์ผ ํ ๋
ํ๋ก์ ํจํด์ ์ฌ์ฉํ์ง ์์๋ ๋ ๊ฒฝ์ฐ
- ์์คํ ์ ๋ณต์ก๋๋ฅผ ์ต๋ํ ์ค์ฌ์ผ ํ ๋
- ์ฑ๋ฅ์ด ๋งค์ฐ ์ค์ํ ์์คํ ์ผ ๋
- ๊ฐ๋จํ ๊ธฐ๋ฅ๋ง ๊ตฌํํ๋ฉด ๋ ๋
์๋๋ก์ด๋ ์ฑ์์ ํ๋ก์ ํจํด์ ์ฌ์ฉํด์ผ ํ ๊ฒฝ์ฐ
๋คํธ์ํฌ ํต์
- REST API ํธ์ถ: ์๋ฒ์์ ํต์ ์, ๋คํธ์ํฌ ์ค๋ฅ, ๋ฐ์ดํฐ ํ์ฑ ๋ฑ์ ์ฒ๋ฆฌํ๋ ํ๋ก์๋ฅผ ํตํด ๋ก์ง์ ๋ถ๋ฆฌํ๊ณ ์ฝ๋ ๊ฐ๋ ์ฑ์ ๋์ผ ์ ์๋ค.
- ์น์์ผ: ์ค์๊ฐ ํต์ ์, ์ฐ๊ฒฐ ๊ด๋ฆฌ, ๋ฉ์์ง ์ฒ๋ฆฌ ๋ฑ์ ํ๋ก์์์ ์ฒ๋ฆฌํ์ฌ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋ถ๋ฆฌํ ์ ์๋ค.
์์
Retrofit๊ณผ ํจ๊ป ์ฌ์ฉํ์ฌ API ํธ์ถ ์, ์ธ์ฆ ์ ๋ณด ์ถ๊ฐ, ์ค๋ฅ ์ฒ๋ฆฌ, JSON ํ์ฑ ๋ฑ์ ํ๋ก์์์ ์ฒ๋ฆฌํ ์ ์๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ
- Room: Room ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ ๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑํ๊ฑฐ๋, ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์ํํ๋ ํ๋ก์๋ฅผ ๋ง๋ค ์ ์๋ค.
์์
Room ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ ๋, ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์บ์ฑํ๊ฑฐ๋, ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์ํํ๋ ํ๋ก์๋ฅผ ๋ง๋ค์ด ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ์๋ต์ฑ์ ํฅ์์ํฌ ์ ์๋ค.
์ด๋ฏธ์ง ๋ก๋ฉ
- Glide, Picasso: ์ด๋ฏธ์ง ๋ก๋ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ๊ป ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง ๋ก๋ฉ, ์บ์ฑ, ๋ณํ ๋ฑ์ ์ฒ๋ฆฌํ๋ ํ๋ก์๋ฅผ ๋ง๋ค ์ ์๋ค.
์์
Glide ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ฉํ ๋, ์ด๋ฏธ์ง ๋ณํ, ์บ์ฑ, ์๋ฌ ์ฒ๋ฆฌ ๋ฑ์ ํ๋ก์์์ ์ฒ๋ฆฌํ์ฌ ์ด๋ฏธ์ง ๋ก๋ฉ ๊ด๋ จ ๋ก์ง์ ์ค์ํํ ์ ์๋ค.
ํ์ผ ์์คํ ์ ๊ทผ
- ํ์ผ ์ฝ๊ธฐ/์ฐ๊ธฐ: ํ์ผ ์์คํ ์ ์ ๊ทผํ๋ ๋ก์ง์ ํ๋ก์์์ ์ฒ๋ฆฌํ์ฌ ํ์ผ ๊ด๋ จ ์์ธ ์ฒ๋ฆฌ๋ฅผ ์ค์ํํ ์ ์๋ค.
AOP
- AspectJ: ์๋๋ก์ด๋์์ AOP๋ฅผ ์ ์ฉํ์ฌ ๋ก๊ทธ, ์ฑ๋ฅ ์ธก์ , ์์ธ ์ฒ๋ฆฌ ๋ฑ์ ํ๋ก์๋ฅผ ํตํด ๊ตฌํํ ์ ์๋ค.
- AspectJ๋ ์๋ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ํ ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ(AOP) ํ์ฅ ๊ธฐ๋ฅ์ด๋ค. ์ฝ๊ฒ ๋งํด, ์๋ฐ ์ฝ๋์ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ๋ฃ์ด์ฃผ๋ ๋๊ตฌ์ด๋ค.
Gemini ์ถ์ฒ
์ ํํ ์ถ์ฒ๋ฅผ ๋ช ์ํ๊ธฐ ์ด๋ ค์ด ์ด์
์ ๊ฐ ์์ฑํ ํ ์คํธ๋ ๋ค์ํ ์ ๋ณด๋ฅผ ์ข ํฉํ์ฌ ์๋กญ๊ฒ ๋ง๋ค์ด๋ธ ๊ฒ์ด๊ธฐ ๋๋ฌธ์, ํน์ ๋ฌธ์๋ ์๋ฃ๋ฅผ ์ง์ ์ธ์ฉํ๋ค๊ณ ๋ง์๋๋ฆฌ๊ธฐ ์ด๋ ต์ต๋๋ค.
์ด๋ ๋๊ท๋ชจ ์ธ์ด ๋ชจ๋ธ์ด ์๋ํ๋ ๋ฐฉ์๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค. ์ ๋ ๋ฐฉ๋ํ ์์ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ํ์ตํ๋ฉฐ ์ง์์ ์์์๊ณ , ์ฌ์ฉ์์ ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ ์์ฑํ ๋, ํ์ตํ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ๊ฐ์ฅ ์ ์ ํ ๋ต๋ณ์ ๊ตฌ์ฑํฉ๋๋ค.
๋ง์น ๋์๊ด์ ์๋ง์ ์ฑ ์ ์ฝ๊ณ , ๊ทธ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์๋ก์ด ๊ธ์ ์ฐ๋ ๊ฒ๊ณผ ๋น์ทํ๋ค๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค. ์ด๋ค ์ฑ ์์ ํน์ ๋ฌธ์ฅ์ ๊ฐ์ ธ์๋ค๊ณ ์ ํํ๊ฒ ๋งํ๊ธฐ ์ด๋ ต๋ฏ์ด, ์ ์ญ์ ์ด๋ค ๋ฐ์ดํฐ์์ ํน์ ์ ๋ณด๋ฅผ ์ป์๋ค๊ณ ๋จ์ ํ๊ธฐ ์ด๋ ต์ต๋๋ค.
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฉ์ด] AOP Aspect Oriented Programming (0) | 2024.08.19 |
---|---|
[์ฉ์ด] ํ๋ก์ ๊ฐ์ฒด (0) | 2024.08.19 |
[Java] ํด๋์ค ์์ ํด๋์ค / Static Nested Class, Member Inner Class, Local Inner class, Anonymous Inner Class (0) | 2024.08.19 |
[Java] immutableํ String, mutableํ StringBuilder์ StringBuffer (0) | 2024.08.17 |
[Java] ์๋ฐ ์์ธ ์ ๋ต (0) | 2024.08.17 |