์ด ๊ธ์ ๊ตญ๋ฏผ๋ํ๊ต ๊ฐ์น์ ๊ต์๋์ 'ํ๋ก๊ทธ๋๋ฐ์ธ์ด๋ก ' ์์ ์ ํ ๋๋ก
๊ฐ์ธ์ ์ผ๋ก ํ์ตํ ๋ด์ฉ์ ๋๋ค.
1.1 ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ๋ฌด์์ธ๊ฐ?
์ธ๊ฐ์ด ์ปดํจํฐ๋ก ์ํํ๊ณ ์ ํ๋ ๋ฐ๋ฅผ ์ปดํจํฐ์๊ฒ ์ ๋ฌํ๊ธฐ ์ํ ํํ๋ฒ์ ๋ฐ์ ๊ณผ์
1940๋ ์ด์
Hard-wired ๋ฐฉ๋ฒ์ผ๋ก ์ปดํจํฐ ๋ด๋ถ ์ค์์น ์ธํ
-> ์ปดํจํฐ์ ๋ด๋ถ ํ๋ก๋ฅผ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ณ๊ฒฝํ์ฌ ํ๋ก๊ทธ๋จ์ ์ํํด์ผ ํ๋ฏ๋ก ๋งค์ฐ ์ ํ์ ์
1940๋ ๋
ํฐ๋ ธ์ด๋ง ์ปดํจํฐ (stored programming)
-> ์ผ๋ จ์ ๋ช ๋ น์ฝ๋๋ก ์์ฑ, main memory์ ์ ์ฅ
์ด์ ๋ธ๋ฆฌ์ด ํ์
-> ๊ธฐ๊ณ ์ข ์์ฑ(ํน์ ์ปดํจํฐ ์ํคํ ์ฒ์ ๋ง๊ฒ ์์ฑ), ์ ๊ธ์์ค์ ์ถ์ํ, ์ฝ๊ณ ์ฐ๊ธฐ ์ด๋ ค์(๊ธฐ๊ณ์ด์ ๋นํด์๋ ํจ์ฌ ๋ ์ฝ๊ณ ์ฐ๊ธฐ ์ฌ์)
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ ์
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ๊ธฐ๊ณ๊ฐ ์ฝ์ ์ ์๊ณ , ์ฌ๋์ด ์ฝ์ ์ ์๋ ํ์์ผ๋ก ๊ณ์ฐ์ ์์ ํ๊ธฐ ์ํ ํ๊ธฐ ์ฒด๊ณ์
ํน์ฑ์ ์ดํด๋ณด๋ฉด
- ๊ณ์ฐ (computation)
- Turing machine : ์ํ์ ๊ฐ๋ ์ผ๋ก ํ์์ ์ธ ์ ์
- ์ปดํจํฐ๊ฐ ์ํ ๊ฐ๋ฅํ ๋ชจ๋ ์์
- Machine-readable
- Machine independent (์ธ์ด ์์ฒด๋ ํน์ ์ปดํจํฐ ์ํคํ ์ฒ์ ๋ง์ถฐ์ ์์ฑ๋์ง ์์์ผํจ)
- ๋ชจํธํ์ง ์๊ณ , ์ ํํ ๋จ๊ณ์ ์ฒ๋ฆฌ๋ก ๋ฒ์ญ ๊ฐ๋ฅํ ์๊ณ ๋ฆฌ์ฆ์ด ์กด์ฌํด์ผํจ
- Human-readable
- ์ปดํจํฐ ํ์๋ฅผ ์ฝ๊ธฐ ์ฝ๋๋ก ์ถ์ํ์ํค๋ ๋ฐฉ๋ฒ์ ์ ๊ณต
ํ๋ก๊ทธ๋๋ฐ ์์ญ๊ณผ ๊ณ ๊ธ ์ธ์ด
๊ณผํ ๊ณ์ฐ : Fortran
์ฌ๋ฌด ์์ฉ : Cobol
์ธ๊ณต ์ง๋ฅ : Lisp, Prolog
์์คํ SW : C
์น SW : JavaScript, PHP, ASP
์ฑ SW : Objective-C, Java
๊ต์ก์ฉ : Basic, Pascal, ML, Haskell
Script languages : Perl, Python, Ruby
Shell programming : AWK, Tcl/Tk
GUI : MFC, C#, Visual Basic
1.2 ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ๋ฐฐ์ฐ๋ ์ด์
1. ํ์ฌ ์ฌ์ฉํ๋ ์ธ์ด๋ฅผ ๋ ์ ์ดํดํ๊ฒ ๋จ
2. ์ ์ฉํ ํ๋ก๊ทธ๋๋ฐ์ ๊ตฌ์ฌํ๋ ๋ฅ๋ ฅ์ ์ฆ๋์ํด
3. ์ ํฉํ ์ธ์ด๋ฅผ ์ ํํ๋ ๋ฅ๋ ฅ์ ์ฆ๋์ํด
4. ์๋ก์ด ์ธ์ด๋ฅผ ๋ฐฐ์ฐ๊ธฐ ์ฝ๊ฒ ํด์ค
5. ์๋ก์ด ์ธ์ด๋ฅผ ์ค๊ณํ๊ธฐ ์ฝ๊ฒ ํด์ค
6. ๊ตฌํ์ ์ค์์ฑ์ ์ดํดํ๊ณ ์ด๋ฏธ ์๊ณ ์๋ ์ธ์ด๋ฅผ ๋ ์ ์ฌ์ฉํ ์ ์์
7. ์๊ฐ์ ํํํ๋ ๋ฅ๋ ฅ์ ํฅ์์ํด
8. ์ ๋ฐ์ ์ผ๋ก computing์ ๋ํ ์ดํด๋๋ฅผ ํฅ์์ํด
1.3 ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์์ ์ถ์ํ
์ผ๋ฐ์ ์ผ๋ก ์ถ์ํ(abstraction)๋ ์์ฑ๋ค์ ์ผ๋ถ๋ถ๋ง์ ๊ฐ์ง๊ณ ์ฃผ์ด์ง ์์ ์ด๋ ๊ฐ์ฒด๋ค์ ํ์ํ ์ ๋๋ก ๋ฌ์ฌํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ง์ํ๋ ๊ฒ์
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ถ์ํ๋ ๋ฐ์ดํฐ ์ถ์ํ(= ์๋ฃ ์ถ์ํ)์ ์ ์ด ์ถ์ํ(= ์๊ณ ๋ฆฌ์ฆ ์ถ์ํ)์ ๋ ๊ฐ์ง ๋ฒ์ฃผ๋ก ๋๋จ
์ถ์ํ๋ ์ถ์ํ์ ํฌํจ๋ ์ ๋ณด์ ์์ผ๋ก ์์ค์ ๋๋ ์๊ฐ ์์
- ๊ธฐ๋ณธ์ ์ถ์ํ(basic abstraction) : ๊ฐ์ฅ ๊ตญ์ง์ ์ธ ๊ธฐ๊ณ ์ ๋ณด๋ฅผ ์์งํ ์ถ์ํ
- ๊ตฌ์กฐ์ ์ถ์ํ(structured abstraction) : ํ๋ก๊ทธ๋จ์ ๊ตฌ์กฐ์ ๋ํ ๋ณด๋ค ์ ์ญ์ ์ธ ์ ๋ณด์ ๊ดํ ์ถ์ํ
- ๋จ์ ์ถ์ํ(unit abstraction) : ๋จ์ ํ๋ก๊ทธ๋จ ์ ์ฒด ์ ๋ณด์ ๊ดํ ์ถ์ํ
๋จ๊ณ๊ฐ ๋์๊ฐ์๋ก ๋ ํฐ ๋จ์๋ก์ ์ถ์ํ๋ผ๊ณ ์๊ฐํ๋ฉด๋จ
Data abstraction
์๋ฃ ์ถ์ํ(๋ฐ์ดํฐ ์ถ์ํ)๋ ๋ฌธ์์ด, ์, ํ์ ํธ๋ฆฌ์ ๊ฐ์ ๊ณ์ฐ์ ์ฃผ์ฒด๊ฐ ๋๋ ์๋ฃ์ ํน์ฑ์ ์ถ์ํํจ
basic abstraction (๊ธฐ๋ณธ์ ์ถ์ํ)
์ปดํจํฐ ๋ด๋ถ์ ์๋ฃ ํํ์ ์ถ์ํํจ
ex.
1. ๊ธฐ์ต ์ฅ์น์ ์์น -> ๋ณ์
2. ์๋ฃ์ ๊ฐ -> 2์ง๋ฒ ํ๊ธฐ๊ฐ ์๋ ์ ์, ์ค์์ ๊ฐ์ ์๋ฃํ
๋ฑ ์ผ๋ก ์ถ์ํ ๋จ
๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ ๋ฐ์ดํฐ ํ์ ์ ์ฝ
char, int, float, double, Boolean, string, pointer
structured abstraction (๊ตฌ์กฐ์ ์ถ์ํ)
๊ด๋ จ๋ ์๋ฃ๊ฐ์ ์งํฉ์ ์ถ์ํํจ
ex. ๋ฐฐ์ด, ๋ ์ฝ๋
๊ตฌ์กฐ์ ์ถ์ํ๋ ์๋ฃํ๋ค์ ๊ตฌ์กฐ ์๋ฃํ(structured type) ๋๋ ๋จ์ํ ๊ตฌ์กฐํ์ด๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํจ
-> ๊ตฌ์กฐํ์ ๊ธฐ๊ณ ๋ด๋ถ ํํ์ด ์๋๋ผ ํ๋ก๊ทธ๋๋จธ๊ฐ ํ์์ ๋ฐ๋ผ ์์ฑํ ์๋ก์ด ์๋ฃํ์ผ๋ก ๋ณผ ์ ์์
๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ๋ช ์นญ ๋ถ์ฌ (๋ณ์, ๋ฐฐ์ด, ๊ตฌ์กฐ์ฒด)
type arr = array[1..10] of real;
unit abstraction (๋จ์ ์ถ์ํ)
ํฐ ํ๋ก๊ทธ๋จ์์๋ ํ ์๋ฃํ์ ์์ฑ๊ณผ ์ฌ์ฉ์ ๋ํ ์ ๋ณด๋ฅผ ํ ์ฅ์์ ๋ชจ์๋๊ณ , ์๋ฃ์ ์ธ๋ถ ์ฌํญ์ ๋ํ ์ ๊ทผ์ ์ ํํ ํ์๊ฐ ์์
(์๋ฃํ์ ๊ตฌ์กฐ์ ๋ํ ๋ณ๊ฒฝ์ด ํ๋ก๊ทธ๋จ ์ ์ฒด์ ์ํฅ์ ์ฃผ์ง ์์ ๋ฟ๋ง ์๋๋ผ ํ๋ก๊ทธ๋๋จธ๊ฐ ํญ์ ์๋ฃ ๊ตฌ์กฐ์ ์ธ๋ถ ์ฌํญ์ ์ผ๋์ ๋์ง ์์๋๋จ)
-> ์ด๋ฌํ ์ฒด๊ณ๋ฅผ ์๋ฃ ์บก์ํ ํน์ ์ถ์ ์๋ฃํ์ด๋ผ๊ณ ํ๋ฉฐ, ์ด๋ unit abstraction์ ๋ํ์ ์ธ ์์์
ex. Modula-2์ module, Ada์ package, Java์ class
public class BankAccount {
private double balance;
public void deposit(double amount) {
balance += amount;
}
public void withdraw(double amount) {
if (balance >= amount) {
balance -= amount;
}
}
public double getBalance() {
balance += 0.01; // ๋ด๋ถ ๊ตฌํ ๋ณ๊ฒฝ: ์๊ณ ์ 0.01 ์ถ๊ฐ
return balance;
}
}
์ ์์ Java ์ฝ๋๋ฅผ ๋ณด๋ฉด BankAccount ํด๋์ค๋ ๊ณ์ข ์๊ณ ์ ๊ด๋ จ๋ ๋ชจ๋ ์ฝ๋๋ฅผ ํ ๊ณณ์ ๋ชจ์๋๊ณ ์๋ ๊ฒ์ ํ์ธํ ์ ์์
Process abstraction
์ ์ด ์ถ์ํ(์๊ณ ๋ฆฌ์ฆ ์ถ์ํ)๋ ํ ์ํฉ์ ๋ฐ๋ผ ์คํ ์์์ ์์ ์ ์ํ ์ ์ด์ ํน์ฑ์ ์ถ์ํํจ
(ex. ๋ฐ๋ชฉ๋ถ, ์กฐ๊ฑด๋ฌธ, ํ๋ก์์ ํธ์ถ์ด ์ฌ๊ธฐ์ ํด๋น๋จ)
=> ์ฌ๋ฌ๊ฐ์ ๋ฌธ์ฅ์ ๋ ํฐ ํ๋์ ๋จ์๋ก ์ถ์ํ
basic abstraction (๊ธฐ๋ณธ์ ์ถ์ํ)
๊ณ์ฐ๊ณผ ๊ฐ์ ์ ์ฅ์ ์ถ์ํํจ

