Skip to content

Commit 3929e40

Browse files
committed
๐Ÿšฉ: interface์˜ ์ƒ์†๊ด€๊ณ„์˜ ํ™•์žฅ ๋ฐฉ์‹์„ ์‹ค์Šตํ–ˆ๋‹ค.
1 parent 7412ea4 commit 3929e40

File tree

1 file changed

+13
-20
lines changed

1 file changed

+13
-20
lines changed

โ€Žsrc/app.ts

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,23 @@
1-
// interface๋ฅผ ์™œ ์‚ฌ์šฉํ• ๊นŒ ๋‹จ์ˆœํžˆ Type์„ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•จ์ธ๊ฐ€?
2-
// ๊ทธ๋ ‡๋‹ค๋ฉด type Person๊ณผ ๊ฐ™์ด ์ •์˜ํ•˜๋ฉด ๋ฌธ์ œ ์—†์ง€ ์•Š์€๊ฐ€?
3-
// ์ด๋ ‡๊ฒŒ์‚ฌ์šฉ์„ ํ•ด๋„ ๋ฌธ์ œ ์—†์ด ๋™์ž‘์„ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋ถ„๋ช…ํ•œ ์ฐจ์ด์ ์ด ์žˆ๋‹ค.
4-
// type Person = {
5-
// name: string;
6-
// age: number;
7-
8-
// greet(phrase: string): void;
9-
// }
10-
11-
// ๋ถ„๋ช…ํ•œ ์ฐจ์ด์ 
12-
// type์„ ์‚ฌ์šฉํ•ด์„œ ์œ ๋‹ˆ์˜จํƒ€์ž…๊ณผ ๊ฐ™์ด ์ปค์Šคํ…€ํ•˜๋ฉด ๋ถ„๋ช… ์œ ์—ฐํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ›จ์‹  ๋ช…ํ™•ํ•ด์ง„๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.
13-
// - ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ •์˜ํ•˜๋ฉด ๊ฐ์ฒด์˜ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๊ณ ์ž ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ์ฒด์˜ ํƒ€์ž…์œผ๋กœ ์ •์˜, ์ปค์Šคํ…€ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋ณด๋‹ค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ž์ฃผ ์‚ฌ์šฉํ•œ๋‹ค.
14-
// - ํด๋ž˜์Šค ์•ˆ์— ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ํด๋ž˜์Šค๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ๋ฒ•์œผ๋กœ๋„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ์ฆ‰, interface๋กœ extends, override์™€ ๊ฐ™์ด ์ƒ์†ก ๊ตฌ์กฐ๋กœ ๊ณต์œ ์„ฑ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํด๋ž˜์Šค์ธ implements๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํด๋ž˜์Šค์™€ ์—ฐ๋™, ํ˜ผ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
1+
interface Named {
2+
readonly name: string;
3+
}
154

16-
// ๋ฏธ๋ฌ˜ํ•œ ์ฐจ์ด์ 
17-
//
18-
interface GreetAble {
19-
name: string;
5+
interface GreetAble extends Named {
206
greet(phrase: string): void;
217
}
228

239
class Person implements GreetAble {
24-
name: string;
10+
name: string; //์ฃผ์„ ์ฒ˜๋ฆฌํ•˜๋ฉด error๋ฐœ์ƒ
2511
age: number;
2612
constructor(n: string, N: number) {
27-
this.name = n;
13+
this.name = n; // error ts(2339): name์ด Person์—์„œ ๊ตฌํ˜„๋˜์ง€ ์•Š์•˜๋‹ค๊ณ  error
14+
// ๊ทธ๋ ‡๋‹ค๋ฉด ์™œ name๊ณผ ๊ด€๋ จ๋œ GreatAble์„ ์ƒ์† ๋ฐ›๊ณ  ์žˆ๋Š”๋ฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ• ๊นŒ?
15+
// ์ด์œ ๋Š” GreetAble์—์„œ ์ƒ์†๋ฐ›์€ Named์˜ ํ•„๋“œ ๋ณ€์ˆ˜๋Š” readonly๋กœ ํ•„์ˆ˜์ ์œผ๋กœ class์—์„œ name ์†์„ฑ์„ ๋ฐ˜๋“œ์‹œ ํฌํ•จ์„ ํ•ด์•ผํ•œ๋‹ค.
16+
// ๋‹ค์‹œ ํด๋ž˜์Šค์— ๊ด€ํ•ด์„œ ์ƒ๊ธฐ์‹œํ‚ค์ž๋ฉด class๋Š” ์ฒญ์‚ฌ์ง„์ด๋‹ค. interface๋Š” abstract์™€๋Š” ๋‹ฌ๋ฆฌ ๊ฐ•ํ–‰์„ฑ์ด ์—†์ง€๋งŒ
17+
// implements์™€ extends์ฐจ์ด
18+
// extends๋Š” ํด๋ž˜์Šค์—์„œ ํด๋ž˜์Šค๋กœ ์ƒ์†์„ ์ค„ ๋•Œ ์ด๊ณ  implements๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํด๋ž˜์Šค๋กœ ๋ช…์„ธ์„œ๋ฅผ ๋ฐ›์•„ ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ •๋ฆฌํ•˜์ž๋ฉด
19+
// extends๋Š” ํด๋ž˜์Šค ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๊ฐ„์˜ ์ƒ์† ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ ์ƒ์œ„ ํด๋ž˜์Šค๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์†๋ฐ›์•„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
20+
// implements๋Š” ํด๋ž˜์Šค๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋„๋ก ๊ฐ•์ œํ•˜๋ฉฐ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์ •์˜๋œ ๋ชจ๋“  ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
2821
this.age = N;
2922
}
3023
greet(phrase: string): void {

0 commit comments

Comments
ย (0)