aftercamp
@aftercamp
Students
1,882
Reviews
102
Course Rating
4.9
## ์ด๋ ฅ์, ํฌํด ์ฒจ์ญ ๋ฑ ๊ฐ์ ์ธ ๋ฌธ์์ฌํญ์ด ์์ผ์๋ฉด ์ด๊ณณ์ผ๋ก ๋ฌธ์ ์ฃผ์ธ์
๐ morishjs@gmail.com
๊ฐ์ฌ ๊นํ: https://github.com/morishjs
์ง์์ ์ฅ์: https://wiki.after-camp.com/Home
๐จ ํฌํธํด๋ฆฌ์ค: https://morish.dev
๐ ์ด๋ ฅ: https://shorturl.at/gKU68
๋ถํธ์บ ํ ์๋ฃํ๋๋ฐ ์์ผ๋ก ๋ญ ๊ณต๋ถํด์ผ ํ ์ง ๋ง๋งํ์์ฃ ?
๐ ๋ถํธ์บ ํ์์๋ ์ทจ์ ๋ฅ 90%๋ผ๊ณ ํ๋๋ฐ... ์ ์ทจ์ ์ด ์ ์๋ผ์! ๐ข
๐ ์ทจ์ ์ ํ๋๋ฐ ์ฌ์๊ฐ ์์ด์ ๋๋ฌด ๋ถ์ํด์! ๐ค
๐ ์์ฑํ ์ฝ๋๊ฐ ๋์์ ํ๋๋ฐ ์ด๋ ๊ฒ ์์ฑํ๋์ง ๋ชจ๋ฅด๊ฒ ์ด์! ๐คฏ
์ ํํฐ์บ ํ์์๋ ๋ค์์ด ๊ฐ๋ฅํฉ๋๋ค!
๐ CTO 2๋ฒ ๊ฒฝํ, ๋ค์์ ํ๋ก์ ํธ๋ฅผ ๊ฒฝํํ ํ์คํ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ฝ์นญํฉ๋๋ค.
๐ ์ฝ๋ ๋ฆฌ๋ทฐ, ์ปค๋ฆฌ์ด ๋ฐฉํฅ์ฑ ๊ณ ๋ฏผ์ ๊ฐ์ด ํด๋๋ฆฝ๋๋ค.
๐ ์ ํํฐ์บ ํ์๋ ํ๊ตญ, ๋ฏธ๊ตญ ์ค๋ฆฌ์ฝ๋ฐธ๋ฆฌ ์๋น ๊ฐ๋ฐ์, ํ์ง์๊ฐ ๋ชจ์ธ ๊ณณ์ ๋๋ค.
Courses
Reviews
- Things They Don't Teach You in Bootcamps (React Rendering Optimization) Part 2
- Things They Don't Teach You in Bootcamps (React) Part 1
- Advanced TypeScript skills learned through hands-on practice
- Advanced TypeScript skills learned through hands-on practice
- Advanced TypeScript skills learned through hands-on practice
Posts
Q&A
๊ฐ์ ๋ง์ง๋ง์ด ์๋ ค์๋๊ฒ ๊ฐ์ต๋๋ค
์๋ ํ์ธ์. ๊ฐ์๊ฐ ์๋ฆฐ ์ํ๋ก ์ ๋ก๋๊ฐ ๋ผ์ ์ฃ์กํฉ๋๋ค. ์ ๊ฐ ์ด์ ์ ํธ์ง ์ ์์์ด ์ปดํจํฐ์ ๋จ์์์ง ์์์ ์๋ก์ด ์์์ผ๋ก ์ฌ๋ฆฌ๋๋ฐ ์ด๋ ค์์ด ์์ต๋๋ค. ์๋ง ์์ ๋ง์ง๋ง์ "RecyclerView์๋ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ณต๊ธํด์ค์ผ ํ๋๋ฐ" ๋ก ๋๋ฌ๋๋ฐ ํ๋ฆ์ ๋ฐ์ดํฐ๋ฅผ ๊ณต๊ธํด์ ๋ ๋๋งํ๋ค๊ณ ๋ง ์ ๋ฆฌํด์ฃผ์ ๋ ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ฒฐ๊ตญ ์ด ๊ฐ์์์ ์ ๋ฌํ๊ณ ์ถ์๋ ๊ฑด "์ด๋ฏธ ๋ ๋๋ง ๋ ๊ฒ์ด ์ ๊น ํ๋ฉด์ ์ ๋ณด์๋ค๊ฐ ๋ณด์ด๋ฉด ๋ค์ ๋ ๋๋งํ๋ ๊ฒ ์๋๋ผ ์ด์ ๋ ๋๋งํ๊ธฐ ์ํด ์บ์์ ์ ์ฅํ๋ค๊ฐ ๋ ๋๋งํ๋ค" ์ ๋๋ค.
- 0
- 2
- 38
Q&A
์ด๊ฒ ๋๋ค๋๊ฑธ ์ด๋ป๊ฒ ํ๋จํ ์ ์๋์?
์๋ ํ์ธ์ ๋ต๋ณ์ด ๋ฆ์์ต๋๋ค. ์ ๊ฐ ์ง๋ฌธ ์๋๋ฅผ ์ดํด๋ฅผ ๋ชปํ๋๋ฐ ๊ทธ๋ฅ ์ง๋ฌธ ๊ทธ๋๋ก ๋ต๋ณ์ ๋๋ฆฌ์๋ฉด https://www.typescriptlang.org/play/?#code/MYewdgzgLgBAJgIwFwwN4wNoAcTQJJwoAKuUBAusaQNyYCuEApgE4EoCqTrclMnLtAL4wAvGkHUgA์ด๋ฐ ํ์ ์คํฌ๋ฆฝํธ ํ๋ ์ด๊ทธ๋ผ์ด๋์์ ํ์ ์ด ๋ง๋ ์๋๋๋ฅผ ํ์ธ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ตณ์ด ํ์ ์๋ฌ๋ฅผ ์์ ๊ฒ ๋ค๊ณ ํ๋ฉดtype PostId = `post_${string}`; type UserId = `user_${string}`; type Post = { title: string; content: string; }; type User = { name: string; email: string; }; const db: { [postId: PostId]: Post; [userId: UserId]: User } = {}; // ์ฌ์ฉ ์์ db["post_1"] = { title: "Hello", content: "World" }; db["user_1"] = { name: "Kim", email: "kim@example.com" };์ด๋ ๊ฒ ํ๋ฉด ๋์ง ์์๊น ์ถ์ต๋๋ค.
- 0
- 2
- 43
Q&A
์ฐ์ต๋ฌธ์ ๊ฐ์ ํ์ธ ๋ถํ๋๋ฆฝ๋๋ค.
์๋ ํ์ธ์. ์ถ๊ฐํ์ต๋๋ค.
- 0
- 2
- 60
Q&A
object key ์ง๋ฌธ๋๋ฆฝ๋๋ค.
์๋ ํ์ธ์. ์ ๊ฐ ์ง๋ฌธ์ ์ ๋๋ก ์ดํดํ๋์ง ๋ชจ๋ฅด๊ฒ ๋๋ฐ ์ดํดํ๋๋ก ๋ต๋ณ์ ๋๋ฆฌ์๋ฉด,(์ฌ์ง)๊ฐ์์์ obj์ key๋ค์ ๋ชจ๋ string์ ๋๋ค. ์ฝ๋๋ฅผ ์ด๋ป๊ฒ ์์ฑํ์ ์ string | number๋ก ์ถ๋ก ๋์๋์ง ์ดํด๊ฐ ์กฐ๊ธ ์๋๋๋ฐ ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.const obj = { a: 1, 1: "1", } const a = obj[1]obj['a'] => 1 => number๋ก ์ถ๋ก obj[1] => "1" => string๋ก ์ถ๋ก ๋ฉ๋๋ค. ํน์ ๋ต๋ณ์ด ๋ถ๋ช ํํ๋ฉด ๋ต๋ณ ๋ฌ์์ฃผ์๋ฉด ๋ต๋ณ๋๋ฆฌ๊ฒ ์ต๋๋ค.
- 0
- 1
- 48
Q&A
ํ์ด ๋๋ค์ ๋ฑ๋ก๋ถํ๋๋ฆฝ๋๋ค!
์๋ ํ์ธ์์ถ๊ฐํ์ต๋๋ค. ์ฐํด๊ฐ ์ถ๊ฐํ์ด์ผ ํ๋๋ฐ ๋ฆ์ด์ ์ฃ์กํฉ๋๋ค.
- 0
- 2
- 87
Q&A
๊ฐ ๊ฐ์์ ๋ํ ์ค๋ช ๋งํฌ 404์๋ฌ
์๋ ํ์ธ์ ๋ถํธ์ ๋๋ ค์ ์ฃ์กํฉ๋๋ค. ๋ณต๊ตฌํ์ผ๋ ์ง๊ธ์ ์ ๋ณด์ผ ๊ฒ๋๋ค.
- 0
- 2
- 57
Q&A
ํ์ด๋ฌธ์ ๋๋ค์ ๋ฑ๋ก ์์ฒญ๋๋ฆฝ๋๋ค
์๋ ํ์ธ์ ๋ฑ๋ก ์๋ฃํ์ต๋๋ค.
- 0
- 2
- 51
Q&A
Automatic batching์ ๊ดํด ๊ถ๊ธํ ์ ์ด ์์ต๋๋ค.
๋ค ๋ง์ต๋๋ค. ๊ฐ๋ฐ์๊ฐ ๋ฐ๋ก ์ ๊ฒฝ์ฐ์ง ์์๋ ๋ฆฌ์กํธ ๋ด๋ถ์ ์ผ๋ก ์ต์ ํ๊ฐ ๋์ด์์ต๋๋ค.
- 0
- 1
- 93
Q&A
๋ธ๋ก๊ทธ ๋งํฌ ๋ฌธ์
๋ณต๊ตฌํ์ต๋๋ค!
- 1
- 1
- 112
Q&A
์ ๋ค๋ฆญ๊ณผ ์ฌ์ฉ์ ์ ์ ํ์ ๊ฐ๋์ ๊ดํ ์ง๋ฌธ
์๋ ํ์ธ์.์ฐ์ ์ ๊ฐ ์๊ฐํ ๋ต์์ ๋ณด์ฌ๋๋ฆฌ๋ฉดtype SingleValue = Date | null type RangeValue = [SingleValue, SingleValue] type DatePicker = | { type: 'single'; value: SingleValue } | { type: 'range'; value: RangeValue }; class DatePickerKlass { picker: DatePicker; constructor(picker: DatePicker) { this.picker = picker; } updateValue(date: Date) { if (this.picker.type === 'single') { this.picker.value = date; } else if (this.picker.type === 'range') { this.picker.value = [date, null]; } } }์์ฑํด์ฃผ์ ๋ต์ ๋ณด๋ค ์ข ๋ ๊ฐ๋จํ๊ฒ ๋ง๋ค ์ ์์ง ์์๊น ํด์ ์ ๊ฐ์ ๊ฒฝ์ฐ์ discriminated union ์ผ๋ก ๋ฌธ์ ํ์ด๋ดค์ต๋๋ค. updateValue(date:Date) { const isSingle = ():this is DatePicker => this.type === 'single' if(isSingle()) { this.value = date return; } }์ฌ๊ธฐ์ ํ์ ์ด ์ขํ์ง์ง ์๋ ์ด์ ๋ ํ์ ์คํฌ๋ฆฝํธ์ ํน์ฑ์ธ๋ฐ์. T์ ํ์ ์ ์ ํํด๋ ๊ฒฐ๊ตญ T๋ 'placeholder'์ด๊ธฐ ๋๋ฌธ์ ํน์ ํ์ ์ผ๋ก ์ขํ์ง์ง ์์ต๋๋ค. ์ ๋ ์ค๋ฌด์์ ์ฌ์ฉํ๋ค๋ณด๋ฉด, ์๊ฐ๋๋ก ์๋๋ ๊ฒ ์ฐธ ๋ง์๋ฐ ์ด๋ด ๋ "์! ์ด๊ฑด ์์ง ํ์ ์คํฌ๋ฆฝํธ ๊ฐ๋ฐํ์๋ ๋ถ์ด ๊ตฌํ์ ์ํด๋จ๊ตฌ๋..." ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ฒ์ ์ด ๋์์ง๋ฉด ์ด๋ฐ ๋ฌธ์ ๋ ํด๊ฒฐ๋๋ ๊ฒฝ์ฐ๊ฐ ์๊ฑฐ๋ ์.ํ์ ์คํฌ๋ฆฝํธ๊ฐ ๋ค๋ฅธ statically-typed ์ธ์ด์ ๋นํด ๊ต์ฅํ ์์ ๋๊ฐ ๋์๋ฐ, ๊ทธ๋งํผ ์์ง ๊ตฌํ์ด ์๋ ๊ฒ์ด ์ข ์ข ์์ต๋๋ค.
- 1
- 1
- 152