-> ์ฌ๋ฌ๊ฐ์ ๊ธฐ๊ณ ๋ช ๋ น์ด๋ฅผ ๋ชจ์ ์ดํดํ๊ธฐ ์ฌ์ด ์ถ์ ๊ตฌ๋ฌธ์ผ๋ก ๋ง๋ ๊ฒ
ex. x := x + y (๋ฐฐ์ ๋ฌธ)
-> ์์ ๋ฐฐ์ ๋ฌธ์ ๋ณ์ x์ ๊ฐ์ ๊ธฐ์ต์ฅ์์์ ๊ฐ์ ธ์ ๋ณ์ y ๊ฐ์ ๋ํ ํ์ ๊ธฐ์ต ์ฅ์ x์ ๋ค์ ์ ์ฅํ๋ ๊ฒ์ ์๋ฏธํจ
structured abstraction (๊ตฌ์กฐ์ ์ถ์ํ)
ํ๋ก๊ทธ๋จ์์ ์ด๋ค ๊ฒ์ฌ๋ ๊ฐ์ ๋ฐ๋ผ ๋ถํ ๋ ๋ช ๋ น์ด์ ํ ๊ทธ๋ฃน์ ์ํํ๋๋ก ํ๋ ๊ฒ์
ex. if๋ฌธ, case๋ฌธ, switch๋ฌธ ๋ฑ์ ํ์ผ๋ฌธ๊ณผ ๊ฐ์ข ๋ฐ๋ณต๋ฌธ๋ค๊ณผ ๋ถํ๋ก๊ทธ๋จ ํธ์ถ
-> ๊ตฌ์กฐํ๋ ์ ์ด ๊ตฌ์กฐ์ ํ ๊ฐ์ง ์ฅ์ ์ ์ด ์ ์ด ๊ตฌ์กฐ๋ค์ด ๋ค๋ฅธ ์ ์ด ๊ตฌ์กฐ ์์ ๋ดํฌ๋ ์ ์์

