ì¢ ì íì ë¶í° ì ì§ì íìŽíê¹ì§, íì ìì€í ì ìµì ë°ì ì ìŽíŽë³Žê³ ì ìžê³ ìíížìšìŽ ê°ë° ë°©ìì 믞ì¹ë ìí¥ì ìŽíŽí©ëë€.
ê³ êž íì ì°êµ¬: ìµì²šëš íì ìì€í êž°ë¥
ëìììŽ ì§ííë ìíížìšìŽ ê°ë° í겜ìì íì ìì€í ì ì ì ë ì€ìí ìí ì ìííê³ ììµëë€. ëšìí ë°ìŽí° ì íšì± ê²ì¬ë¥Œ ëìŽ ìœë ì íì±ì 볎ì¥íê³ , ì êµí ì ì ë¶ìì ê°ë¥íê² íë©°, ë ìì íê³ ì ì§ êŽëŠ¬ê° ì©ìŽí ìœë êž°ë°ì ìŽì§íë ê°ë ¥í ë©ì»€ëìŠì ì ê³µí©ëë€. ìŽ êž°ì¬ììë íì ìì€í ì°êµ¬ì ì¬ë¬ ìµì²šëš êž°ë¥ê³Œ ì ìžê³ ê°ë°ììê² ë¯žì¹ë ì€ì ì ìž ìí¥ì ìŽíŽëŽ ëë€.
ê³ êž íì ìì€í ì ì€ìì± ìŠê°
Ʞ졎 íì ìì€í ì ì£Œë¡ ì»ŽíìŒ ìê°ì ë³ì ë° íšì ìžìì íì ì íìžíë ë° ì€ì ì ë¡ëë€. ìŽë Ʞ볞ì ìž ìì€ì ìì ì±ì ì ê³µíì§ë§, ë³µì¡í íë¡ê·žëš ë¶ë³ì±ì 캡ì²íê±°ë ë°ìŽí° ê°ì êŽê³ë¥Œ ì¶ë¡ íë ë°ìë ì¢ ì¢ ë¶ì¡±í©ëë€. ê³ êž íì ìì€í ì ë íë¶í íì 구ì±, ë ê°ë ¥í íì ì¶ë¡ ìê³ ëŠ¬ìŠ, ì¢ ì íì ì§ìì ëì íì¬ ìŽ êž°ë¥ì íì¥í©ëë€. ìŽë¬í êž°ë¥ì íµíŽ ê°ë°ìë ë ë³µì¡í íë¡ê·žëš ìì±ì íííê³ ê°ë° ëŒìŽíì¬ìŽíŽ ìŽêž°ì ì ì¬ì ìž ì€ë¥ë¥Œ í¬ì°©íì¬ ëë²ê¹ ìê°ì ì€ìŽê³ ìíížìšìŽ ìì ì±ì í¥ììí¬ ì ììµëë€.
íšìí íë¡ê·žëë° íšë¬ë€ìì ë¶ì곌 ìµì ìíížìšìŽ ìì€í ì ë³µì¡ì± ìŠê°ë ê³ êž íì ìì€í ì ëí ìì륌 ëì± ìŽì§íìµëë€. Haskell, Scala ë° Rustì ê°ì ìžìŽë ê°ë ¥íê³ ííë ¥ìŽ íë¶í íì ìì€í ì íì ì ìŠíìŒë©°, ê·ž ìí¥ì ì ì°š ì£Œë¥ íë¡ê·žëë°ì ì€ë©°ë€ê³ ììµëë€.
ì¢ ì íì : ê°ì ì졎íë íì
ì¢ ì íì ì ê³ êž íì ìì€í ì ìŽìì ëë€. ë³ìê° ë³Žì í ë°ìŽí° ì¢ ë¥ë¥Œ ì€ëª íë Ʞ졎 íì 곌 ë¬ëЬ ì¢ ì íì ì ííìì ê°ì ì졎í ì ììµëë€. ìŽë¥Œ íµíŽ íì ìì€í ëŽìì ì íí ì ìœ ì¡°ê±Žê³Œ ë¶ë³ì±ì ì§ì ìžìœë©í ì ììµëë€.
ìì : í¬êž°ê° ìë 벡í°
벡í°(ëë ë°°ìŽ) ë°ìŽí° 구조륌 ìê°íŽ ë³Žììì€. ìŒë°ì ìž íì ìì€í ì ë³ìê° "ì ì 벡í°"ëŒê³ ë§ ì§ì í ì ììµëë€. ê·žë¬ë ì¢ ì íì ììë 벡í°ì í¬êž°ë¥Œ íì ëŽì ì ííê² ì§ì í ì ììµëë€.
ì¢ ì íì ìŽ ìë ê°ì ìžìŽìì ë€ì곌 ê°ìŽ ë³ŽìŒ ì ììµëë€.
Vector[5, Int] // 5ê°ì ì ì 벡í°
Vector[n, String] // 'n'ìŽ ê°ìž nê°ì 묞ììŽ ë²¡í°
ìŽì íì ìì€í ì 벡í°ì ë²ì륌 ë²ìŽë ììì ì ê·Œíì§ ìëë¡ ë³Žì¥íë ê²ê³Œ ê°ì ì ìœ ì¡°ê±Žì ì ì©í ì ììµëë€. ìŽë ë°íì ì€ë¥ì ìŒë°ì ìž ìì€ë¥Œ ì ê±°í©ëë€.
ì¢ ì íì ì ìŽì
- ìœë ìì ì± í¥ì: 컎íìŒ ìê°ì ë°°ìŽ ë²ì륌 ë²ìŽëë ì€ë¥, 0ìŒë¡ ëëêž° ë° êž°í ì ì¬ì ìž ë¬žì 륌 í¬ì°©í©ëë€.
- íë¡ê·žëš ì íì± í¥ì: ë³µì¡í íë¡ê·žëš ë¶ë³ì±ì íì ìì€í ì ì§ì ìžìœë©íì¬ íë¡ê·žëš ëìì ë ìœê² ì¶ë¡ í ì ììµëë€.
- ì±ë¥ í¥ì: 컎íìŒë¬ì ë ì íí ì 볎륌 ì ê³µíšìŒë¡ìš ì¢ ì íì ì íµíŽ ë ì ê·¹ì ìž ìµì í륌 ìíí ì ììµëë€.
ì¢ ì íì ì ì§ìíë ìžìŽ
ì¢ ì íì ì ëí ê°ë ¥í ì§ìì ì ê³µíë ìžìŽë ë€ì곌 ê°ìµëë€.
- Agda: ê°ë ¥í ì¢ ì íì ìì€í ì ê°ì¶ ìì íšìí íë¡ê·žëë° ìžìŽì ëë€.
- Idris: ì€ì©ì ìž ìì© íë¡ê·žëšì ì€ì ì ë ì¢ ì íì ìŽ ìë ë²ì© íë¡ê·žëë° ìžìŽì ëë€.
- ATS: 늬ìì€ êŽëŠ¬ë¥Œ ìíŽ ì¢ ì íì 곌 ì í íì ì ê²°í©í íšìí íë¡ê·žëë° ìžìŽì ëë€.
- Lean: ì¢ ì íì ìŽë¡ ì ì¬ì©íë íë¡ê·žëë° ìžìŽìŽì ì 늬 ìŠëª êž°ì ëë€.
ìì í ì¢ ì íì ì ìì íêž° ë³µì¡í ì ìì§ë§ ìœë ìì ì± ë° ì íì± ìž¡ë©Žìì ìë¹í ìŽì ì ì ê³µí©ëë€. ì¢ ì íì ê°ë ì ì±íì ë€ë¥ž íë¡ê·žëë° ìžìŽì ì€ê³ì ìí¥ì 믞ì¹ê³ ììµëë€.
ì ì§ì íìŽí: ëì íìŽí곌 ì ì íìŽí ê°ì ê°ê²© íŽì
ì ì§ì íìŽíì ê°ë°ìê° ëìŒí íë¡ê·žëš ëŽìì ì ì ìŒë¡ íì ìŽ ì§ì ë ìœëì ëì ìŒë¡ íì ìŽ ì§ì ë ìœë륌 íŒí©í ì ìëë¡ íë ì€ì©ì ìž ì ê·Œ ë°©ìì ëë€. ìŽë Ʞ졎 ìœëë² ìŽì€ë¥Œ ì ì íìŽíìŒë¡ ë§ìŽê·žë ìŽì íêž° ìí ìíí ì í 겜ë¡ë¥Œ ì ê³µíê³ ê°ë°ìê° ìœëì ì€ìí ì¹ì ì ì ì íìŽíì ì íì ìŒë¡ ì ì©í ì ìëë¡ í©ëë€.
"Any" íì
ì ì§ì íìŽíì íµì¬ ê°ë ì "any"(ëë ì ì¬í) íì ì ëì ì ëë€. "any" íì ì ë³ìë ë€ë¥ž íì ì ê°ì 볎ì í ì ììµëë€. íì ê²ì¬êž°ë Ʞ볞ì ìŒë¡ "any"ì êŽë šë íì ì€ë¥ë¥Œ 묎ìíê³ ë°íìì íì ê²ì¬ë¥Œ ì°êž°í©ëë€.
ìì (TypeScript):
let x: any = 5;
x = "hello"; // 컎íìŒ ìê°ì íì
ì€ë¥ ìì
console.log(x.toUpperCase()); // xê° ë¬žììŽìŽ ìë ê²œì° ë°íì ì€ë¥ê° ë°ìí ì ììµëë€.
ì ì§ì íìŽíì ìŽì
- ì ì°ì±: ìì í ì¬ìì± ììŽ êž°ì¡Ž ìœëë² ìŽì€ì ì ì íìŽíì ì ì§ì ìŒë¡ ëì í ì ììµëë€.
- ìíž ìŽì©ì±: ì ì ìŒë¡ íì ìŽ ì§ì ë ìœëì ëì ìŒë¡ íì ìŽ ì§ì ë ìœë ê°ì ìíí ìíž ìì©ì ì§ìí©ëë€.
- ê°ë° ìê° ëšì¶: ê°ë°ìë ë¹ ë¥ž íë¡í íì ì ìì ìíŽ ëì íìŽíì ì¬ì©íê³ íë¡ëì ìœëì ê²œì° ì ì íìŽíìŒë¡ ì íí ì ììµëë€.
ì ì§ì íìŽíì ì§ìíë ìžìŽ
ì ì§ì íìŽí ì§ìì ì ê³µíë ìžêž° ìë ìžìŽë ë€ì곌 ê°ìµëë€.
- TypeScript: ì ì íìŽíì ì¶ê°íë JavaScriptì ìì ì§í©ì ëë€.
- Python (MyPy ì¬ì©): Pythonì ì íì ì ì íì ê²ì¬êž°ìž MyPyë ì ì§ì íìŽíì ì§ìí©ëë€.
- Dart: 몚ë íë«íŒìì ë¹ ë¥ž ì±ì ìí Googleì íŽëŒìŽìžíž ìµì í ìžìŽì ëë€.
- Hack: Facebookìì PHP ë°©ìžìŒë¡ ë§ë HHVMì© íë¡ê·žëë° ìžìŽì ëë€.
ì ì§ì íìŽíì ëê·ëªš JavaScript ë° Python íë¡ì ížì ì ì§ êŽëŠ¬ì± ë° íì¥ì±ì ê°ì íë ë° ì ì©í ë구ììŽ ì ìŠëììµëë€. ìŽë ëì íìŽíì ì ì°ì±ê³Œ ì ì íìŽíì ìŽì ê°ì ê· íì ì ì§í©ëë€.
êµì°š íì ë° ì ëìš íì : ë³µì¡í íì êŽê³ íí
êµì°š íì ë° ì ëìš íì ì íì ê°ì êŽê³ë¥Œ ì ìíë ë ííë ¥ìŽ íë¶í ë°©ë²ì ì ê³µí©ëë€. ìŽë¥Œ íµíŽ êž°ì¡Ž íì ì ì¡°í©ì ëíëŽë ì íì ì ë§ë€ ì ììµëë€.
êµì°š íì (AND)
êµì°š íì ì êµì°šì ìë 몚ë íì ì ìíë ê°ì ëíë ëë€. ì륌 ë€ìŽ ë ê°ì ìží°íìŽì€ `Closable`곌 `Readable`ê° ìë ê²œì° êµì°š íì `Closable & Readable`ì ë«ì ì ìê³ ìœì ì ìë ê°ì²Žë¥Œ ëíë ëë€.
ìì (TypeScript):
interface Closable {
close(): void;
}
interface Readable {
read(): string;
}
type ClosableReadable = Closable & Readable;
function process(obj: ClosableReadable) {
obj.read();
obj.close();
}
ì ëìš íì (OR)
ì ëìš íì ì ì ëìšì ìë íì ì€ íë ìŽìì ìíë ê°ì ëíë ëë€. ì륌 ë€ìŽ `string | number`ë 묞ììŽ ëë ì«ììŒ ì ìë ê°ì ëíë ëë€.
ìì (TypeScript):
function printValue(value: string | number) {
if (typeof value === "string") {
console.log(value.toUpperCase());
} else {
console.log(value * 2);
}
}
êµì°š íì ë° ì ëìš íì ì ìŽì
- ìœë ì¬ì¬ì©ì± í¥ì: ë€ìí íì ìì ìëí ì ìë ì ë€ëŠ íšì륌 ì ìí©ëë€.
- íì ìì ì± í¥ì: ë³µì¡í íì êŽê³ë¥Œ ë³Žë€ ì ííê² ëªšëžë§íì¬ ë°íì ì€ë¥ì ìíì ì€ì ëë€.
- ìœë ííë ¥ í¥ì: Ʞ졎 íì ì ê²°í©íì¬ ë ê°ê²°íê³ ìœêž° ì¬ìŽ ìœë륌 ìì±í©ëë€.
êµì°š íì ë° ì ëìš íì ì ì§ìíë ìžìŽ
ë§ì ìµì ìžìŽê° êµì°š íì ë° ì ëìš íì ì ì§ìíë©°, ì¬êž°ìë ë€ììŽ í¬íšë©ëë€.
- TypeScript: êµì°š íì ë° ì ëìš íì ì ëí ê°ë ¥í ì§ìì ì ê³µí©ëë€.
- Flow: JavaScriptì© ì ì íì ê²ì¬êž°ìž Flowë ìŽë¬í íì ë ì§ìí©ëë€.
- Scala: êµì°š íì (`with` ì¬ì©)곌 ì ëìš íì (Scala 3ìì `|` ì¬ì©)ì ì§ìí©ëë€.
êµì°š íì ë° ì ëìš íì ì ë ì ì°íê³ ííë ¥ìŽ íë¶í íì ìì€í ì ë§ëë ë° ì ì©í ë구ì ëë€. í¹í ë³µì¡í ë°ìŽí° 구조 ë° API륌 몚ëžë§íë ë° ì ì©í©ëë€.
íì ì¶ë¡ : ìì©êµ¬ ê°ì ë° ê°ë ì± í¥ì
íì ì¶ë¡ ì ëª ìì ìž íì 죌ì ììŽ ë³ì ë° ííìì íì ì ìëìŒë¡ ì¶ë¡ íë íì ìì€í ì êž°ë¥ì ëë€. ìŽë ìì©êµ¬ ìœë륌 í¬ê² ì€ìŽê³ ìœë ê°ë ì±ì í¥ììí¬ ì ììµëë€.
íì ì¶ë¡ ìë ë°©ì
íì ì¶ë¡ ìê³ ëŠ¬ìŠì ë³ì ëë ííììŽ ì¬ì©ëë 컚í ì€ížë¥Œ ë¶ìíì¬ íì ì ê²°ì í©ëë€. ì륌 ë€ìŽ ë³ìì ê° `5`ê° í ë¹ë ê²œì° íì ìì€í ì íŽë¹ íì ìŽ `number`(ëë ìŒë¶ ìžìŽììë `int`)ëŒê³ ì¶ë¡ í ì ììµëë€.
ìì (Haskell):
add x y = x + y -- íì
ìì€í
ì xì yê° ì«ìëŒê³ ì¶ë¡ í©ëë€.
ìŽ Haskell ìì ìì íì ìì€í ì `+` ì°ì°ì륌 êž°ë°ìŒë¡ `x`ì `y`ê° ì«ìëŒê³ ì¶ë¡ í ì ììµëë€.
íì ì¶ë¡ ì ìŽì
- ìì©êµ¬ ê°ì: ëª ìì ìž íì 죌ìì íìì±ì ìì ìœë륌 ë ê°ê²°íê² ë§ëëë€.
- ê°ë ì± í¥ì: íì ì ìžìŽ ìë ìœë ë ŒëŠ¬ì ì§ì€í©ëë€.
- ìì°ì± í¥ì: íì ìì€í ìŽ íì ì ìëìŒë¡ ì¶ë¡ íëë¡ íì¬ ë ë¹ ë¥Žê² ìœë륌 ìì±í©ëë€.
ê°ë ¥í íì ì¶ë¡ êž°ë¥ì ê°ì¶ ìžìŽ
ê°ë ¥í íì ì¶ë¡ êž°ë¥ìŒë¡ ìë €ì§ ìžìŽë ë€ì곌 ê°ìµëë€.
- Haskell: Hindley-Milner íì ìì€í ì ì¬ì©íë íì ì¶ë¡ ì ì 구ìì ëë€.
- ML ê³ìŽ (OCaml, Standard ML, F#): Hindley-Milner íì ìì€í ì êž°ë°ìŒë¡ í©ëë€.
- Rust: ìì ì±ê³Œ ì ì°ì±ì ê· íì ì ì§íë ì êµí íì ì¶ë¡ ìì€í ì ì¬ì©í©ëë€.
- Swift: iOS ë° macOS ê°ë°ì ìí Appleì íë¡ê·žëë° ìžìŽì ëë€.
- Kotlin: JVM, Android ë° ëžëŒì°ì ì© ìµì ìžìŽì ëë€.
íì ì¶ë¡ ì ì ì ìŒë¡ íì ìŽ ì§ì ë ìžìŽë¥Œ ë³Žë€ ì ê·Œíêž° ìœê³ ìì°ì ìŒë¡ ë§ëë ì ì©í êž°ë¥ì ëë€. ìŽë ì ì íìŽíì ìŽì 곌 ëì íìŽíì ê°ê²°ì± ì¬ìŽì ê· íì ì ì§í©ëë€.
íì ìì€í ì 믞ë
íì ìì€í ì°êµ¬ë ê°ë¥í ê²ì 겜ê³ë¥Œ ê³ì ëíê³ ììµëë€. ëª ê°ì§ ìë¡ìŽ ížë ëë ë€ì곌 ê°ìµëë€.
- ìžë¶í íì : ë ŒëŠ¬ì ì ìŽë¡ ìžë¶íë íì ìŒë¡, ë³Žë€ ì íí íë¡ê·žëš ì¬ìì íì©í©ëë€.
- ì í íì : 늬ìì€ê° ì íí í ë² ì¬ì©ëëë¡ ë³Žì¥íì¬ ë©ëªšëЬ ëì ë° êž°í 늬ìì€ êŽë š ì€ë¥ë¥Œ ë°©ì§íë íì ì ëë€.
- ìžì íì : ëì íë¡ìžì€ ê°ì íµì íë¡í ìœì ì€ëª íì¬ ìì íê³ ìì ì ìž íµì ì 볎ì¥íë íì ì ëë€.
- ëì íšê³Œ ìì€í : ìì¹ì ìž ë°©ììŒë¡ ë¶ìì©ì ì²ëЬíì¬ ìœë륌 ë³Žë€ ëªšëííê³ í ì€íž ê°ë¥íê² ë§ëë ë°©ë²ì ëë€.
ìŽë¬í ê³ êž êž°ë¥ì ìíížìšìŽ ê°ë°ì ë³Žë€ ìì ì ìŽê³ ìì íë©° íšìšì ìŒë¡ ë§ë€ ì ìë ìœìì ê°ì§ê³ ììµëë€. íì ìì€í ì°êµ¬ê° ì§íëšì ë°ëŒ ê°ë°ìê° ê³ íì§ ìíížìšìŽë¥Œ 구ì¶í ì ìëë¡ ì§ìíë ëì± ì êµí ë구ì êž°ì ìŽ ë±ì¥í ê²ìŒë¡ ììí ì ììµëë€.
ê²°ë¡
ê³ êž íì ìì€í ì ìíížìšìŽë¥Œ ê°ë°íë ë°©ìì ë³íìí€ê³ ììµëë€. ì íí íë¡ê·žëš ë¶ë³ì±ì ìžìœë©íë ì¢ ì íì ë¶í° ëì íìŽí곌 ì ì íìŽí ê°ì ê°ê²©ì íŽìíë ì ì§ì íìŽíì ìŽë¥Žêž°ê¹ì§ ìŽë¬í êž°ë¥ì ìœë ì íì±ì 볎ì¥íê³ , íë¡ê·žëš ì ì§ êŽëЬì±ì ê°ì íë©°, ê°ë°ì ìì°ì±ì í¥ììí€ë ê°ë ¥í ë구 몚ìì ì ê³µí©ëë€. ìŽë¬í ë°ì ì ìì©íšìŒë¡ìš ê°ë°ìë ì ìžê³ ì¬ì©ì륌 ìíŽ ë ìì ì ìŽê³ ìì íë©° íšìšì ìž ìíížìšìŽë¥Œ 구ì¶í ì ììµëë€.
ìµì ìíížìšìŽì ë³µì¡ì±ìŽ ìŠê°íšì ë°ëŒ ì êµí ë구ì êž°ì ìŽ íìí©ëë€. ê³ êž íì ìì€í êž°ë¥ì ìŽíŽíê³ ì±ííë ë° í¬ìíë ê²ì ì°šìžë ê³ íì§ ìíížìšìŽ ì í늬ìŒìŽì ì 구ì¶íêž° ìí ì€ìí ëšê³ì ëë€.