์ด ๊ธ์ ๊ตญ๋ฏผ๋ํ๊ต ๊ฐ์น์ ๊ต์๋์ 'ํ๋ก๊ทธ๋๋ฐ์ธ์ด๋ก ' ์์ ์ ํ ๋๋ก
๊ฐ์ธ์ ์ผ๋ก ํ์ตํ ๋ด์ฉ์ ๋๋ค.
3.1 ์ค๊ณ ๊ธฐ์ค์ ์ญ์ฌ์ ๋ณ์ฒ
์ฃผ์ ์ธ์ด์ ์ฑ๊ณต ์์ธ์ ๋ณด๋ฉด
- Fortran – ์ปดํจํฐ ์ ์กฐํ์ฌ ํ์
=> ์คํ์ ํจ์จ์ฑ - Cobol – ๋ฏธ ๊ตญ๋ฐฉ์ฑ ์ง์
=> ์์ด์ ์ ์ฌํ ๋ฌธ๋ฒ ๊ตฌ์กฐ๋ก ํ๋ก๊ทธ๋จ ํ๋ ์ฑ์ด ์ฉ์ดํด์ ๋น์ฆ๋์ค ์์ญ์ด ๋์ - Lisp – ์ธ๊ณต์ง๋ฅ ๋ถ์ผ์์ ์ฌ์ฉ
- Pascal – ๊ต์ก์ฉ, ๋ง์ดํฌ๋ก์ปดํจํฐ ํ์ค์ธ์ด ์ญํ
=> ๊ฐ๋จํ ๋ช ๋ นํ ์ธ์ด, ํํฅ์ ์ค๊ณ ์ฆ์ง - PL/I – IBM์ ์ ๊ทน ํ์
- C – UNIX ์ด์์ฒด์ ์ ์ฑ๊ณต
- Ada – ๋ฏธ ๊ตญ๋ฐฉ์ฑ ์ง์
- Algol 60
=> ์๊ณ ๋ฆฌ์ฆ ์์ฑ์ด ์ฉ์ดํ๋๋ก ์ค๊ณ๋ฅผ ํ์๋๋ฐ ๋ธ๋ก ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํ๊ธฐ์ ๋๋ฒ๊น ์ด ์ฉ์ดํ๊ณ recursion์ด ๊ฐ๋ฅํ๋ฉฐ ๊ฐ๋ฐ ์๋๊ฐ ๋นจ๋ผ์ง
์ธ์ด ์์ฒด์ ์ฑ๊ณต ์์ธ ๋ณด๋ค๋ ๋๋ถ๋ถ ์ธ์ ์์ธ์ผ๋ก ์ฑ๊ณตํ์์
1950๋ ๋
์ด๊ธฐ์๋ ์คํ ์๋๊ฐ ๋น ๋ฅธ ์ด์
๋ธ๋ฆฌ์ด์ ๊ฒฝ์ํด์ผํ์
=> Fortran ์ฒ๋ผ ์คํ์ ํจ์จ์ฑ์ ์ค์ํจ
์ดํ Cobol๊ณผ Algol 60์ ๋ฑ์ฅ์ผ๋ก ํจ์จ์ฑ๋ณด๋ค ์ผ๋ฐ์ ์ธ ์์น์ ์ค์ํ์์
- Algol 60 : ๋ธ๋ก ๊ตฌ์กฐ, ์ฌ๊ท ํจ์, ๋
ผ๋ฆฌ์ ์ผ๋ก ๊ฐ๊ฒฐ ๋ช
๋ฃํ ์๊ณ ๋ฆฌ์ฆ ํํ
- Cobol : ํ๋ก๊ทธ๋จ ํ๋ ์ฑ ์ฆ๊ฐ (move a to b ์ฒ๋ผ ์์ด์ ์ ์ฌํ syntax)
1960๋ ๋
CPU์ ๊ฐ์ ์ปดํจํฐ ํ๋์จ์ด๊ฐ ์ ์ฐจ ๋นจ๋ผ์ก์
=> ๋ณต์ก์ฑ ์ ์ด์ ํ์์ฑ์ ์ธ์ํ๊ฒ๋จ
(์ถ์ํ ๊ธฐ๋ฒ, ์ธ์ด ๊ท์น๊ณผ ์ ํ์ ๊ฐ์ ํ์์ฑ)
- Simula 67 : ๊ฐ๋ ฅํ ์ถ์ํ ๊ธฐ๋ฒ์ ์ ๊ณต
- Algol 68 : ์ผ๋ฐ์ฑ, ์ง๊ต์ฑ์ ์ ๊ณตํ์ฌ ์ธ์ด์ ๋ณต์ก์ฑ์ด ๊ฐ์๋จ
1970๋ ๋ ~ 1980๋ ๋ ์ด
simplicity(๊ฐ๊ฒฐ์ฑ)๊ณผ abstraction(์ถ์ํ)๋ฅผ ๊ฐ์กฐํจ
=> Pascal, C, Euclid, Modula-2, Ada ๋ฑ
์ธ์ด ๊ตฌ์ฑ์ "์ํ์ ์ ์"๋ฅผ ๋์ ํ์๊ณ ํ๋ก๊ทธ๋จ์ ์ ํ์ฑ ์ฆ๋ช ๊ธฐ๋ฒ์ ๊ฐ์ถ ์ธ์ด๋ฅผ ์ ๊ณต
=> ํ๋ก๊ทธ๋จ ์ ๋ขฐ์ฑ ์ฆ๊ฐ
1980๋ ๋
์ธ์ด์ "๋ ผ๋ฆฌ ๋๋ ์ํ ๊ฐ๋ "์ ์ฝ์ ํ์๊ณ ๋ ผ๋ฆฌ๋ฅผ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์์ฒด์ ํฌํจ
ํจ์ํ ์ธ์ด์ ๊ด์ฌ์ ๊ฐ๊ณ ML, Miranda, Scheme ๊ฐ์ ์ธ์ด๋ค์ด ํ์ํ๊ฒ๋จ
๊ฐ์ฒด ์งํฅ ์ธ์ด์ ๊ด์ฌ ๋ํ ์ฆ๊ฐํ์ฌ C++์ด ๋์ค๊ฒ๋จ
3.2 ํจ์จ์ฑ
ํจ์จ์ฑ์ ๊ธฐ์กด์ ๋ฐ๋ฅธ ๋ถ๋ฅ
- ๋ชฉ์ ์ฝ๋์ ํจ์จ์ฑ
๋ฒ์ญ๊ธฐ์ ํจ์จ์ ์คํ ์ฝ๋ ์์ฑ -> ์ต์ ํ
=> Pascal์์ ์์๋ ์์์ผ๋ก ํํ๋์ง ์์
(์์ ์๋ณ์๋ ๋ฒ์ญ ๊ณผ์ ์์ ๊ณ์ฐ๋ ๊ฐ์ผ๋ก ๋์ฒด)
const size = 2 * 3 + 1;
Pascal์์๋ ์ด๊ฑธ ๊ทธ๋๋ก ์์์ผ๋ก ๋ค๊ณ ๊ฐ๋ ๊ฒ ์๋๋ผ, ์ปดํ์ผ(๋ฒ์ญ)ํ ๋ 2 * 3 + 1์ ๋ฏธ๋ฆฌ ๊ณ์ฐํด์ ์ฝ๋ ์์ ๊ทธ๋ฅ size = 7์ฒ๋ผ ์ซ์ ๊ฐ์ผ๋ก ๋ฐ๊ฟ๋ฒ๋ฆผ
- ๋ฒ์ญ์ ํจ์จ์ฑ
=> ์ปดํ์ผ๋ฌ์ ์๋ ์ธก๋ฉด
์ ์ ํ ํฌ๊ธฐ์ ๋ฒ์ญ๊ธฐ๋ก ๋น ๋ฅด๊ฒ ๋ฒ์ญํ ์ ์๋ ๊ฒ์ผ๋ก ์ธ์ด ๋ฒ์ญ์ ๋จ๊ณ ๊ตฌ์ฑ ๋ฌธ์ ๋ฅผ ๋ณด๋ฉด
Pascal์ ๋จ์ผ ํจ์ค๋ก ์ฝ๋ ํ ๋ฒ ํ์ผ๋ฉด์ ๊ธฐ๊ณ์ด๋ก ๋ฐ๊พธ๊ณ Modula-2๋ 2ํจ์ค๋ก 2๋ฒ์งธ์์ ๊ธฐ๊ณ์ด๋ก ๋ฐ๋ - ๊ตฌํ์ ํจ์จ์ฑ
=> ์ปดํ์ผ๋ฌ๋ฅผ ๋ง๋ค๊ธฐ ์ฌ์ฐ๋ฉด ๊ตฌํ์ ํจ์จ์ฑ์ด ์ข์๊ฑฐ์
(๋ฒ์ญ๊ธฐ์ ํจ์จ์ ์ธ ๊ตฌํ ๋ฌธ์ )
Algol 60์ ๊ฒฝ์ฐ ๋ฒ์ญ๊ธฐ ๊ตฌํ์ด ์ด๋ ต๊ฑฐ๋ ๋ฒ์ญ ์ํ ์๊ณ ๋ฆฌ์ฆ์ด ์ถฉ๋ถ์ด ์ดํด๋์ง ์์ ์ฑ๊ณตํ์ง ๋ชปํ์
Lisp, Pascal -> ์ฌ์
PL/I, Ada, Algol -> ์ด๋ ค์
- ํ๋ก๊ทธ๋๋ฐ ํจ์จ์ฑ
=> "์ด๋ค ์ธ์ด๋ฅผ ์ฌ์ฉํด์ผ ๋ ๋น ๋ฅด๊ฒ ๊ฐ๋ฐํ ์ ์์๊น?" ์ ๋ํ ๋ด์ฉ
(ํ๋ก๊ทธ๋จ ์์ฑ์ ๋จ์์ฑ, ์ฉ์ด์ฑ ๋ฌธ์ ๋ก ์ธ์ด์ ํํ์ฑ, ์ถ์ํ์ ๊ด๋ จ๋จ)
Lisp, Prolog ๋ฑ์ด ์ด์์ ์ธ ์ธ์ด์
๋น์ฉ ๋ฌธ์
- ๊ฐ๋ฐ ๋น์ฉ
=> switch ๋ฌธ์ด ์๊ณ ์๊ณ ๋ฑ์ ๋ฌธ์ (if๋ฌธ ๋ ธ๊ฐ๋ค) - ๋๋ฒ๊น
/์ ์ง๋ณด์ ๋น์ฉ
=> ๊ธฐ๋ฅ ์์ /์ถ๊ฐ ํ ๋์ ๋น์ฉ์ผ๋ก ์ด๊ฒ ์ค์ํ ๋ฌธ์ ๊ฐ ๋์ด์ ๊ฐ์ฒด์งํฅ์ธ์ด๊ฐ ํ์ํ๊ฒ ๋จ - ๊ตฌํ ๋ฐ ์คํ ๋น์ฉ
3.3 ์ผ๋ฐ์ฑ, ์ง๊ต์ฑ, ํ์ผ์ฑ
์ผ๋ฐ์ฑ (generality)
ํน๋ณํ ๊ฒฝ์ฐ๋ฅผ ํผํ๊ณ , ๋ฐ์ ํ๊ฒ ๊ด๋ จ ์๋ ์ฌ๋ฌ ๊ฐ๋ ๋ค์ ์ผ๋ฐ์ ์ธ ํ๋์ ๊ฐ๋ ์ผ๋ก ํตํฉํ์ฌ ์ป๋ ์ฑ์ง
์ผ๋ฐ์ฑ์ด ๋ถ์กฑํ ์
ํจ์, ํ๋ก์์ , ์๋ธ๋ฃจํด์ ๋ถ ํ๋ก๊ทธ๋จ์ด๋ผ๊ณ ํ๋๋ฐ (์ธ์ด๋ง๋ค ์ ์๊ฐ ๋ค๋ฆ)
์๋ธ๋ฃจํด์ ๊ฒฝ์ฐ๋ return ๊ฐ์ด ์์
=> C์ธ์ด์์๋ ๊ทธ๋ฅ ํจ์๋ผ๊ณ ํจ (void)
- ํ๋ก์์
=> ํจ์๋ ํ๋์ ํ์ (class๋ ํ์ ์) ์ผ๋ก ์ผ๋ฐ์ฑ์ ์ถฉ์คํ ์ธ์ด๋ ํจ์์ ๋งค๊ฐ๋ณ์๋ก ํจ์์ ์ด๋ฆ์ ์ ๋ฌํ ์ ์์
- Pascal : ํ๋ก์์ ์ ์ธ๊ณผ ๋งค๊ฐ๋ณ์ ํ์ฉ, ํ๋ก์์ ํ ๋ณ์ ๋ถํ
- Modula-2 : ์ผ๋ฐ์ฑ์ ์ถฉ์คํ ์ธ์ด
- Ada : ๋งค๊ฐ ๋ณ์์ ํ๋ก์์ ์ฌ์ฉ ๋ชปํจ
- Pascal : ํ๋ก์์ ์ ์ธ๊ณผ ๋งค๊ฐ๋ณ์ ํ์ฉ, ํ๋ก์์ ํ ๋ณ์ ๋ถํ
- ๋ฐฐ์ด
=> ์ผ๋ฐ์ฑ์ ์ถฉ์คํ ์ธ์ด๋ ๊ฐ๋ณ๋ฐฐ์ด์ ํ์ฉํจ
- Pascal : ๊ฐ๋ณ ๋ฐฐ์ด ๋ถํ
- C, Ada : ๊ฐ๋ณ ๋ฐฐ์ด ํ์ฉ
- Modula-2, Fortran : ๊ฐ๋ณ ๋ฐฐ์ด ์ ๋ฌ ๋ฅ๋ ฅ, ๊ฐ๋ณ ๋ฐฐ์ด ์ ์ธ ๋ถํ
- Pascal : ๊ฐ๋ณ ๋ฐฐ์ด ๋ถํ
- ๋๋ฑ ์ฐ์ฐ์, ๋ฐฐ์ ์ฐ์ฐ์(=, :=)
- ๋๋ถ๋ถ ์ธ์ด : ๋ฐฐ์ด, ๋ ์ฝ๋์ ์ ์ฉ ๋ถํ
- Ada : ๋ฐฐ์ด, ๋ ์ฝ๋์ ์ ์ฉ ํ์ฉ
- ๋๋ถ๋ถ ์ธ์ด : ๋ฐฐ์ด, ๋ ์ฝ๋์ ์ ์ฉ ๋ถํ
- ๋งค๊ฐ ๋ณ์
- Fortran : call by reference(์ฃผ์ ์ ๋ฌ ๊ธฐ๋ฒ) ๋ง ํ์ฉ
- Algol68, C, Java : call by value ๊ธฐ๋ฐ์ด์ง๋ง ๊ฐ์ฒด์ ๋ํ ํฌ์ธํฐ๋ฅผ ๊ฐ์ผ๋ก ์ ๋ฌํ์ฌ call by reference๋ฅผ ์ฐํ์ ์ผ๋ก ์ ๊ณตํจ
(Java๋ ์ง์ง ํฌ์ธํฐ๋ ์์ง๋ง ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ๋ก ๋๊น)
=> ์ผ๋ฐ์ฑ ์ ๊ณต - Ada : ์ผ๋ฐ์ฑ ์ ๊ณต
- Fortran : call by reference(์ฃผ์ ์ ๋ฌ ๊ธฐ๋ฒ) ๋ง ํ์ฉ
- ์์
- Fortran : ์์ ์ด๋ฆ ๋ถ์ฌ
=> ์ด๋ค ์๋ฏธ ์๋ ๊ฐ์ธ๋ฐ๋ ์ด๋ฆ ์์ด ์ซ์ ๊ทธ๋๋ก ์ฝ๋์ ๋ฐ์ ๋ฃ๋ ๋งค์ง ๋๋ฒ๊ฐ ๋ง์ - Pascal : ์์ ํํ์ ์์ ์ฌ์ฉ ๋ถ๊ฐ
(int a [100] ๊ณผ int a [2 * 50] ์ ์๊ฐํด๋ณด๋ฉด ๋จ) - Ada : ์ผ๋ฐ์ฑ ๊ฐ์ถ ์์ ์ ๊ณต
- Fortran : ์์ ์ด๋ฆ ๋ถ์ฌ
์ผ๋ฐ์ฑ์ด ๊ฐ๋ ๋ฌธ์ ์
- ์ธ์ด์ ๊ฐ๊ฒฐ์ฑ ์ ํ
- ์ธ์ด์ ํ๋
์ฑ ์ ํ
- ์ธ์ด์ ์ ๋ขฐ์ฑ ์ ํ
C์ธ์ด์ ํฌ์ธํฐ(์ผ๋ฐ์ฑ ์ ๊ณต) - ๋ฌธ์ ์ ์ ๊ธฐ
Java๋ ํฌ์ธํฐ ๋ถํํด์ ์ ๋ขฐ์ฑ๊ณผ ํ๋
์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํจ
Pascal์ ํฌ์ธํฐ๋ฅผ ์ ํ์ ์ผ๋ก ์ฌ์ฉํ์ฌ aliasing(์ด๋ช
)๊ณผ ์ํ์ ์ค์
=> aliasing์ด๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์๋ก ๋ค๋ฅธ ๋ณ์๋ก ์ ๊ทผํ ์ ์๋ ์ํฉ์
(2๊ฐ ์ด์์ ํฌ์ธํฐ๊ฐ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์น๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฒ)
ํฌ์ธํฐ๋ก ํ ์ ์๋ ๊ฒ๋ค์ด ๋ง์ง๋ง ๊ถํ์ ๋๋ฌด ๋ง์ด ์ค์ ์ ์ฉ๋๋ ๊ฒฝ์ฐ๊ฐ ์์
(์๋ OS๊ฐ ํ๋ก๊ทธ๋จ์ด ๋์๊ฐ๋ ๊ณต๊ฐ ๋ง๊ณ ๋ค๋ฅธ๊ณณ์ ์ ๊ทผํ๋ฉด ๋ง๊ฑฐ๋ ํ๋ก๊ทธ๋จ์ด ์ฃฝ์ด๋ฒ๋ฆฌ๋๋ฐ C๋ ๊ทธ๊ฒ ๊ฐ๋ฅํจ)
=> ์ด์์ฒด์ ์์ ํ ๋น ๋ฐ์ ์ฃผ์ ๋ง๊ณ ๊ทธ๋ฅ ํน์ ์ฃผ์๋ฅผ ๊ฑด๋๋ฆด ์ ์๊ธฐ์ ๋ค๋ฅธ ์ธ์ด๋ค๋ถํฐ๋ ๊ทธ ๊ธฐ๋ฅ์ ๋ง์
์ง๊ต์ฑ (orthogonality)
์ธ์ด์ ๊ตฌ์ฑ์๋ค์ด ๊ฐ๊ฐ์ ์๋ฏธ๋ฅผ ๊ฐ์ง ์ฑ ๊ฒฐํฉํ๋ ์ฑ์ง
=> ๊ตฌ์ฑ์๊ฐ์ ์ํธ์์ฉ ๋๋ ๋ฌธ๋งฅ์ ์ฌ์ฉ์ด ์์ ๋ฐ์ ํ์๋ฅผ ์ผ๊ธฐํ์ง ์์์ผํจ
๋น์ง๊ต์ฑ : ๋ฌธ๋งฅ์ ์์กดํ๋ ์ ํ
๋น์ผ๋ฐ์ฑ : ๋ฌธ๋งฅ๊ณผ ๊ด๊ณ์๋ ์ ํ
์ง๊ต์ฑ์ด ๋ถ์กฑํ ์
- ํจ์ ๋ฐํ๊ฐ
์๋ฃํ์ ๋ฐ๋ฅธ ํ์ฉ ์ฌ๋ถ์
- Pascal : ์ค์นผ๋ผํ, ํฌ์ธํฐํ๋ง ํ์ฉ
- C : ๋ฐฐ์ดํ๋ง ์ ์ธ
- Ada : ์๋ฒฝํ ์ง๊ต์ฑ ์ ๊ณต (๋ชจ๋ ์๋ฃํ ํ์ฉ)
=> ์ปดํ์ผ๋ฌ ์ฌ์ด์ฆ์ ์คํ ์๋๊ฐ ์ฆ๊ฐํ์ฌ ๋ง๋ค๊ธฐ ์ด๋ ค์์ง
- Pascal : ์ค์นผ๋ผํ, ํฌ์ธํฐํ๋ง ํ์ฉ
- ํ์ผ
- Pascal : ํ์ผํ์ ํน๋ณํ ์ํ ์ทจ๊ธ
=> ํ์ผ์ ํ๋ก์์ ๋งค๊ฐ ๋ณ์๋ก ์ ๋ฌ ๊ธ์ง, ํ์ผ ๋ณ์๋ ๋ฐฐ์ ๊ธ์ง - ๋๋ถ๋ถ ์ธ์ด : ํ์ผ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ทจ๊ธ (๋น์ง๊ต์ฑ ํํผ)
=> C์ธ์ด๋ ํ์ผ ํ์ ์ด ์์ (๊ฐ๊ฒฐํ ์ธ์ด๋ก ๋ณผ ์ ์์)
- Pascal : ํ์ผํ์ ํน๋ณํ ์ํ ์ทจ๊ธ
- ๋ฌธ์์ด
- Modula-2 : ๋ฌธ์์ด assignment (์์ ๋ฌธ์์ด -> ๋ ํฐ ๋ฌธ์์ด ๋ก ๋ฐฐ์ ๊ฐ๋ฅํจ)
=> ํฌ๊ธฐ๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์ ๋ํ ์ ์ผํ ๋ฐฐ์
(์ผ๋ฐ์ ์ผ๋ก ๋ค๋ฅธ ํ์ ์ด๋ ํฌ๊ธฐ์ ๊ฐ์ฒด ๊ฐ์๋ ๋ฐฐ์ ์ด ์๋๋๋ฐ Modula-2์์ ๋ฌธ์์ด์๋ง ํน๋ณํ ํ์ฉํจ)
=> ๋๋ถ๋ถ ๊ฐ์ฒด๋ผ๋ฆฌ๋ ํฌ๊ธฐ๊ฐ ๋ค๋ฅด๋ฉด ๋ฐฐ์ ์๋๋๋ฐ, ๋ฌธ์์ด๋ง ์์ธ๋ก ํ์ฉํ๋๊น ๋น์ง๊ต์ ์
- Modula-2 : ๋ฌธ์์ด assignment (์์ ๋ฌธ์์ด -> ๋ ํฐ ๋ฌธ์์ด ๋ก ๋ฐฐ์ ๊ฐ๋ฅํจ)
- ๋งค๊ฐ๋ณ์ ์ ๋ฌ ๊ธฐ๋ฒ
- C : ๋ฐฐ์ด์ call by reference, ๊ธฐํ ์๋ฃํ์ call by value
=> ๋น์ง๊ต์ฑ - Ada : ๋ชจ๋ ์๋ฃํ์ call by value, result, value-result ํ์ฉ
=> ์ง๊ต์ฑ (ํ์ ์ ๊ด๊ณ์์ด ๊ธฐ๋ฅ ์ผ๊ด ์ ์ฉ)
- C : ๋ฐฐ์ด์ call by reference, ๊ธฐํ ์๋ฃํ์ call by value
Algol 68์ ์ค์ ์ค๊ณ ๋ชฉํ๊ฐ ์ง๊ต์ฑ ๋ณด์ฅ์ด์์
ํ์ผ์ฑ (uniformity)
์ธ์ด ๊ตฌ์กฐ๋ค์ ์ธํ๊ณผ ํ๋์์์ ์กฐํ์ ์ค์ ์ ๋๋ ๊ฒ์ผ๋ก ์ ์ฌํ ๊ฒ๋ค์ ์ ์ฌํ๊ฒ ๋ณด์ด๊ณ ์ ์ฌํ ์๋ฏธ๋ฅผ ๊ฐ๊ฒ ํจ
=> ์์ดํ ๊ฒ๋ค์ ์๋ก ๋ค๋ฅด๊ฒ ๋ณด์ด๊ณ ์๋ก ๋ค๋ฅด๊ฒ ํ๋ํ๋ ์ฑ์ง
(๋ฌธ์ฅ ์ฌ๋ฌ๊ฐ๋ฅผ ํ๋๋ก ๊ฐ์ฃผํ ๋)
C์ธ์ด์์ ๊ณฑ์ * ๊ณผ ํฌ์ธํฐ * ์ด ํ์ผ์ฑ์ ์ด๊ธ๋๋ค๊ณ ๋ณผ ์ ์์
ํ์ผ์ฑ์ด ๋ถ์กฑํ ๋น์กฐํ์ ์ (Pascal)
- if๋ฌธ, while๋ฌธ : begin-end ๊ตฌ์กฐ ์๊ตฌ
repeat ๋ฌธ : begin-end ๊ตฌ์กฐ ๋น์๊ตฌ - ๊ฐ๋ณ ๋ ์ฝ๋์์ case๋ฌธ, case ์ ์ด๋ฌธ
๊ฐ๋ณ ๋ ์ฝ๋ ์์์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅธ ํ๋ ์งํฉ์ ๊ฐ์ง ์ ์๊ฒ ๋ง๋๋ case๋ฌธ๊ณผ ์ผ๋ฐ์ ์ธ ๋ถ๊ธฐ๋ฌธ์ธ case ์ ์ด๋ฌธ์ด ์๋๋ฐ
๊ฐ์ case ํค์๋๋ฅผ ์ฌ์ฉํ์ง๋ง ๊ตฌ๋ฌธ์ด ์์ดํจ (์ฉ๋๋ ๋ค๋ฅด๊ณ ๋ฌธ๋ฒ๋ ๋ค๋ฆ)
=> Modula-2์์ ํด๊ฒฐํจ - ํจ์ ๊ฐ์ ๋ฐํ ๋ฐฉ๋ฒ
=> ํจ์ ๊ฐ์ ๋ฐํํ ๋ return์ด ์๋ ๋ฐฐ์ ๋ฌธ์ผ๋ก ๋ฐํํ๋๋ฐ, ์ผ๋ฐ์ ์ธ ๋ณ์ ๋์ ๊ณผ ํํ๋ ๊ฐ์ง๋ง ์๋ฏธ๊ฐ ์ ํ ๋ค๋ฅด๊ธฐ์ ์๋ฏธ ์ ๋ฌ์ด ๋ถ๋ช ํํจ
- ^ : ํฌ์ธํฐ ์ ์ธ (^integer)๊ณผ ํฌ์ธํฐ ๊ฐ(x^)์ ๊ณต์ฉ
=> ํ์ผ์ฑ X
(Modula-2๋ POINTER TO๋ก ํด๊ฒฐ)
- ์ธ๋ฏธ์ฝ๋ก (;) : Modula-2, Pascal ์์ ๋ฌธ์ฅ ๊ตฌ๋ถ์์ ์ ์ธ ์ข
๊ฒฐ์๋ก ์ฌ์ฉ
(C์ธ์ด๋ ์ข ๊ฒฐ์๋ก๋ง ์ฌ์ฉ)
๋นํ์ผ์ฑ์ ํน๋ณํ ๋ฌธ๋งฅ์์๋ง ๋ฐ์๋๊ณ ๊ตฌ์ฑ์๋ค๊ฐ์ ์ํธ์์ฉ์ผ๋ก ๋ณผ ์ ์์ผ๋ฏ๋ก ๋น์ง๊ต์ฑ์ผ๋ก ๊ฐ์ฃผ๋ ์ ๋ ์์!
3.4 ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๊ธฐํ ์ค๊ณ ์์น
๊ฐ๊ฒฐ์ฑ (simplicity)
- Pascal์ ์ฃผ๋ ์ค๊ณ ์์น์ ๊ฐ๊ฒฐ์ฑ
- ์ง๊ต์ฑ, ์ผ๋ฐ์ฑ, ํ์ผ์ฑ -> ๊ฐ๊ฒฐ์ฑ ๋ณด์ฅ ๋ชปํจ
ex. Algol 68 - ๊ตฌ์ฑ์์ ์๊ฐ ์ ๋ค๊ณ ์ธ์ด๊ฐ ๊ฐ๊ฒฐํ ๊ฒ์ ์๋
ex. Lisp, Prolog
=> ์ ์ ์์ ๊ตฌ์ฑ์๋ฅผ ๊ฐ์ง๋ ๋ณต์กํ ์คํ์๊ฐ๊ณผ ์์คํ ์ ์์กด์ - ๊ณผ๋คํ ๋จ์์ฑ์ ์๊ณ ๋ฆฌ์ฆ ์์ฑ์ ๋ฐฉํดํ๊ณ ํํ๋ ฅ์ด ๋ถ์กฑํ๋ค๋ ๋จ์ ์ด ์์
ํํ๋ ฅ (expressiveness)
- ๋ณต์กํ ๊ณผ์ ์ด๋ ๊ตฌ์กฐ๋ฅผ ํํํ๋๋ฐ ์ฉ์ดํจ์ ์๋ฏธ
=> C์ธ์ด ๋ฐ๋ณต๋ฌธ(for, while, do~while), ์กฐ๊ฑด๋ฌธ(if~else๋ฌธ, switch๋ฌธ) - ํํ๋ ฅ์ ๊ฐํ๋ ๋จ์ํ์ง ์์ ์ธ์ด๋ค๋ก๋ Lisp, Prolog, Algol 68์ด ์์
- ๊ฐ๊ฒฐํ ํํ๋ ฅ
=> C์ธ์ด์์์ while(*s++ == *t++); ๊ณผ ๊ฐ์ ๋ฌธ์์ด ๋ณต์ฌ
์ ํ์ฑ (preciseness)
- ์ธ์ด์ ๋ํ ์ ํํ ์ ์
=> ์ธ์ด์ ํ์๊ฐ ์์ธก ๊ฐ๋ฅํด์ง๋ฏ๋ก ์ธ์ด์ ์ ๋ขฐ๋, ๋ฒ์ญ๊ธฐ์ ์ ๋ขฐ๋์ ์ํฅ์ ๋ฏธ์นจ
(C์ธ์ด์ if๋ฌธ์์ else ๋ชจํธ์ฑ ๋ฌธ์ -> else๋ ๊ฐ์ฅ ๊ฐ๊น์ด ์ด์ ์ if์ ๋ฌถ์ธ๋ค๊ณ ๋ช ์์ ์ผ๋ก ๊ท์ )
๊ธฐ๊ณ ๋ ๋ฆฝ์ฑ (machine independence)
- ๊ธฐ๊ณ ๋
๋ฆฝ์ ์ธ ์ธ์ด ์ ์ (ํธํ์ฑ ์ ๊ณต)
- ๊ธฐ์ต์ฅ์ ํ ๋น๊ณผ ๊ธฐ๊ณ ๊ตฌ์กฐ์ ๋ณ๊ฐ๋ก ์ ์๋ ์๋ฃํ
=> Pascal์ MAXINT, Go์ int8/int16/int32 ๋ ์ด๋ค ๊ธฐ๊ณ์์๋ ํญ์ ๊ฐ์ ๊ฐ์
(C์์๋ ๊ธฐ๊ณ๊ตฌ์กฐ์ ๋ฐ๋ผ intํ์ bit๊ฐ ๋ค๋ฆ -> ๊ธฐ๊ณ ์์กด์ )
์์ ์ฑ (security, reliability)
- ํ๋ก๊ทธ๋๋ฐ ์ค๋ฅ ์ต์ํ, ์ค๋ฅ ๋ฐ๊ฒฌ ์ฉ์ดํ ์ธ์ด
- ์ธ์ด์ ์ ๋ขฐ์ฑ๊ณผ ์ ํ์ฑ์ ๋ฐ์ ํ ๊ด๊ณ
- ์ธ์ด ์ค๊ณ ์ ์๋ฃํ, ํ ๊ฒ์ฌ, ๋ณ์ ์ ์ธ์ ๋์
- Strong-typed language (๊ฐ ํ์
์ธ์ด)
=> Java ์ดํ๋ก ๋๋ถ๋ถ ์ธ์ด๊ฐ ์ด์ ์ํ๋๋ฐ ์ปดํ์ผ๋ฌ๊ฐ ํ์ ์ ์๊ฒฉํ๊ฒ ๊ฒ์ฌํจ
๊ธฐ์กด ํ๊ธฐ๋ ๊ท์น๊ณผ์ ์ผ๊ด์ฑ
- ์ธ์ด ์ค๊ณ ์ ํ์คํ๋ ํน์ฑ๊ณผ ๊ฐ๋
์ ๊ฐ๋๋ก ํด์ผ ํจ
- Algol 68์ ํ์คํ๋ ํ๊ธฐ๋ฅผ ์ ๋ฐ๋ฅด์ง ์์ ์ธ์ด์
ex. type ๋์ mode ์ฌ์ฉ
ํ์ฅ์ฑ (extensibility)
- ์ฌ์ฉ์๊ฐ ์ธ์ด์ ํน์ฑ์ ์ฝ๊ฒ ๋ถ๊ฐํ๋๋ก ํ์ฉํ๋ ๊ธฐ๋ฒ
- Lisp์ ํ์ฅ์ฑ์ ๊ฐ์ง ์ธ์ด์ (ํจ์ํ ์ธ์ด)
- ๋ช
๋ นํ ์ธ์ด๋ ํจ์ํ ์ธ์ด๋ณด๋ค ์ธ์ด ํ์ฅ์ด ์ด๋ ค์
- ์ถ์ํ ๊ฐ๋ (์๋ฃ ์ถ์ํ, ์ ์ด ์ถ์ํ)์ ํ์ฅ์ฑ ์ง์
Go, Rust, Scala ๋ฑ์ ์ต์ ์ธ์ด๋ ๊ณ ์ฐจ์ํจ์๋ฅผ ์ง์ํจ
์ ์ฝ์ฑ (restrictability), ๋ถ๋ถ์ฑ (subset)
- ์ผ๋ถ์ ์ธ์ด ์ง์๊ณผ ์ธ์ด ๊ตฌ์กฐ๋ง ๊ฐ์ง๊ณ ๋ ํจ๊ณผ์ ์ธ ํ๋ก๊ทธ๋จ ์์ฑ ๊ฐ๋ฅ
- ์ธ์ด ์ ํ์ฑ์ ์ฅ์
- ํ๋ก๊ทธ๋๋จธ๋ ์ธ์ด์ ํจ๊ณผ์ ์ธ ์ฌ์ฉ์ ์ํด ์ธ์ด ์ ์ฒด๋ฅผ ๋ฐฐ์ธ ํ์ ์
์
- ๋ฒ์ญ๊ธฐ ์์ฑ์๊ฐ ์ธ์ด ์ผ๋ถ๋ถ ๋ง์ ์ ํํ์ฌ ๊ตฌํ, ์ฌ์ฉ ๊ฐ๋ฅ (๋ถ๋ถ ์ธ์ด ์ง์)
=> SP/1, SP/2 ... SP/k : PL/I์ ๋ถ๋ถ ์ธ์ด๋ค
- ํ๋ก๊ทธ๋๋จธ๋ ์ธ์ด์ ํจ๊ณผ์ ์ธ ์ฌ์ฉ์ ์ํด ์ธ์ด ์ ์ฒด๋ฅผ ๋ฐฐ์ธ ํ์ ์
์
PL/I๋ IBM์์ ๋ง๋ ๊ฐ๋ ฅํ์ง๋ง ๋๋ฌด ๋ฐฉ๋ํ ์ธ์ด์
๊ทธ๋์ IBM์ PL/I ์ ์ฒด๋ฅผ ๋ฐ๋ก ๋ค ๊ตฌํํ์ง ์๊ณ , SP/1 → SP/2 → ... → SP/k๋ก ๋๋ ์
SP/1: ๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ, ๊ฐ๋จํ ์๋ฃํ๋ง ์ง์
SP/2: ์กฐ๊ฑด๋ฌธ, ๋ฐ๋ณต๋ฌธ ์ถ๊ฐ
SP/3: ํ์ผ ์ ์ถ๋ ฅ, ํฌ์ธํฐ ๋ฑ ์ถ๊ฐ
์ด๋ฐ ๊ตฌ์กฐ๋ฅผ ํตํด ์ปดํ์ผ๋ฌ๋ ๋ฒ์ญ๊ธฐ๋ฅผ ๋จ๊ณ์ ์ผ๋ก ๊ฐ๋ฐํ๊ณ ์คํํ ์ ์์์
3.5 ๋ฌธ์ ์ ๊ณผ ํด๊ฒฐ์ฑ ๋ค
์ ๋ขฐ์ฑ ๋ฌธ์
- ํ๋ก๊ทธ๋จ ์ ๋ขฐ์ฑ ์ํด ์ง๋จ ์ปดํผ์ผ๋ฌ(์ ๊ฒ ์ปดํ์ผ๋ฌ)
=> Cornell(๋ํ)์ PL/I diagnostic, C ์ธ์ด ํ๊ฒฝ (debugger ํฌํจ)
ํจ์จ์ฑ ๋ฌธ์ - ๋ถ๋ฆฌ ์ปดํ์ผ
- ์ด๊ธฐ ๊ณ ๊ธ ์ธ์ด (Fortran, Cobol ...)
- ๋ถ๋ฆฌ ์ปดํ์ผ ์ ๊ณต -> ํจ์จ์ ๋ฒ์ญ ๊ฐ๋ฅ, ์ค๋ฅ ์ ๋ฐ
(ํ๋์ ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ๋ ๋ฆฝ๋ ๋ชจ๋(ํ์ผ)๋ก ๋๋ ์ ๊ฐ๊ฐ ๋ฐ๋ก ์ปดํ์ผํ ์ ์๊ฒ ํ๋ ๋ฐฉ์)
=> ์์ ํ ๋ถ๋ถ๋ง ๋ค์ ์ปดํ์ผํ ์ ์๊ธฐ์ ๊ฐ๋ฐ ์๋ ๋น ๋ฅด๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ฆฌ๊ฐ ํธํจ
=> ๊ฐ ๋ชจ๋์ด ์๋ก ์ด๋ค ํ์ /๋ณ์๋ฅผ ์ฌ์ฉํ๊ณ ์๋์ง ์ปดํ์ผ ํ์์ ์๋ฒฝํ ์๊ธฐ ์ด๋ ค์์ ์ค๋ฅ๊ฐ ๋ฐํ์์์ ๋ฐ์ํ ์ ์์
- ๋ถ๋ฆฌ ์ปดํ์ผ ์ ๊ณต -> ํจ์จ์ ๋ฒ์ญ ๊ฐ๋ฅ, ์ค๋ฅ ์ ๋ฐ
- Algol 68, Pascal์ ์ ๋ขฐ์ฑ์ ๊ฐ์กฐํ๋ฉฐ ํตํฉ ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํจ
- Ada : ์กฐํ (๋ถ๋ฆฌ ์ปดํ์ผ์ ์ฅ์ + ํตํฉ ์ปดํ์ผ์ ์ฅ์ )
=> specification part, body part ์ ๊ณต์ผ๋ก ํด๊ฒฐ
(๋ชจ๋์ ๋ถ๋ฆฌํ๋ฉด์๋, ๊ฐ ๋ชจ๋์ ๋ช ์ธ(spec)์ ๊ตฌํ(body)๋ฅผ ๊ตฌ๋ถ)
=> spec๋ง ๋ณด๊ณ ๋ค๋ฅธ ๋ชจ๋์์ ์ฌ์ฉํ ์ ์์ด์ ๋ถ๋ฆฌ ์ปดํ์ผ์ด ๊ฐ๋ฅํ๊ณ spec์ ๊ธฐ์ค์ผ๋ก ํ์ ๊ฒ์ฌ๋ฅผ ํ๋๊น ์ ๋ขฐ์ฑ๋ ํ๋ณด
- Ada : ์กฐํ (๋ถ๋ฆฌ ์ปดํ์ผ์ ์ฅ์ + ํตํฉ ์ปดํ์ผ์ ์ฅ์ )
์ต์ ํ ์ปดํ์ผ๋ฌ (optimizing compiler)
- ํจ์จ์ ์ธ ๋ชฉ์ ์ฝ๋๋ฅผ ์ํด์๋ ์ปดํ์ผ๋ง ๋น์ฉ์ด ์ฆ๊ฐํจ
- ๋ฐ๋ณต ์ํ๋ถ ๋ฑ ์ผ๋ถ๋ถ๋ง ์ต์ ํํด๋ ์ฑ๋ฅ ํฅ์ ํจ๊ณผ๊ฐ ํผ
=> ์ค์ ์ปดํ์ผ๋ฌ์์๋ ์ฌ๋ฌ ์ต์ ํ ๋จ๊ณ๋ฅผ ์ ๊ณตํจ
(๊ฒฐ๊ตญ ๋ชฉ์ ์ ๋นํจ์จ์ ์ธ ์ฝ๋ ์์ ๋ ๊ฒ)
์ ๋ขฐ์ฑ
- ์ธ์ด ๊ตฌ๋ฌธ์ ๊ณผ๋คํ ๊ฐ๊ฒฐ์ฑ๊ณผ ์๋ต์ ํ๋ก๊ทธ๋จ ํ๋
์ฑ์ ์ ํ์ํด
- ์ ์ ํ ์์ค์ ๊ฐ๊ฒฐ์ฑ์ ํ๋ก๊ทธ๋๋จธ์๊ฒ ์ข์ ํ๋ จ(์ฝ๋ ์์ฑ ๋ฅ๋ ฅ)๊ณผ ํ๋ก๊ทธ๋จ์ ์ ๋ขฐ์ฑ์ ์ฆ๊ฐ
=>APL, 4์ธ๋ ์ธ์ด(SQL, MATLAB ๋ฑ)์ ์งง๊ณ ์ ์ธ์ ์ผ๋ก ์ํ๋ ์์ ์ ํํํ ์ ์์
SELECT name FROM users WHERE age > 20;
์ด๋ฐ 4์ธ๋ ์ธ์ด์ธ SQL๋ง ๋ด๋ ์ง์ ๋ฐ๋ณต๋ฌธ์ ์ฐ๊ณ ์กฐ๊ฑด๋ฌธ์ ์ฐ์ง ์์๋ ๋จ
=> ์ฝ๋๊ฐ ์งง๊ณ ์ถ์ํ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์ค์๊ฐ ์ค๊ณ ์ ํํ๋ ๋ฌธ๋ฒ๋ง ์๋ฉด ์์ ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์
'๐ป CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Kotlin(์ฝํ๋ฆฐ)์ด๋? (0) | 2025.05.21 |
---|---|
[ํ๋ก๊ทธ๋๋ฐ์ธ์ด๋ก ] ์ธ์ด์ ๊ตฌ๋ฌธ๊ณผ ๊ตฌํ ๊ธฐ๋ฒ (2) | 2025.04.19 |
[ํ๋ก๊ทธ๋๋ฐ์ธ์ด๋ก ] ์ธ์ด์ ๋ณ์ฒ (1) | 2025.04.12 |
[ํ๋ก๊ทธ๋๋ฐ์ธ์ด๋ก ] Concepts of Programming Languages (0) | 2025.03.29 |
[Java] int ์ Integer ์ฐจ์ด (0) | 2025.03.21 |