Java์ Ada์์์ structured abstraction ์์์ธ๋ฐ
Ada์์ endif์ ์ฌ์ฉ์ Java์์ ์ค๊ดํธ( {..} ) ์ฌ์ฉ์ ์์ ๋ฉฐ ๋งค์ฐ ์ค์ํจ
๋์ฑ ๋ง๊ฐํ ๊ตฌ์กฐ์ ์ ์ด์ถ์ํ๋ ํ๋ก์์ ํน์ ์๋ธ๋ฃจํด์ด๋ผ๊ณ ๋ถ๋ฅด๋ ๋ถํ๋ก๊ทธ๋จ์ ์ฌ์ฉ์
ํ๋ก์์ ์ถ์ํ๋ ๋ฐ์ ๋ ๊ฐ์ง๋ฅผ ํฌํจํด์ผํจ
- ํ๋ก์์ ๋ ์ด๋ฆ๊ณผ ์คํํด์ผ ํ ๋์์ด ๊ฒฐํฉ๋์ด์ผํจ
-> ์ด๋ฅผ ํ๋ก์์ ์ ์ธ์ด๋ผ๊ณ ํ๋๋ฐ, ๋ณ์์ ํ ์ ์ธ๊ณผ ์ ์ฌํจ - ํ๋ก์์ ๋ ์ค์ ๋ก ์คํ๋์ด์ผ ํ ๊ณณ์์ ํธ์ถ๋์ด์ผํจ
-> ํ๋ก์์ ํธ์ถ(invocation) ํน์ ํ๋ก์์ ์กํฐ๋ฒ ์ด์ (activation)์ด๋ผ๊ณ ํจ

์ ์์ ์ฝ๋๋ Modula-2 ํ๋ก๊ทธ๋จ์ธ๋ฐ
SUBROUTINE gcd(u, v, x)
...
END
Fortran์์์ ํ๋ก์์ ๋ ๋ค์๊ณผ ๊ฐ์ ์๋ธ๋ฃจํด์ผ๋ก ์ ์ธ๋จ
ํ๋ก์์ ํธ์ถ์ ์ ํ๋ฌธ์ด๋ ๋ฐ๋ณต๋ฌธ๋ณด๋ค ํจ์ฌ ๋ณต์กํ ๊ตฌ์กฐ์
ํ๋ก์์ ๋ฅผ ํธ์ถํ๋ ค๋ฉด ํธ์ถ ๋น์์ ํ๋ก๊ทธ๋จ ์ํ๋ฅผ ์ ์ฅํ์ฌ์ผ ๋๋๋ฐ,
์ด๋ฌํ ์ ๋ณด๋ ์คํ ํ๊ฒฝ (runtime environment)์ ์ ์ฅ๋จ
unit abstraction (๋จ์ ์ถ์ํ)
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ฒ๋ผ ํ๋ก์์ ์ ์งํฉ์ ์ถ์ํํ ์ ์์
ex. ์๋ฃ ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ์์ ํ๊ท , ํ์ฅฐ ํธ์ฐจ ๋ฑ ํต๊ณ์ ๊ด๋ จ๋ ํ๋ก๊ทธ๋จ๋ค์ ๋ชจ์์ ํ๋์ ํ๋ก๊ทธ๋จ ๋จ์๋ก ๋ง๋ค๊ณ ์ด๋ฅผ ๋ฐ๋ก ์ปดํ์ผ ํ์ฌ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉํ ์ ์์
์ต๊ทผ ์ธ์ด์์ ์ ๊ณตํ๋ ์ถ์ ์๋ฃํ์ ์๋ฃ ์ถ์ํ์ ์ ์ด ์ถ์ํ๋ฅผ ๋ชจ๋ ์ง์ํ๋ ๋จ์ ์ถ์ํ์ด๋ฉฐ
- Modula-2์ module
- Ada์ package
- C++์ Java์ class
๋ฑ์ด ์ด์ ์ํจ
์์ ์ด๋ค ๋ฒ์ฃผ์๋ ๋ค์ง ์๋ ์ ์ด ์ถ์ํ๋ก์ ๋ณํ ํ๋ก๊ทธ๋๋ฐ์ด ์์
์ฆ, ํ๋์ ๋ง์ ์ปดํจํฐ๋ ๋ค์์ ํ๋ก์ธ์๋ฅผ ๊ฐ์ง๊ณ ์ฌ๋ฌ ์๋ฃ๋ฅผ ๋์์ ์ฒ๋ฆฌํ ์ ์์
-> ๋ง์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ๋ณ๋ ฌ๋ก ์คํ๋๋ ํ๋ก๊ทธ๋จ๋ค๊ฐ์ ๋๊ธฐํ์ ํต์ ์ ํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ์ ๊ณตํจ
ex. Moudla-2์ ์ฝ๋ฃจํด, Ada์ task, Java์ ๋ฉํฐ ์ค๋ ๋(multithread) ๋ฑ์ด ๋ณํ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํจ
๋ชจ๋ ์ถ์ํ๋ ๊ฒฐ๊ตญ ํ๋ก๊ทธ๋จ์ ์ฌ๋์ด ์ฝ๊ณ ์์ฑํ๊ธฐ ์ฝ๋๋ก ํ ๊ฒ์
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ๊ณ์ฐ๋ง์ ์ํ ๊ฒ์ด๋ผ๋ฉด ๋ชจ๋ ์ข ๋ฅ์ ๊ณ์ฐ์ ๊ธฐ์ ํ ์ ์์ผ๋ฉด ์กฑํจ
-> ์ด๋ฌํ ์ธ์ด๋ฅผ ํ๋ง ์ปดํ๋ฆฟ(turing complete)ํ๋ค๊ณ ํจ
(ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์ด๋ก ์ ์ผ๋ก ๋ชจ๋ ๊ณ์ฐ ๊ฐ๋ฅํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ํ๋ง ๋จธ์ ๊ณผ ๋์ผํ ๊ณ์ฐ ๋ฅ๋ ฅ์ ๊ฐ์ก์์ ์๋ฏธํจ)
๋ณดํต ๋ช ๋ น๋ฌธ 5๊ฐ ์ ๋๋ฉด turing complete๋ฅผ ๋ง์กฑํ ์ ์๋ค๊ณ ํจ
1.4 ๊ณ์ฐ ์ ํ (computing paradigm)
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ์ปดํจํฐ์ ์ฐ์ฐ์ ๋ชจ๋ฐฉํ๊ณ ์ถ์ํํ๋ ๋ฐ์ ์์๋จ
-> ์ปดํจํฐ์ ๊ตฌ์กฐ๊ฐ ์ธ์ด์ค๊ณ์ ์ํฅ์ ๋ฏธ์น ์ ๋ฐ์ ์์์
์ฆ, ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋
- ๋ช
๋ น์ ์์ฐจ์ ์คํ
- ๊ธฐ์ต์ฅ์ ์์น๋ฅผ ํํํ๋ ๋ณ์์ ์ฌ์ฉ
- ๋ณ์์ ๊ฐ์ ๋ณ๊ฒฝํ๊ธฐ ์ํ ๋ฐฐ์ ๋ฌธ์ ์ฌ์ฉ
์ผ๋ก ํน์ ์ง์ ์ ์์
=> ์ด๋ฌํ ์ธ์ด๋ฅผ ๋ช
๋ นํ ์ธ์ด(imperative language) ๋๋ ์ ์ฐจ ์ธ์ด (procedural language) ๋ผ๊ณ ํจ
์ค๋๋ ์ ๋๋ถ๋ถ ์ธ์ด๋ ๋ช
๋ นํ ์ธ์ด์ด์ง๋ง, ๋ง์ ์๋ฃ์ ๋์ ์ ์ฉ๋ ์ ์๋ ๊ณ์ฐ, ๋น๊ฒฐ์ ์ ์ธ ๊ณ์ฐ, ์์์ ์์กดํ์ง ์๋ ๊ณ์ฐ์ ๊ธฐ์ ํ๋๋ฐ ๋งค์ฐ ๋นํจ์จ์ ์
=> ๊ณ์ฐ์ด ์์ฐจ์ ๋ช ๋ น์ ์ํ์ฌ ์คํ๋์ด์ผ ํ๋ค๋ ๊ฒ์ด ํฐ๋ ธ์ด๋ง ๋ณ๋ชฉ ํ์์ ๋ถ๋ฌ์ผ์ผํด
(๋ช ๋ นํ ์ธ์ด๋ก๋ ์ธ๊ณต์ง๋ฅ์ ๋ค๋ฃจ๊ธฐ ํ๋ฌ)
์ด๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด ํจ์ ๊ฐ๋
์ ๊ธฐ๋ฐ์ ๋ ํจ์ํ ์ธ์ด, ๊ธฐํธ ๋
ผ๋ฆฌํ์ ๊ธฐ๋ฐํ ๋
ผ๋ฆฌํ ์ธ์ด๊ฐ ํ์ํจ
- ๋ช
๋ นํ ์ธ์ด (๋๋ ์ ์ฐจ์ ์ธ์ด)
=> ๋ณ์์ ๋ฐฐ์ ๋ฌธ ์ฌ์ฉ, ํฐ๋ ธ์ด๋ง ๋ณ๋ชฉ ํ์(์์ฐจ์ ์คํ์ผ๋ก ์ธํด) - ํจ์ํ ์ธ์ด : Lisp
=> ํจ์์ ํ๊ฐ ๋ฐ ํธ์ถ ๋ฐฉ๋ฒ ์ ๊ณต, ๋ณ์์ ๋ฐฐ์ ๋ฌธ์ด ์์, ๋ฐ๋ณต๋ฌธ์ด ์์ด์ ์ฌ๊ทํจ์๋ก ๊ตฌํํจ - ๋
ผ๋ฆฌํ ์ธ์ด : Prolog
=> ์ ์ธ์ ์ธ์ด, ๊ธฐํธ ๋ ผ๋ฆฌํ์ ๊ทผ๊ฑฐ
์ด ๋ ์ํํธ์จ์ด๊ฐ ๊ฑฐ๋ํด์ง๋ฉฐ ์ฝ๋์ ๊ธธ์ด๊ฐ ๊ธธ์ด์ก๊ณ ์ด์ ๊ด๋ฆฌ์ ์ด๋ ค์์ ๋๊ปด ๊ฐ์ฒด์งํฅ ์ธ์ด๊ฐ ํ์ํจ
- ๊ฐ์ฒด์งํฅ ์ธ์ด
=> ๊ธฐ์ต์ฅ์์ ์ด ๊ธฐ์ต์ฅ์์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ ์ฐ์ฐ์ ์งํฉ์ธ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํจ
์ ์ฐจํ vs ํจ์ํ ํ๋ก๊ทธ๋๋ฐ (Modula-2)
PROCEDURE gcd (u,v : INTERGER; VAR x : INTERGER);
VAR y, t : INTERGER
BEGIN
x := u ; y := v ;
LOOP
IF y <= 0 THEN
EXIT
END ;
t := y;
y := x MOD y;
x := t;
END;
END gcd;
PROCEDURE gcd (u,v : INTERGER) : INTEGER ;
BEGIN
IF v = 0 THEN
RETURN u ;
ELSE
RETURN gcd (v, u MOD v) ;
END;
END gcd;
Modula2์ 2๊ฐ์ง ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด
1. recursive๋ก ์ธํด ๊ธธ์ด ์ฐจ์ด๊ฐ ์์
2. ์ฌ๊ท๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๋ ๋ณ์๋ฅผ ๋์ดํ์ง ์๊ณ ํจ์ ์ํ์ค(ํจ์์ ํ๋ฆ)๋ฅผ ์ฌ์ฉ
๋ฅผ ์ ์ ์์
๋ ผ๋ฆฌํ ํ๋ก๊ทธ๋๋ฐ (Prolog)
ํน์ง : ๊ณ์ฐ์ ์คํ ์์(how) ๋์ ๋ฌด์์ ํ๋ ค๊ณ ํ๋๊ฐ(what)์ ์ ์ธํ๋ ๊ฒ์ด๋ฉฐ ๋ฐ๋ณต์ด๋ ์ ํ ๊ฐ๋ ์ด ๋ถํ์ํจ
์ต๋๊ณต์ฝ์(gcd)์ ๋ํ ๋
ผ๋ฆฌ์ ๊ธฐ์ ์ ๋ณด๋ฉด
- v = 0 ์ด๋ฉด u ์ v ์ gcd ๋ u ์ด๋ค.
- v > 0 ์ด๋ฉด u ์ v ์ gcd ๋ v ์ u mod v ์ gcd ์ ๊ฐ๋ค.
์ด๋ฏ๋ก

