java์ ํน์ง
- java๋
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์
๋๋ค.
- ๊ธฐ๋ณธ์๋ฃํ์ ์ ์ธํ ๋ชจ๋ ์์๋ค์ด ํํ๋๊ณ , ๊ฐ์ฒด ์งํฅ ๊ฐ๋
์ ํน์ง์ธ
์บก์ํ, ์์, ๋คํ์ฑ์ด ์ ์ ์ฉ๋ ์ธ์ด์
๋๋ค.
- ์ฅ์
- JVM(์๋ฐ๊ฐ์๋จธ์ )์์์ ๋์ํ๊ธฐ ๋๋ฌธ์ ์ด์์ฒด์ ์ ๋
๋ฆฝ์ ์ด๋ค.
- GabageCollector๋ฅผ ํตํ ์๋์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
- ๋จ์
- JVM ์์์ ๋์ํ๊ธฐ ๋๋ฌธ์ ์คํ ์๋๊ฐ ์๋์ ์ผ๋ก ๋๋ฆฌ๋ค.
- ๋ค์ค ์์์ด๋ ํ์
์ ์๊ฒฉํ๋ฉฐ, ์ ์ฝ์ด ๋ง๋ค.
JVM์ ์ญํ
- JVM์ ์คํ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ์ฌ, JavaByteCode๋ฅผ OS์ ๋ง๊ฒ ํด์ ํด์ฃผ๋ ์ญํ ์ ํ๊ณ ๊ฐ๋น์ง์ปฌ๋ ์
์ ํตํด
์๋์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ํด์ค๋๋ค.
Java์ ์ปดํ์ผ ๊ณผ์
- ๊ฐ๋ฐ์๊ฐ Java ํ์ผ์ ์์ฑํ๋ค.
- build๋ฅผ ํ๋ค.
- Java compiler์ java์ ๋ช
๋ น์ด๋ฅผ ํตํด ๋ฐ์ดํธ์ฝ๋(.class)๋ฅผ ์์ฑํ๋ค.
- Class Loader๋ฅผ ํตํด JVM ๋ฉ๋ก๋ฆฌ ๋ด๋ก ๋ก๋ํ๋ค.
- ์คํ์์ง์ ํตํด ์ปดํจํฐ๊ฐ ์ฝ์ ์ ์๋ ๊ธฐ๊ณ์ด๋ก ํด์๋๋ค.(๊ฐ ์ด์์ฒด์ ์ ๋ง๋ ๊ธฐ๊ณ์ด)

