์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- ์ฝ๋ฉ
- ์ํ
- Python
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ์ค๋ผํด
- ์๋ฐ
- ํ๋ก๊ทธ๋๋ฐ
- ์ค๋ธ์
- ์๋ฐ์คํฌ๋ฆฝํธ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- html
- ๋ ์
- Java
- ํ์ด์ฌ
- ๊ฐ์ดํ ์ข ๋ญ๊ฐ๋น
- ๊น๋ฏธ๊ฒฝ์๋งํ์์
- ํ์ฒ์ ๋ฆฌํธ๋ฆฌํธ
- K๋ฐฐํฐ๋ฆฌ๋ ๋ณผ๋ฃจ์
- ๋ฐฐ์์ ๋ฐฐ์
- ๊ฐ๋ฐ
- ์นํผ๋ธ๋ฆฌ์ฑ
- ๋๊ฐ
- ์ฑ
- css
- database
- ์ํ์ฃผ
- ์ ๋ฆฌํธ๋ฆฌํธ
- JavaScript
- ์นดํ๋๊ฐ
- ๋ฐ์ํ
- Today
- Total
JiYoung Dev ๐ฅ
[JAVA] ๋ฉํฐํ์คํน, ์ฐ๋ ๋, ์์ผํต์ (2023.04.13) ๋ณธ๋ฌธ
[JAVA] ๋ฉํฐํ์คํน, ์ฐ๋ ๋, ์์ผํต์ (2023.04.13)
Shinjio 2023. 4. 13. 18:24๐๋ฉํฐํ์คํน
๋ค์์ ์์ ์ ๋์์ ์ฒ๋ฆฌํ๋ ๊ฒ
์์ฉํ๋ก๊ทธ๋จ์์์ ๋ฉํฐํ์คํน ์ : ์์์ถ๋ ฅ + ์๋ฆฌ์ถ๋ ฅ + ์๋์กฐ์ + ์์์ฌ์/๋ฉ์ถค
์์ฉํ๋ก๊ทธ๋จ์ ๋ณดํต ์์ ์ด ์ฌ๋ฌ๊ฐ๊ฐ ๋์ ์คํ๋์ด์ผ ํ๋ค.
๐์ฐ๋ ๋(Thread)
์์ ์ ํ ๋ ํ์ํ ํ๋์ ์ค(์ ์ด)
ํ ๊ฐ์ง ์์ ์ ํ๊ธฐ ์ํ ํ๋์ ์ ์ด
์ฐ๋ ๋ ํ๋ ๊ฐ์ง๊ณ ๋ ํ๋์ ์์ ๋ง ๊ฐ๋ฅ
๋์์ ์ฌ๋ฌ๊ฐ์ ์์ ์ ํ๊ณ ์ถ๋ค๋ฉด ์ฌ๋ฌ๊ฐ์ ์ฐ๋ ๋๊ฐ ํ์ํ๋ค.
๋ก๊ทธ์ธ A์ฌ์ฉ์ ๋ก๊ทธ์ธ ์ ์ด - ์์ 1๊ฐ,
๋ก๊ทธ์ธ B์ฌ์ฉ์ ๋ก๊ทธ์ธ์ ์ด - ์์ 1๊ฐ
๊ฐ์ ๊ธฐ๋ฅ์ด๋๋ผ๋ ์ฌ์ฉ์๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋์ ์์ ์ด๋ค >> ์ฐ๋ ๋๊ฐ ์ฌ๋ฌ๊ฐ ํ์ํ๋ค.
์ฐ๋ ๋๋ฅผ ์ดํดํ๊ธฐ ์ํด์๋ ํ๋ก์ธ์ค์ ํ๋ก๊ทธ๋จ ๋จ์ด์ ๋ํ ์ดํด๊ฐ ํ์ํ๋ค.
์ฐ๋ ๋, ํ๋ก์ธ์ค, ํ๋ก๊ทธ๋จ 3๊ฐ๋ ์ธํธ
ํ๋ก๊ทธ๋จ์ด ํ๋ก์ธ์ค์ ์ฐ๋ ๋๋ฅผ ์์ฐ๋ฅด๊ณ , ํ๋ก์ธ์ค๊ฐ ์ฐ๋ ๋๋ฅผ ํฌํจ. ์ฐ๋ ๋๊ฐ ๊ฐ์ฅ ์์ ๋จ์
๐ ํ๋ก๊ทธ๋จ
์คํํ ์ ์๋ ํ์ผ
์ฐ๋ฆฌ๊ฐ ํ์ํ๋ฉด ์คํ → ์คํ์ด ๋์ด์๋ ์ํ์ผ์๋ ์๊ณ , ์คํ์ด ์๋์ด ์๋ ์ํ์ผ ์ ์๋ค.
์คํ๋์ง ์์ผ๋ฉด ์ ์ฅ๋ง ๋์ด ์๋ ์ํ
์คํํ๋ ค๋ฉด os๋ก๋ถํฐ ํ์ํ ์์(๋ฉ๋ชจ๋ฆฌ ๋ฑ)์ ํ ๋น ๋ฐ์์ผ ํจ.
๐ ํ๋ก์ธ์ค
ํ๋ก๊ทธ๋จ์ด ์คํ๋๊ณ ์๋ ์ํ
์คํ์ด ๋์ด์ ์ด์์ฒด์ ๋ก๋ถํฐ ํ์ํ ์์์ ํ ๋น ๋ฐ์ ์ํ
์ฌ๋ฌ๊ฐ์ง ์์ ์ ํ๊ณ ์๋ค
๐ ์ฐ๋ ๋
ํ๋์ ์์
ํ ๋น๋ฐ์ ์์์ ์ฌ์ฉํด์ ์์ ์ ์คํ
๊ธฐ๋ณธ์ ์ผ๋ก๋ ํ๋์ ํ๋ก์ธ์ค์๋ ์ฐ๋ ๋๊ฐ ํ๋๋ง ์กด์ฌํ ์ ์๊ณ , ํ๋ก์ธ์ค ํ๋๋น ์์ ์ ํ๋๋ง ํ ์ ์๋ค.
์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํ ๋ฐฉ๋ฒ 2๊ฐ์ง๊ฐ ๋ฉํฐํ๋ก์ธ์ฑ๊ณผ ๋ฉํฐ์ค๋ ๋ฉ
์ฐ๋ ๋๊ฐ ์ฌ๋ฌ๊ฐ ๋์ํ๊ธฐ ์ํ ๋ฐฉ๋ฒ 2๊ฐ์ง : ๋ฉํฐํ๋ก์ธ์ฑ, ๋ฉํฐ์ฐ๋ ๋ฉ
์๋ฐ๋ ๋ฉํฐ์ฐ๋ ๋๊ฐ ๊ฐ๋ฅํ๋ค๋ ํน์ง์ ๊ฐ์ง๊ณ ์์.
๐๋ฉํฐํ๋ก์ธ์ฑ(Multi Processing)
ํ๋ก์ธ์ค๊ฐ ์ฌ๋ฌ๊ฐ ์๊ธฐ๋ฉด์ ์ฐ๋ ๋๋ฅผ ์ฌ๋ฌ๊ฐ ์์ฑํ์ฌ ๊ฐ ํ๋ก์ธ์ค๊ฐ ํ๋์ ์์ ์ ์ฒ๋ฆฌํ๋๋ก
ํ๋ก์ธ์ค๊ฐ ์ฌ๋ฌ๊ฐ → ์ฐ๋ ๋๊ฐ ์ฌ๋ฌ๊ฐ → ๋์์์ ์ฒ๋ฆฌ ๊ฐ๋ฅ
๊ทธ๋ฐ๋ฐ ๋จ์ ์ด ์์
ํ๋ก์ธ์ค๋ OS์ ์์์ ํ ๋น ๋ฐ์์ผ ํ๋ฏ๋ก ํ๋ก์ธ์ค๊ฐ ์ฌ๋ฌ๊ฐ์ด๋ฉด ์ฌ๋ฌ๊ฐ์ ์์์ด ํ์
์์์ ๋ง์ด ์ฌ์ฉํ ์ ์๋ค(์์๋ญ๋น)
๐๋ฉํฐ์ค๋ ๋ฉ(Multi threading)
ํ๋์ ์์ฉํ๋ก๊ทธ๋จ์ ๋์์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ ์ฌ๋ฌ ์์ ์ผ๋ก ๋ถํ ํ๊ณ ์์ ์ ๊ฐ์๋งํผ ์ค๋ ๋๋ฅผ ์์ฑํ์ฌ ๊ฐ ์ค๋ ๋๋ก ํ์ฌ๊ธ ํ๋์ ์์ ์ ์ฒ๋ฆฌํ๋๋ก ํ๋ ๊ธฐ๋ฒ
์๋๋ ํ๋ก์ธ์ค ํ๋๋น ์ค๋ ๋ ํ๋
ํ๋ก์ธ์ค ํ๋๋น ์ค๋ ๋๊ฐ ์ฌ๋ฌ๊ฐ ๋์ํ ์ ์๋ ๋ฐฉ์
์์ ์ ๊ฐ์๋งํผ ์ค๋ ๋๋ฅผ ์์ฑํ๋ ๊ธฐ๋ฒ
์ฅ์ : ์์ ํ ๋น์ ํ ๋ฒ๋ง ๋ฐ์์ ์์์ ์ฐ๋ ๋๋ผ๋ฆฌ ๊ณต์ ํด์ ์ฌ์ฉ → ์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์
๐์ฐ๋ ๋ ์์ฑ ๋ฐฉ๋ฒ
1. ์ฐ๋ ๋ ํด๋์ค ํ์ฉ
2. Runnable ์ธํฐํ์ด์ค ํ์ฉ
โ ํด๋์ค์ ์ธํฐํ์ด์ค์ ์ฐจ์ด์
ํด๋์ค
์ฐ๋ ๋๊ฐ ๊ฐ์ง ๊ธฐ๋ฅ์ ๋ด๊ฐ ์ฐ๊ฒ ๋ค → ์์ ํ์ฉ
์ผ๋ฐ๋ฉ์๋๋ ๊ธฐ๋ฅ์ด ์ด๋ฏธ ๋ง๋ค์ด์ ธ ์์.
๋ง๋ค์ด์ง ๊ธฐ๋ฅ์ ๊ฐ์ ธ๋ค ์
์ถ์ ๋ฉ์๋๋ ์ค๋ฒ๋ผ์ด๋ฉ ํ์
์ธํฐํ์ด์ค
์ด๋ฏธ ์ ์๊ฐ ๋์ด ์๋ ๊ตฌ์กฐ → ๊ตฌํ
ํ๋ง ์์
์ผ๋ฐ ๋ฉ์๋๊ฐ ์กด์ฌํ์ง ์๋๋ค. (JAVA 8๋ฒ์ ์ด์๋ถํฐ๋ ์ผ๋ฐ๋ฉ์๋๋ ์์ ์ ์์. ๊ทธ๋ฌ๋ ์ ์ฐ์ง ์์)
์ถ์๋ฉ์๋๊ฐ ๋๋ถ๋ถ >> ์ค๋ฒ๋ผ์ด๋ฉ ํ์
ํน์ ํ ํ์ ์ง์ ํ๊ธฐ ์ํด ์ฌ์ฉ
์ธํฐํ์ด์ค์ ํ์ฉ ์) ๊ฒ์
๊ฒ์ ์์, ๊ฒ์ ์ข ๋ฃ ๊ธฐ๋ฅ์ ๋ฌด์กฐ๊ฑด ๋ง๋ค์ด์ผ ํจ.
A๊ฐ๋ฐ์ - start(), end()
B๊ฐ๋ฐ์ - aaa(), bbb()
๊ฐ๋ฐ์๋ค๋ง๋ค ๊ธฐ๋ฅ์ ์ด๋ฆ์ ๋ค๋ฅด๊ฒ ๋ง๋ค ์ ์์.
C๊ฐ๋ฐ์ - start(), end() >> ์คํ์์ค ์ฌ์ A ์ฝ๋๋ฅผ ์ป๋๋ฐ ์ ๋ฃ๋ก ์ ํ >> B์ ์ฝ๋๋ก ๋ฐ๊พธ๋ ค๊ณ ํจ.
๋ฐ๊พธ๋ ค๋ฉด start()๋ aaa()๋ก, ์ข ๋ฃํ๋ ค๋ฉด end()์์bbb()๋ก ๋ชจ๋ ๋ฐ๊ฟ์ผ ํจ >> ๋ถํธํด
๊ทธ๋ฆฌ์ ๋ฏธ๋ฆฌ ์ ์ํด ๋์. ๋ฌด์กฐ๊ฑด ๊ฒ์์์์ (start๋ก) ์ข ๋ฃ๋ end๋ก ์ ์์ํด (์ธํฐํ์ด์ค)
๊ทธ ๋ค์ ๊ฒ์ ๋ง๋๋ ์ฌ๋์ ์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ฉด ๋จ.(๊ธฐ๋ฅ ๊ตฌํ์ ํด์ฃผ๋ฉด ๋๋ค)
๊ธฐ๋ฅ์ ์กฐ๊ธ์ฉ ๋ค๋ฅผ ์ ์์ผ๋ ์ด๋ฆ์ ๊ฐ์
โ ์ฐ๋ ๋(Thread) ํด๋์ค ์ฌ์ฉ๋ฒ
์ฐ๋ ๋ ํด๋์ค๋ฅผ ์์ ๋ฐ์์ ์ฌ์ฉ (java.lang.Thread ํด๋์ค๋ฅผ ํ์ฅ)
์ฐ๋ ๋ ํด๋์ค์ run() ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํด์ ์ฌ์ฉ
start๋ผ๋ ๋ฉ์๋๋ฅผ ํธ์ถํด์ผ์ง๋ง run์ ์ ์๋ ๊ธฐ๋ฅ ์ฌ์ฉ ๊ฐ๋ฅ
๊ธฐ๋ฅ ์ ์๋ run ์์, ์คํํ ๋๋ start๋ฉ์๋๋ฅผ ํธ์ถํด์ ์ฌ์ฉ
โ Runnable ์ธํฐํ์ด์ค ์ฌ์ฉ๋ฒ
run() ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ์ฌ ์คํํ ๊ธฐ๋ฅ ์์ฑ
์ธํฐํ์ด์ค๋ ์๊ธฐ ๊ธฐ๋ฅ์ด ์๊ธฐ ๋๋ฌธ์ ์ธํฐํ์ด์ค ๊ฐ์ง๊ณ ๋ ๊ฐ์ฒด ์์ฑ์ด ์๋๋ค.
runnable ํ ์ธ์๋ฅผ ๋ฐ๋ ์์ฑ์๋ฅผ ํตํด ๋ณ๋์ ์ฐ๋ ๋ ๊ฐ์ฒด ์์ฑ ํ start() ๋ฉ์๋ ํธ์ถํ์ฌ run()์ ์ ์๋ ๊ธฐ๋ฅ ์ฌ์ฉ ๊ฐ๋ฅ
๐์ฑํ ํ๋ก๊ทธ๋จ
๐ Thread
๐ Socket
๋ฐ์ดํฐ๋ฅผ ์ก์ , ์์ ํ๋ ์ ์ถ๊ตฌ
์๋น์ค๋ฅผ ์ ๊ณตํ๋ ์ฃผ์ฒด - ์๋ฒ
์๋น์ค๋ฅผ ์์ฒญํ๋ ์ฃผ์ฒด - ํด๋ผ์ด์ธํธ
์์ผ์ ํด๋ผ์ด์ธํธ๋ง๋ค ๊ฐ์ง๊ณ ์์
์๋ฒ๋ ํ๋. ์๋ฒ์ ์์ผ์ ์ฌ๋ฌ๊ฐ๊ฐ ์๋๋ฐ ํด๋ผ์ด์ธํธ ๋ง๋ค ์ฐ๊ฒฐ
Port
ํ๊ฐ์ง ๊ธฐ๋ฅ(์ฑํ , ๋ฉ์ผ, ํ์ผ์ ์ก ๋ฑ)์ ์ฌ์ฉํ๊ธฐ ์ํ ๋ฌธ
ํฌํธ๋ ๊ฒน์น๋ฉด ์๋จ
์ด๋ฏธ ์ง์ ๋์ด ์๋ ํฌํธ๋ ์ฌ์ฉํ ์ ์์
ํฌํธ ์์ผ๋ก ๋ค์ด์ค๋ฉด ๊ฐ๊ฐ์ ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐํ๊ธฐ ์ํ ์์ผ์ด ์๋ค.
๐ Stream
๋ฌด์ธ๊ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ํต๋ก
๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด์ ํ์ฑ๋ ์ฑ๋
๋ฐ์ดํฐ๊ฐ ํ๋ฌ๊ฐ๊ฑฐ๋ ํ๋ฌ ๋ค์ด์ค๋ ๊ณณ
๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๋ ํต๋ก : Input Stream
๋ฐ์ดํฐ๊ฐ ๋๊ฐ๋ ํต๋ก : Output Stream
๐ Buffer
์ผ์์ ์ผ๋ก ๋ฐ์ดํฐ๋ค์ ๊ธฐ์ต์ํค๋ ์ฅ์น (์์๊ธฐ์ต๊ณต๊ฐ)
๋ฐ์ดํฐ๋ ์คํธ๋ฆผ์ ํตํด ๋ค์ด์ค๊ณ ๋ฒํผ์ ์ ์ฅ. ์ฒ๋ฆฌ๋ ๊ฐ์ฅ ๋จผ์ ์จ ๊ฒ๋ถํฐ ์ฒ๋ฆฌํ ์ ์๋๋ก ์ ์ฅ. ํ๋ํ๋ ๊บผ๋ด์ด.