์ ์ฌ์ง์ ๋ ผ๋ฆฌ์ ๊ธฐ์ ์ ๋ํ Prolog ํ๋ก๊ทธ๋จ์
๊ฐ์ฒด ์งํฅ ์ธ์ด ์์

Programming Language Paradigm

- ์ปดํจํฐ H/W ๊ตฌ์กฐ์์ ์ฐ๊ด์ฑ
- Von Neumann ์ํคํ
์ฒ
- Von Neumann ์ํคํ
์ฒ
- S/W ์ค๊ณ ๋ฐฉ๋ฒ๋ก ๊ณผ์ ์ฐ๊ด์ฑ
- ๊ตฌ์กฐ์ ์ค๊ณ vs ๊ฐ์ฒด์งํฅ ์ค๊ณ
- ๊ตฌ์กฐ์ ์ค๊ณ vs ๊ฐ์ฒด์งํฅ ์ค๊ณ
- ์ธ๊ฐ์ ์ฌ๊ณ ๋ฐฉ์๊ณผ์ ์ฐ๊ด์ฑ
๊ณ ๊ธ์ธ์ด์ 4๊ฐ์ง ํจ๋ฌ๋ค์
๋ช ๋ นํ, ํจ์ํ, ๋ ผ๋ฆฌํ, ๊ฐ์ฒด์งํฅ ์ธ์ด
- Imperative(procedural) languages
- Algol, Cobol, PL/1, C, Modula
- Algol, Cobol, PL/1, C, Modula
- Functional languages
- Lisp, Haskel, ML, APL
- Lisp, Haskel, ML, APL
- Logic languages
- Prolog
- Prolog
- Object-oriented languages
- Smalltalk, Simula, C++, Java, Ruby
(Ruby์ Python์ ์คํฌ๋ฆฝํธ ์ธ์ด์ธ๋ฐ Python์ ํ์ด๋ธ๋ฆฌ๋ ์ธ์ด๋ผ์ ์ ์ธ)
- Smalltalk, Simula, C++, Java, Ruby
'๐ป CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] int ์ Integer ์ฐจ์ด (0) | 2025.03.21 |
---|---|
Java๋ ์ปดํ์ผ ์ธ์ด์ผ๊น? ์ธํฐํ๋ฆฌํฐ ์ธ์ด์ผ๊น? (0) | 2025.03.10 |
[ํ๋ก๊ทธ๋๋ฐ์ธ์ด๋ก ] ๊ธฐ๊ณ์ด, ์ด์ ๋ธ๋ฆฌ์ด, ๊ณ ๊ธ์ธ์ด์ ์ฐจ์ด์ (C++ vs Java) (0) | 2025.03.10 |
[CS ์ ๊ณต์ง์ ๋ ธํธ] ๋ฉ๋ชจ๋ฆฌ (0) | 2025.02.24 |
[CS ์ ๊ณต์ง์ ๋ ธํธ] ์ด์์ฒด์ ์ ์ปดํจํฐ (0) | 2025.02.18 |
์ด ๊ธ์ ๊ตญ๋ฏผ๋ํ๊ต ๊ฐ์น์ ๊ต์๋์ 'ํ๋ก๊ทธ๋๋ฐ์ธ์ด๋ก ' ์์ ์ ํ ๋๋ก
๊ฐ์ธ์ ์ผ๋ก ํ์ตํ ๋ด์ฉ์ ๋๋ค.
1.1 ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ๋ฌด์์ธ๊ฐ?
์ธ๊ฐ์ด ์ปดํจํฐ๋ก ์ํํ๊ณ ์ ํ๋ ๋ฐ๋ฅผ ์ปดํจํฐ์๊ฒ ์ ๋ฌํ๊ธฐ ์ํ ํํ๋ฒ์ ๋ฐ์ ๊ณผ์
1940๋ ์ด์
Hard-wired ๋ฐฉ๋ฒ์ผ๋ก ์ปดํจํฐ ๋ด๋ถ ์ค์์น ์ธํ
-> ์ปดํจํฐ์ ๋ด๋ถ ํ๋ก๋ฅผ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ณ๊ฒฝํ์ฌ ํ๋ก๊ทธ๋จ์ ์ํํด์ผ ํ๋ฏ๋ก ๋งค์ฐ ์ ํ์ ์
1940๋ ๋
ํฐ๋ ธ์ด๋ง ์ปดํจํฐ (stored programming)
-> ์ผ๋ จ์ ๋ช ๋ น์ฝ๋๋ก ์์ฑ, main memory์ ์ ์ฅ
์ด์ ๋ธ๋ฆฌ์ด ํ์
-> ๊ธฐ๊ณ ์ข ์์ฑ(ํน์ ์ปดํจํฐ ์ํคํ ์ฒ์ ๋ง๊ฒ ์์ฑ), ์ ๊ธ์์ค์ ์ถ์ํ, ์ฝ๊ณ ์ฐ๊ธฐ ์ด๋ ค์(๊ธฐ๊ณ์ด์ ๋นํด์๋ ํจ์ฌ ๋ ์ฝ๊ณ ์ฐ๊ธฐ ์ฌ์)
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ ์
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ๊ธฐ๊ณ๊ฐ ์ฝ์ ์ ์๊ณ , ์ฌ๋์ด ์ฝ์ ์ ์๋ ํ์์ผ๋ก ๊ณ์ฐ์ ์์ ํ๊ธฐ ์ํ ํ๊ธฐ ์ฒด๊ณ์
ํน์ฑ์ ์ดํด๋ณด๋ฉด
- ๊ณ์ฐ (computation)
- Turing machine : ์ํ์ ๊ฐ๋ ์ผ๋ก ํ์์ ์ธ ์ ์
- ์ปดํจํฐ๊ฐ ์ํ ๊ฐ๋ฅํ ๋ชจ๋ ์์
- Machine-readable
- Machine independent (์ธ์ด ์์ฒด๋ ํน์ ์ปดํจํฐ ์ํคํ ์ฒ์ ๋ง์ถฐ์ ์์ฑ๋์ง ์์์ผํจ)
- ๋ชจํธํ์ง ์๊ณ , ์ ํํ ๋จ๊ณ์ ์ฒ๋ฆฌ๋ก ๋ฒ์ญ ๊ฐ๋ฅํ ์๊ณ ๋ฆฌ์ฆ์ด ์กด์ฌํด์ผํจ
- Human-readable
- ์ปดํจํฐ ํ์๋ฅผ ์ฝ๊ธฐ ์ฝ๋๋ก ์ถ์ํ์ํค๋ ๋ฐฉ๋ฒ์ ์ ๊ณต
ํ๋ก๊ทธ๋๋ฐ ์์ญ๊ณผ ๊ณ ๊ธ ์ธ์ด
๊ณผํ ๊ณ์ฐ : Fortran
์ฌ๋ฌด ์์ฉ : Cobol
์ธ๊ณต ์ง๋ฅ : Lisp, Prolog
์์คํ SW : C
์น SW : JavaScript, PHP, ASP
์ฑ SW : Objective-C, Java
๊ต์ก์ฉ : Basic, Pascal, ML, Haskell
Script languages : Perl, Python, Ruby
Shell programming : AWK, Tcl/Tk
GUI : MFC, C#, Visual Basic
1.2 ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ๋ฐฐ์ฐ๋ ์ด์
1. ํ์ฌ ์ฌ์ฉํ๋ ์ธ์ด๋ฅผ ๋ ์ ์ดํดํ๊ฒ ๋จ
2. ์ ์ฉํ ํ๋ก๊ทธ๋๋ฐ์ ๊ตฌ์ฌํ๋ ๋ฅ๋ ฅ์ ์ฆ๋์ํด
3. ์ ํฉํ ์ธ์ด๋ฅผ ์ ํํ๋ ๋ฅ๋ ฅ์ ์ฆ๋์ํด
4. ์๋ก์ด ์ธ์ด๋ฅผ ๋ฐฐ์ฐ๊ธฐ ์ฝ๊ฒ ํด์ค
5. ์๋ก์ด ์ธ์ด๋ฅผ ์ค๊ณํ๊ธฐ ์ฝ๊ฒ ํด์ค
6. ๊ตฌํ์ ์ค์์ฑ์ ์ดํดํ๊ณ ์ด๋ฏธ ์๊ณ ์๋ ์ธ์ด๋ฅผ ๋ ์ ์ฌ์ฉํ ์ ์์
7. ์๊ฐ์ ํํํ๋ ๋ฅ๋ ฅ์ ํฅ์์ํด
8. ์ ๋ฐ์ ์ผ๋ก computing์ ๋ํ ์ดํด๋๋ฅผ ํฅ์์ํด
1.3 ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์์ ์ถ์ํ
์ผ๋ฐ์ ์ผ๋ก ์ถ์ํ(abstraction)๋ ์์ฑ๋ค์ ์ผ๋ถ๋ถ๋ง์ ๊ฐ์ง๊ณ ์ฃผ์ด์ง ์์ ์ด๋ ๊ฐ์ฒด๋ค์ ํ์ํ ์ ๋๋ก ๋ฌ์ฌํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ง์ํ๋ ๊ฒ์
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ถ์ํ๋ ๋ฐ์ดํฐ ์ถ์ํ(= ์๋ฃ ์ถ์ํ)์ ์ ์ด ์ถ์ํ(= ์๊ณ ๋ฆฌ์ฆ ์ถ์ํ)์ ๋ ๊ฐ์ง ๋ฒ์ฃผ๋ก ๋๋จ
์ถ์ํ๋ ์ถ์ํ์ ํฌํจ๋ ์ ๋ณด์ ์์ผ๋ก ์์ค์ ๋๋ ์๊ฐ ์์
- ๊ธฐ๋ณธ์ ์ถ์ํ(basic abstraction) : ๊ฐ์ฅ ๊ตญ์ง์ ์ธ ๊ธฐ๊ณ ์ ๋ณด๋ฅผ ์์งํ ์ถ์ํ
- ๊ตฌ์กฐ์ ์ถ์ํ(structured abstraction) : ํ๋ก๊ทธ๋จ์ ๊ตฌ์กฐ์ ๋ํ ๋ณด๋ค ์ ์ญ์ ์ธ ์ ๋ณด์ ๊ดํ ์ถ์ํ
- ๋จ์ ์ถ์ํ(unit abstraction) : ๋จ์ ํ๋ก๊ทธ๋จ ์ ์ฒด ์ ๋ณด์ ๊ดํ ์ถ์ํ
๋จ๊ณ๊ฐ ๋์๊ฐ์๋ก ๋ ํฐ ๋จ์๋ก์ ์ถ์ํ๋ผ๊ณ ์๊ฐํ๋ฉด๋จ
Data abstraction
์๋ฃ ์ถ์ํ(๋ฐ์ดํฐ ์ถ์ํ)๋ ๋ฌธ์์ด, ์, ํ์ ํธ๋ฆฌ์ ๊ฐ์ ๊ณ์ฐ์ ์ฃผ์ฒด๊ฐ ๋๋ ์๋ฃ์ ํน์ฑ์ ์ถ์ํํจ
basic abstraction (๊ธฐ๋ณธ์ ์ถ์ํ)
์ปดํจํฐ ๋ด๋ถ์ ์๋ฃ ํํ์ ์ถ์ํํจ
ex.
1. ๊ธฐ์ต ์ฅ์น์ ์์น -> ๋ณ์
2. ์๋ฃ์ ๊ฐ -> 2์ง๋ฒ ํ๊ธฐ๊ฐ ์๋ ์ ์, ์ค์์ ๊ฐ์ ์๋ฃํ
๋ฑ ์ผ๋ก ์ถ์ํ ๋จ
๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ ๋ฐ์ดํฐ ํ์ ์ ์ฝ
char, int, float, double, Boolean, string, pointer
structured abstraction (๊ตฌ์กฐ์ ์ถ์ํ)
๊ด๋ จ๋ ์๋ฃ๊ฐ์ ์งํฉ์ ์ถ์ํํจ
ex. ๋ฐฐ์ด, ๋ ์ฝ๋
๊ตฌ์กฐ์ ์ถ์ํ๋ ์๋ฃํ๋ค์ ๊ตฌ์กฐ ์๋ฃํ(structured type) ๋๋ ๋จ์ํ ๊ตฌ์กฐํ์ด๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํจ
-> ๊ตฌ์กฐํ์ ๊ธฐ๊ณ ๋ด๋ถ ํํ์ด ์๋๋ผ ํ๋ก๊ทธ๋๋จธ๊ฐ ํ์์ ๋ฐ๋ผ ์์ฑํ ์๋ก์ด ์๋ฃํ์ผ๋ก ๋ณผ ์ ์์
๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ๋ช ์นญ ๋ถ์ฌ (๋ณ์, ๋ฐฐ์ด, ๊ตฌ์กฐ์ฒด)
type arr = array[1..10] of real;
unit abstraction (๋จ์ ์ถ์ํ)
ํฐ ํ๋ก๊ทธ๋จ์์๋ ํ ์๋ฃํ์ ์์ฑ๊ณผ ์ฌ์ฉ์ ๋ํ ์ ๋ณด๋ฅผ ํ ์ฅ์์ ๋ชจ์๋๊ณ , ์๋ฃ์ ์ธ๋ถ ์ฌํญ์ ๋ํ ์ ๊ทผ์ ์ ํํ ํ์๊ฐ ์์
(์๋ฃํ์ ๊ตฌ์กฐ์ ๋ํ ๋ณ๊ฒฝ์ด ํ๋ก๊ทธ๋จ ์ ์ฒด์ ์ํฅ์ ์ฃผ์ง ์์ ๋ฟ๋ง ์๋๋ผ ํ๋ก๊ทธ๋๋จธ๊ฐ ํญ์ ์๋ฃ ๊ตฌ์กฐ์ ์ธ๋ถ ์ฌํญ์ ์ผ๋์ ๋์ง ์์๋๋จ)
-> ์ด๋ฌํ ์ฒด๊ณ๋ฅผ ์๋ฃ ์บก์ํ ํน์ ์ถ์ ์๋ฃํ์ด๋ผ๊ณ ํ๋ฉฐ, ์ด๋ unit abstraction์ ๋ํ์ ์ธ ์์์
ex. Modula-2์ module, Ada์ package, Java์ class
public class BankAccount {
private double balance;
public void deposit(double amount) {
balance += amount;
}
public void withdraw(double amount) {
if (balance >= amount) {
balance -= amount;
}
}
public double getBalance() {
balance += 0.01; // ๋ด๋ถ ๊ตฌํ ๋ณ๊ฒฝ: ์๊ณ ์ 0.01 ์ถ๊ฐ
return balance;
}
}
์ ์์ Java ์ฝ๋๋ฅผ ๋ณด๋ฉด BankAccount ํด๋์ค๋ ๊ณ์ข ์๊ณ ์ ๊ด๋ จ๋ ๋ชจ๋ ์ฝ๋๋ฅผ ํ ๊ณณ์ ๋ชจ์๋๊ณ ์๋ ๊ฒ์ ํ์ธํ ์ ์์
Process abstraction
์ ์ด ์ถ์ํ(์๊ณ ๋ฆฌ์ฆ ์ถ์ํ)๋ ํ ์ํฉ์ ๋ฐ๋ผ ์คํ ์์์ ์์ ์ ์ํ ์ ์ด์ ํน์ฑ์ ์ถ์ํํจ
(ex. ๋ฐ๋ชฉ๋ถ, ์กฐ๊ฑด๋ฌธ, ํ๋ก์์ ํธ์ถ์ด ์ฌ๊ธฐ์ ํด๋น๋จ)
=> ์ฌ๋ฌ๊ฐ์ ๋ฌธ์ฅ์ ๋ ํฐ ํ๋์ ๋จ์๋ก ์ถ์ํ
basic abstraction (๊ธฐ๋ณธ์ ์ถ์ํ)
๊ณ์ฐ๊ณผ ๊ฐ์ ์ ์ฅ์ ์ถ์ํํจ

