<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>seo_yun.log</title>
        <link>https://velog.io/</link>
        <description>춘식이주제에 개발도 해보려합니다</description>
        <lastBuildDate>Fri, 23 Feb 2024 19:11:36 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>seo_yun.log</title>
            <url>https://velog.velcdn.com/images/seo_yun/profile/207a1e60-0b47-4ba2-85c8-fcb17b2736ab/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. seo_yun.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/seo_yun" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[TypeScript] 타입스크립트가 뭔데 ?]]></title>
            <link>https://velog.io/@seo_yun/TypeScript-%ED%83%80%EC%9E%85%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EA%B0%80-%EB%AD%94%EB%8D%B0</link>
            <guid>https://velog.io/@seo_yun/TypeScript-%ED%83%80%EC%9E%85%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EA%B0%80-%EB%AD%94%EB%8D%B0</guid>
            <pubDate>Fri, 23 Feb 2024 19:11:36 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/seo_yun/post/54d2204a-63e2-4f9d-90d0-b98daf50bd38/image.png" alt="TS"></p>
<p>이번 게시물은 TypeScript에 대해, 왜 타입 시스템을 도입했는지 살펴보도록 하겠습니다 😀 <br/><br/></p>
<h2 id="💭-타입스크립트-">💭 타입스크립트 ?</h2>
<hr>
<blockquote>
<p><em><strong><span style="color:#0170a9">타입스크립트(TypeScript) :</span> 타입을 위한 구문이 있는 자바스크립트 -&gt; <code>JS</code> + <code>type</code></strong></em>
<em>👉 <strong><span style="color:#808080">코드를 더 읽기 쉽게 만들어줌</span></strong></em></p>
</blockquote>
<br/>
TypeScript는 다시 말해, JavaScript에 타입 규약이 추가된 언어입니다.
<br/>아래 예시 코드를 보면서 비교해보도록 하겠습니다.

<ul>
<li><code>JavaScript</code> <pre><code class="language-javascript">const hello = &quot;JavaScript&quot;
function add(x, y) {
return x + y;
}
</code></pre>
</li>
</ul>
<p>const animal = {
  name: &quot;Choonsik&quot;,
  age: 23,
};</p>
<pre><code>
- `TypeScript`
```typescript
const hello: string = &quot;TypeScript&quot;;
function add(x: number, y: number): number {
  return x + y;
}

interface Animal {
  name: string,
  age: number,
}

const animal: Animal = {
  name: &quot;Choonsik&quot;,
  age: 23,
};</code></pre><p>⌨️ 코드의 작성법은 크게 바뀌지 않았습니다.
⌨️ 다만, <code>:</code> 과 <code>string</code> , <code>number</code> 로 타입을 미리 지정해 준 형태를 볼 수 있습니다.
<br/><br/></p>
<p>TypeScript는 타입을 위한 구문은 변수나, 매개변수, 반환값 같은 값에 타입을 부여합니다.
이때 <strong><span style="color:#0170a9">타입</span></strong>은 <strong>데이터의 형태</strong>를 의미합니다.</p>
<ul>
<li>데이터의 형태 : JavaScript에서 배운 문자열, 숫자, 객체 등의 자료형을 뜻함</li>
</ul>
<p>타입을 부여하는 행위를 <strong><span style="color:#0170a9">타이핑(typing)</span></strong> 이라고 표현합니다. 
<br/></p>
<p>이처럼 코드의 역할을 훨씬 풍부하게 하는데에 큰 역할을 해줍니다.
그러면 <em><strong>굳이굳이굳이...</strong></em> 귀찮게 타입을 입혀가면서 TypeScript를 써야하는지에 대해 알아보도록 하겠습니다.</p>
<p><br/><br/></p>
<h2 id="💭-타입스크립트-왜-쓰는걸까-">💭 타입스크립트 왜 쓰는걸까 ?</h2>
<hr>
<blockquote>
<p><em><strong><span style="color:#0170a9">1. 에러의 사전 방지
2. 코드 가이드 및 자동 완성</strong></em> <span></p>
</blockquote>
<p>JavaScript로 만드는 프로그램의 규모가 점점 커지고, 방대한 코드를 타입 없이 작성하기엔 타입 관련 오류와 오타가 많이 발생하게 되었습니다. TypeScript는 타입 관련 오류와 오타를, 코드를 실행하기 전에 잡아주기 떄문에 실제로 코드를 실행했을 때에는 오류가 나는 경우가 많이 줄어들게 됩니다.
<br/></p>
<h3 id="1-에러의-사전-방지">1. 에러의 사전 방지</h3>
<h4 id="➣-코드를-실제로-실행하기-전-미리-에러를-어느-정도-검출-가능">➣ <em>코드를 실제로 실행하기 전, 미리 에러를 어느 정도 검출 가능</em></h4>
<br/>

<pre><code class="language-javascript">function sum(a, b) {
  return a + b;
}

sum(10, 20);</code></pre>
<p>⌨️ 인자 2개를 넘겨 받아야 하는 <code>sum()</code> 함수에서 다음처럼 <code>10</code> 과 <code>20</code> 을 넘겨 호출하는 경우엔 <code>30</code> 을 반환하게 됩니다. <br/><br/></p>
<p><strong>🤔 이때 이 함수에 숫자가 아닌 문자열을 넘기면 어떻게 될까 ?</strong></p>
<pre><code class="language-javascript">sum(10, &quot;20&quot;);</code></pre>
<p>⌨️ JavaScript에 익숙하다면 결과는 문자열 1020 이라는 것을 알 수 있습니다.
⌨️ <strong><span style="color:red">But,</span></strong> Java나 C++ 등 변수에 타입을 정하는 언어를 사용하는 사람이 보기에는 이상한 결과일 수 밖에 없습니다.
<em><strong>👉🏻 타입이 없어 유연하기에, 쉽게 개발할 수 있는 JavaScript의 단점이자 장점입니다.</strong></em>
<br/>
만약 다음처럼 코드에 인자 타입이 정해져있다면, 사전에 실수할 확률도 줄어듭니다.</p>
<pre><code class="language-typescript">function sum(a: number, b:number) {
  return a + b;
}</code></pre>
<p><br/><br/></p>
<h3 id="2-코드-가이드-및-자동-완성">2. 코드 가이드 및 자동 완성</h3>
<h4 id="➣-코드를-빠르고-정확하게-작성할-수-있도록-도와준다는-것이-두-번째-장점">➣ <em>코드를 빠르고 정확하게 작성할 수 있도록 도와준다는 것이 두 번째 장점</em></h4>
<br/>
다음 두 코드를 비교해보도록 하겠습니다.

<ul>
<li><code>index.js</code><pre><code class="language-javascript">function sum(a, b) {
return a + b;
}
</code></pre>
</li>
</ul>
<p>let total = sum(10, 20);
total.toFixed(2);</p>
<pre><code>⌨️ `toFixed()` 는 변수의 타입이 숫자일 때 사용할 수 있는 JavaScript 내장 API입니다.
⌨️ `toFixed(2)` 를 호출하면 숫자를 소수점 둘째자리까지 표시해줍니다. &lt;br/&gt;

- `index.ts`
```typescript
function sum(a: number, b:number) {
  return a + b;
}

let total = sum(10, 20);
total.toFixed(2);</code></pre><p><img src="https://velog.velcdn.com/images/seo_yun/post/5b863aed-6228-4d1f-8cd9-74ecd93e81cf/image.png" alt="키워드 자동 완성">
⌨️ IDE에서 <code>toFixed()</code> API 정보를 제공해줌과 동시에 <code>tab</code> 으로 키워드를 자동 완성하도록 도와줍니다.
⌨️ 또한 <code>index.ts</code> 에서 <code>sum()</code> 함수의 반환 타입은 자동으로 <code>number</code> 로 추론됩니다.
<br/><br/></p>
<h2 id="💭-타입스크립트에-존재하는-타입들">💭 타입스크립트에 존재하는 타입들</h2>
<hr>
<p><img src="https://velog.velcdn.com/images/seo_yun/post/7aa68838-1cb2-4772-b30c-101b51c3af97/image.png" alt="타입 계층 트리"></p>
<p>그림과 같이 다양한 타입들이 존재하게 되는데 이 포스팅에서는 주요 데이터 타입만 알아보도록 하겠습니다.</p>
<ul>
<li><code>string</code></li>
<li><code>number</code></li>
<li><code>boolean</code></li>
<li><code>object</code></li>
<li><code>Array</code></li>
<li><code>tuple</code></li>
<li><code>any</code></li>
<li><code>null</code></li>
<li><code>undefined</code></li>
<li><code>bigint</code></li>
<li><code>symbol</code><br/>

</li>
</ul>
<h3 id="1-문자열-타입--string">1. 문자열 타입 : string</h3>
<pre><code class="language-typescript">const name: string = &quot;Choonsik&quot;;</code></pre>
<p><br/><br/></p>
<h3 id="2-숫자-타입--number">2. 숫자 타입 : number</h3>
<pre><code class="language-typescript">const age: number = 23;</code></pre>
<p><br/><br/></p>
<h3 id="3-진위-타입--boolean">3. 진위 타입 : boolean</h3>
<pre><code class="language-typescript">const isLogin: boolean = false;</code></pre>
<p><br/><br/></p>
<h3 id="4-객체-타입--object">4. 객체 타입 : object</h3>
<pre><code class="language-typescript">const cat: object = { name: &quot;Choonsik&quot;, age: 23 };</code></pre>
<p><br/><br/></p>
<h3 id="5-배열-타입--array">5. 배열 타입 : Array</h3>
<p>➣ 앞서 배운 타입들과는 다르게 배열 타입은 두 가지 방법으로 선언 가능</p>
<pre><code class="language-typescript">// 문자열 배열
const companies: Array&lt;string&gt; = [&quot;네이버&quot;, &quot;카카오&quot;, &quot;인프런&quot;];
const companies: string[] = [&quot;네이버&quot;, &quot;카카오&quot;, &quot;인프런&quot;];

// 숫자 배열
const cards: Array&lt;number&gt; = [1, 2, 3, 4];
const cards: number[] = [1, 2, 3, 4];</code></pre>
<br/>

<p>배열의 타입을 정의할 때는 다음 문법으로 타입을 정의할 수 있습니다.</p>
<pre><code class="language-typescript">Array&lt;배열의 데이터 타입&gt;
배열의 데이터 타입[]</code></pre>
<p><em><strong>👉🏻 배열의 타입을 선언할 때는 <code>string[]</code> 형태의 문법을 추천</strong></em></p>
<p><br/><br/></p>
<h3 id="6-튜플-타입--tuple">6. 튜플 타입 : tuple</h3>
<p>➣ 특정 형태를 갖는 배열을 의미하며, 배열 길이가 고정되고 각 요소 타입이 정의된 배열을 의미</p>
<pre><code class="language-typescript">// 문자열 배열
const items: [string, number] = [&quot;hi&quot;, 12];</code></pre>
<p><br/><br/></p>
<h3 id="7-any">7. any</h3>
<p>➣ 아무 데이터나 취급하겠다는 의미
<strong><span style="color:red">🚨 가급적으로 쓰지 않는 것이 좋습니다.</span></strong></p>
<pre><code class="language-typescript">const myName: any = &quot;Choonsik&quot;;
myName = 23;
const age: any = 23;</code></pre>
<p>⌨️ <code>any</code> 타입으로 지정했기 때문에 초기에는 문자열을 갖지만 이후 다른 데이터 값으로 변경이 가능합니다.</p>
<p><br/><br/></p>
<h3 id="8-null--undefined">8. null &amp; undefined</h3>
<p><strong><code>null</code></strong> : 의도적으로 값을 비어두고 싶을 때 사용
<strong><code>undefined</code></strong> : 변수를 선언할 때 값을 할당하지 않으면 기본적으로 할당되는 초깃값</p>
<pre><code class="language-typescript">const empty: null = null;
const nothingAssigned: undefined; // undefiend 가 초깃값으로 지정될 것</code></pre>
<p><br/><br/></p>
<h3 id="9-bigint">9. bigint</h3>
<pre><code class="language-typescript">const big: bigint = 100000000n;</code></pre>
<p><br/><br/></p>
<h3 id="10-symbol">10. symbol</h3>
<pre><code class="language-typescript">const sym: symbol = Symbol(&quot;sym&quot;);</code></pre>
<p><br/><br/></p>
<h2 id="💭-글을-마치며">💭 글을 마치며...</h2>
<hr>
<p>TypeScript가 무엇인지, 왜 쓰는지, 타입에는 무엇이 있는지에 대해 알아보았습니다.
TypeScript는 자유로운 JavaScript에 타입을 정확히 명시해주면서 <strong>실수할 확률을 줄어주면서 개발</strong>할 수 있습니다. 
다만, 타입이라는 개념이 도입되면서 어이없게(?) 발생하는 에러들도 많이 있는 것 같습니다.</p>
<ul>
<li><em><code>tsconfig.json</code> 설정에서 <code>target</code> 을 잘못 지정</em></li>
<li>_코드가 길고 복잡해지면서 타입 간에 형식이 맞지 않음 _</li>
<li><em>타입이라는 시스템의 한계가 보여지는 등등.. (<del>물론 그냥 잘하다 보면 이런 고초는 안 겪겠지만!</del>)</em></li>
</ul>
<br/>

<p>그리고 타입을 <strong><span style="color:red">막무가내로 남발해서 쓰면 안되기도 합니다.</span></strong></p>
<p>위에서는 <code>any</code> 를 간단하게 소개했지만 <code>any</code> 를 쓰게되면 사실상 TypeScript를 쓰는 목적이 흐려지기도 합니다.
물론, 개발 첫 단계에서 어떤 타입을 쓸 지 명시하기 전, 임시로 <code>any</code> 를 쓰는 경우는 있을 수 있으나 다른 타입들을 타이핑 하는 과정에서 에러가 난다고 남발해서는 안됩니다.</p>
<p>타입이라는 것이 도입되면서 편리함도 있지만, 어떻게 보면 자유도가 떨어지면서 고민해봐야 할 점도 많이 생기는 것 같습니다 🤔</p>
]]></description>
        </item>
    </channel>
</rss>