Fundamental
๋ฌธ ๊ณผ ์ ์ ์ฐจ์ด
๋ฌธ๊ณผ ์์ ๋น์ทํ์ง๋ง ์กฐ๊ธ์ ๋ค๋ฅธ ์ฐจ์ด์ ์ด ์๋ค.
- ๋ฌธ
- ์ฝ๋ ์์ง์์ ํด์ํ๊ณ ๋ฒ๋ฆฌ๋ ํํธ ๊ฐ์ ๊ฒ
- ๋ํ ์ธ์ด :
Java
,Javascript
,C
๋ฑ๋ฑ
- ์
- ๋ณ์์ ํ ๋น๋์ด ์ ์ฅ ๋๋ค
- ๋ํ ์ธ์ด :
Ruby
,Kotlin
๋ฑ๋ฑ
๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ๊ตฌ์กฐ์ ๋ํด
ํ๋ก๊ทธ๋จ ์คํ์ ์ด์์ฒด์ ๋ ์ฐ๋ฆฌ๊ฐ ์คํ์ํค๋ ํ๋ก๊ทธ๋จ์ ์ํด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋น ํด ์ค๋ค.
์ด๋ ํฌ๊ฒ ๋ฐ์ดํฐ (Data), ํ (Heap), ์คํ (Stack) ๋ก ๋๋๊ฒ ๋๋ฉฐ ๊ฐ๊ฐ์ ์๊ธฐ, ์ฉ๋, ์์น๊ฐ ๋ค๋ฅด๊ฒ ๋๋ค.
์ฉ๋ | ์๋ช ์ฃผ๊ธฐ | |
---|---|---|
๋ฐ์ดํฐ (Data) | ์ ์ญ๋ณ์์ static ๋ณ์๊ฐ ํ ๋น๋๋ ์์ญ | ํ๋ก๊ทธ๋จ์ ์์๊ณผ ๋์์ ํ ๋น๋๊ณ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋์ด์ผ ๋ฉ๋ชจ๋ฆฌ์์ ์๋ฉธ |
ํ (Heap) | ํ์์ ์ํด ๋์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น ํ ๋ ์ฌ์ฉ (Runtime) ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๋์ ๊ฒฐ์ ํ๋ฉฐ ๋ฐํ์๋ ์ฌ์ฉ๋๋ ๊ณต๊ฐ | - |
์คํ (Stack) | ํจ์ ํธ์ถ์์ ์์ฑ๋๋ ์ง์ญ๋ณ์์ ๋งค๊ฐ๋ณ์๊ฐ ์ ์ฅ๋๋ ์์ญ (Compile) | ํจ์ ํธ์ถ์ด ์๋ฃ๋๋ฉด ์ฌ๋ผ์ง |
์คํ (Stack) ๊ณผ ํ (heap) ์ ์ข๋ ์ธ๋ถ์ ์ผ๋ก ๋น๊ตํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
์คํ (Stack) | ํ (Heap) | |
---|---|---|
์ ๊ทผ ์๋ | ๋น ๋ฅธ ์ ๊ทผ | ๋๋ฆฐ ์ ๊ทผ |
๋ฉ๋ชจ๋ฆฌ ์ ํ | ์ ํ์ | ์ ํ ์์ |
Resize ๊ฐ๋ฅ | ๋ถ๊ฐ (Compile ์์ ๊ฒฐ์ ) | ๊ฐ๋ฅ (ํํธํ ๊ฐ๋ฅ์ฑ) |
ํน์ง | ์ง์ญ๋ณ์์๋ง ํ ๋น | ์ ์ญ์ ์ ๊ทผ |
์ฐธ๊ณ ์๋ฃ
Unsinged Int
๋ถํธ๊ฐ ์๋ ์ ์ํ์ ๊ฐ๋ง ๊ฐ์ง๋ค.
๋๋ฌธ์ ๋ถํธ๋ฅผ ๊ฒฐ์ ์ง๋ ๋นํธ๋งํผ์ ๊ฐ์ ๋ฒ์๊ฐ ๋์ด๋๋ค.
์ ํ | ๋ฐ์ดํธ | ์ด๋ฆ | ๊ฐ์ ๋ฒ์ |
---|---|---|---|
int | 4 | signed | โ2,147,483,648 ~ 2,147,483,647 |
unsigned int | 4 | unsigned | 0 ~ 4,294,967,295 |
char | 1 | ์์ | โ128~127(๊ธฐ๋ณธ๊ฐ) /J๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํ์ผ๋ ๊ฒฝ์ฐ 0~255 |
signed char | 1 | signed | -128 ~ 127 |
unsigned char | 1 | unsigned | 0 ~ 255 |
๊ต์ฐฉ ์ํ (Deadlock : ๋ฐ๋๋ฝ)
๋ ๊ฐ ์ด์์ ์์ ์ด ์๋ก ์๋๋ฐฉ์ ์์ ์ด ๋๋๊ธฐ ๋ง์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ณผ์ ์ผ๋ก ์๋ฌด๊ฒ๋ ์๋ฃ๋์ง ๋ชปํ๋ ์ํ๋ฅผ ๋งํ๋ค.
๋๊ฐ ๋ฉํฐ ํ๋ก๊ทธ๋๋ฐ ํ๊ฒฝ์์ ํ์ ๋ ์์์ ์๋ก ์ฌ์ฉํ๋ ค๊ณ ๊ฒฝ์ํ๋ ์ํฉ์์ ๋ฐ์ํ๋ค.
์์ธ
ํ ์์คํ ๋ด์์ ์๋ ๋ค๊ฐ์ง ์กฐ๊ฑด์ด ๋์์ ์ฑ๋ฆฝํ๋ฉด ๋ฐ์
- ์ํธ ๋ฐฐ์ (Mutal Exclusion)
- ์์์ ํ ๋ฒ์ ํ ํ๋ก์ธ์ค๋ง ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ค.
- ์ ์ ๋๊ธฐ (Hold and Wait)
- ???
- ๋น์ ์ (No Preemption)
- ๋ค๋ฅธ ํ๋ก์ธ์ค์ ํ ๋น๋ ์์์ ์ฌ์ฉ์ด ๋๋ ๋๊น์ง ๊ฐ์ ๋ก ์ ์ ํ ์ ์๋ค.
- ์ํ ๋๊ธฐ (Circular Wait)
- ???
ํด๊ฒฐ
- ๊ต์ฐฉ ์ํ ์๋ฐฉ ๋ฐ ํํผ
- ๊ต์ฐฉ ์ํ ํ์ง ๋ฐ ํ๋ณต
- ๊ต์ฐฉ ์ํ ๋ฌด์
์๋ฐฉ
๊ต์ฐฉ ์ํ์ ํํผ ๋ฐฉ๋ฒ์ค์ ์ํ์ ์๊ณ ๋ฆฌ์ฆ (Banker's Algorithm) ์ด๋ผ๊ณ ์์ผ๋ฉฐ ๋ค์๊ณผ ๊ฐ๋ค.
- ํ๋ก์ธ์ค๊ฐ ์์์ ์๊ตฌํ ๋ ์์คํ ์ ์์์ ํ ๋นํ ํ์๋ ์์ ๋ ์ํ๋ก ๋จ์์๋์ง ์ฌ์ ์ ๊ฒ์ฌํ์ฌ ๊ต์ฐฉ์ํ๋ฅผ ํํผํ๋ ๊ธฐ๋ฒ
- ์์ ๋ ์ํ์ ์์ผ๋ฉด ์์์ ํ ๋นํ๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ด ์์์ ํด์งํ ๋๊น์ง ๋๊ธฐํ๋ค.
์ฐธ๊ณ ์๋ฃ
Type-Safe ๋?
์ด๋ ํ ์ฐ์ฐ (Operation) ๋ ์ ์ ๋์ง ์๋ ๊ฒฐ๊ณผ๋ฅผ ๋ด๋์ง ์๋ ๊ฒ ์ด๋ผ๊ณ ํ๋ค.
์ด๋ ์์ธก ๋ถ๊ฐ๋ฅํ ๊ฒฐ๊ณผ๋ฅผ ๋ด์ง ์๋๊ฑด๋ฐ
์๋ฅผ ๋ค๋ฉด
1 + '1'
์๋์ ์ฐ์ฐ์ด ๊ฐ๋ฅํ๊ฑฐ๋ ๋ฌธ์์ด ๋ณ์์ ์ซ์ 1์ ํ ๋นํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค๊ฑฐ๋ ํ๋ ๋น๋
ผ๋ฆฌ์ ์ธ ์ผ ์ ์ผ์ปซ๋๋ค.
๋ณดํต type-safe
ํ๋ค๊ณ ์๋ ค์ง ์ธ์ด์์๋ ์ปดํ์ผ์์ ์ด๋ฐ ์๋ฌ๋ฅผ ์ฒ๋ฆฌํด์ฃผ์ง๋ง type-safe
ํ์ง ์๋ ์ธ์ด์์๋ ์ด๋ฅผ ์ ๋น์ด ์๋ฌต์ ์ผ๋ก ์ฒ๋ฆฌํ๋ค.
๊ทธ๋์ javascript
๋ type-safe
ํ ์ธ์ด๊ฐ ์๋๋ผ๊ณ ํ๋ค.
์ผ๋ฐ์ ์ผ๋ก C#
, java
๋ฑ๊ณผ ๊ฐ์ด ์ปดํ์ผ ๊ธฐ๋ฐ์ธ์ด๋ค์ type-safe
ํ ์ธ์ด๋ก ์ทจ๊ธํ๋ค.
์ฐธ๊ณ ์๋ฃ
Mutex vs Semaphore
๋ฎคํ ์ค (Mutex) ๋ ?
์ํธ๋ฐฐ์ ๋ผ๊ณ ํ๋ฉฐ Critical Section ์ ๊ฐ์ง Thread ๋ค์ด Running Time ์ด ๊ฒน์น์ง ์๊ฒ ๊ฐ๊ฐ ๋จ๋ ์ผ๋ก ์คํ๋๊ฒ ํ๋ ๊ธฐ์
์ธ๋งํฌ์ด (Semaphore) ๋ ?
๋ฆฌ์์ค์ ์ํ๋ฅผ ๋ํ๋ด๋ ์นด์ดํฐ๋ก ์ธ๋งํฌ์ด ์นด์ดํฐ๋ก ํค๋ฅผ ๊ฐ์ง Thread ๋ง ์ ๊ทผ์ ํ์ฉํ๊ณ ๋๋จธ์ง๋ ๊ธฐ๋ค๋ฆฌ๋๊ฒ์ด๋ค.
์ฐธ๊ณ ์๋ฃ
Architecture โ