-> ์ฌ๋ฌ๊ฐ์ ๊ธฐ๊ณ ๋ช ๋ น์ด๋ฅผ ๋ชจ์ ์ดํดํ๊ธฐ ์ฌ์ด ์ถ์ ๊ตฌ๋ฌธ์ผ๋ก ๋ง๋ ๊ฒ
ex. x := x + y (๋ฐฐ์ ๋ฌธ)
-> ์์ ๋ฐฐ์ ๋ฌธ์ ๋ณ์ x์ ๊ฐ์ ๊ธฐ์ต์ฅ์์์ ๊ฐ์ ธ์ ๋ณ์ y ๊ฐ์ ๋ํ ํ์ ๊ธฐ์ต ์ฅ์ x์ ๋ค์ ์ ์ฅํ๋ ๊ฒ์ ์๋ฏธํจ
structured abstraction (๊ตฌ์กฐ์ ์ถ์ํ)
ํ๋ก๊ทธ๋จ์์ ์ด๋ค ๊ฒ์ฌ๋ ๊ฐ์ ๋ฐ๋ผ ๋ถํ ๋ ๋ช ๋ น์ด์ ํ ๊ทธ๋ฃน์ ์ํํ๋๋ก ํ๋ ๊ฒ์
ex. if๋ฌธ, case๋ฌธ, switch๋ฌธ ๋ฑ์ ํ์ผ๋ฌธ๊ณผ ๊ฐ์ข ๋ฐ๋ณต๋ฌธ๋ค๊ณผ ๋ถํ๋ก๊ทธ๋จ ํธ์ถ
-> ๊ตฌ์กฐํ๋ ์ ์ด ๊ตฌ์กฐ์ ํ ๊ฐ์ง ์ฅ์ ์ ์ด ์ ์ด ๊ตฌ์กฐ๋ค์ด ๋ค๋ฅธ ์ ์ด ๊ตฌ์กฐ ์์ ๋ดํฌ๋ ์ ์์

Java์ Ada์์์ structured abstraction ์์์ธ๋ฐ
Ada์์ endif์ ์ฌ์ฉ์ Java์์ ์ค๊ดํธ( {..} ) ์ฌ์ฉ์ ์์ ๋ฉฐ ๋งค์ฐ ์ค์ํจ
๋์ฑ ๋ง๊ฐํ ๊ตฌ์กฐ์ ์ ์ด์ถ์ํ๋ ํ๋ก์์ ํน์ ์๋ธ๋ฃจํด์ด๋ผ๊ณ ๋ถ๋ฅด๋ ๋ถํ๋ก๊ทธ๋จ์ ์ฌ์ฉ์
ํ๋ก์์ ์ถ์ํ๋ ๋ฐ์ ๋ ๊ฐ์ง๋ฅผ ํฌํจํด์ผํจ
- ํ๋ก์์ ๋ ์ด๋ฆ๊ณผ ์คํํด์ผ ํ ๋์์ด ๊ฒฐํฉ๋์ด์ผํจ
-> ์ด๋ฅผ ํ๋ก์์ ์ ์ธ์ด๋ผ๊ณ ํ๋๋ฐ, ๋ณ์์ ํ ์ ์ธ๊ณผ ์ ์ฌํจ - ํ๋ก์์ ๋ ์ค์ ๋ก ์คํ๋์ด์ผ ํ ๊ณณ์์ ํธ์ถ๋์ด์ผํจ
-> ํ๋ก์์ ํธ์ถ(invocation) ํน์ ํ๋ก์์ ์กํฐ๋ฒ ์ด์ (activation)์ด๋ผ๊ณ ํจ

