<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>ts &amp;mdash; Hyun1008.log</title>
    <link>https://blog.daydream.ink/jyhyun1008/tag:ts</link>
    <description>재연의 개발블로그</description>
    <pubDate>Tue, 28 Apr 2026 03:31:43 +0900</pubDate>
    <item>
      <title>TypeScript 스터디 02</title>
      <link>https://blog.daydream.ink/jyhyun1008/typescript-seuteodi-02</link>
      <description>&lt;![CDATA[#스터디 #TS&#xA;&#xA;원본 영상&#xA;&#xA;개발환경 구성&#xA;&#xA;sudo npm install -g typescript ts-node&#xA;&#xA;타입스크립트 컴파일러를 사용할 수 있습니다.&#xA;&#xA;tsc --init&#xA;&#xA;tsconfig.json 파일을 생성합니다.&#xA;&#xA;여기에서 tsconfig 파일을 만드는 이유는 컴파일 되기 전의 ts파일과 컴파일 되고 나서의 js 파일을 구분해서 저장하기 위해서입니다.&#xA;&#xA;/src 폴더와 /build 폴더를 만들어줍니다. ts 파일은 /src 폴더에, js 파일은 /build 폴더에 저장되도록 하고자 합니다.&#xA;&#xA;    &#34;rootDir&#34;: &#34;./src&#34;,    &#xA;    &#34;outDir&#34;: &#34;./build&#34;,     &#xA;&#xA;저장한 후, /src 폴더에서 ts 파일을 생성한 다음 터미널에서 tsc 명령어를 쳐주면, /src 폴더에 있는 ts 파일의 컴파일된 js 파일이 /build 폴더에 생성됩니다.&#xA;&#xA;npm init -y&#xA;&#xA;package.json 파일을 생성합니다.&#xA;&#xA;npm i nodemon concurrently&#xA;&#xA;nodemon과 concurrently 모듈을 설치합니다.&#xA;&#xA;그리고 package.json 에서&#xA;&#xA;//package.json&#xA;  &#34;scripts&#34;: {&#xA;    &#34;start:build&#34;: &#34;tsc -w&#34;,&#xA;    &#34;start:run&#34;: &#34;nodemon build/index.js&#34;,&#xA;    &#34;start&#34;: &#34;concurrently npm:start:*&#34;&#xA;  },&#xA;&#xA;이렇게 설정하면 npm start 명령어로 컴파일과 실행이 이루어집니다.&#xA;&#xA;&#34;tsc -w&#34; 는 컴파일 과정을 콘솔에서 확인하겠다는 의미입니다.&#xA;&#xA;//index.ts&#xA;console.log(&#39;Hello World!&#39;);&#xA;&#xA;index.ts 를 저장하고 npm start 명령어를 입력하면 index.js 가 컴파일되고, 콘솔에 헬로월드가 찍히게 됩니다!&#xA;&#xA;JS의 경우 - 클래스&#xA;&#xA;class TodoItem {&#xA;    constructor(id, task, complete) {&#xA;        this.id = id;&#xA;        this.task = task;&#xA;        this.complete = complete;&#xA;    }&#xA;&#xA;    printDetails() {&#xA;        console.log(${this.id}\t${this.task}\t${this.complete ? &#39;\t(complete)&#39;: &#39;&#39;})&#xA;    }&#xA;}&#xA;&#xA;참고: this.complete ? &#39;\t(complete)&#39;: &#39;&#39;는, this.complete 값이 true 이면 (complete) 라는 문자열을, 그렇지 않으면 빈 문자열을 반환하겠다는 것입니다.&#xA;&#xA;TS의 경우 - 클래스&#xA;&#xA;같은 클래스입니다.&#xA;&#xA;class TodoItem {&#xA;    constructor(public id: number, public task: string, public complete: boolean) {&#xA;        this.id = id;&#xA;        this.task = task;&#xA;        this.complete = complete;&#xA;    }&#xA;&#xA;    printDetails(): void { &#xA;        console.log(${this.id}\t${this.task}\t${this.complete ? &#39;\t(complete)&#39;: &#39;&#39;})&#xA;    }&#xA;}&#xA;&#xA;export default TodoItem&#xA;&#xA;public이라고 된 부분은 접근지정자라고 하는데, 이 경우 어디서나 접근 가능한 값이라고 합니다. 참고 링크&#xA;&#xA;TS의 함수&#xA;&#xA;함수를 정의할 때 파라미터와 리턴값에 타입을 지정합니다. (리턴값이 없으면 void 지정)&#xA;&#xA;JS는 가변인자를 통한 함수 호출이 가능했지만, TS는 가변인자를 지원하지 않습니다.&#xA;&#xA;대신 함수의 오버로딩을 통해 가변인자와 같은 효과를 구현할 수 있습니다.&#xA;&#xA;body 가 없는 추상함수 형태의 자료형이 명시된 코드 와 any type을 받는 코드가 정의되어야 합니다.&#xA;&#xA;function add(fp: string, sp: string): string&#xA;function add(fp: number, sp: number): number&#xA;&#xA;function add(fp: any, sp: any): any {&#xA;    console.log(fp + sp)&#xA;}&#xA;&#xA;add(10, 20)&#xA;add(&#39;10&#39;, &#39;20&#39;)&#xA;`]]&gt;</description>
      <content:encoded><![CDATA[<p><a href="/jyhyun1008/tag:%EC%8A%A4%ED%84%B0%EB%94%94" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">스터디</span></a> <a href="/jyhyun1008/tag:TS" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">TS</span></a></p>

<p><a href="https://www.youtube.com/watch?v=TvoT9KMyVaQ&amp;list=PLOSNUO27qFbsI9bAIVitBcq-klZae5GMi&amp;index=3" rel="nofollow">원본 영상</a></p>

<h2 id="개발환경-구성" id="개발환경-구성">개발환경 구성</h2>

<pre><code>sudo npm install -g typescript ts-node
</code></pre>

<p>타입스크립트 컴파일러를 사용할 수 있습니다.</p>

<pre><code>tsc --init
</code></pre>

<p><code>tsconfig.json</code> 파일을 생성합니다.</p>

<p>여기에서 <code>tsconfig</code> 파일을 만드는 이유는 컴파일 되기 전의 ts파일과 컴파일 되고 나서의 js 파일을 구분해서 저장하기 위해서입니다.</p>

<p><code>/src</code> 폴더와 <code>/build</code> 폴더를 만들어줍니다. ts 파일은 <code>/src</code> 폴더에, js 파일은 <code>/build</code> 폴더에 저장되도록 하고자 합니다.</p>

<pre><code class="language-//tsconfig.json">    &#34;rootDir&#34;: &#34;./src&#34;,    
    &#34;outDir&#34;: &#34;./build&#34;,     
</code></pre>

<p>저장한 후, <code>/src</code> 폴더에서 ts 파일을 생성한 다음 터미널에서 <code>tsc</code> 명령어를 쳐주면, <code>/src</code> 폴더에 있는 ts 파일의 컴파일된 js 파일이 <code>/build</code> 폴더에 생성됩니다.</p>

<pre><code>npm init -y
</code></pre>

<p><code>package.json</code> 파일을 생성합니다.</p>

<pre><code>npm i nodemon concurrently
</code></pre>

<p>nodemon과 concurrently 모듈을 설치합니다.</p>

<p>그리고 <code>package.json</code> 에서</p>

<pre><code>//package.json
  &#34;scripts&#34;: {
    &#34;start:build&#34;: &#34;tsc -w&#34;,
    &#34;start:run&#34;: &#34;nodemon build/index.js&#34;,
    &#34;start&#34;: &#34;concurrently npm:start:*&#34;
  },
</code></pre>

<p>이렇게 설정하면 <code>npm start</code> 명령어로 컴파일과 실행이 이루어집니다.</p>

<p>“tsc -w” 는 컴파일 과정을 콘솔에서 확인하겠다는 의미입니다.</p>

<pre><code>//index.ts
console.log(&#39;Hello World!&#39;);
</code></pre>

<p><code>index.ts</code> 를 저장하고 <code>npm start</code> 명령어를 입력하면 <code>index.js</code> 가 컴파일되고, 콘솔에 헬로월드가 찍히게 됩니다!</p>

<h2 id="js의-경우-클래스" id="js의-경우-클래스">JS의 경우 – 클래스</h2>

<pre><code>class TodoItem {
    constructor(id, task, complete) {
        this.id = id;
        this.task = task;
        this.complete = complete;
    }

    printDetails() {
        console.log(`${this.id}\t${this.task}\t${this.complete ? &#39;\t(complete)&#39;: &#39;&#39;}`)
    }
}
</code></pre>

<p>참고: <code>this.complete ? &#39;\t(complete)&#39;: &#39;&#39;</code>는, <code>this.complete</code> 값이 true 이면 (complete) 라는 문자열을, 그렇지 않으면 빈 문자열을 반환하겠다는 것입니다.</p>

<h2 id="ts의-경우-클래스" id="ts의-경우-클래스">TS의 경우 – 클래스</h2>

<p>같은 클래스입니다.</p>

<pre><code>class TodoItem {
    constructor(public id: number, public task: string, public complete: boolean) {
        this.id = id;
        this.task = task;
        this.complete = complete;
    }

    printDetails(): void { 
        console.log(`${this.id}\t${this.task}\t${this.complete ? &#39;\t(complete)&#39;: &#39;&#39;}`)
    }
}

export default TodoItem
</code></pre>

<p>public이라고 된 부분은 접근지정자라고 하는데, 이 경우 어디서나 접근 가능한 값이라고 합니다. <a href="https://www.howdy-mj.me/typescript/access-modifiers" rel="nofollow">참고 링크</a></p>

<h2 id="ts의-함수" id="ts의-함수">TS의 함수</h2>

<p>함수를 정의할 때 파라미터와 리턴값에 타입을 지정합니다. (리턴값이 없으면 void 지정)</p>

<p>JS는 가변인자를 통한 함수 호출이 가능했지만, TS는 가변인자를 지원하지 않습니다.</p>

<p>대신 함수의 오버로딩을 통해 가변인자와 같은 효과를 구현할 수 있습니다.</p>

<p>body 가 없는 추상함수 형태의 자료형이 명시된 코드 와 any type을 받는 코드가 정의되어야 합니다.</p>

<pre><code>function add(fp: string, sp: string): string
function add(fp: number, sp: number): number

function add(fp: any, sp: any): any {
    console.log(fp + sp)
}

add(10, 20)
add(&#39;10&#39;, &#39;20&#39;)
</code></pre>
]]></content:encoded>
      <guid>https://blog.daydream.ink/jyhyun1008/typescript-seuteodi-02</guid>
      <pubDate>Sat, 07 Sep 2024 09:37:34 +0900</pubDate>
    </item>
    <item>
      <title>TypeScript 스터디 01</title>
      <link>https://blog.daydream.ink/jyhyun1008/typescript-seuteodi-01</link>
      <description>&lt;![CDATA[#스터디 #TS&#xA;&#xA;원본 영상&#xA;&#xA;타입스크립트의 필요성&#xA;&#xA;자바스크립트의 타입(자료형)은 크게 원시타입과 객체타입으로 구분됩니다.&#xA;&#xA;Primitive Type&#xA;&#xA;number&#xA;boolean&#xA;string&#xA;null&#xA;undefined&#xA;symbol - ES6&#xA;void - null, undefined&#xA;&#xA;Object Type&#xA;&#xA;function&#xA;array&#xA;class&#xA;&#xA;자바스크립트는 타입의 제한이 느슨한 언어로,  자바스크립트에서 선언한 변수에는 어떤 타입의 값도 들어갈 수 있습니다. (동적 타입)&#xA;&#xA;이는 프로그램의 유연성은 보장 하지만, 예측 가능하고 안전한 코드를 구현하기는 어렵게 됩니다.&#xA;&#xA;타입스크립트&#xA;&#xA;타입스크립트는 자바스크립트의 슈퍼셋 언어로서, 기존 자바스크립트에 Type System을 적용한 것입니다.&#xA;&#xA;타입스크립트는 정적 타입을 지원하므로, 변수의 정의와 함께 대입할 타입의 값을 지정합니다.&#xA;&#xA;함수의 패러미터, 반환값에는 지정된 타입의 값만 대입할 수 있습니다. 그렇지 않으면 컴파일 시점에 에러를 발생합니다.&#xA;&#xA;타입 추론(Type Inference)&#xA;&#xA;타입 추론이란, 정적으로 타입을 명시하지 않고 대입하는 값을 통해 타입을 유추해 결정하는 것입니다.&#xA;&#xA;let name = &#39;Kim&#39; // 처음 가진 값이 string&#xA;&#xA;name 이라는 변수는 string 타입이 됩니다. 이 변수는 이후의 코드에서도 계속 string 타입만 담을 수 있습니다.&#xA;&#xA;let name // 처음에 값을 대입 하지 않음&#xA;name = &#39;Kim&#39;&#xA;&#xA;name 이라는 변수는 any 타입이 되어 자바스크립트 처럼 어떠한 타입도 담을 수 있는 변수가 됩니다.&#xA;&#xA;이 경우 컴파일 시점에 해당 변수에 대한 타입 검사를 실행하지 않는다고 합니다.&#xA;&#xA;처음부터 변수가 any 타입이라고 선언할 수도 있습니다.&#xA;&#xA;let name: any&#xA;`]]&gt;</description>
      <content:encoded><![CDATA[<p><a href="/jyhyun1008/tag:%EC%8A%A4%ED%84%B0%EB%94%94" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">스터디</span></a> <a href="/jyhyun1008/tag:TS" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">TS</span></a></p>

<p><a href="https://youtu.be/g9HH_mbSQ14?si=yzvSyn7f9hN7X6Cj" rel="nofollow">원본 영상</a></p>

<h2 id="타입스크립트의-필요성" id="타입스크립트의-필요성">타입스크립트의 필요성</h2>

<p>자바스크립트의 타입(자료형)은 크게 원시타입과 객체타입으로 구분됩니다.</p>

<p><strong>Primitive Type</strong></p>
<ul><li>number</li>
<li>boolean</li>
<li>string</li>
<li>null</li>
<li>undefined</li>
<li>symbol – ES6</li>
<li>void – null, undefined</li></ul>

<p><strong>Object Type</strong></p>
<ul><li>function</li>
<li>array</li>
<li>class</li></ul>

<p>자바스크립트는 <strong>타입의 제한이 느슨한 언어</strong>로,  자바스크립트에서 선언한 변수에는 어떤 타입의 값도 들어갈 수 있습니다. (동적 타입)</p>

<p>이는 프로그램의 유연성은 보장 하지만, 예측 가능하고 안전한 코드를 구현하기는 어렵게 됩니다.</p>

<h2 id="타입스크립트">타입스크립트</h2>

<p><strong>타입스크립트</strong>는 자바스크립트의 <strong>슈퍼셋</strong> 언어로서, 기존 자바스크립트에 Type System을 적용한 것입니다.</p>

<p>타입스크립트는 정적 타입을 지원하므로, 변수의 정의와 함께 대입할 타입의 값을 지정합니다.</p>

<p>함수의 패러미터, 반환값에는 지정된 타입의 값만 대입할 수 있습니다. 그렇지 않으면 컴파일 시점에 에러를 발생합니다.</p>

<h2 id="타입-추론-type-inference" id="타입-추론-type-inference">타입 추론(Type Inference)</h2>

<p>타입 추론이란, 정적으로 타입을 명시하지 않고 대입하는 값을 통해 타입을 유추해 결정하는 것입니다.</p>

<pre><code>let name = &#39;Kim&#39; // 처음 가진 값이 string
</code></pre>

<p><code>name</code> 이라는 변수는 <code>string</code> 타입이 됩니다. 이 변수는 이후의 코드에서도 계속 <code>string</code> 타입만 담을 수 있습니다.</p>

<pre><code>let name // 처음에 값을 대입 하지 않음
name = &#39;Kim&#39;
</code></pre>

<p><code>name</code> 이라는 변수는 <code>any</code> 타입이 되어 자바스크립트 처럼 어떠한 타입도 담을 수 있는 변수가 됩니다.</p>

<p>이 경우 컴파일 시점에 해당 변수에 대한 타입 검사를 실행하지 않는다고 합니다.</p>

<p>처음부터 변수가 <code>any</code> 타입이라고 선언할 수도 있습니다.</p>

<pre><code>let name: any
</code></pre>
]]></content:encoded>
      <guid>https://blog.daydream.ink/jyhyun1008/typescript-seuteodi-01</guid>
      <pubDate>Fri, 06 Sep 2024 10:28:45 +0900</pubDate>
    </item>
  </channel>
</rss>