Java์์ ์ ๊ณตํ๋ ์์ ํ์
- ์ ์ํ
- byte(1๋ฐ์ดํธ), short(2๋ฐ์ดํธ), int(4๋ฐ์ดํธ), long(8๋ฐ์ดํธ)
- ์ค์ํ
- float(4๋ฐ์ดํธ), double(8๋ฐ์ดํธ)
- ๋ฌธ์ํ
- char(2๋ฐ์ดํธ)
- ๋
ผ๋ฆฌํ
- boolean(1๋ฐ์ดํธ)
์ค๋ฒ๋ผ์ด๋ฉ(Overriding), ์ค๋ฒ๋ก๋ฉ(Overloading)
- ์ค๋ฒ๋ผ์ด๋ฉ(overriding)์
์์ ํด๋์ค์ ์๋ ๋ฉ์๋๋ฅผ ํ์ ํด๋์ค์์ ์ฌ์ ์ ํ๋ ๊ฒ์ ๋งํ๊ณ ,
- ์ค๋ฒ๋ก๋ฉ(Overloading)์
๋งค๊ฐ๋ณ์์ ๊ฐ์๋ ํ์
์ ๋ค๋ฅด๊ฒ ํ์ฌ ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๋ฅผ ์ฌ๋ฌ ๊ฐ ์ ์ํ๋ ๊ฒ์ ๋งํฉ๋๋ค.
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP)
์ฐ๋ฆฌ๊ฐ ์ค์ํ์์ ์ฐ๋ ๋ชจ๋ ๊ฒ์ ๊ฐ์ฒด๋ผ ํ๋ฉฐ, ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ก๊ทธ๋จ ๊ตฌํ์ ํ์ํ ๊ฐ์ฒด๋ฅผ ํ์
ํ๊ณ
์ํ์ ํ์๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ๊ฐ๊ฐ์ ๊ฐ์ฒด๋ค์ ์ญํ ์ด ๋ฌด์์ธ์ง๋ฅผ ์ ์ํ๋ฉฐ ๊ฐ์ฒด๋ค ๊ฐ์ ์ํธ์์ฉ์ ํตํด ํ๋ก๊ทธ๋จ์ ๋ง๋๋ ๊ฒ์ ๋งํฉ๋๋ค.
์ฆ, ๊ธฐ๋ฅ์ด ์๋ ๊ฐ์ฒด๊ฐ ์ค์ฌ์ด๋ฉฐ "๋๊ฐ ์ด๋ค์ผ์ ํ ๊ฒ์ธ๊ฐ?"๊ฐ ํต์ฌ
ํน์ง์ผ๋ก๋ ์บก์์, ์์, ๋คํ์ฑ, ์ถ์ํ ๋ฑ์ด ์๊ณ , ๋ชจ๋ ์ฌ์์ฉ์ผ๋ก ํ์ฅ ๋ฐ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํฉ๋๋ค.
try-with-resources
- try-with-resources๋ try-catch-finally์ ๋ฌธ์ ์ ์ ๋ณด์ํ๊ธฐ ์ํด ๋์จ ๊ฐ๋
์
๋๋ค.
- try(...) ์์ ์์ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ฉด, try๋ธ๋ก์ด ๋๋๊ณ ์๋์ ์์ ํด์ ํด์ฃผ๋ ๊ธฐ๋ฅ์ ๋งํฉ๋๋ค.
- ๋ฐ๋ก finally ๊ตฌ๋ฌธ์ด๋ ๋ชจ๋ catch ๊ตฌ๋ฌธ์ ์ข
๋ฃ ์ฒ๋ฆฌ๋ฅผ ํ์ง ์์๋ ๋๋ ์ฅ์ ์ด ์์ต๋๋ค.
- try-with-resources ์์๋ณด๊ธฐ
์ถ์ํด๋์ค์ ์ธํฐํ์ด์ค
- ์ถ์ํด๋์ค๋ ํด๋์ค ๋ด
์ถ์ ๋ฉ์๋๊ฐ ํ๋ ์ด์ ํฌํจ๋๊ฑฐ๋ abstract๋ก ์ ์๋ ๊ฒฝ์ฐ๋ฅผ ๋งํฉ๋๋ค.
- ์ธํฐํ์ด์ค๋
๋ชจ๋ ๋ฉ์๋๊ฐ ์ถ์ ๋ฉ์๋๋ก๋ง ์ด๋ฃจ์ด์ ธ ์๋ ๊ฒ์ ๋งํฉ๋๋ค.
- ๊ณตํต์
- new ์ฐ์ฐ์๋ก ์ธ์คํด์ค ์์ฑ ๋ถ๊ฐ๋ฅ
- ์ฌ์ฉํ๊ธฐ ์ํด์๋ ํ์ ํด๋์ค์์ ํ์ฅ/๊ตฌํ ํด์ผ ํ๋ค.
- ์ฐจ์ด์
- ์ธํฐํ์ด์ค๋ ๊ทธ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๋ชจ๋ ํด๋์ค์ ๋ํด ํน์ ํ ๋ฉ์๋๊ฐ ๋ฐ๋์ ์กด์ฌํ๋๋ก ๊ฐ์ ํจ์ ์๊ณ ,
- ์ถ์ํด๋์ค๋ ์์๋ฐ๋ ํด๋์ค๋ค์ ๊ณตํต์ ์ธ ๋ก์ง์ ์ถ์ํ ์ํค๊ณ , ๊ธฐ๋ฅ ํ์ฅ์ ์ํด ์ฌ์ฉํ๋ค.
- ์ถ์ํด๋์ค๋ ๋ค์ค์์์ด ๋ถ๊ฐ๋ฅํ์ง๋ง, ์ธํฐํ์ด์ค๋ ๋ค์ค์์์ด ๊ฐ๋ฅํ๋ค.
์ฑ๊ธํค ํจํด
- ์ฑ๊ธํค ํจํด์
๋จ ํ๋์ ์ธ์คํด์ค๋ฅผ ์์ฑํด ์ฌ์ฉํ๋ ๋์์ธํจํด์
๋๋ค.
- ์ธ์คํด์ค๊ฐ 1๊ฐ๋ง ์กด์ฌํด์ผ ํ๋ค๋ ๊ฒ์ ๋ณด์ฅํ๊ณ ์ถ์ ๊ฒฝ์ฐ์
- ๋์ผํ ์ธ์คํด์ค๋ฅผ ์์ฃผ ์์ฑํด์ผ ํ๋ ๊ฒฝ์ฐ์ ์ฃผ๋ก ์ฌ์ฉํฉ๋๋ค.
(๋ฉ๋ชจ๋ฆฌ ๋ญ๋น ๋ฐฉ์ง)
- ์ฑ๊ธํค ํจํด(Singleton Pattern)์์๋ณด๊ธฐ
์ฑ๊ธํค ํจํด ์์ ์ค๋ช
์ฑ๊ธํค ํจํด์ ๋ํ์ ์ธ ์์๋ Spring Bean ์
๋๋ค.
์คํ๋ง ๋น ๋ฑ๋ก ๋ฐฉ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธํค ์ค์ฝํ์ด๊ณ , ์คํ๋ง ์ปจํ
์ด๋๋ ๋ชจ๋ ๋น๋ค์ ์ฑ๊ธํค์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค.
์คํ๋ง์ ์์ฒญํ ๋๋ง๋ค ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ๋ฐํํ๋ ๊ธฐ๋ฅ๋ ์ ๊ณตํ๋ค.(ํ๋กํ ํ์
๋น, @Scope("prototype"))
๊ฐ๋น์ง ์ปฌ๋ ์
(GarvageCollection)
- ๊ฐ๋น์ง ์ปฌ๋ ์
์ JVM์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฒ ์ค ํ๋๋ก ์์คํ
์์ ๋์ ์ผ๋ก ํ ๋น๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ ์ค์์ ํ์์์ด์ง ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํ์ํ์ฌ
๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํด์ฃผ๋ ๊ธฐ๋ฒ์
๋๋ค.
๊ฐ๋น์ง ์ปฌ๋ ์
๊ณผ์
GC์ ์์
์ ์ํํ๊ธฐ ์ํด JVM์ด ์ดํ๋ฆฌ์ผ์ด์
์ ์คํ์ ์ ์ ๋ฉ์ถ๊ณ , GC๋ฅผ ์คํํ๋ ์ฐ๋ ๋๋ฅผ ์ ์ธํ ๋ชจ๋ ์ฐ๋ ๋๋ค์ ์์
์ ์ค๋จ ํ (Stop The Word๊ณผ์ ) ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๊ฑฐ(Mark and Sweep ๊ณผ์ )ํ๊ณ ์์
์ด ์ฌ๊ฐ๋ฉ๋๋ค.
++ GC์ ์์
์ Young ์์ญ์ ๋ํ Minor GC์ Old ์์ญ์ ๋ํ Major GC๋ก ๊ตฌ๋ถ๋ฉ๋๋ค.
๊ฐ์ฒด์งํฅ์ ์ค๊ณ์์น
SRP-๋จ์ผ์ฑ
์์์น : ํ ํด๋์ค๋ ํ๋์ ์ฑ
์๋ง ๊ฐ์ ธ์ผ ํ๋ค.
OCP-๊ฐ๋ฐฉ-ํ์ ์์น : ํ์ฅ์๋ ์ด๋ ค์๊ณ , ์์ ์๋ ๋ซํ์์ด์ผ ํ๋ค.
LSP-๋ฆฌ์ค์ฝํ ์นํ ์์น : ์์ ํ์
์ ํญ์ ํ์ ํ์
์ผ๋ก ๋์ฒดํ ์ ์์ด์ผ ํ๋ค.
ISP-์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น : ์ธํฐํ์ด์ค ๋ด์ ๋ฉ์๋๋ ์ต์ํ ์ผ์๋ก ์ข๋ค.(ํ๋์ ์ผ๋ฐ์ ์ธ ์ธํฐํ์ด์ค๋ณด๋ค ์ฌ๋ฌ๊ฐ์ ๊ตฌ์ฒด์ ์ธ ์ธํฐํ์ด์ค๊ฐ ๋ซ๋ค.)SRP์ ๊ฐ์ ๋ฌธ์ ์ ๋ํ ๋ ๊ฐ์ง ๋ค๋ฅธ ํด๊ฒฐ์ฑ
์ด๋ค.
DIP-์์กด๊ด๊ณ ์ญ์ ์์น : ๊ตฌ์ฒด์ ์ธ ํด๋์ค๋ณด๋ค ์์ ํด๋์ค, ์ธํฐํ์ด์ค, ์ถ์ํด๋์ค์ ๊ฐ์ด ๋ณํ์ง ์์ ๊ฐ๋ฅ์ฑ์ด ๋์ ํด๋์ค์ ๊ด๊ณ๋ฅผ ๋งบ์ด๋ผ. DIP ์์น์ ๋ฐ๋ฅด๋ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ๋ฐฉ๋ฒ์ ์์กด์ฑ ์ฃผ์
(DI)์ด๋ผ๊ณ ํ๋ค.
๊ฐ์ฒด์งํฅ ์ค๊ณ์์น SOLID ์์ธํ ์์๋ณด๊ธฐ
์๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ
- ์๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ Method ์์ญ, Stack ์์ญ, Heap ์์ญ์ผ๋ก ๊ตฌ๋ถ๋๊ณ , ๋ฐ์ดํฐ ํ์
์ ๋ฐ๋ผ ํ ๋น๋ฉ๋๋ค.
- ๋ฉ์๋(Method)์์ญ : ์ ์ญ๋ณ์์ static๋ณ์๋ฅผ ์ ์ฅํ๋ฉฐ, Method์์ญ์ ํ๋ก๊ทธ๋จ์ ์์๋ถํฐ ์ข
๋ฃ๊น์ง ๋ฉ๋ชจ๋ฆฌ์ ๋จ์์๋ค.
- ์คํ(Stack)์์ญ : ์ง์ญ๋ณ์์ ๋งค๊ฐ๋ณ์ ๋ฐ์ดํฐ ๊ฐ์ด ์ ์ฅ๋๋ ๊ณต๊ฐ์ด๋ฉฐ, ๋ฉ์๋๊ฐ ํธ์ถ๋ ๋ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋๊ณ ์ข
๋ฃ๋๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋๋ค.LIFO(List In First Out) ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ณ ๋ณ์์ ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ํ ๋น๋๋ฉด ์ด์ ๋ฐ์ดํฐ๋ ์ง์์ง๋ค.
- ํ(Heap)์์ญ : new ํค์๋๋ก ์์ฑ๋๋ ๊ฐ์ฒด(์ธ์คํด์ค), ๋ฐฐ์ด ๋ฑ์ด Heap ์์ญ์ ์ ์ฅ๋๋ฉฐ, ๊ฐ๋น์ง ์ปฌ๋ ์
์ ์ํด ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ด๋ฆฌ๋์ด ์ง๋ค.
๊ฐ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด ํ ๋น๋๋ ์์
- Method ์์ญ : JVM์ด ๋์ํด์ ํด๋์ค๊ฐ ๋ก๋ฉ๋ ๋ ์์ฑ
- Stack ์์ญ : ์ปดํ์ผ ํ์ ์ ํ ๋น
- Heap ์์ญ : ๋ฐํ์์ ํ ๋น
- ์ปดํ์ผ ํ์ : ์์ค์ฝ๋๊ฐ ๊ธฐ๊ณ์ด๋ก ๋ณํ๋์ด ์คํ๊ฐ๋ฅํ ํ๋ก๊ทธ๋จ์ด ๋๋ ๊ณผ์
- ๋ฐํ์ : ์ปดํ์ผ ํ์ ์ดํ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๋
ํด๋์ค์ ๊ฐ์ฒด
ํด๋์ค๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด๋ด๊ธฐ ์ํ ์ค๊ณ๋ ํน์ ํ ์ด๋ผ๊ณ ํ ์ ์๊ณ , ๊ฐ์ฒด๋ฅผ ์์ฑํ๋๋ฐ ์ฌ์ฉํฉ๋๋ค.
๊ฐ์ฒด๋ ์ค๊ณ๋(ํด๋์ค)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋๋ฉฐ, ์์ ์ ๊ณ ์ ์ด๋ฆ๊ณผ ์ํ, ํ๋์ ๊ฐ์ต๋๋ค.
์ฌ๊ธฐ์ ์ํ๋ ํ๋(fields), ํ๋์ ๋ฉ์๋(Method)๋ผ๊ณ ํํํฉ๋๋ค.
๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋์ด ์ค์ ๋ก ํ์ฉ๋๋ ์ค์ฒด๋ '์ธ์คํด์ค'๋ผ๊ณ ๋ถ๋ฆ
๋๋ค.
์์ฑ์
์์ฑ์๋ ํด๋์ค์ ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๋ก, ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋ ํธ์ถ๋๋ ๋ฉ์๋์
๋๋ค.
๋ช
์์ ์ผ๋ก ์์ฑ์๋ฅผ ๋ง๋ค์ง ์์๋ default๋ก ๋ง๋ค์ด์ง๋ฉฐ, ์์ฑ์๋ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ค๋ฅด๊ฒํ์ฌ ์ค๋ฒ๋ก๋ฉํ ์ ์์ต๋๋ค.
Wrapper Class๋ ๋ฌด์์ด๋ฉฐ, Boxing๊ณผ UnBoxing์ ๋ฌด์์ธ๊ฐ
- ๊ธฐ๋ณธ ์๋ฃํ(primitive data type)์ ๋ํ ๊ฐ์ฒด ํํ์ Wrapper class๋ผ๊ณ ํฉ๋๋ค.
- ๊ธฐ๋ณธ ์๋ฃํ -> Wrapper class๋ก ๋ณํํ๋ ๊ฒ์ Boxing์ด๋ผ ํ๋ฉฐ,
- Wrapper class -> ๊ธฐ๋ณธ ์๋ฃํ์ผ๋ก ๋ณํํ๋ ๊ฒ์ UnBoxing์ด๋ผ ํฉ๋๋ค.
Wrapperํด๋์ค๋?
Synchronized
- ์ฌ๋ฌ ๊ฐ์ ์ฐ๋ ๋๊ฐ ํ ๊ฐ์ ์์์ ์ฌ์ฉํ๊ณ ์ ํ ๋, ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ์ฐ๋ ๋๋ฅผ ์ ์ธํ๊ณ ๋๋จธ์ง ์ฐ๋ ๋๋ค์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๊ฒ ๋ง๋ ๊ฐ๋
์
๋๋ค.