์ ์์ ์ฝ๋๋ Modula-2 ํ๋ก๊ทธ๋จ์ธ๋ฐ
SUBROUTINE gcd(u, v, x)
...
END
Fortran์์์ ํ๋ก์์ ๋ ๋ค์๊ณผ ๊ฐ์ ์๋ธ๋ฃจํด์ผ๋ก ์ ์ธ๋จ
ํ๋ก์์ ํธ์ถ์ ์ ํ๋ฌธ์ด๋ ๋ฐ๋ณต๋ฌธ๋ณด๋ค ํจ์ฌ ๋ณต์กํ ๊ตฌ์กฐ์
ํ๋ก์์ ๋ฅผ ํธ์ถํ๋ ค๋ฉด ํธ์ถ ๋น์์ ํ๋ก๊ทธ๋จ ์ํ๋ฅผ ์ ์ฅํ์ฌ์ผ ๋๋๋ฐ,
์ด๋ฌํ ์ ๋ณด๋ ์คํ ํ๊ฒฝ (runtime environment)์ ์ ์ฅ๋จ
unit abstraction (๋จ์ ์ถ์ํ)
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ฒ๋ผ ํ๋ก์์ ์ ์งํฉ์ ์ถ์ํํ ์ ์์
ex. ์๋ฃ ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ์์ ํ๊ท , ํ์ฅฐ ํธ์ฐจ ๋ฑ ํต๊ณ์ ๊ด๋ จ๋ ํ๋ก๊ทธ๋จ๋ค์ ๋ชจ์์ ํ๋์ ํ๋ก๊ทธ๋จ ๋จ์๋ก ๋ง๋ค๊ณ ์ด๋ฅผ ๋ฐ๋ก ์ปดํ์ผ ํ์ฌ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉํ ์ ์์
์ต๊ทผ ์ธ์ด์์ ์ ๊ณตํ๋ ์ถ์ ์๋ฃํ์ ์๋ฃ ์ถ์ํ์ ์ ์ด ์ถ์ํ๋ฅผ ๋ชจ๋ ์ง์ํ๋ ๋จ์ ์ถ์ํ์ด๋ฉฐ
- Modula-2์ module
- Ada์ package
- C++์ Java์ class
๋ฑ์ด ์ด์ ์ํจ
์์ ์ด๋ค ๋ฒ์ฃผ์๋ ๋ค์ง ์๋ ์ ์ด ์ถ์ํ๋ก์ ๋ณํ ํ๋ก๊ทธ๋๋ฐ์ด ์์
์ฆ, ํ๋์ ๋ง์ ์ปดํจํฐ๋ ๋ค์์ ํ๋ก์ธ์๋ฅผ ๊ฐ์ง๊ณ ์ฌ๋ฌ ์๋ฃ๋ฅผ ๋์์ ์ฒ๋ฆฌํ ์ ์์
-> ๋ง์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ๋ณ๋ ฌ๋ก ์คํ๋๋ ํ๋ก๊ทธ๋จ๋ค๊ฐ์ ๋๊ธฐํ์ ํต์ ์ ํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ์ ๊ณตํจ
ex. Moudla-2์ ์ฝ๋ฃจํด, Ada์ task, Java์ ๋ฉํฐ ์ค๋ ๋(multithread) ๋ฑ์ด ๋ณํ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํจ
๋ชจ๋ ์ถ์ํ๋ ๊ฒฐ๊ตญ ํ๋ก๊ทธ๋จ์ ์ฌ๋์ด ์ฝ๊ณ ์์ฑํ๊ธฐ ์ฝ๋๋ก ํ ๊ฒ์
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ๊ณ์ฐ๋ง์ ์ํ ๊ฒ์ด๋ผ๋ฉด ๋ชจ๋ ์ข ๋ฅ์ ๊ณ์ฐ์ ๊ธฐ์ ํ ์ ์์ผ๋ฉด ์กฑํจ
-> ์ด๋ฌํ ์ธ์ด๋ฅผ ํ๋ง ์ปดํ๋ฆฟ(turing complete)ํ๋ค๊ณ ํจ
(ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์ด๋ก ์ ์ผ๋ก ๋ชจ๋ ๊ณ์ฐ ๊ฐ๋ฅํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ํ๋ง ๋จธ์ ๊ณผ ๋์ผํ ๊ณ์ฐ ๋ฅ๋ ฅ์ ๊ฐ์ก์์ ์๋ฏธํจ)
๋ณดํต ๋ช ๋ น๋ฌธ 5๊ฐ ์ ๋๋ฉด turing complete๋ฅผ ๋ง์กฑํ ์ ์๋ค๊ณ ํจ
1.4 ๊ณ์ฐ ์ ํ (computing paradigm)
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ์ปดํจํฐ์ ์ฐ์ฐ์ ๋ชจ๋ฐฉํ๊ณ ์ถ์ํํ๋ ๋ฐ์ ์์๋จ
-> ์ปดํจํฐ์ ๊ตฌ์กฐ๊ฐ ์ธ์ด์ค๊ณ์ ์ํฅ์ ๋ฏธ์น ์ ๋ฐ์ ์์์
์ฆ, ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋
- ๋ช
๋ น์ ์์ฐจ์ ์คํ
- ๊ธฐ์ต์ฅ์ ์์น๋ฅผ ํํํ๋ ๋ณ์์ ์ฌ์ฉ
- ๋ณ์์ ๊ฐ์ ๋ณ๊ฒฝํ๊ธฐ ์ํ ๋ฐฐ์ ๋ฌธ์ ์ฌ์ฉ
์ผ๋ก ํน์ ์ง์ ์ ์์
=> ์ด๋ฌํ ์ธ์ด๋ฅผ ๋ช
๋ นํ ์ธ์ด(imperative language) ๋๋ ์ ์ฐจ ์ธ์ด (procedural language) ๋ผ๊ณ ํจ
์ค๋๋ ์ ๋๋ถ๋ถ ์ธ์ด๋ ๋ช
๋ นํ ์ธ์ด์ด์ง๋ง, ๋ง์ ์๋ฃ์ ๋์ ์ ์ฉ๋ ์ ์๋ ๊ณ์ฐ, ๋น๊ฒฐ์ ์ ์ธ ๊ณ์ฐ, ์์์ ์์กดํ์ง ์๋ ๊ณ์ฐ์ ๊ธฐ์ ํ๋๋ฐ ๋งค์ฐ ๋นํจ์จ์ ์
=> ๊ณ์ฐ์ด ์์ฐจ์ ๋ช ๋ น์ ์ํ์ฌ ์คํ๋์ด์ผ ํ๋ค๋ ๊ฒ์ด ํฐ๋ ธ์ด๋ง ๋ณ๋ชฉ ํ์์ ๋ถ๋ฌ์ผ์ผํด
(๋ช ๋ นํ ์ธ์ด๋ก๋ ์ธ๊ณต์ง๋ฅ์ ๋ค๋ฃจ๊ธฐ ํ๋ฌ)
์ด๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด ํจ์ ๊ฐ๋
์ ๊ธฐ๋ฐ์ ๋ ํจ์ํ ์ธ์ด, ๊ธฐํธ ๋
ผ๋ฆฌํ์ ๊ธฐ๋ฐํ ๋
ผ๋ฆฌํ ์ธ์ด๊ฐ ํ์ํจ
- ๋ช
๋ นํ ์ธ์ด (๋๋ ์ ์ฐจ์ ์ธ์ด)
=> ๋ณ์์ ๋ฐฐ์ ๋ฌธ ์ฌ์ฉ, ํฐ๋ ธ์ด๋ง ๋ณ๋ชฉ ํ์(์์ฐจ์ ์คํ์ผ๋ก ์ธํด) - ํจ์ํ ์ธ์ด : Lisp
=> ํจ์์ ํ๊ฐ ๋ฐ ํธ์ถ ๋ฐฉ๋ฒ ์ ๊ณต, ๋ณ์์ ๋ฐฐ์ ๋ฌธ์ด ์์, ๋ฐ๋ณต๋ฌธ์ด ์์ด์ ์ฌ๊ทํจ์๋ก ๊ตฌํํจ - ๋
ผ๋ฆฌํ ์ธ์ด : Prolog
=> ์ ์ธ์ ์ธ์ด, ๊ธฐํธ ๋ ผ๋ฆฌํ์ ๊ทผ๊ฑฐ
์ด ๋ ์ํํธ์จ์ด๊ฐ ๊ฑฐ๋ํด์ง๋ฉฐ ์ฝ๋์ ๊ธธ์ด๊ฐ ๊ธธ์ด์ก๊ณ ์ด์ ๊ด๋ฆฌ์ ์ด๋ ค์์ ๋๊ปด ๊ฐ์ฒด์งํฅ ์ธ์ด๊ฐ ํ์ํจ
- ๊ฐ์ฒด์งํฅ ์ธ์ด
=> ๊ธฐ์ต์ฅ์์ ์ด ๊ธฐ์ต์ฅ์์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ ์ฐ์ฐ์ ์งํฉ์ธ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํจ
์ ์ฐจํ vs ํจ์ํ ํ๋ก๊ทธ๋๋ฐ (Modula-2)
PROCEDURE gcd (u,v : INTERGER; VAR x : INTERGER);
VAR y, t : INTERGER
BEGIN
x := u ; y := v ;
LOOP
IF y <= 0 THEN
EXIT
END ;
t := y;
y := x MOD y;
x := t;
END;
END gcd;
PROCEDURE gcd (u,v : INTERGER) : INTEGER ;
BEGIN
IF v = 0 THEN
RETURN u ;
ELSE
RETURN gcd (v, u MOD v) ;
END;
END gcd;
Modula2์ 2๊ฐ์ง ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด
1. recursive๋ก ์ธํด ๊ธธ์ด ์ฐจ์ด๊ฐ ์์
2. ์ฌ๊ท๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๋ ๋ณ์๋ฅผ ๋์ดํ์ง ์๊ณ ํจ์ ์ํ์ค(ํจ์์ ํ๋ฆ)๋ฅผ ์ฌ์ฉ
๋ฅผ ์ ์ ์์
๋ ผ๋ฆฌํ ํ๋ก๊ทธ๋๋ฐ (Prolog)
ํน์ง : ๊ณ์ฐ์ ์คํ ์์(how) ๋์ ๋ฌด์์ ํ๋ ค๊ณ ํ๋๊ฐ(what)์ ์ ์ธํ๋ ๊ฒ์ด๋ฉฐ ๋ฐ๋ณต์ด๋ ์ ํ ๊ฐ๋ ์ด ๋ถํ์ํจ
์ต๋๊ณต์ฝ์(gcd)์ ๋ํ ๋
ผ๋ฆฌ์ ๊ธฐ์ ์ ๋ณด๋ฉด
- v = 0 ์ด๋ฉด u ์ v ์ gcd ๋ u ์ด๋ค.
- v > 0 ์ด๋ฉด u ์ v ์ gcd ๋ v ์ u mod v ์ gcd ์ ๊ฐ๋ค.
์ด๋ฏ๋ก

