[Become a Java-Masta๐จโ๐ซ 6์ฃผ์ฐจ] ๋ฉํฐ์ฐ๋ ๋ ํ๋ก๊ทธ๋๋ฐ, Enum
๐ฏ ๋ชฉํ
์๋ฐ์ ๋ฉํฐ์ฐ๋ ๋ ํ๋ก๊ทธ๋๋ฐ, Enum์ ๋ํด ํ์ตํ๊ธฐ.
๐ ํ์ตํ ๊ฒ
๋ฉํฐ์ฐ๋ ๋ ํ๋ก๊ทธ๋๋ฐ
- Thread ํด๋์ค
- Runnable ์ธํฐํ์ด์ค
- ์ฐ๋ ๋ ์ํ
- ์ฐ๋ ๋ ์ฐ์ ์์
- Main ์ฐ๋ ๋
- ๋๊ธฐํ
- ๋ฐ๋๋ฝ
Enum
๋ฉํฐ์ฐ๋ ๋ ํ๋ก๊ทธ๋๋ฐ
๋จผ์ Process
์ Thread
์ ์ฐจ์ด์ ์ ์ดํดํ๊ณ ๋์ด๊ฐ์ผ ํ ํ์๊ฐ ์๋ค.
-
ํ๋ก์ธ์ค(Process)
: OS ๋ด์์ ์คํ์ค์ธ ํ๋ก๊ทธ๋จ -
์ฐ๋ ๋(Thread)
: ํ๋ก์ธ์ค ๋ด์์ ์ค์ ์์ ์ด ์คํ๋๋ ํ๋ฆ์ ๋จ์
๋ฐ๋ผ์ ํ๋ก์ธ์ค๋ ํ๋ ์ด์์ ์ฐ๋ ๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์ผ๋ฐ์ ์ผ๋ก ํ ํ๋ก๊ทธ๋จ(Process)์ ํ๋์ ์ฐ๋ ๋๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง, ํ๋ก๊ทธ๋จ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ ์ด์์ ์ค๋ ๋๋ฅผ ๋์์ ์คํํ ์ ์๋ค. ์ด๋ฌํ ์คํ ๋ฐฉ์์ ๋ฉํฐ์ฐ๋ ๋(multithread)๋ผ๊ณ ํ๋ค.
๊ทผ๋ฐ ์ ๋ฉํฐํ๋ก์ธ์ค ํ๋ก๊ทธ๋๋ฐ์ด ์๋๋ผ ๋ฉํฐ์ฐ๋ ๋ ํ๋ก๊ทธ๋๋ฐ์ ํ ๊น?
๋ฉํฐํ๋ก์ธ์ค์ ๋ฉํฐ์ฐ๋ ๋๋ ์์ชฝ ๋ชจ๋ ์ฌ๋ฌ ํ๋ฆ์ด ๋์์ ์งํ๋๋ค๋ ๊ณตํต์ ์ ๊ฐ์ง๊ณ ์๋ค.
ํ์ง๋ง ๋ฉํฐํ๋ก์ธ์ค์์ ๊ฐ ํ๋ก์ธ์ค๋ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋๋ฉฐ ๊ฐ๊ฐ ๋ณ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ๊ณ ์๋ ๊ฒ๊ณผ ๋ฌ๋ฆฌ ๋ฉํฐ์ฐ๋ ๋๋ ํ๋ก์ธ์ค ๋ด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํด ์ฌ์ฉํ ์ ์๋ค. ๋ํ ํ๋ก์ธ์ค ๊ฐ์ ์ ํ์๋ ๋ง์ ๋น์ฉ์ด ์๋ชจ๋๊ธฐ ๋๋ฌธ์ ์๋์ ๋น์ฉ ์ธก๋ฉด์์ ์ฐ๋ ๋๊ฐ ์ ๋ฆฌํ๊ธฐ ๋๋ฌธ์ด๋ค.
java์์๋ ์ฐ๋ ๋๋ฅผ 2๊ฐ์ง ๋ฐฉ์์ผ๋ก ๊ตฌํํ ์ ์๋ค.
Thread ํด๋์ค
๋ฅผ ์์Runnable ์ธํฐํ์ด์ค
๋ฅผ ๊ตฌํ
Thread ํด๋์ค
Thread ํด๋์ค๋ฅผ ์์๋ฐ์ ์ฐ๋ ๋๋ฅผ ๊ตฌํํ๋ฉด, Thread ํด๋์ค ๋ด์ run ๋ฉ์๋๋ฅผ ์ฌ์ ์(Override) ํ๋ฉด ๋๋ค.
public class ThreadByThread extends Thread {
@Override
public void run() {
System.out.println("Run Thread By Thread");
}
}
public class Main {
public static void main(String[] args) {
ThreadByThread thread =new ThreadByThread();
thread.start();
}
}
Thread ํด๋์ค๋ฅผ ์์๋ฐ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ start ๋ฉ์๋๋ฅผ ํธ์ถํจ์ผ๋ก์จ ์ฐ๋ ๋๋ฅผ ์์ฑํ ์ ์๋ค.
Runnable ์ธํฐํ์ด์ค
Runnable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ ์ฐ๋ ๋๋ฅผ ๊ตฌํํ๋ฉด, run ๋ฉ์๋ ์์ ์ฐ๋ ๋๊ฐ ํ ์ฝ๋๋ฅผ ์์ฑํด์ฃผ๋ฉด ๋๋ค.
public class ThreadByRunnable implements Runnable {
@Override
public void run() {
System.out.println("Run Thread By Runnable");
}
}
public class Main {
public static void main(String[] args) {
Thread thread = new Thread(new ThreadByRunnable());
thread.start();
}
}
์ฌ๊ธฐ์ Runnable ๊ฐ์ฒด๋ Thread๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ Thread ์์ฑ์์ ํ๋ผ๋ฏธํฐ๋ก ๋๊ธฐ์ด Thread ํ์ ์ผ๋ก ์์ฑ ํ start ๋ฉ์๋๋ฅผ ํธ์ถํจ์ผ๋ก์จ ์ฐ๋ ๋๋ฅผ ์์ฑํ ์ ์๋ค.
์ฐ๋ ๋ ์ํ
์ฐ๋ ๋ ์ค์ผ์ค๋ง
: ์ฐ๋ ๋์ ๊ฐ์๊ฐ ์ฝ์ด(CPU)์ ์๋ณด๋ค ๋ง์ ๊ฒฝ์ฐ, ์ฐ๋ ๋๋ฅผ ์ด๋ค ์์์ ์ํด concurrentํ๊ฒ ์คํํ ๊ฒ์ธ๊ฐ๋ฅผ ์ ํ๋ ์์
์คํ ์ํ
: ์คํ ๋๊ธฐ ์ํ์ ์๋ ์ฐ๋ ๋ ์ค์์ ์ฐ๋ ๋ ์ค์ผ์ค๋ง์ผ๋ก ์ ํ๋ ์ฐ๋ ๋๊ฐ CPU๋ฅผ ์ ์ ํ๊ณ run()
๋ฉ์๋๋ฅผ ์คํํ ์ํ
์ฐ๋ ๋ ์ํ๋ฅผ ํ์ธํ ์ ์๋๋ก ํด์ฃผ๋ getState()
๋ฉ์๋๋ ์ฐ๋ ๋ ์ํ์ ๋ฐ๋ฅธ Thread.State
์ด๊ฑฐ ์์๋ฅผ ๋ฆฌํดํ๋ค.
์ํ | ์ด๊ฑฐ ์์ | ์ค๋ช |
---|---|---|
์์ฑ | NEW | ์ค๋ ๋ ๊ฐ์ฒด๊ฐ ์์ฑ๋ ์ํ. ์์ง start() ํธ์ถ ์ |
๋๊ธฐ | RUNNABLE | ์คํ๋ ์ค๋น(์ค์ผ์ค๋ฌ์ ์ํด ์ ํ ๋ฐ๊ธฐ ์ )๋ฅผ ๋ง์น ์ํ. start() ํธ์ถ ๋จ |
์ ์ง | WAITING | ๋ค๋ฅธ ์ค๋ ๋๋ก๋ถํฐ ์ค๋ ์ด๋ฒคํธ๋ฅผ ๋๊ธฐํ๋ ์ํ |
TIMED_WAITING | ์ฃผ์ด์ง ์๊ฐ ๋์ ๋๊ธฐํ๋ ์ํ | |
BLOCKED | ์ฌ์ฉํ๊ณ ์ ํ๋ ๊ฐ์ฒด์ lock์ด ํ๋ฆด ๋๊น์ง ๋๊ธฐํ๋ ์ํ | |
์ข ๋ฃ | TERNINATED | ์คํ์ด ๋ค ๋๋ ์ํ |
NEW
๋ก ์ฐ๋ ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , start()
๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ๊ณง๋ฐ๋ก ์ฐ๋ ๋๊ฐ ์คํ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ฌ์ค์ ์ค๋น๊ฐ ์๋ฃ๋ ๋๊ธฐ ์ํ์ด๋ค.
์คํ ๋๊ธฐ ์ํ์ ์๋ ์ฐ๋ ๋ ์ค์์ ์ฐ๋ ๋ ์ค์ผ์ค๋ง์ผ๋ก ์ ํ๋ ์ฐ๋ ๋๋ง์ด ์คํ ์ํ๊ฐ ๋๊ณ , ์คํ ์ํ์ ์ฐ๋ ๋๋ run()
๋ฉ์๋๋ฅผ ๋ชจ๋ ์คํํ๊ธฐ ์ ์ ์ฐ๋ ๋ ์ค์ผ์ค๋ง์ ์ํด ๋ค์ ์คํ ๋๊ธฐ ์ํ๋ก ๋์๊ฐ ์ ์๋ค(interrupt).
๊ทธ๋ฆฌ๊ณ ์คํ ๋๊ธฐ ์ํ์ ์๋ ๋ค๋ฅธ ์ฐ๋ ๋๊ฐ ์ ํ(scheduler dispatch)๋๋ ๋ฐฉ์์ผ๋ก ์ฐ๋ ๋ ์ค์ผ์ค๋ง์ด ์ด๋ฃจ์ด ์ง๋ค.
์๋ ํ๋ ์ฐ๋ ๋์ ์ํ๋ฅผ ์กฐ์ํ ์ ์๋ ๋ฉ์๋์ด๋ค.
๋ฉ์๋ | ์ค๋ช |
---|---|
static void yield() | ํ์ฌ ์ฐ๋ ๋๊ฐ ํ๋ก์ธ์์ ํ์ฌ ์ฌ์ฉ์ ์๋ณด(yield) ํ ์์ฌ๊ฐ ์๋ค๋ ์ค์ผ์ค๋ฌ์ ๋ํ ํํธ์ด๋ค. |
static void sleep(long millis) | ํ์ฌ ์คํ์ค์ธ ์ฐ๋ ๋๊ฐ ์ง์ ๋ ๋ฐ๋ฆฌ ์ด ๋์ ์ผ์์ ์ผ๋ก ์คํ ์ค์ง ๋๋๋ก ํ๋ค. ์ฆ, TIMED_WAITING ์ํ๋ก ๋ง๋ ๋ค. |
void join(long millis) | ์ด ์ฐ๋ ๋๊ฐ ์์ ์ด ์๋ฃ ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค. |
void interrupt() | ์ด ์ฐ๋ ๋์ interrupted ์ํ๋ฅผ true๋ก ๋ณ๊ฒฝํ๋ค. |
์ฐ๋ ๋ ์ฐ์ ์์
์ฐ๋ ๋์ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํจ์ผ๋ก์จ ํด๋น ์ฐ๋ ๋๊ฐ ๋จผ์ ๋ ๋ ํ๋ฅ ์ ๋์ฌ์ค๋ค.
ํ์ง๋ง, ์ฐ์ ์์๊ฐ ๋๋ค๊ณ ํด์ ๋ฌด์กฐ๊ฑด ๋จผ์ ๋๋๋ ๊ฒ์ ์๋๋ค.
java์์ ์ฐ๋ ๋์ ์ฐ์ ์์๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ setPriority(int weight)
๋ฉ์๋๋ฅผ ํตํด ์ค์ ํ ์ ์๋ค.
weight
ํ๋ผ๋ฏธํฐ๋ ์ซ์๊ฐ ํด์๋ก ์ฐ์ ์์๊ฐ ๋์๊ฒ์ด๋ฉฐ, ์ค์ ๋ฒ์๋ 1๋ถํฐ 10๊น์ง ์ฐ์ ์์๋ฅผ ์ค์ ํ ์ ์๋ค.
๋ํดํธ weight
๋ ์ค๊ฐ๊ฐ์ธ 5๊ฐ ์ค์ ๋๋ค.
Main ์ฐ๋ ๋
Main ์ฐ๋ ๋๋ ๋ชจ๋ ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์์ ์ด๋ค.
Main ์ฐ๋ ๋๋ก ํ๋ก๊ทธ๋จ์ด ์์๋์ด ์คํ์ ๋๊ณ , ๋ฉํฐ ์ฐ๋ ๋๋ ์ฑ๊ธ ์ฐ๋ ๋์ธ Main ์ฐ๋ ๋์์๋ถํฐ ํ์๋์ด ์์ฑ๋ ์ฐ๋ ๋๋ผ๊ณ ํ ์ ์๋ค.
์ฐธ๊ณ ๋ก, ๋ฉํฐ ์ฐ๋ ๋ ์ดํ๋ฆฌ์ผ์ด์ ์์๋ Main ์ค๋ ๋๊ฐ ์ข ๋ฃ๋๋๋ผ๋ ์์ ์ค๋ ๋๊ฐ ์ข ๋ฃ๋์ง ์์ผ๋ฉด ์ดํ๋ฆฌ์ผ์ด์ ์ด ์ข ๋ฃ๋์ง ์๋๋ค.
public static void main(String[] args) { // ๋ฉ์ธ ์ฐ๋ ๋
Thread thread = new Thread(new ThreadByRunnable()); // ๋ฉํฐ ์ฐ๋ ๋ ์์ฑ
thread.start();
}
๋๊ธฐํ
๋ฉํฐ์ฐ๋ ๋ ํ๋ก๊ทธ๋๋ฐ์์ ์ฌ๋ฌ ์ฐ๋ ๋๊ฐ ํ ํ๋ก์ธ์ค๋ด ์์์ ๊ณต์ ํ๋ฏ๋ก ํ ์ฐ๋ ๋๊ฐ ์งํ์ค์ธ ์์ ์ ๋ค๋ฅธ ์ฐ๋ ๋ ์ชฝ์์ ์ฌ์ฉ, ๋ณ๊ฒฝํ๋ ์ผ์ด ๋ฐ์ํ ์ ์๋ค.
์ด๋ฌํ ๋ฌธ์ ์ ์ ํด๊ฒฐ ํ๊ธฐ์ํด ํ๋์ ์ฐ๋ ๋๋ง ์์ญ ๋ด์ ์ฝ๋๋ฅผ ์ํํ๋๋ก ํ๋ ์ฐ๋ ๋ ๋๊ธฐํ๋ฅผํ๋ค.
java์์ 2๊ฐ์ง ๋ฐฉ์์ผ๋ก ๋ฉํฐ์ฐ๋ ๋ ํ๋ก๊ทธ๋๋ฐ ๋๊ธฐํ ํ ์ ์๋ค.
synchronized
ํค์๋ ์ฌ์ฉjava.lang.Object
ํด๋์ค์wait()
,notify()
,notifyAll()
๋ฉ์๋ ์ฌ์ฉ
1. synchronized
ํค์๋ ์ฌ์ฉ
synchronized
ํค์๋๋ก ์คํ ๋ธ๋ก์ด๋, ๋ฉ์๋๋ฅผ ์๊ณ ๊ตฌ์ญ์ผ๋ก ๋ง๋ค์ด ๋๊ธฐํ ์ํฌ ์ ์๋ค.
๋๊ธฐํ ๋ธ๋ก
synchronized(์ฐ๋ ๋ ๊ฐ์ฒด){
// ๋๊ธฐํ ์ํฌ ์ฝ๋
}
๋๊ธฐํ ๋ฉ์๋
public static synchronized void syncMethod(){
// ๋๊ธฐํ ์ํฌ ์ฝ๋
}
ํด๋น ๋๊ธฐํ ๋ธ๋ก์ด๋, ๋ฉ์๋๋ ํ๋์ ์ฐ๋ ๋๋ง์ด ์ง์ ๋ ์ ์๋ค.
java.lang.Object ํด๋์ค์ wait(), notify(), notifyAll() ๋ฉ์๋ ์ฌ์ฉ
์๋ ํ์ ๋ฉ์๋๋ค์ ์๊ณ ๊ตฌ์ญ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
๋ฉ์๋ | ์ค๋ช |
---|---|
wait() | ๋ค๋ฅธ ์ค๋ ๋๊ฐ notify() ๋ก ๋ถ๋ฌ์ค ๋๊น์ง ๋๊ธฐํ๋ค. |
notify() | ๋ฌด์์๋ก ๋๊ธฐ ์ค์ธ ์ค๋ ๋๋ฅผ ๊นจ์ RUNNABLE ์ํ๋ก ๋ณ๊ฒฝ, 2๊ฐ ์ด์์ ์ค๋ ๋๊ฐ ๋๊ธฐ ์ค์ด๋ผ๋ ์ค์ง ํ ๊ฐ์ ์ค๋ ๋๋ง ๊นจ์ RUNNABLE ์ํ๋ก ๋ณ๊ฒฝํ๋ค. |
notifyAll() | ๋๊ธฐ ์ค์ธ ๋ชจ๋ ์ค๋ ๋๋ฅผ ๊นจ์ฐ๊ณ ๋ชจ๋ RUNNABLE ์ํ๋ก ๋ณ๊ฒฝํ๋ค. |
๋ฐ๋๋ฝ
๋ฐ๋๋ฝ์, ๋ ๊ฐ ์ด์์ ์ฐ๋ ๋๋ค์ด ๊ฐ์ ์์์ ์ ์ ํ ์ํ์์ ์๋ก ๋ค๋ฅธ ์ฐ๋ ๋์ ์์์ ์๊ตฌํ๋ฉฐ ๋ชจ๋ ๋ฌดํ์ ๋๊ธฐ์ค์ธ ์ํ๋ฅผ ๋งํ๋ค.
์ฆ, ์ฐ๋ ๋1์ด ์์1์ ์ ์ ํ์๊ณ , ์ฐ๋ ๋2๊ฐ ์์2๋ฅผ ์ ์ ํ ์ํ์์ ์ฐ๋ ๋1์ด ์์2๋ฅผ ์์ฒญํ๋๋ฐ ์ฐ๋ ๋2๋ ์์ 1์ ์์ฒญํ์ฌ ์๋ก ์์์ ์ ์ ํ ์ฑ ์์ฒญ๋ง ํ๋ฉฐ ์๋ณดํ์ง ์๊ณ ๋ฒํฐ๋ ์ํฉ์ด๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ yield()
๋ฅผ ์ฌ์ฉํ์ฌ ์๋ณด๋ฅผ ํ๊ธฐ๋ ํ๋ค.
Enum
enum ์ด๋ ๊ด๋ จ์ด ์๋ "์์"์ ์งํฉ์ ์ ์ํ๋ ํ์ ์ผ๋ก ํด๋์ค์ ํน์ํ ํ์์ด๋ค.
์๋ฐ5๋ถํฐ enum ํ์ ์ด ๋์ ๋์๊ณ , ๋ณ์, ๋ฉ์๋, ์์ฑ์๋ฅผ ์ถ๊ฐํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
enum ํ์ ์ ์ฌ๋ฌ ํน์ฑ๋ค์ด ์กด์ฌํ๋ค.
java.lang.Enum
ํด๋์ค(์ถ์ ํด๋์ค)๋ฅผ ์์ํ ์์ ํ ํด๋์ค์ด๋ฏ๋ก ํ๋์ ๋ฉ์๋๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ๊ทธ๋ฌ๋ฏ๋ก ๋ค๋ฅธ ํด๋์ค๋ฅผ ์์๋ฐ์ ์ ์๋ค.public static final
ํ์ ์ผ๋ก ๊ณต๊ฐ๋๋ฉฐ ์์์ ๋์ผํ๊ฒ ๋ช ์นญ์ ์ ๋ถ ๋๋ฌธ์๋ก ์ ์ํ๋ค.- ๊ณ ์ ๋ ์์๋ค์ ์งํฉ์ด๊ธฐ ๋๋ฌธ์ ๋ฐํ์์ด ์๋ ์ปดํ์ผํ์์ ๋ชจ๋ ๊ฐ์ ์๊ณ ์์ด์ผ ํ๋ฏ๋ก ์์ฑ์์ ์ ๊ทผ์ง์ ์๊ฐ
private
๋ก ๋์ ์ผ๋ก ๊ฐ์ ๋ณ๊ฒฝํ์ฌ ์์ฑํ๋ฉด ์๋๋ค. - singleton ํจํด์ด ์ ์ฉ๋์ด ํ๋์ ์กด์ฌํ๋ ์์ ํ๋๋น ํ๋์ ์ธ์คํด์ค๊ฐ ๋๋ค.
- ์ฑ๊ธํค์ผ๋ก ์กด์ฌํ๋ฏ๋ก ๊ฐ์ฒด๋ฅผ
equals()
๋ฉ์๋๊ฐ ์๋==
๋ก ๋น๊ต๊ฐ ๊ฐ๋ฅํ๋ค.
enum ์ ์ํ๋ ๋ฐฉ๋ฒ
public enum CHICEKN {
[public static final] BBQ("BBQ์นํจ"), //CHICEKN.BBQ๋ก ์ ๊ทผ
[public static final] PURADAK("ํธ๋ค๋ฝ์นํจ"), // ;๊ฐ ์๋ ,
[public static final] GOOBNE("๊ตฝ๋ค์นํจ"); // ๋ด๋ถ์ ์ผ๋ก new๋ก ์์ฑํ ๊ฒ๊ณผ ๊ฐ๋ค.
private final String name; // ํ๋๋ฅผ ๊ฐ์ง ์ ์์
[private] CHICEKN(String name) { // private ์๋ต
this.name = name;
}
public String getName() { // ๋ฉ์๋๋ฅผ ๊ฐ์ง ์ ์์
return name;
}
}
enum์ด ์ ๊ณตํ๋ ๋ฉ์๋
enum ํ์ ์ java.lang.Enum ํด๋์ค๋ฅผ ์์ํ๋ฏ๋ก ํด๋น ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋๋ฐ,
๋ํ์ ์ธ ๋ฉ์๋๋ก๋ values()
, valueOf()
, ordinal()
์ด ์๋ค.
๋ฉ์๋ | ์ค๋ช |
---|---|
values() | ๋ชจ๋ enum ์์๋ค์ enum ํ์ ๋ฐฐ์ด๋ก ๋ฐํ |
valueOf() | ํน์ ๋ฌธ์์ด์ด enum ํ์ ์ผ๋ก ์กด์ฌํ๋ฉด ๋ฐํ(์กด์ฌํ์ง ์์ผ๋ฉด exception ๋ฐ์) |
ordinal() | ํด๋น enum ์์์ index๋ฅผ ๋ฐํ |
EnumSet
์ด๋ฆ ๊ทธ๋๋ก Set์ ๊ธฐ๋ฐ์ผ๋ก ์ฝ๊ณ ๋น ๋ฅด๊ฒ enum ํ์ ์์๋ค์ ๋ค๋ฃฐ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
enum์ ์ฑ๊ธํด ํจํด์ ๋จ์ผ ๊ฐ์ฒด์์ ๋ณด์ฅ ํจ์ผ๋ก ํด์ฑ์์ ์ ํ์๋ก ํ์ง ์๊ธฐ ๋๋ฌธ์ EnumSet์ enum์ ์์ ๊ฐฏ์๊ฐ 64๊ฐ๋ฅผ ๋์ง ์๋๋ค๋ฉด, ๋ด๋ถ์ ์ผ๋ก long ๋ฐ์ดํฐํ์ 64๋นํธ ํ๋๋ฅผ ์ด์ฉํ์ฌ ์ข์ ์ฑ๋ฅ์ ๋ณด์ฌ์ค๋ค.
๋ํ์ ์ธ EnumSet์ ๋ฉ์๋๋ก๋ .allOf(enum.class)
, EnumSet.of(enum1, enum2...)
, EnumSet.complementOf(enum of EnumSet)
, EnumSet.range(enum1, enum4)
๊ฐ ์๋ค.
๋ฉ์๋ | ์ค๋ช |
---|---|
.allOf(enum.class) | enum ํ์ ์ ๋ชจ๋ ์์๋ค์ ๊ฐ์ ธ์ค๊ธฐ |
EnumSet.of(enum1, enum2...) | ํน์ enum์์๋ค์ ๊ฐ์ ธ์ค๊ธฐ |
EnumSet.complementOf(enum of EnumSet) | ํน์ ํ enum์์๋ฅผ ์ ์ธํ๊ณ ๊ฐ์ ธ์ค๊ธฐ |
EnumSet.range(enum1, enum4) | ๋ฒ์๋ก ์์๋ค ๊ฐ์ ธ์ค๊ธฐ |
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ([Become a Java-Masta๐จโ๐ซ 6์ฃผ์ฐจ] ๋ฉํฐ์ฐ๋ ๋ ํ๋ก๊ทธ๋๋ฐ, Enum), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@bae_mung/Become-a-Java-Masta-6์ฃผ์ฐจ-๋ฉํฐ์ฐ๋ ๋-ํ๋ก๊ทธ๋๋ฐ-Enum์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค