Process : ์ด์์ฒด์ ๋ก ๋ถํฐ ์์์ ํ ๋น๋ฐ์ ์์ ์ ๋จ์๋ก ํ๋ก์ธ์๋ฅผ ํ ๋น๋ฐ์ ์ฃผ์๊ณต๊ฐ, ํ์ผ, ๋ฉ๋ชจ๋ฆฌ๋ฑ ์์์ ํ ๋น ๋ฐ์ ์์ ์ด ์คํ๋จ. ๊ฐ ํ๋ก์ธ์ค๋ ์์ ๋ง์ ๊ณ ์ ๊ณต๊ฐ๊ณผ ์์์ ํ ๋น๋ฐ๊ธฐ ๋๋ฌธ์ ํ๋ก์ธ์ค๊ฐ ์์ ๊ณต์ ๋ฑ์ ํต์ ์ ์ํด์๋ IPC(Inter-Process Communication)๋ฅผ ํตํด ์งํํ์ฌ์ผ ํจ.
Thread : ํ๋ก์ธ์ค๊ฐ ํ ๋น๋ฐ์ ์์์ ์ด์ฉํ๋ ์คํ์ ๋จ์๋ก ํ ํ๋ก์ธ์ค ๋ด์์ ๋์๋๋ ์ฌ๋ฌ ์คํ์ ํ๋ฆ์ ์๊ธฐํ๋ฉฐ ํ๋ก์ธ์ค ๋ด์ ์ฃผ์ ๊ณต๊ฐ์ด๋ ์์๋ฑ์ ์ฐ๋ ๋๋ผ๋ฆฌ ๊ณต์ ํ๋ฉฐ ์คํ์ด ๊ฐ๋ฅํจ.
์ค๋ ๋๋ ํ๋ก์ธ์ค ๋ด์์ ๊ฐ๊ฐ์ ์คํ ๊ณต๊ฐ์ ์ ์ธํ ๋๋จธ์ง ๊ณต๊ฐ๊ณผ ์์คํ ์์์ ๊ณต์ ํ๋ค.๊ทธ๋ฌ๋ฏ๋ก ํ๋ก์ธ์ค๋ฅผ ์ด์ฉํ์ฌ ๋์์ ์ฒ๋ฆฌํ๋ ์ผ์ ์ค๋ ๋๋ก ๊ตฌํํ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ฌผ๋ก ์์คํ ์์ ์๋ชจ๋ ํ๊ฒฉํ ์ค์ด๋ ๋ค.. ์ด์ ๊ฐ์ด ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ ๊ฒ๋ณด๋ค ์ค๋ ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ํจ์จ์ ์ด๋ค. ํนํ ๋ฉํฐ ํ๋ก์ธ์ ํ๊ฒฝ์์๋ ๋์ฑ ํจ๊ณผ๊ฐ ํ์ํ๋ค. ์ค๋ ๋ ๊ฐ์ ํต์ ์ด ํ์ํ ๊ฒฝ์ฐ ๋ณ๋์ ์์์ ์ด์ฉํ๋ ๊ฒ์ด ์๋๋ผ ์ ์ญ ๋ณ์์ ๊ณต๊ฐ์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ค.
- ์์คํ ์ ์ฒ๋ฆฌ๋์ด ํฅ์
- ์์คํ ์ ์์์๋ชจ๊ฐ ์ค์ด๋ฌ
- ํ๋ก๊ทธ๋จ๊ฐ ์๋ต ์๊ฐ ๋จ์ถ
- ํ๋ก์ธ์ค๊ฐ ํต์ ๋ฐฉ๋ฒ ๋ณด๋ค ์ค๋ ๋๊ฐ ํต์ ๋ฐฉ๋ฒ์ด ๊ฐ๋จ
- ๋ฉํฐ์ฐ๋ ๋ ํ๋ก๊ทธ๋๋ฐ์ ์ฃผ์ ๊น๊ฒ ์ค๊ณ๊ฐ ํ์ - ๋ฏธ๋ฌํ ์๊ฐ, ์๋ชป๋ ๋ณ์ ๊ณต์ ๋ก ์ค๋ฅ ๋ฐ์ ํ๋ฅ ์ฆ๊ฐ
- ๊ณต์ ๋๋ ์ ์ญ ๋ณ์์ ๋ํ ์ถฉ๋๋ก ์ธํ ๋๊ธฐํ ๋ฌธ์ ํด๊ฒฐ ํ์
- ํ๋ก๊ทธ๋จ ๋๋ฒ๊น ์ด ์ด๋ ค์
- ๋จ์ผ ํ๋ก์ธ์ ์์คํ ์์์ ํจ๊ณผ ๋ฏธ๋น
๋ค์ค ํ๋ก๊ทธ๋๋ฐ ์์คํ ์์ ํ๋ ๋๋ ๊ทธ ์ด์์ ํ๋ก์ธ์ค๊ฐ ์ํํ ์ ์๋ ์ด๋ค ํน์ ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์ํ(๊ต์ฐฉ์ํ)
- ํ์ ๋ ์์์ ์ฌ์ฉํ๋ ค๊ณ ์๋ก ๊ฒฝ์ํ๋ ์ํฉ
- ํ๋ก์ธ์ค๊ฐ ์์์ ์์ฒญ์ ๊ทธ ์๊ฐ์ ํด๋น ์์์ ๋๊ตฐ๊ฐ๊ฐ ์ฌ์ฉํ๊ฑฐ๋ ์ ์ ํ์ฌ ์ฌ์ฉํ ์ ์๋ ์ํ๊ฐ ๋ฐ์ํ์ฌ ๋๊ธฐ ์ํ๊ฐ ๋ฐ์ํ๋ ์ํฉ
- ๋๊ธฐ์ํ๊ฐ ๋ค์ ์คํ ์ํ๋ก ๋ณ๊ฒฝ๋์ง ์์ ๊ฒฝ์ฐ
- ์ํธ๋ฐฐ์ (Mutual exclusion) : ํ๋ฒ์ ์ค์ง ํ ํ๋ก์ธ์ค๋ง ์์์ ์ฌ์ฉ
- ์ ์ ๋๊ธฐ(Hold and wait) : ํ๋ก์ธ์ค๊ฐ ์ ์ด๋ ํ๋์ ์์์ ์ ์ ํ๋ฉด์ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์ ์ ํ๊ณ ์๋ ์์์ ์ถ๊ฐ๋ก ์ป๊ธฐ์ํด ๋๊ธฐ
- ๋น์ ์ (No preemption) : ์ ์ ๋ ์์์ ๊ฐ์ ๋ก ํด์ ๋ ์ ์๊ณ , ์ ์ ํ๊ณ ์๋ ํ๋ก์ธ์ค๊ฐ ์์ ์ ๋ง์น๊ณ ์์์ ์๋ฐ์ ์ผ๋ก ํด์
- ์ํ๋๊ธฐ(Circular wait) : ๋๊ธฐํ๊ณ ์๋ ํ๋ก์ธ์ค ์งํฉ์์ P0 ~ Pn์์ ๊ผฌ๋ฆฌ๋ฅผ ๋ฌผ๋ฉด์ ์ ์ ํ ์์์ ๊ณ์ ๋๊ธฐํ๊ณ ์๋ ์ํ
- ๊ต์ฐฉ์ํ ์๋ฐฉ ๋ฐ ํํผ : ๊ต์ฐฉ์ํ๊ฐ ๋์ง ์๋๋ก ๋ณด์ฅํ๊ธฐ ์ํด ๊ต์ฐฉ์ํ๋ฅผ ์๋ฐฉํ๊ฑฐ๋ ํํผํ๋ ํ๋กํ ์ฝ์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ
- ๊ต์ฐฉ์ํ ํ์ง ๋ฐ ํ๋ณต : ๊ต์ฐฉ์ํ๊ฐ ๋๋๋ก ํ์ฉํ๊ณ ๋ค์์ ํ๋ณต์ํค๋ ๋ฐฉ๋ฒ
- ๊ต์ฐฉ ์ํ ๋ฌด์ : ๋๋ถ๋ถ์ ์์คํ ์ด ๊ต์ฐฉ์ํ๊ฐ ์ ๋ฐ์ํ์ง ์์ผ๋ฏ๋ก, ๊ต์ฐฉ์ํ ์๋ฐฉ, ํํผ ,ํ์ง, ๋ณต๊ตฌ๋ฐฉ๋ฒ์ ๋ฌด์
์์ค์ฝ๋์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๋ ๊ฒ์ผ๋ก ๊ตฌ๋ ์ฑ ๋ฐ ์ฒด๊ณ์ ์ธ ์์ค์ฝ๋๋ฅผ ์์ฑํ๋๋ฐ ์ฉ์ดํ ๊ธฐ๋ฒ(์ฃผ์)์ด๋ค.
์์ค์ฝ๋์์์ ๋น์ง๋์ค ๋ก์ง์ ์ํฅ์ ์ฃผ์ง ์์ง๋ง, ํด๋น ํ๊ฒ์ ์ฐ๊ฒฐ ๋ฐฉ๋ฒ ๋ฐ ์์ค์ฝ๋์ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝ ๊ฐ๋ฅํ๋ค.
์ด๋ ธํ ์ด์ ์ ์ปดํ์ผ ์๊ธฐ์ ์ฒ๋ฆฌ๋ ๊ฐ๋ฅํ ์ ์์ผ๋ฉฐ, ์๋ฐ์ ๋ฆฌํ๋ ์ ์ ๊ฑฐ์ณ์ ๋ฐํ์์์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ ์ ์์ต๋๋ค.
Stack ๋ณ์๊ฐ, ๊ธฐ๋ณธํ์ (Primitive Type)์ธ ์ ์ํ ๋ณ์, ์ค์ํ ๋ณ์, ๋ ผ๋ฆฌํ ๋ณ์๋ฅผ ์ค์ ๊ฐ์ผ๋ก ์ ์ฅํ๋ค. ํฌ๊ธฐ๊ฐ ์ ํด์ ธ ์๋ ํ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ปดํ์ผ๋ ๋ ์ด๋ฏธ ๊ณ์ฐ์ด ์ด๋ฃจ์ด์ง. ๋ฉ์๋ ํธ์ถ์์ ์ฒ๋ฆฌ๋๋ value(Heap๋ฉ๋ชจ๋ฆฌ์์ Objects ์ฐธ์กฐ ๊ฐ -refer objects, ๋ฉ์๋ ๋ด์์ ์์ฑ ๋๊ณ ์ฌ๋ผ์ง๋ ๋ณ์๋ค - short-lived values)๊ฐ ์ ์ฅ๋๋ฉฐ, ํญ์ LIFO(Last-In-First-Out)ํํ๋ก ์คํ๋๋ค. ๋ฉ์๋๊ฐ ์คํ๋๋ฉด ์๋ก์ด ๋ธ๋ก์ Stack๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ์กํ๋ฉฐ local primitie values์ ๋ฉ์๋ ๋ด์ refer Objects๊ฐ Stack ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋น๋๋ค. ๋ฉ์๋๊ฐ ๋๋ ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ฐํ๋์ด ๋น์์ง๋ค.
Heap ๊ฐ์ฒด(Objects, JRE classes)์ ๋ฐฐ์ด์ด ์์ฑ๋๋ ๊ณต๊ฐ์ด๋ฉฐ GC(Garbage Collection)๋ Heap ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ๋ด์ Objects ์ค ์ฐธ์กฐ(Reference) ๊ฐ์ด ์๋ Objects์ ๋ํด์ ์คํํ์ฌ Objects๊ฐ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ฐํํด์ฃผ์ด Heap ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ฒญ์/๊ด๋ฆฌ ํด์ค๋ค. Heap๋ฉ๋ชจ๋ฆฌ์์ญ์ ๋ชจ๋ Objects์ ํ๋ก์ธ์ค(์ดํ๋ฆฌ์ผ์ด์ ) ๋ด์์ ์ ์ญ์ ์ผ๋ก ์ก์ธ์ค๊ฐ ๊ฐ๋ฅํ๋ฉฐ ์ฐธ์กฐ(Reference)๊ฐ ๊ฐ๋ฅํ๋ค.
package com.journaldev.test;
public class Memory {
public static void main(String[] args) { // Line 1
int i=1; // Line 2
Object obj = new Object(); // Line 3
Memory mem = new Memory(); // Line 4
mem.foo(obj); // Line 5
} // Line 9
private void foo(Object param) { // Line 6
String str = param.toString(); //// Line 7
System.out.println(str);
} // Line 8
}[http://www.journaldev.com/4098/java-heap-space-vs-stack-memory] (http://www.journaldev.com/4098/java-heap-space-vs-stack-memory)
Java๋ ํ๋ก๊ทธ๋จ ์ฝ๋ ๋ด์์ ๋ช ์์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ํด์ ๋ฅผ ์ ์ธํ์ง ์์ผ๋ฉฐ, GC(Garbage Collector)๊ฐ ์ฐธ์กฐ๊ฐ ์์ด์ง ๊ฐ์ฒด(ํ์์์ด์ง ๊ฐ์ฒด)๋ฅผ Heap๋ฉ๋ชจ๋ฆฌ ์์ญ์์ ์ฐพ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฐํ(์ง์ฐ๋) ์์ ์ ํ๋ค.
JVM์์ GC๊ฐ ์ํ๋ ๋๋ ํ๋ก๊ทธ๋จ์ ์ํ์ ๋ชจ๋ ๋ฉ์ถ๊ณ GC๋ฅผ ์ํํ๊ฒ ๋์ด ํ๋ก๊ทธ๋จ ์ฑ๋ฅ์ ์ํฅ์ ๋ผ์น๋ ๋จ์ ์ด ์กด์ฌ
[http://d2.naver.com/helloworld/1329] (http://d2.naver.com/helloworld/1329)
GC๊ฐ ์ํ๋ ๋ ๋จ๋ง์ ์ฑ๋ฅ์ด ์ข์ง ์์ ๊ฒฝ์ฐ ํ๋ฒ์ ๋ง์ Objects์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ฐํ๋๋ ์ฒ๋ฆฌ๊ฐ ๋ ๋ ์ฑ์ด ๋ฒ๋ฒ ์ด๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์
์๋๋ก์ด๋์ ๊ฒฝ์ฐ 3.0 ์ด์ ๋ถํฐ concurrent ๋ฐ partial collection๋ฐฉ์์ ํตํด ๊ฐ๋น์ง์ปฌ๋ ์ ์ ๋ฐ์์ฑ์ด ๋์์ก์ผ๋ฉฐ ๋์ ์๊ฐ์ด 5ms ์ดํ๋ก ๋จ์ถ๋์ด GC๊ฐ ์ ์์ ๋์๋๋๋ก ๊ฐ์ ๋จ.
[https://source.android.com/devices/tech/dalvik/gc-debug.html] (https://source.android.com/devices/tech/dalvik/gc-debug.html)
[https://rejrecords.wordpress.com/2016/11/26/android-gc-vs-ios-ref-counting/amp/] (https://rejrecords.wordpress.com/2016/11/26/android-gc- vs-ios-ref-counting/amp/)
- ์๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ํด์ ๋ Garbage Collector(์ดํ GC)์ ์ํด ์ํ๋ฉ๋๋ค. finalize()๋ GC์ ์ํด ํธ์ถ๋ฉ๋๋ค.
- finalize()๋ ์คํ๋๋ค๋ ๋ณด์ฅ์ด ์์ต๋๋ค. ์คํ์ด ๋ ์๋ ์ ๋ ์๋ ์๊ณ ๋จธ ๊ทธ๋ ์ต๋๋ค. ๊ทธ๋์ ํ์์ ์ธ ๋ก์ง์ ํฌํจ์์ผ์๋ ์ ๋ฉ๋๋ค.
- finalize()๋ ๋ชจํ๋๋ฐ ์ฐ๋๋? ํน์๋ ํ๋ ๋ก์ง์ ๋ฃ์ผ๋ฉด ๋ฉ๋๋ค. ๋๋น๋ฅผ ์ด๊ณ ์ฌ์ฉ์๊ฐ ํน์ ์ ๋ซ์์ผ๋ฉด ๋ซ๋ ๋ก์ง
Reference http://iilii.egloos.com/4091133
intํ ๋ฐํ(-2147483648 ~ 2147483647)
Java์ ์ ์/์ค์ํ์ ๊ฐ ๋ฒ์
- boolean 1bit
- int 32bits
- long 64bits
- float 32bits
- double 64bits
- short 16bits
- char 16bits
- byte 8bits
- ์์ฑ๋ ํด๋์ค๋ ํ๋์ ๊ธฐ๋ฅ๋ง ๊ฐ์ง๋ฉฐ ํด๋์ค๊ฐ ์ ๊ณตํ๋ ๋ชจ๋ ์๋น์ค๋ ๊ทธ ํ๋์ ์ฑ ์(๋ณํ์ ์ถ: axis of change)์ ์ํํ๋ ๋ฐ ์ง์ค๋์ด ์์ด์ผ ํ๋ค๋ ์์น
- ์ด๋ค ๋ณํ์ ์ํด ํด๋์ค๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ ์ด์ ๋ ์ค์ง ํ๋๋ฟ์ด์ด์ผ ํจ์ ์๋ฏธ
- ์ฑ ์์ ์ ์ ํ ๋ถ๋ฐฐํจ์ผ๋ก์จ ์ฝ๋์ ๊ฐ๋ ์ฑ ํฅ์, ์ ์ง๋ณด์ ์ฉ์ด๋ผ๋ ์ด์ ๊น์ง ๋๋ฆด ์ ์์ผ๋ฉฐ ๊ฐ์ฒด์งํฅ ์๋ฆฌ์ ๋์ ์ ๊ฒฉ์ธ OCP์๋ฆฌ๋ฟ ์๋๋ผ ๋ค๋ฅธ ์๋ฆฌ๋ค์ ์ ์ฉํ๋ ๊ธฐ์ด
- ์ํํธ์จ์ด์ ๊ตฌ์ฑ์์(์ปดํฌ๋ํธ, ํด๋์ค, ๋ชจ๋, ํจ์)๋ ํ์ฅ์๋ ์ด๋ ค์๊ณ , ๋ณ๊ฒฝ์๋ ๋ซํ์์ด์ผ ํ๋ค๋ ์๋ฆฌ
- ์๊ตฌ์ฌํญ์ ๋ณ๊ฒฝ์ด๋ ์ถ๊ฐ์ฌํญ์ด ๋ฐ์ํ๋๋ผ๋, ๊ธฐ์กด ๊ตฌ์ฑ์์๋ ์์ ์ด ์ผ์ด๋์ง ๋ง์์ผ ํ๋ฉฐ, ๊ธฐ์กด ๊ตฌ์ฑ์์๋ฅผ ์ฝ๊ฒ ํ์ฅํด์ ์ฌ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ค๋ ๋ป
- OCP๋ฅผ ๊ฐ๋ฅ์ผ ํ๋ ์ค์ ๋ฉ์ปค๋์ฆ์ ์ถ์ํ์ ๋คํ์ฑ์ด๋ผ๊ณ ์ค๋ช
- LSP๋ฅผ ํ๋ง๋๋ก ํ๋ค๋ฉด, โ์๋ธ ํ์ ์ ์ธ์ ๋ ๊ธฐ๋ฐ ํ์ ์ผ๋ก ๊ต์ฒดํ ์ ์์ด์ผ ํ๋ค.โ๋ผ๊ณ ํ ์ ์์ต๋๋ค. ์ฆ, ์๋ธ ํ์ ์ ์ธ์ ๋ ๊ธฐ๋ฐ ํ์ ๊ณผ ํธํ๋ ์ ์์ด์ผ ํฉ๋๋ค. ๋ฌ๋ฆฌ ๋งํ๋ฉด ์๋ธ ํ์ ์ ๊ธฐ๋ฐ ํ์ ์ด ์ฝ์ํ ๊ท์ฝ(public ์ธํฐํ์ด์ค, ๋ฌผ๋ก ๋ฉ์๋๊ฐ ๋์ง๋ ์์ธ๊น์ง ํฌํจ๋ฉ๋๋ค.)์ ์ง์ผ์ผ ํฉ๋๋ค. ์์์ ๊ตฌํ์์(extends ๊ด๊ณ)์ด๋ ์ธํฐํ์ด์ค ์์(implements ๊ด๊ณ)์ด๋ ๊ถ๊ทน์ ์ผ๋ก๋ ๋คํ์ฑ์ ํตํ ํ์ฅ์ฑ ํ๋์ ๋ชฉํ๋ก ํฉ๋๋ค. LSP์๋ฆฌ๋ ์ญ์ ์๋ธ ํด๋์ค๊ฐ ํ์ฅ์ ๋ํ ์ธํฐํ์ด์ค๋ฅผ ์ค์ํด์ผ ํจ์ ์๋ฏธํฉ๋๋ค
- ๋คํ์ฑ๊ณผ ํ์ฅ์ฑ์ ๊ทน๋ํ ํ๋ ค๋ฉด ํ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค๋ ์์์ ํด๋์ค(์ธํฐํ์ด์ค)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ข์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ ์ธ์ ๊ธฐ๋ฐ ํด๋์ค๋ก ์์ฑ์ ๊ตฌ์ฒด ํด๋์ค๋ก ๋์ ํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉ
- ์์ฑ ์์ ์์ ๊ตฌ์ฒด ํด๋์ค๋ฅผ ๋ ธ์ถ์ํค๊ธฐ ๊บผ๋ ค์ง ๊ฒฝ์ฐ ์์ฑ ๋ถ๋ถ์ Abstract Factory ๋ฑ์ ํจํด์ ์ฌ์ฉํ์ฌ ์ ์ฐ์ฑ์ ๋์
- ์์์ ํตํ ์ฌ์ฌ์ฉ์ ๊ธฐ๋ฐ ํด๋์ค์ ์๋ธ ํด๋์ค ์ฌ์ด์ IS-A๊ด๊ณ๊ฐ ์์ ๊ฒฝ์ฐ๋ก๋ง ์ ํ ๋์ด์ผ ํฉ๋๋ค. ๊ทธ ์ธ์ ๊ฒฝ์ฐ์๋ ํฉ์ฑ(composition)์ ์ด์ฉํ ์ฌ์ฌ์ฉ์ ํด์ผ ํฉ๋๋ค. ์์์ ๋คํ์ฑ๊ณผ ๋ฐ๋ก ์๊ฐํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋คํ์ฑ์ผ๋ก ์ธํ ํ์ฅ ํจ๊ณผ๋ฅผ ์ป๊ธฐ ์ํด์๋ ์๋ธ ํด๋์ค๊ฐ ๊ธฐ๋ฐ ํด๋์ค์ ํด๋ผ์ด์ธํธ ๊ฐ์ ๊ท์ฝ(์ธํฐํ์ด์ค)๋ฅผ ์ด๊ฒจ์๋ ์ ๋ฉ๋๋ค. ๊ฒฐ๊ตญ ์ด ๊ตฌ์กฐ๋ ๋คํ์ฑ์ ํตํ ํ์ฅ์ ์๋ฆฌ์ธ OCP๋ฅผ ์ ๊ณต
- ISP์๋ฆฌ๋ ํ ํด๋์ค๋ ์์ ์ด ์ฌ์ฉํ์ง ์๋ ์ธํฐํ์ด์ค๋ ๊ตฌํํ์ง ๋ง์์ผ ํ๋ค๋ ์๋ฆฌ
- ์ด๋ค ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค์ ์ข ์๋ ๋์๋ ๊ฐ๋ฅํ ์ต์ํ์ ์ธํฐํ์ด์ค๋ง์ ์ฌ์ฉ
- ์์กด ๊ด๊ณ์ ์ญ์ Dependency Inversion ์ด๋ ๊ตฌ์กฐ์ ๋์์ธ์์ ๋ฐ์ํ๋ ํ์ ๋ ๋ฒจ ๋ชจ๋์ ๋ณ๊ฒฝ์ด ์์ ๋ ๋ฒจ ๋ชจ๋์ ๋ณ๊ฒฝ์ ์๊ตฌํ๋ ์๊ณ๊ด๊ณ๋ฅผ ๋๋ ์๋ฏธ์์ญ์
- ์ค์ ์ฌ์ฉ ๊ด๊ณ๋ ๋ฐ๋์ง ์์ผ๋ฉฐ, ์ถ์์ ๋งค๊ฐ๋ก ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์์ผ๋ก์จ ๊ด๊ณ๋ฅผ ์ต๋ํ ๋์จํ๊ฒ ๋ง๋๋ ์์น
Reference http://www.nextree.co.kr/p6960/
- equals(Object obj) ๋ ๊ฐ์ฒด์ ๋ ํผ๋ฐ์ค๊ฐ ์๋ ๊ฐ์ฒด์ ๋ด์ฉ์ด ๊ฐ์ ์ง๋ฅผ ํ๋จํ๋ ๋ฉ์๋
- equals๋ ์ด๋ค ์ค๋ธ์ ํธ๊ฐ ์ธ์๋ก ๋ฐ์ ๋ค๋ฅธ ์ค๋ธ์ ํธ์ ๊ทธ ๋ด์ฉ์ด ์ผ์นํ๋ ์ง๋ฅผ ํ๋จํฉ๋๋ค. == ๋ถํธ๋ก ํ๋จํ๋ ๊ฒ์ ๋ ํผ๋ฐ์ค, ์ฆ ๋ฉ๋ชจ๋ฆฌ ์์ ๊ฐ์ ๊ฐ์ฒด์ธ์ง๋ฅผ ํ๋จํ๋ ๋ฐ๋ฉด, equals๋ ๊ทธ ๋ด์ฉ์ ํ๋จํฉ๋๋ค.
- ์ถ์ด์ฑ: ์ด๋ค x,y,z์ ๋ํด์๋ x.equals(y)์ y.equals(z)๊ฐ true๋ฉด x.equals(z)๋ true๋ฅผ ๋ฆฌํดํด์ผ ํฉ๋๋ค.
- ์ผ๊ด์ฑ: x,y์ ๋ฉค๋ฒ ๋ณ์๊ฐ ๋ณํ์ง ์๋ ์ด์ x.equals(y)๋ ํญ์ ๊ฐ์ ๊ฐ์ ๋ฆฌํดํด์ผ ํ๋ค.
- ๋์นญ์ฑ. ์ด๋ ํ x,y์ ๋ํด์๋ x.equals(y) ์ y.equals(x)๋ ๊ฐ์ ๊ฐ์ ๊ฐ์ ธ์ผ ํฉ๋๋ค.
- ์ด๋ค ๊ฐ์ฒด x์ ๋ํด์๋ x.equals(x)๋ ๋ฐ๋์ true๋ฅผ ๋ฆฌํดํด์ผ ํฉ๋๋ค.
Reference http://egloos.zum.com/iilii/v/3999066
- hashCode๋ hash ๊ฐ์ ๋ฆฌํด
- ๊ฐ์ ์๋ฐ ์ดํ๋ฆฌ์ผ์ด์ ์์ ์คํ๋๋ค๋ฉด, equals์์ ๋น๊ตํ๋ ๋ฉค๋ฒ๋ณ์๊ฐ ๋ณ๊ฒฝ๋์ง ์๋๋ค๋ฉด, ๊ฐ์ int ๊ฐ์ ๋ฆฌํดํด์ผ ํฉ๋๋ค. equals์์ ์ฐ๋ ๋ฉค๋ฒ ๋ณ์๋ฅผ hashCode๋ฅผ ๊ตฌํํ๋๋ฐ๋ ๋๊ฐ์ด ์ฐ๋ฉด ๋ฉ๋๋ค. ๊ฒฐ๊ตญ equals์ ๊ตฌํ๊ณผ hashCode์ ๊ตฌํ์ ๋๋จ์ด์ง ์ ์์ต๋๋ค.
- a.equals(b)๊ฐ true์ผ ๊ฒฝ์ฐ a์ hashCode์ b์ hashCode๋ ๊ฐ์ ๊ฐ์ ๋ฆฌํดํด์ผ ํฉ๋๋ค.
- a.equals(b)๊ฐ false์ผ ๊ฒฝ์ฐ a์ hashCode์ b์ hashCode๊ฐ ๋ฐ๋์ ๋ค๋ฅธ ๊ฐ์ ๋ฆฌํดํ ํ์๋ ์์ง๋ง, ๊ฐ๋ฅํ๋ฉด ๋ค๋ฅธ ๊ฐ์ ๋ฆฌํดํ๋ ๊ฒ ์ข์ต๋๋ค.
hashcode ๊ฐ์ ์๋ฐ ์ดํ๋ฆฌ์ผ์ด์ ์์ ์คํ๋๋ค๋ฉด, equals์์ ๋น๊ตํ๋ ๋ฉค๋ฒ๋ณ์๊ฐ ๋ณ๊ฒฝ๋์ง ์๋๋ค๋ฉด, ๊ฐ์ int ๊ฐ์ ๋ฆฌํดํด์ผ ํฉ๋๋ค. equals์์ ์ฐ๋ ๋ฉค๋ฒ ๋ณ์๋ฅผ hashCode๋ฅผ ๊ตฌํํ๋๋ฐ๋ ๋๊ฐ์ด ์ฐ๋ฉด ๋ฉ๋๋ค.
public class Person {
private String name;
public Person(String name) {
super();
this.name = name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int hashCode() {
final int PRIME = 31;
int result = 1;
result = PRIME * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final Person other = (Person) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}Reference http://iilii.egloos.com/4000476
๋ฆฌํฐ๋ด๊ณผ new String์ ์ธ์ ์ฐจ์ด
๊ด๋ จ์ด ์๋ ์์๋ค์ ์งํฉ์ ๋๋ค. ์๋ฐ์์๋ final๋ก String๊ณผ ๊ฐ์ ๋ฌธ์์ด์ด๋ ์ซ์๋ค์ ๋ํ๋ด๋ ๊ธฐ๋ณธ ์๋ฃํ์ ๊ฐ์ ๊ณ ์ ํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ๊ณ ์ ๋ ๊ฐ์ ์์๋ผ๊ณ ํฉ๋๋ค. ์์ด๋ก๋ constant์ ๋๋ค. ์ด๋ค ํด๋์ค๊ฐ ์์๋ง์ผ๋ก ์์ฑ๋์ด ์์ผ๋ฉด ๋ฐ๋์ class๋ก ์ ์ธํ ํ์๋ ์์ต๋๋ค. ์ด๋ด ๋ class๋ก ์ ์ธ๋ ๋ถ๋ถ์ enum์ด๋ผ๊ณ ์ ์ธํ๋ฉด ์ด ๊ฐ์ฒด๋ ์์์ ์งํฉ์ด๋ค. ๋ผ๋ ๊ฒ์ ๋ช ์์ ์ผ๋ก ๋ํ๋ ๋๋ค. enum์ enumeration์ด๋ผ๋ ์ , ๊ณ์ฐ, ์ด๊ฑฐ, ๋ชฉ๋ก์ด๋ผ๋ ์์ด๋จ์ด์ ์๋ถ๋ถ๋ง ๋ฐ์ ๋ง๋ ์์ฝ์ด์ ๋๋ค.
Java์์ enum ํ์ ์ ์ด๊ฑฐํ์ ์๋ฏธํ๋ ํน๋ณํ ํํ์ ํด๋์ค์ ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ ํด๋์ค์ ๊ฐ์ด ์์ฑ์(Constructor)๊ฐ ์์ด์ผ ํฉ๋๋ค. ๋ฌผ๋ก ์์ฑ์๋ฅผ ๋ง๋ค์ด์ฃผ์ง ์์๋ Java๊ฐ default์์ฑ์๋ฅผ ๋ง๋ค์ด์ฃผ๊ธด ํ์ง๋ง, enum์ ๊ฒฝ์ฐ์๋ ๋ค๋ฅธ ํด๋์ค๋ค๊ณผ ๋ฌ๋ฆฌ ์ผ๋ฐ์ ์ผ๋ก ์์ฑ์์ ์ ๊ทผ ์ ์ด์๋ฅผ private๋ก ์ง์ ํด์ผํฉ๋๋ค.. enum ํ์ ์ ์์ฑ์๋ฅผ ์ผ๋ฐ์ ์ธ ํด๋์ค์ ์์ฑ์์ ๊ฐ์ด public์ผ๋ก ์ค์ ํ๊ฑฐ๋ protected๋ก ํ๊ฒ ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
enumํ์ ์ ๊ณ ์ ๋ ์์๋ค์ ์งํฉ์ผ๋ก์จ, ๋ฐํ์(run-time)์ด ์๋ ์ปดํ์ผํ์(compile-time)์ ๋ชจ๋ ๊ฐ์ ์๊ณ ์์ด์ผ ํฉ๋๋ค. ์ฆ ๋ค๋ฅธ ํจํค์ง๋ ํด๋์ค์์ enum ํ์ ์ ์ ๊ทผํด์ ๋์ ์ผ๋ก ์ด๋ค ๊ฐ์ ์ ํด์ค ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ปดํ์ผ ์์ ํ์ ์์ ์ฑ์ด ๋ณด์ฅ๋ฉ๋๋ค(ํด๋น enumํด๋์ค ๋ด์์ ๊น์ง๋ newํค์๋๋ก ์ธ์คํด์ค ์์ฑ์ด ๋ถ๊ฐ๋ฅํ๋ฉฐ newInstance(), clone()๋ฑ์ ๋ฉ์๋๋ ์ฌ์ฉ ๋ถ๊ฐ). ์ด ๋๋ฌธ์ ์์ฑ์์ ์ ๊ทผ์ ์ด์๋ฅผ private์ผ๋ก ์ค์ ํด์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ๋๋ฉด ์ธ๋ถ์์ ์ ๊ทผ ๊ฐ๋ฅํ ์์ฑ์๊ฐ ์์ผ๋ฏ๋ก enumํ์ ์ ์ค์ ์ ์ผ๋ก final๊ณผ ๋ค๋ฆ์ด ์์ต๋๋ค. ํด๋ผ์ด์ธํธ์์ enum์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๊ณ ์์์ ๋ฐ์ ์๋ ์์ผ๋ฏ๋ก, ํด๋ผ์ด์ธํธ์ ๊ด์ ์์ ๋ณด๋ฉด ์ธ์คํด์ค๋ ์์ง๋ง ์ ์ธ๋ enum ์์๋ ์กด์ฌํ๋ ์ ์ ๋๋ค. ๊ฒฐ๊ตญ enumํ์ ์ ์ธ์คํด์ค ์์ฑ์ ์ ์ดํ๋ฉฐ, ์ฑ๊ธํค(singleton) ์ ์ผ๋ฐํํฉ๋๋ค. ์ด๋ฌํ ํน์ฑ ๋๋ฌธ์, enumํ์ ์ ์ฑ๊ธํค์ ๊ตฌํํ๋ ํ๋์ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉ๋๊ธฐ๋ ํฉ๋๋ค.
Reference http://www.nextree.co.kr/p11686/
์ฝ๋๊ฐ ๋จ์ํด์ง๋ฉฐ ๊ฐ๋ ์ฑ์ด ์ข์ต๋๋ค. ์ธ์คํด์ค ์์ฑ๊ณผ ์์์ ๋ฐฉ์งํฉ๋๋ค. ํค์๋ enum์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ตฌํ์ ์๋๊ฐ ์ด๊ฑฐ์์ ๋ถ๋ช ํ๊ฒ ๋ํ๋ผ ์ ์์ต๋๋ค.
์์(Inheritance)์ด๋ ๋ฌผ๋ ค์ค๋ค๋ ์๋ฏธ๋ค. ์ด๋ค ๊ฐ์ฒด๊ฐ ์์ ๋ ๊ทธ ๊ฐ์ฒด์ ํ๋(๋ณ์)์ ๋ฉ์๋๋ฅผ ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ๋ฌผ๋ ค ๋ฐ์ ์ ์๋ ๊ธฐ๋ฅ์ ์์์ด๋ผ๊ณ ํ๋ค.
- hashcode()
- equals(Object obj)
- clone()
- toString()
- finalize()
์ ๋ค๋ฆญ(Generic)์ ํด๋์ค ๋ด๋ถ์์ ์ฌ์ฉํ ๋ฐ์ดํฐ ํ์ ์ ์ธ๋ถ์์ ์ง์ ํ๋ ๊ธฐ๋ฒ์ ์๋ฏธํ๋ค. ์ฝ๊ฒ๋งํด์ ArrayList(์ปฌ๋ ์ ํด๋์ค์์ ์ฌ์ฉ๊ฐ๋ฅํ์ง๋ง ์ฌ์ด ์ค๋ช ์ ์ํด ๋ํ์ ์ธ ์ปฌ๋ ์ ํด๋์ค์ธ ArrayList๋ฅผ ๊ฐ์ง๊ณ ์ค๋ช ํ๊ฒ ์ต๋๋ค.) ๊ฐ ๋ค๋ฃฐ ๊ฐ์ฒด๋ฅผ ๋ฏธ๋ฆฌ ๋ช ์ํด์ค์ผ๋ก์จ ํ๋ณํ์ ํ์ง ์๊ณ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ์ฆ ArrlayList๊ฐ ์ฌ์ฉํ ๊ฐ์ฒด์ ํ์ ์ด๋ ์ด์ผ๊ธฐ ์ ๋๋ค
- ์ปดํ์ผ ๋จ๊ณ์์ ์ค๋ฅ๊ฐ ๊ฒ์ถ๋๋ค
- ์ค๋ณต์ ์ ๊ฑฐ์ ํ์ ์์ ์ฑ์ ๋์์ ์ถ๊ตฌํ ์ ์๋ค
- ์ ๋ค๋ฆญ์ผ๋ก ์ฌ ์ ์๋ ๋ฐ์ดํฐ ํ์ ์ ํน์ ํด๋์ค์ ์์์ผ๋ก ์ ํํ ์ ์๋ค
Reference
[http://lng1982.tistory.com/240] (http://lng1982.tistory.com/240) [https://opentutorials.org/module/516/6237] (https://opentutorials.org/module/516/6237)
List์ ํน์ง
- ์์๊ฐ ์๋ Collection
- Data๋ฅผ ์ค๋ณตํด์ ํฌํจํ ์ ์์
Stack
- Data์ ์ฝ์ /์ถ์ถ์ด ๊ฐ๋ฅํ ์๋ฃ๊ตฌ์กฐ๋ก LIFO(Last In First Out ํ์ ์ ์ถ) ๊ตฌ์กฐ๋ก ๋์ด ์์
- push() : data ์ฝ์ ์ ์ฌ์ฉ
- pop() : data ์ถ์ถ์ ์ฌ์ฉ
- peek() : data ์ถ์ถ์ ์ญ์ ๋ฅผ ํ์ง ์๊ณ data๋ง ๊ฐ์ ธ์ค๋๋ก ์ฌ์ฉ
- search() : data๋ฅผ ๊ฒ์ํ ๋ ์ฌ์ฉ
Vector
- ์๋์ผ๋ก ๋๊ธฐํ ๋ณด์ฅ
- ArrayList์ ๋๊ธฐํ๊ฐ ๋ณด์ฅ๋๋๋ก ์ต์ ํ๋ ํด๋์ค
- Java 5.0 ์ดํ AutoBoxing/AutoUnBoxing์ง์
- AutoBoxing์ด๋ primitiveํ์ ์ Wrapperํด๋์คํ์ ๊ฐ์ฒด๋ก ์๋์ผ๋ก ๋ณํํด์ฃผ๋ ๊ธฐ๋ฅ
ArrayList
- ๋๊ธฐํ๋ฅผ ๋ณด์ฅํด์ฃผ์ง ์๋๋ค
- ๋ฐฐ์ด์ ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฆ๊ฐ ๊ธฐ๋ฅ์ ๊ตฌํํ ํด๋์ค
Set์ ํน์ง
- ์งํฉ์ ์ธ ๊ฐ๋ ์ Collection
- ์์์ ์๋ฏธ๊ฐ ์์
- Data๋ฅผ ์ค๋ณตํด์ ํฌํจํ ์ ์์
Map์ ํน์ง
- List์ Set์ด ์์๋ ์งํฉ์ ๊ฐ๋ ์ด๋ผ๋ฉด Map์ ๊ฒ์์ ๊ฐ๋ ์ด ์ถ๊ฐ๋ ์ธํฐํ์ด์ค
- ๋ฐ์ดํฐ ์ฝ์ ์ Key,Value ํํ๋ก ์ฝ์ ๋๋ฉฐ Key๋ฅผ ์ด์ฉํ์ฌ Value๋ฅผ ์ฐพ์ ์ ์์
HashMap๊ณผ HashTable
- ๋ด๋ถ์ ์ผ๋ก ๋ชจ๋ Hash๊ธฐ๋ฒ์ ์ฌ์ฉ
- Java Collection Package์ Map์ธํฐํ์ด์ค๋ฅผ ๊ตฌํ
- Key,Value๋ฐฉ์์ ์ด์ฉํ์ฌ Data ๊ด๋ฆฌ
- Hashtable์ ๋๊ธฐํ๊ฐ ๋ณด์ฅ๋๋ค.
- HashMap์ ๋๊ธฐํ๊ฐ ๋ณด์ฅ๋์ง ์๋๋ค.
- HashMap์ ์ ์ฅ์์์ ์ํ๋ฅผ ์ํด Fail-Fast Iterator๋ฅผ ๋ฐํํ๋ฉฐ HasTable์ Enumeration์ ๋ฐํํ๋ค.