์ ์ฌ์ง์ ๋ ผ๋ฆฌ์ ๊ธฐ์ ์ ๋ํ Prolog ํ๋ก๊ทธ๋จ์
๊ฐ์ฒด ์งํฅ ์ธ์ด ์์

Programming Language Paradigm

- ์ปดํจํฐ H/W ๊ตฌ์กฐ์์ ์ฐ๊ด์ฑ
- Von Neumann ์ํคํ
์ฒ
- Von Neumann ์ํคํ
์ฒ
- S/W ์ค๊ณ ๋ฐฉ๋ฒ๋ก ๊ณผ์ ์ฐ๊ด์ฑ
- ๊ตฌ์กฐ์ ์ค๊ณ vs ๊ฐ์ฒด์งํฅ ์ค๊ณ
- ๊ตฌ์กฐ์ ์ค๊ณ vs ๊ฐ์ฒด์งํฅ ์ค๊ณ
- ์ธ๊ฐ์ ์ฌ๊ณ ๋ฐฉ์๊ณผ์ ์ฐ๊ด์ฑ
๊ณ ๊ธ์ธ์ด์ 4๊ฐ์ง ํจ๋ฌ๋ค์
๋ช ๋ นํ, ํจ์ํ, ๋ ผ๋ฆฌํ, ๊ฐ์ฒด์งํฅ ์ธ์ด
- Imperative(procedural) languages
- Algol, Cobol, PL/1, C, Modula
- Algol, Cobol, PL/1, C, Modula
- Functional languages
- Lisp, Haskel, ML, APL
- Lisp, Haskel, ML, APL
- Logic languages
- Prolog
- Prolog
- Object-oriented languages
- Smalltalk, Simula, C++, Java, Ruby
(Ruby์ Python์ ์คํฌ๋ฆฝํธ ์ธ์ด์ธ๋ฐ Python์ ํ์ด๋ธ๋ฆฌ๋ ์ธ์ด๋ผ์ ์ ์ธ)
- Smalltalk, Simula, C++, Java, Ruby
'๐ป CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] int ์ Integer ์ฐจ์ด (0) | 2025.03.21 |
---|---|
Java๋ ์ปดํ์ผ ์ธ์ด์ผ๊น? ์ธํฐํ๋ฆฌํฐ ์ธ์ด์ผ๊น? (0) | 2025.03.10 |
[ํ๋ก๊ทธ๋๋ฐ์ธ์ด๋ก ] ๊ธฐ๊ณ์ด, ์ด์ ๋ธ๋ฆฌ์ด, ๊ณ ๊ธ์ธ์ด์ ์ฐจ์ด์ (C++ vs Java) (0) | 2025.03.10 |
[CS ์ ๊ณต์ง์ ๋ ธํธ] ๋ฉ๋ชจ๋ฆฌ (0) | 2025.02.24 |
[CS ์ ๊ณต์ง์ ๋ ธํธ] ์ด์์ฒด์ ์ ์ปดํจํฐ (0) | 2025.02.18 |