<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>sunu_py.log</title>
        <link>https://velog.io/</link>
        <description>한 줄, 한 줄</description>
        <lastBuildDate>Thu, 17 Nov 2022 08:49:11 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>sunu_py.log</title>
            <url>https://velog.velcdn.com/images/sunu_py/profile/1fb6e952-a8b7-4b9e-8845-e5afcebd558d/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. sunu_py.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/sunu_py" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[React.js (6)]]></title>
            <link>https://velog.io/@sunu_py/React.js-6</link>
            <guid>https://velog.io/@sunu_py/React.js-6</guid>
            <pubDate>Thu, 17 Nov 2022 08:49:11 GMT</pubDate>
            <description><![CDATA[<p>todoapp 폴더를 만들고, react 프로젝트를 생성해봅시다.
<code>D:\node.js\React\todoapp&gt;</code> <code>create-react-app .</code></p>
<p>📌 <span style="background-color:#FF7F50; color:white; font-weight:bold">&amp;nbsp폴더명에 대문자 들어가면 설치가 안된다 !&amp;nbsp</span></p>
<br>


<p>프로젝트에서 필요한 라이브러리도 설치
<code>npm install sass classnames react-icons</code></p>
<br>

<p>react 실행
<code>npm run start</code></p>
<br>

<p>TodoTemplate
Todoinsert
TodoList
TodoItem</p>
<p>으로 구성할 계획입니다.</p>
<h2 id="todotemplate">TodoTemplate</h2>
<p><code>todoapp\src\components</code> 폴더 생성
📌 <span style="background-color:#FF7F50; color:white; font-weight:bold">사용자 컴포넌트들은 별도의 폴더를 만들어서 저장하는 것이 관례</span></p>
<br>

<p>하위에 <code>TodoTemplate.js</code>, <code>TodoTemplate.css</code> 생성</p>
<pre><code class="language-js">import &#39;./TodoTemplate.scss&#39;;

const TodoTemplate = ({children}) =&gt; {
    return(
        &lt;div className =&#39;TodoTemplate&#39;&gt;
            &lt;div className =&#39;app-title&#39;&gt;일정 관리&lt;/div&gt;
            &lt;div className =&#39;content&#39;&gt;{children}&lt;/div&gt;
        &lt;/div&gt;
    );
}

export default TodoTemplate;</code></pre>
<p>클래스 선택자로 설정한 이유는?
엘리먼트를 선택해서 스타일 지정해주려고</p>
<pre><code class="language-js">.TodoTemplate {
    width: 512px;
    margin-left: auto;
    margin-right: auto;
    margin-top: 6rem;
    border-radius: 4px;
    overflow: hidden;

    .app-title {
        background: #22b8cf;
        color: white;
        height: 4rem;
        font-size: 1.5rem;
        display: flex;
        align-items: center;
        justify-content: center;
    }

    .content {
        background: white;
    }
}</code></pre>
<p><img src="https://velog.velcdn.com/images/sunu_py/post/f0aae193-ed49-4c8d-972a-7b05a7c3e71f/image.png" alt=""></p>
<br>

<h2 id="todoinsert">TodoInsert</h2>
<p><code>components\</code> 하위에 <code>TodoInsert.js</code>, <code>TodoInsert.css</code> 생성하자.</p>
<br>

<p><strong><code>TodoInsert.js</code></strong></p>
<pre><code class="language-js">import {MdAdd} from &#39;react-icons/md&#39;;
import &#39;./TodoInsert.scss&#39;;

const TodoInsert = ({children}) =&gt; {
    return(
        &lt;form className = &#39;TodoInsert&#39;&gt;
            &lt;input placeholder = &#39;할 일을 추가하세요&#39;&gt;&lt;/input&gt;
            &lt;button type = &#39;submit&#39;&gt;
                &lt;MdAdd/&gt;
            &lt;/button&gt;
        &lt;/form&gt;
    );
}

export default TodoInsert;</code></pre>
<p><strong><a href="https://react-icons.github.io/react-icons/icons?name=ai">&gt; React Icons &lt;</a></strong> 에서 아래의 icon을 사용한다는 뜻
<img src="https://velog.velcdn.com/images/sunu_py/post/4a570537-3973-433f-a626-4bc516286e66/image.png" alt=""></p>
<p>마음에 들지않으면 맘에 드는 것으로 바꾸자.</p>
<br>

<p><strong><code>TodoInsert.scss</code></strong></p>
<pre><code class="language-js">.TodoInsert {
    display: flex;
    background: #495057;

    input {
        background: none;
        outline: none;
        border: none;
        padding: 0.5rem;
        font-size: 1.135rem;
        line-height: 1.5;
        color: white;
        flex: 1;
    }

    button {
        background: none;
        outline: none;
        border: none;
        padding: 0.5rem;
        color: white;
        padding-left: 1rem;
        padding-right: 1rem;
        font-size: 1.5rem;
        align-items: center;
        cursor: pointer;
        &amp;:hover {
            background: #adb5bd;
        }
    }
}</code></pre>
<p><img src="https://velog.velcdn.com/images/sunu_py/post/83a3c1cf-9c55-4517-a95d-b65352a2aad3/image.png" alt=""></p>
<br>

<h2 id="todolist">TodoList</h2>
<hr>
<h3 id="todolistitem">TodoListItem</h3>
<p>TodoList에 들어갈 item 작성</p>
<p>components 하위에 <code>TodolistItem.js</code>, <code>TodolistItem.scss</code> 생성</p>
<br>

<p><strong><code>TodolistItem.js</code></strong></p>
<pre><code class="language-js">import {
    MdCheckBoxOutlineBlank,
    MdCheckBox,
    MdRemoveCircleOutline
} from &#39;react-icons/md&#39;;

import &#39;./TodoListItem.scss&#39;;

const TodoListItem = ({children}) =&gt; {
    return(
        &lt;div className = &#39;TodoListItem&#39;&gt;
            &lt;div className = &#39;checkbox&#39;&gt;
                &lt;MdCheckBoxOutlineBlank/&gt;
                &lt;div className = &#39;text&#39;&gt;할 일&lt;/div&gt;
            &lt;/div&gt;
            &lt;div className = &#39;remove&#39;&gt;
                &lt;MdRemoveCircleOutline/&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    );
}

export default TodoListItem;</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[배열 구조 분해]]></title>
            <link>https://velog.io/@sunu_py/%EB%B0%B0%EC%97%B4-%EA%B5%AC%EC%A1%B0-%EB%B6%84%ED%95%B4</link>
            <guid>https://velog.io/@sunu_py/%EB%B0%B0%EC%97%B4-%EA%B5%AC%EC%A1%B0-%EB%B6%84%ED%95%B4</guid>
            <pubDate>Thu, 10 Nov 2022 03:19:04 GMT</pubDate>
            <description><![CDATA[<h2 id="배열-구조-분해하기">배열 구조 분해하기</h2>
<p>다음의 배열이 있다.
<code>let arr = [&quot;SW&quot;, &quot;P&quot;];</code></p>
<p>각 요소에 접근하려면 <code>arr[0]</code>, <code>arr[1]</code> 로 접근했었는데,</p>
<pre><code class="language-HTML">        let [firstname, secondname] = arr;
        alert(firstname);    // SW
        alert(secondname);    // P</code></pre>
<p>이렇게도 할 수 있다.
<br></p>
<p>다음의 긴 문자열을 쪼개보자.</p>
<blockquote>
<p>자바스크립트(JavaScript)란? 자바스크립트(JavaScript)는 객체(object) 기반의 스크립트 언어입니다.</p>
</blockquote>
<p><code>.split()</code>메서드를 사용하면 구분자를 이용하여 여러개의 문자열로 나눠 array 형태로 리턴해준다.</p>
<pre><code class="language-html">        let[a, , b, c, d] = &quot;자바스크립트(JavaScript)란? 자바스크립트(JavaScript)는 객체(object) 기반의 스크립트 언어입니다.&quot;.split(&#39; &#39;)

        alert(a);   // 자바스크립트(JavaScript)란?
                    // 자바스크립트(JavaScript)는
        alert(b);   // 객체(object)
        alert(c);   // 기반의
           alert(d);   // 스크립트</code></pre>
<p>두번째 요소 &quot;자바스크립트(JavaScript)는&quot; 는 건너뛰고 &quot;객체(object)&quot; 가 b에 들어간다.
<br></p>
<pre><code class="language-html">        let [a, b, c] = &quot;abc&quot;;
        alert(a);
        alert(b);
        alert(c);</code></pre>
<pre><code class="language-html">        entries() 함수 이용
        let user = {
            name : &quot;SWP&quot;,
            age : 34
        }

        for (let [key, value] of Object.entries(user)){
            alert(`${key} : ${value}`);
        }</code></pre>
<pre><code class="language-html">        // &#39;...&#39; 나머지 요소 가져오기
        let [name1, name2, ...rest] = [&quot;정*식&quot;, &quot;김*진&quot;, &quot;박*규&quot;, &quot;박*우&quot;];
        alert(name1);
        alert(name2);
        alert(rest[0]);
        alert(rest[1]);
        alert(rest.length);
        // 꼭 rest 일 필요 없이 필요한 이름을 지어넣자.</code></pre>
<br>

<h2 id="구조-분해-할당의-기본값">구조 분해 할당의 기본값</h2>
<p>아무 값도 가지지 않은 배열이 있다.</p>
<pre><code class="language-html">        let [firstname, surname] = [];</code></pre>
<pre><code class="language-html">        alert(firstname);   // undefined
        alert(surname);     // undefined</code></pre>
<p>C언어에서 함수의 선언부에 기본값을 주었던 것처럼, 초기화를 해주어야하지 않을까?</p>
<pre><code class="language-js">        let [firstname = &quot;선우&quot;, surname = &quot;박&quot;] = [];</code></pre>
<pre><code class="language-js">        alert(firstname);   // 선우
        alert(surname);     // 박</code></pre>
<p>어떤 값을 대입하면 다음과 같이 출력이 된다.</p>
<pre><code class="language-js">        let [firstname = &quot;선우&quot;, surname = &quot;박&quot;] = [&quot;SW&quot;];

        alert(firstname);   // SW
        alert(surname);     // 박</code></pre>
<br>

<h2 id="객체-분해하기">객체 분해하기</h2>
<p>다음의 객체가 있다.</p>
<pre><code class="language-js">        let options = {
            title : &quot;menu&quot;,
            width : 100,
            height : 250
        }</code></pre>
<p>객체를 분해하는 방법은 배열을 분해할 때와 같다.</p>
<pre><code class="language-js">        let {title, width, height} = options;
        alert(title);
        alert(width);
        alert(height);</code></pre>
<p>나머지 요소도 똑같이 사용할 수 있다.</p>
<pre><code class="language-js">        let {title, ...rest} = options;
        alert(rest.width);
        alert(rest.height);</code></pre>
<br>

<h1 id="json과-메서드">JSON과 메서드</h1>
<hr>
<h2 id="json-javascript-object-notation">JSON (JavaScript Object Notation)</h2>
<p>json 포맷은 다음과 같다.</p>
<pre><code class="language-js"> {
    &quot;이름&quot;: &quot;홍길동&quot;,
    &quot;나이&quot;: 55,
    &quot;성별&quot;: &quot;남&quot;,
    &quot;주소&quot;: &quot;서울특별시 양천구 목동&quot;,
    &quot;특기&quot;: [&quot;검술&quot;, &quot;코딩&quot;],
    &quot;가족관계&quot;: {&quot;#&quot;: 2, &quot;아버지&quot;: &quot;홍판서&quot;, &quot;어머니&quot;: &quot;춘섬&quot;},
    &quot;회사&quot;: &quot;경기 수원시 팔달구 우만동&quot;
 }</code></pre>
<p>객체.</p>
<pre><code class="language-js">const myProfile =  {
    &quot;이름&quot;: &quot;홍길동&quot;,
    &quot;나이&quot;: 55,
    &quot;성별&quot;: &quot;남&quot;,
    &quot;주소&quot;: &quot;서울특별시 양천구 목동&quot;,
    &quot;특기&quot;: [&quot;검술&quot;, &quot;코딩&quot;],
    &quot;가족관계&quot;: {&quot;#&quot;: 2, &quot;아버지&quot;: &quot;홍판서&quot;, &quot;어머니&quot;: &quot;춘섬&quot;},
    &quot;회사&quot;: &quot;경기 수원시 팔달구 우만동&quot;
 }</code></pre>
<br>

<p>객체 데이터를 전송하고싶어.</p>
<p>송신 : 객체를 json 형태의 문자열로 보내자.</p>
<pre><code class="language-js">        let user = {
            name : &quot;SWP&quot;,
            age : 34,
            toString(){
                return `{
                    name:&quot;${this.name}&quot;,
                    age:&quot;${this.age}&quot;
                }`;
            }
        }
        alert(user) </code></pre>
<p>수신 : 문자열(json)을 객체로 바꿔서 사용하자.</p>
<p><img src="https://velog.velcdn.com/images/sunu_py/post/8dbc1e90-818d-4f14-9c00-7fc20683dc49/image.png" alt=""></p>
<p>객체를 매번 <code>toString()</code>메서드를 통해서 변경해주어야 할까?</p>
<h2 id="jsonstringify">JSON.stringify()</h2>
<ul>
<li>json은 값이나 객체를 나타내주는 범용 포맷이다.</li>
<li>본래 자바스크립트에서 사용할 목적으로 만들어진 포맷이다.</li>
<li>자바스크립트가 아닌 언어에서도 json을 충분히 다룰 수 있어서 json을 데이터 교환 목적으로 사용하는 경우가 많다.</li>
</ul>
<ul>
<li>JSON.stringify : 객체를 JSON으로 바꾸어준다.</li>
<li>JSON.parse : JSON을 객체로 바꾸어준다.</li>
</ul>
<pre><code class="language-js">        let user = {
            name : &quot;SWP&quot;,
            age : 34,
            isadmin : false,
            course : [&#39;javascript&#39;, &#39;node.js&#39;, &#39;react.js&#39;],
        }
        let json = JSON.stringify(user);</code></pre>
<p>전송하지는 못하니 출력해보자.</p>
<pre><code class="language-js">        alert(json);
        alert(typeof json);</code></pre>
<p>출력결과 : <code>{&quot;name&quot;:&quot;SWP&quot;,&quot;age&quot;:34,&quot;isadmin&quot;:false,&quot;course&quot;:[&quot;javascript&quot;,&quot;node.js&quot;,&quot;react.js&quot;]}</code>
<code>string</code></p>
<p>이번엔 위의 문자열을 수신했다고 생각하고, json을 객체로 변경해보자.</p>
<h2 id="jsonparse">JSON.parse()</h2>
<p><code>Json.parse()</code> 메서드 사용의 형태는 다음과 같다.</p>
<pre><code class="language-js">        let value = JSON.parse(문자열);</code></pre>
<p>이전에 수신한 문자열로 객체를 생성해보자.</p>
<pre><code class="language-js">        let obj = JSON.parse(json);</code></pre>
<p>잘 되었는지 출력해보자.</p>
<pre><code class="language-js">        alert(obj.name);
        alert(obj.age);
        alert(obj.isadmin);
        alert(obj.course);</code></pre>
<p>출력결과 : <code>SWP</code>, <code>34</code>, <code>false</code>, <code>javascript,node.js,react.js</code></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[React Native로 Hello World를 출력해보자.]]></title>
            <link>https://velog.io/@sunu_py/React-Native%EB%A1%9C-Hello-World%EB%A5%BC-%EC%B6%9C%EB%A0%A5%ED%95%B4%EB%B3%B4%EC%9E%90</link>
            <guid>https://velog.io/@sunu_py/React-Native%EB%A1%9C-Hello-World%EB%A5%BC-%EC%B6%9C%EB%A0%A5%ED%95%B4%EB%B3%B4%EC%9E%90</guid>
            <pubDate>Wed, 09 Nov 2022 07:46:12 GMT</pubDate>
            <description><![CDATA[<p><code>D:\node.js\ReactNative&gt;npm install -g expo-cli</code></p>
<p><code>D:\node.js\ReactNative&gt;expo init</code></p>
<p><code>What would you like to name your app? ... my-app</code></p>
<p><code>? Choose a template: » - Use arrow-keys. Return to submit.</code>
<code>----- Managed workflow -----</code>
<code>&gt;   blank               a minimal app as clean as an empty canvas</code> + <code>[enter]</code></p>
<p><code>D:\node.js\ReactNative\helloworld\my-app&gt;expo start</code>
<img src="https://velog.velcdn.com/images/sunu_py/post/c0948ae1-251f-4aa0-a133-7eb1cf125d7b/image.png" alt=""></p>
<p>App.js 파일을 약간 수정해보자.</p>
<pre><code class="language-js">import { StatusBar } from &#39;expo-status-bar&#39;;
import { StyleSheet, Text, View } from &#39;react-native&#39;;

export default function App() {
  return (
    &lt;View style={styles.container}&gt;
      &lt;Text style={styles.container}&gt;오! 그래놀라 단백질 바&lt;/Text&gt;
      &lt;Text style={styles.container}&gt;오! 그래놀라 단백질 바&lt;/Text&gt;
      &lt;Text style={styles.container}&gt;오! 그래놀라 단백질 바&lt;/Text&gt;
      &lt;Text style={styles.container}&gt;오! 그래놀라 단백질 바&lt;/Text&gt;
      &lt;Text style={styles.container}&gt;오! 그래놀라 단백질 바&lt;/Text&gt;
      &lt;StatusBar style=&quot;auto&quot; /&gt;
    &lt;/View&gt;
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: &#39;#fff&#39;,
    alignItems: &#39;center&#39;,
    justifyContent: &#39;center&#39;,
    fontSize: 40,
    textAlignVertical: &#39;center&#39;,
    fontWeight: &#39;bold&#39;,
    color: &#39;tomato&#39;
  },
});</code></pre>
<p>expo 어플을 설치하고</p>
<p><img src="https://velog.velcdn.com/images/sunu_py/post/17624b20-97a6-43cb-aecd-b0ab31e41089/image.PNG" alt=""></p>
<p>QR 코드로 연결하면,</p>
<p><img src="https://velog.velcdn.com/images/sunu_py/post/188c1b33-8082-4ecc-8df7-b1621c8bf01f/image.PNG" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Electron으로 Hello World를 출력해보자.]]></title>
            <link>https://velog.io/@sunu_py/Electron%EC%9C%BC%EB%A1%9C-Hello-World%EB%A5%BC-%EC%B6%9C%EB%A0%A5%ED%95%B4%EB%B3%B4%EC%9E%90</link>
            <guid>https://velog.io/@sunu_py/Electron%EC%9C%BC%EB%A1%9C-Hello-World%EB%A5%BC-%EC%B6%9C%EB%A0%A5%ED%95%B4%EB%B3%B4%EC%9E%90</guid>
            <pubDate>Wed, 09 Nov 2022 07:21:55 GMT</pubDate>
            <description><![CDATA[<p><code>D:\node.js\ELECTRON\helloworld&gt;npm install -g electron</code></p>
<p>package.json 파일 생성</p>
<pre><code class="language-js">{
    &quot;name&quot; : &quot;hello-world&quot;,
    &quot;version&quot; : &quot;1.0.0&quot;,
    &quot;main&quot; : &quot;main.js&quot;,
    &quot;scripts&quot; : {
        &quot;start&quot; : &quot;electron .&quot;
    }
}</code></pre>
<p>main.js 생성</p>
<pre><code class="language-js">const {app, BrowserWindow} = require(&#39;electron&#39;);

function createWindow(){
    let win = new BrowserWindow({
        width : 800,
        height : 600,
        webPreference : {
            NodeIntegration : true
        }
    })

    win.loadFile(&#39;./index.html&#39;);
}

app.on(&#39;ready&#39;, createWindow);</code></pre>
<p>index.html 작성</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Hello Electron&lt;/title&gt;
    &lt;style&gt;
        body{
            background-image: linear-gradient(45deg, #EAD790 0%, #EF8C53 100%);
            text-align: center;
        }
        button{
            background: rgba(0,0,0,0.40);
            box-shadow: 0px 0px 4px 0px rgba(0,0,0,0.5);
            border-radius: 8px;
            color: lime;
            padding: 1em 2em;
            border: none;
            font-family: &#39;Roboto&#39;, sans-serif;
            font-weight: 300;
            font-size: 20pt;
            position: relative;
            top: 40%;
            cursor: pointer;
            outline: none;
        }
        button:hover{
            background: rgba(0,0,0,0.3);
        }        
    &lt;/style&gt;
    &lt;link href=&quot;https://fonts.googleapis.com/css?family=Roboto:300&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;/&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;script&gt;
        function sayHello(){
            alert(&quot;hello Electron&quot;);
        }
    &lt;/script&gt;
    &lt;button onclick=&quot;sayHello()&quot;&gt;sayHello&lt;/button&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p><code>D:\node.js\ELECTRON\helloworld&gt;npm start</code></p>
<p><img src="https://velog.velcdn.com/images/sunu_py/post/58d00ad5-c0f9-46ab-8674-95d6af5dfdda/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/sunu_py/post/a77032d1-8c48-4343-abe9-ce0ed1d364d2/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[메서드와 this, 화살표 함수]]></title>
            <link>https://velog.io/@sunu_py/%EB%A9%94%EC%84%9C%EB%93%9C%EC%99%80-this-%ED%99%94%EC%82%B4%ED%91%9C%ED%95%A8%EC%88%98</link>
            <guid>https://velog.io/@sunu_py/%EB%A9%94%EC%84%9C%EB%93%9C%EC%99%80-this-%ED%99%94%EC%82%B4%ED%91%9C%ED%95%A8%EC%88%98</guid>
            <pubDate>Wed, 09 Nov 2022 05:23:07 GMT</pubDate>
            <description><![CDATA[<h1 id="메서드와-this">메서드와 this</h1>
<p><code>this</code> 메서드를 호출한 객체</p>
<pre><code class="language-js">        let user = {
            name : &quot;John&quot;,
            age : 30,
        }
        user.height = 199.9;    // 또는 user[height] = 199.9;
        user.say = function(){
            alert(&quot;Annyeonghaseo.&quot;);
        }   
        // 동적으로 프로퍼티 추가
        // say : 함수 포인터. 함수의 주소값을 say가 받음.</code></pre>
<pre><code class="language-js">        let user = {
            name : &quot;John&quot;,
            age : 30,
            say(){
                alert(this.name);      // == alert(user.name);
            }
        }</code></pre>
<pre><code class="language-js">        let admin = user;
        user = null;
        user.say();</code></pre>
<ul>
<li><p>자유로운 <code>this</code></p>
<pre><code class="language-js">      let user = {name : &quot;John&quot;};
      let admin = {name : &quot;Wick&quot;};

      function say(){
          alert(this.name);
      }</code></pre>
</li>
</ul>
<pre><code class="language-js">        user.age = 25;
        user.func = say;
        admin.func = say;</code></pre>
<pre><code class="language-js">        user.func();    // function say()의 this == user
        admin.func();   // function say()의 this == admin</code></pre>
<pre><code class="language-js">        user[&#39;func&#39;]();
        admin[&#39;func&#39;]();</code></pre>
<ul>
<li>화살표 함수 안에서의 <code>this</code>
일반함수 안에 있는 일반함수의 <code>this</code>는 작동하지 못함.<pre><code class="language-js">      let user = {
          name : &quot;Oliver&quot;,
          say(){
              function arrow(){
                  alert(this.name);
              }
              arrow();
          }
      };
      user.say();</code></pre>
화살표 함수 안에서의 <code>this</code>는 자신의 함수 상위에 있는 객체를 가리킨다.<pre><code class="language-js">      let user = {
          name : &quot;Oliver&quot;,
          say(){
              let arrow = () =&gt; {
                  alert(this.name);
              }
              arrow();
          }
      };
      user.say();</code></pre>
</li>
</ul>
<p><strong>객체</strong> -&gt; <strong>메서드 &amp; this</strong> -&gt; <strong>화살표 함수</strong> -&gt; 구조분해할당</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[javascript 객체]]></title>
            <link>https://velog.io/@sunu_py/javascript%EA%B0%9D%EC%B2%B4</link>
            <guid>https://velog.io/@sunu_py/javascript%EA%B0%9D%EC%B2%B4</guid>
            <pubDate>Wed, 09 Nov 2022 03:04:56 GMT</pubDate>
            <description><![CDATA[<p>key : value 방식으로 저장하고 읽어오는 데이터는
key를 참조하여 value를 가져올 수 있다.</p>
<p>점 표기법, 대괄호 표기법을 사용한다.</p>
<h2 id="계산된-프로퍼티">계산된 프로퍼티</h2>
<ul>
<li><p>객체를 만들 때 객체 리터럴 안의 프로퍼티 키가 대괄호로 둘러싸여 있는 경우 이를 계산된 프로퍼티(computed property)라고 부른다.</p>
<pre><code class="language-js">      let fruit = prompt(&quot;어떤 과일을 구매하시겠습니까?&quot;, &quot;apple&quot;);

      let bag = {
        [fruit] : 5    // 변수 fruit에서 프로퍼티 이름을 동적으로 받아 옵니다.
      };
      alert(bag.apple);    // fruit에 &quot;apple&quot;이 할당되었다면, 5가 출력됩니다.</code></pre>
</li>
<li><p>[fruit]은 프로퍼티 이름을 변수<code>fruit</code>에서 가져오겠다는 의미이다.</p>
</li>
<li><p>사용자 프롬프트에 apple을 입력했다면 bag엔 {apple : 5} 가 할당된다.</p>
</li>
</ul>
<h2 id="단축-프로퍼티">단축 프로퍼티</h2>
<ul>
<li><p>실무에서 프로퍼티 값을 기존 변수에서 받아와 사용하는 경우가 있다.</p>
<pre><code class="language-js">      function makeUser(name, age){
          return{
              name : name,
              age : age,
          }
      }
      let user = makeUser(&quot;SWP&quot;, 33);
      alert(user.name);</code></pre>
</li>
<li><p>프로퍼티들은 이름과 값이 변수의 이름과 동일</p>
</li>
<li><p>프로퍼티 값 단축 구문을 사용하면 코드를 짧게 줄일 수 있다.</p>
</li>
</ul>
<pre><code class="language-js">        function makeUser(name, age){
            return{
                name,
                age,
            }
        }
        let user = makeUser(&quot;SWP&quot;, 33);
        alert(user.name);</code></pre>
<h2 id="in-연산자로-프로퍼티-존재-여부-확인">&#39;in&#39; 연산자로 프로퍼티 존재 여부 확인</h2>
<ul>
<li>자바스크립트 객체는 다른 언어와 달리 존재하지 않는 프로퍼티에 접근해도 에러가 발생되지 않고, <code>undefined</code>를 반환한다.</li>
</ul>
<pre><code class="language-js">        let user = {};
        alert(user.noSuchProperty === undefined);
        // 반환되는 값 true는 프로퍼티가 &#39;존재하지 않음&#39;을 의미한다.</code></pre>
<ul>
<li><code>undefined</code>와 비교하는 것 이외에도 연산자 in을 사용하면 프로퍼티 존재 여부를 확인할 수 있다.</li>
</ul>
<pre><code class="language-js">        &quot;key&quot; in object</code></pre>
<pre><code class="language-js">        let user = {name : &quot;SWP&quot;, age : 33};

        alert(&quot;age&quot; in user);    // user.age가 존재하므로 true가 출력된다.
        alert(&quot;year&quot; in user);    // user.year는 존재하지 않기 때문에 false가 출력된다.</code></pre>
<ul>
<li><code>in</code> 왼쪽에는 반드시 프로퍼티 이름이 와야한다.</li>
</ul>
<p><code>undefined</code>인 value가 존재하는 경우와, 아무값도 존재하지 않는 경우가 헷갈릴 수 있다.</p>
<h1 id="참조에-의한-객체-복사">참조에 의한 객체 복사</h1>
<hr>
<h2 id="객체-기본">객체 기본</h2>
<ul>
<li>객체의 동작 방식</li>
<li>변수에는 객체가 저장되어 있는 메모리 주소인 객체에 대한 참조값이 저장된다.</li>
<li>객체는 메모리 내 어딘가에 저장되고 변수 user엔 객체를 참조할 수 있는 값이 저장된다.<pre><code class="language-js">      let user = {
        name : &quot;John&quot;
      };</code></pre>
C에서 배웠던 call by value와 <strong>call by reference</strong>를 떠올리면 이해하기 쉽다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sunu_py/post/a855cc6b-bf25-4dd3-8ca5-53624fe96b1e/image.png" alt=""></p>
<pre><code class="language-js">        let user = { name : &quot;John&quot; };

        let admin = user;    // 참조값을 복사함</code></pre>
<p>user가 가진 참조값(주소값)을 admin도 가지게 되고,
user와 admin 둘 다 name을 참조할 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/sunu_py/post/94ea6f25-7222-4df5-8cb4-b7b75b371fbe/image.png" alt=""></p>
<pre><code class="language-js">        admin.name = &quot;춘식&quot;;
        alert(user.name);</code></pre>
<p>복사된 <strong>admin</strong>의 참조값에 의해서 <strong>&#39;춘식&#39;</strong>이로 변경하고
원본 <strong>user</strong>의 참조값으로 변경된 사항을 확인해보면,
<strong>&#39;John&#39;</strong>이 이닌 <strong>&#39;춘식&#39;</strong>이 출력된다.</p>
<h1 id="화살표-함수-기본">화살표 함수 기본</h1>
<hr>
<h2 id="자바스크립트-기본">자바스크립트 기본</h2>
<p>*<em>ES6에 적용된 문법 중 하나
*</em></p>
<ul>
<li><p>화살표 함수 : 함수 표현식보다 단순하고 간결한 문법으로 함수를 제작한다.</p>
<pre><code class="language-js">      let func = (arg1, arg2, ... , argN) =&gt; expression</code></pre>
</li>
<li><p>func는 화살표 우측의 표현식(expression)을 평가하고 평가 결과를 반환한다.</p>
<pre><code class="language-js">      let sum = function(a, b){
        ...
        return a + b;
      }</code></pre>
<p>↓ ↓ ↓ 아래의 화살표 함수로 축약할 수 있다. </p>
<pre><code class="language-js">      let sum = (a, b) =&gt; {
        ...
        return a + b
      }</code></pre>
<p>↓ ↓ ↓ 함수의 정의가 단순한 경우,</p>
<pre><code class="language-js">      let sum = (a, b) =&gt; a + b;
      alert(sum(1, 2));    // 3</code></pre>
</li>
<li><p><code>(a,b) =&gt; a+b;</code> 는 실행되는 순간 표현식 <code>a+b</code>를 평가하고, 그 결과를 반환한다.</p>
</li>
</ul>
<br>

<p>인수(argument)가 한 개인 경우 괄호를 생략할 수 있다.</p>
<pre><code class="language-js">        const dbl = num =&gt; num * 2;</code></pre>
<p>인수가 없는 경우</p>
<pre><code class="language-js">        const nothing = () =&gt; alert(&quot;없음&quot;);</code></pre>
<br>

<p>화살표 함수 :</p>
<ol>
<li>function 키워드를 제거하고,</li>
<li>함수의 이름을 변수처럼 사용할 수 있다. (대입)</li>
</ol>
<pre><code class="language-js">        let age = prompt(&quot;나이를 입력하세요 : &quot;, 20);   // 20 : 디폴트값
        let welcome = (age &lt; 19)?
            function(){ alert(&quot;미성년자는 구매할 수 없습니다.&quot;); } : 
            function(){ alert(&quot;성인입니다.&quot;); }</code></pre>
<p>↓ ↓ ↓ 화살표 함수로 바꾸어보자.</p>
<pre><code class="language-js">        let welcome = (age &lt; 19)?
            () =&gt; { alert(&quot;미성년자는 구매할 수 없습니다.&quot;) } : 
            () =&gt; { alert(&quot;성인입니다..&quot;) }</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[Node.js 란?]]></title>
            <link>https://velog.io/@sunu_py/Node.js-%EB%9E%80</link>
            <guid>https://velog.io/@sunu_py/Node.js-%EB%9E%80</guid>
            <pubDate>Tue, 08 Nov 2022 08:47:52 GMT</pubDate>
            <description><![CDATA[<h1 id="11-nodejs의-정의">1.1 Node.js의 정의</h1>
<hr>
<h2 id="span-stylebackground-colorb4d0b11-nodejs의-정의span"><span style="background-color:#B4D0B1">1. Node.js의 정의</span></h2>
<ul>
<li>공식 홈페이지의 설명<ul>
<li>Node.js는 크롬 V8 자바스크립트 엔진으로 빌드된 <strong>자바스크립트 런타임</strong>입니다.</li>
</ul>
</li>
</ul>
<ul>
<li>Node.js는 서버가 아닌가요? 서버라는 말이 없네요.<ul>
<li>서버의 역할도 수행할 수 있는 자바스크립트 런타임.</li>
<li>Node.js를 이용해 자바스크립트로 작성된 서버를 실행할 수 있다.</li>
<li>서버 실행을 위해 필요한 http/https/http2 모듈을 제공한다.</li>
</ul>
</li>
</ul>
<blockquote>
<p>* <strong>자바스크립트 런타임</strong>이란? : 
런타임은 특정 언어로 만든 프로그램들을 실행할 수 있는 환경을 뜻합니다. 따라서 Node.js는 자바스크립트 프로그램을 컴퓨터에서 실행할 수 있습니다. 쉽게 말해 Node.js는 자바스크립트 실행기라고 봐도 무방합니다.</p>
</blockquote>
<br>

<h2 id="span-stylebackground-colorb4d0b12-런타임span"><span style="background-color:#B4D0B1">2. 런타임</span></h2>
<ul>
<li>Node.js  : 자바스크립트 런타임<ul>
<li>런타임 : 특정 언어로 만든 프로그램들을 실행할 수 있게 해주는 가상머신의 상태
* 가상머신 : 크롬의 V8 엔진을 사용한</li>
<li>따라서, Node.js는 자바스크립트로 만든 프로그램들을 실행할 수 있게 해준다.</li>
<li>다른 런타임으로는 웹 브라우저가 있다.</li>
<li>Node.js 이전에도 자바스크립트 런타임을 만들기 위한 시도들이 있었지만,
엔진 속도 문제로 실패했다.</li>
</ul>
</li>
</ul>
<br>

<h2 id="span-stylebackground-colorb4d0b13-내부-구조span"><span style="background-color:#B4D0B1">3. 내부 구조</span></h2>
<ul>
<li>2008년 V8 엔진 출시, 2009 Node.js 프로젝트 시작</li>
<li><strong>Node.js</strong>는 <strong>V8</strong>과 <strong>libuv</strong>를 내부적으로 포함한다.<ul>
<li><strong>V8 엔진</strong> : 오픈소스 자바스크립트 엔진 -&gt; 속도문제 개선</li>
<li><strong>libuv</strong> : Node.js의 특성인 이벤트기반, 논블로킹 I/O 모델을 구현한 라이브러리</li>
</ul>
</li>
</ul>
<p>   <img src="https://velog.velcdn.com/images/sunu_py/post/eac83c6c-7f44-471f-a035-2e2d7d892398/image.png" alt=""></p>
<br>


<h1 id="12-nodejs의-특성">1.2 Node.js의 특성</h1>
<hr>
<h2 id="span-stylebackground-colorb4d0b11-이벤트-기반span"><span style="background-color:#B4D0B1">1. 이벤트 기반</span></h2>
<ul>
<li><strong>이벤트가 발생</strong>할 때 미리 지정해둔 작업(<strong>콜백함수</strong>)을 <strong>수행하는 방식</strong><ul>
<li>이벤트의 예 : 클릭, 네트워크 요청, 타이머 등</li>
<li>이벤트 리스너 : 이벤트를 등록하는 함수</li>
<li>콜백 함수 : 이벤트가 발생했을 때 실행될 함수</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sunu_py/post/4b924d97-35da-4af7-9ff4-550a7748a0f8/image.png" alt=""></p>
<h2 id="2-span-stylebackground-colorb4d0b1논블로킹-iospan">2. <span style="background-color:#B4D0B1">논블로킹 I/O</span></h2>
<ul>
<li><em><strong>논 블로킹</strong></em> : 오래걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래걸리는 함수를 실행하는 방식<ul>
<li><em><strong>논 블로킹</strong></em> 방식 하에서 <strong>*<em>일부 코드</em></strong>는 백그라운드에서 병렬로 실행된다.</li>
<li><strong>*<em>일부 코드</em></strong> : I/O 작업(파일 시스템 접근, 네트워크 요청), 압축, 암호화 등</li>
<li>나머지 코드는 블로킹 방식으로 실행된다.</li>
<li>따라서, <strong>I/O 작업이 많을 때 Node.js의 활용이 극대화</strong>된다.</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sunu_py/post/b80b5fe0-f724-403a-9737-174c5c20cda4/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[버블 정렬 Bubble Sort]]></title>
            <link>https://velog.io/@sunu_py/%EB%B2%84%EB%B8%94-%EC%A0%95%EB%A0%AC-Bubble-Sort</link>
            <guid>https://velog.io/@sunu_py/%EB%B2%84%EB%B8%94-%EC%A0%95%EB%A0%AC-Bubble-Sort</guid>
            <pubDate>Mon, 19 Sep 2022 14:08:08 GMT</pubDate>
            <description><![CDATA[<h1 id="버블-정렬">버블 정렬</h1>
<hr>
<h2 id="정렬이란">정렬이란</h2>
<ul>
<li>임의의 자료 집합을 일정한 기준에 따라 나열하는 것이다.</li>
<li>자료의 작은 것을 먼저 나열하는 것을 오름차순이라고 한다.</li>
<li>자료의 큰것을 먼저 나열하는 것을 내림차순이라고 한다.</li>
<li>정렬의 원리는 레코드의 키들을 비교해보고 순서를 바꿀 필요가 있는 레코드를 정렬이 완료될 때 까지 반복한다.</li>
<li>가장 간단한 정렬 알고리즘이 버블 정렬이다.</li>
<li>버블 정렬은 레코드의 선두부터 인접 요소를 비교하여
큰 값을 뒤로 보내는 방식으로 정렬한다.</li>
</ul>
<hr>
<h2 id="버블정렬-알고리즘-문제">버블정렬 알고리즘 문제</h2>
<p>선생님은 학생들을 모두 앞으로 나오게 하여 무작위로 일렬로 세웠다.
키가 들쑥날쑥하여 일정하지 않다.
이제 선생님은 이 학생들의 키를 재고, 키 순서대로인 오름차순으로 번호를 부여하려 한다.</p>
<h4 id="프로젝트를-생성하여-다음의-과정을-거쳐서-키-순서대로-만드는-알고리즘을-작성해보자">프로젝트를 생성하여 다음의 과정을 거쳐서 키 순서대로 만드는 알고리즘을 작성해보자.</h4>
<p>입력한 키 데이터들이, 교환이 수행될 때마다 현재의 키 데이터의 순서를 출력한다.</p>
<h3 id="입력">입력</h3>
<ul>
<li>입력할 키 데이터를 프로그램 콘솔 키보드로부터 입력 받는다.</li>
<li>입력할 키 데이터는 정수형으로 6개만 입력한다.</li>
</ul>
<h3 id="출력">출력</h3>
<ul>
<li>입력한 키 데이터에 따른 정렬 결과를 프로그램 콘솔 터미널에 출력한다.</li>
<li>입력한 키 데이터들이 교환이 수행될 때마다 현재의 키 데이터의 순서를 출력한다.</li>
</ul>
<h3 id="실행예시">실행예시</h3>
<p>TestCase는 다음과 같다.</p>
<p>입력값 : 143 134 137 132 140 134</p>
<p>다음과 같이 출력한다.</p>
<p><img src="https://velog.velcdn.com/images/sunu_py/post/55b177c8-5d41-4cfc-a4c2-519291a675c3/image.png" alt=""></p>
<hr>
<h3 id="한-줄-한-줄-해보기">한 줄, 한 줄 해보기</h3>
<pre><code class="language-c">#include &lt;iostream&gt;
using namespace std;

void bubble(int* pArr, int num) {
    cout &lt;&lt; &quot;정렬 시작&quot; &lt;&lt; endl;
    for (int x = 0; x &lt; num - 1; x++) {
        for (int i = x; i &lt; num - 1; i++) {
            int temp = 0;
            if (pArr[i - x] &gt; pArr[i - x + 1]) {
                temp = pArr[i - x];
                pArr[i - x] = pArr[i - x + 1];
                pArr[i - x + 1] = temp;
            }
        }
        for (int i = 0; i &lt; num; i++) {             // 교환 과정 출력
            cout &lt;&lt; pArr[i] &lt;&lt; &quot; &quot;;
        }
        cout &lt;&lt; endl;
    }
    cout &lt;&lt; &quot;정렬된 키 순서&quot; &lt;&lt; endl;
    for (int i = 0; i &lt; num; i++) {
        cout &lt;&lt; pArr[i] &lt;&lt; &quot; &quot;;
    }
}

void main() {
    int* height = 0;
    int num = 0;
    cout &lt;&lt; &quot;학생 수를 입력하세요.&quot; &lt;&lt; endl;        // 배열의 길이 입력
    cin &gt;&gt; num;
    height = new int[num];
    for (int i = 0; i &lt; num; i++) {
        height[i] = 0;
    }
    cout &lt;&lt; &quot;학생들의 키를 입력하세요.&quot; &lt;&lt; endl;    // 키 데이터 입력
    for (int i = 0; i &lt; num; i++) {
        cin &gt;&gt; height[i];
    }
    cout &lt;&lt; &quot;입력된 학생들의 키&quot; &lt;&lt; endl;            // 입력된 값 확인
    for (int i = 0; i &lt; num; i++) {
        cout &lt;&lt; height[i] &lt;&lt; &quot; &quot;;
    }
    cout &lt;&lt; endl;

    bubble(height, num);
    delete[] height;
}</code></pre>
<p>문제에서는 정수형 데이터 6개를 입력하게 했지만,
역시 일반화 시키는게 재밌을 것 같아서 배열의 길이를 입력받도록 해봤다.
정리하다보니 잘... 해보면 데이터 개수를 미리 입력받지 않고, 
무작위로 데이터를 입력한 뒤에 배열의 길이를 잴 수 있지 않았을까?</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[반복문]]></title>
            <link>https://velog.io/@sunu_py/%EB%B0%98%EB%B3%B5%EB%AC%B8</link>
            <guid>https://velog.io/@sunu_py/%EB%B0%98%EB%B3%B5%EB%AC%B8</guid>
            <pubDate>Mon, 19 Sep 2022 13:01:15 GMT</pubDate>
            <description><![CDATA[<h1 id="for문">for문</h1>
<hr>
<h2 id="for문의-기본원리">for문의 기본원리</h2>
<h3 id="--for문의-형식">- for문의 형식</h3>
<pre><code class="language-py">for 변수 in range(시작값, 끝값, 증가값):
    반복할 문장</code></pre>
<h4 id="--for문은-range-함수와-함께-사용">- for문은 range() 함수와 함께 사용</h4>
<ul>
<li><p>시작값, 끝값, 증가값을 대입</p>
<p>  &lt; 그림. for문의 형식 &gt;</p>
</li>
</ul>
<p>range(0, 5, 1) -&gt; [0, 1, 2, 3, 4]
시작값은 0, 끝 값은 포함되지 않고, 1씩 증가한다.</p>
<p><del>range 함수의 매개변수 개수에 따른 의미를 알아보자</del></p>
<h3 id="--for문-소스코드">- for문 소스코드</h3>
<pre><code class="language-py">for num in range(0, 5, 1):
    print(num, &quot;: Programming&quot;)</code></pre>
<h2 id="for문의-기본-활용">for문의 기본 활용</h2>
<h4 id="--반복문은-지구의-자전-주기와-비슷하다">- 반복문은 지구의 자전 주기와 비슷하다.</h4>
<h4 id="--지구의-한-바퀴-자전이-반복문-1번-수행과-같고-1번-수행-시-날짜가-1-증가한다">- 지구의 한 바퀴 자전이 반복문 1번 수행과 같고, 1번 수행 시 날짜가 1 증가한다.</h4>
<pre><code class="language-py">for i in range(1, 366, 1):
    print(i, &quot;일 지났습니다.&quot;)</code></pre>
<p>연습) 1부터 100까지의 짝수의 합</p>
<pre><code class="language-py">sum = 0
for num in range(2, 101, 2):
    sum += num
print(sum)</code></pre>
<p>연습) 숫자 맞추기?</p>
<pre><code class="language-py">favorite = int(input(&#39;내가 가장 좋아하는 숫자는?&#39;))

start = int(input(&#39;범위 시작 값 : &#39;))
end = int(input(&#39;범위 끝 값 : &#39;))

for num in range(start, end, 1):
    if (favorite == num):
        print(&#39;내가 좋아하는 숫자가 있습니다.&#39;)</code></pre>
<h2 id="구구단-출력하기">구구단 출력하기</h2>
<ul>
<li>구구단 2단 출력</li>
<li>반복되는 포인트 찾기
<img src="https://velog.velcdn.com/images/sunu_py/post/d822a031-f22b-48c7-ba6c-5be5af6b3c5c/image.png" alt=""></li>
</ul>
<h3 id="연습-구구단-2단">연습) 구구단 2단</h3>
<pre><code class="language-py">for x in range(1, 10, 1):
    print(&quot;2 곱하기&quot;, x, &quot;은&quot;, 2*x)</code></pre>
<pre><code class="language-py">for val in range(1,10, 1):
    print(&quot;2 곱하기 %d 는 %d&quot; % (val, 2*val)) 
    # 서식문자를 사용한 출력도 해보자</code></pre>
<p>맘대로 추가 연습) 구구단 2단부터 9단까지 출력하기</p>
<pre><code class="language-py">for x in range(2, 10):
    for y in range(1, 10):
        print(x, &quot;곱하기&quot;, y, &quot;는&quot;, x * y)
      # print(&quot;%d 곱하기 %d 는 %d&quot; % (x, y, x*y))</code></pre>
<p>추가의 추가 연습) 원하는 구구단 출력하기</p>
<pre><code class="language-py">table = int(input(&#39;원하는 단을 입력하세요\n&#39;))

for x in range(1, 10):
        print(table, &quot;곱하기&quot;, x, &quot;는&quot;, table*x)
        # print(&quot;%d 곱하기 %d 는 %d&quot; % (table, x, table*x))</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[C언어의 기본 구조 220818 ]]></title>
            <link>https://velog.io/@sunu_py/C%EC%96%B8%EC%96%B4-220816</link>
            <guid>https://velog.io/@sunu_py/C%EC%96%B8%EC%96%B4-220816</guid>
            <pubDate>Sat, 17 Sep 2022 12:35:31 GMT</pubDate>
            <description><![CDATA[<h5 id="--빌드-build-란-컴파일과-링크의-과정을-진행하는-것">- 빌드 Build 란? <del>컴파일과 링크의 과정을 진행하는 것</del></h5>
<hr>
<h1 id="c언어의-기본-구조">C언어의 기본 구조</h1>
<hr>
<h2 id="include-stdioh">#include &lt;stdio.h&gt;</h2>
<pre><code class="language-c">#include &lt;stdio.h&gt;</code></pre>
<h3 id="--stdioh">- &lt;stdio.h&gt;</h3>
<ul>
<li>.h : 헤더 파일이라 부른다.</li>
<li>stdio.h 를 포함하겠다는 의미이다.</li>
<li>stdio.h 를 포함하지 않으면 printf 함수를 사용할 수 없다.</li>
<li>printf 에 대한 코드가 stdio.h 파일에 선언되어 있기 때문에 include 해야 사용할 수 있다.</li>
</ul>
<blockquote>
<p>stdio.h : Standard Input/Output library
(표준입출력 라이브러리)의 약어이다.</p>
</blockquote>
<ul>
<li>헤더파일 열어보기.
 stdio.h에 마우스 커서 올리고 F12</li>
</ul>
<h2 id="c언어의-기본-구성요소는-함수이다">C언어의 기본 구성요소는 함수이다.</h2>
<ul>
<li><p>수학에서의 함수 형태
<code>y = f(x)</code></p>
</li>
<li><p>C언어에서의 함수 형태</p>
<pre><code class="language-c">int main(공백)
{
</code></pre>
</li>
</ul>
<p>}</p>
<pre><code>   \- f( ) : main
   \- x : &#39;공백&#39;에 들어갈 무언가
   \- y : int
   \- 함수의 영역은 &#39;{&#39; 와 &#39;}&#39; 사이에 함수의 정의를 한다.

&lt;br&gt;

- 사용자 정의 함수와 표준 함수를 사용한다.

- &lt;span style=&quot;background-color:#A0D9BE&quot;&gt;표준함수&lt;/span&gt; : 라이브러리에 포함되어있는 함수

- &lt;span style=&quot;background-color:#A0D9BE&quot;&gt;사용자 정의 함수&lt;/span&gt; : 표준함수를 기반으로 **내가 만드는** 함수

## 문장의 끝 세미콜론 &#39;;&#39;
- C언어의 문장들은 마칠때 반드시 세미콜론을 찍어주어야 한다.
- 단, 전처리기는 예외이다.
``` c
#include &lt;stdio.h&gt;

int main() 
{
    printf(&quot;hello world\n&quot;);
    return 0;
}</code></pre><ul>
<li>위의 예문에서 <code>printf()</code> 끝에 세미콜론이 없으면 컴파일러가 <code>return 0;</code>까지 한 문장으로 해석하여 오류가 발생한다.</li>
</ul>
<br>

<h2 id="리턴값에-관하여">리턴값에 관하여</h2>
<pre><code class="language-c">    return 0;</code></pre>
<ul>
<li><h4 id="0-을-return-하는-이유"><code>0</code> 을 <code>return</code> 하는 이유</h4>
<ul>
<li><code>return</code> 값 <code>0</code> 자체의 의미는 없다.</li>
<li>함수의 수행이 끝남을 의미한다.</li>
<li><code>return</code>은 함수 안에서 쓰이기 때문에
<code>return</code>이 보이면 함수가 끝난다고 생각하면 된다.</li>
</ul>
</li>
</ul>
<h2 id="주석문을-사용하자">주석문을 사용하자</h2>
<h3 id="--주석문을-사용하는-이유">- 주석문을 사용하는 이유</h3>
<ul>
<li>어떤단어나 문장에 대한 구체적인 부연 설명</li>
<li>프로그래밍에서 주석 필수<blockquote>
<p>초보일수록 코딩에 방해가 되지 않는 선에서 많이 써야한다.
협업할 때도 다른 사람에게 설명해야하니까 잘 써야한다.
나도 잊어버릴 수 있으므로 나를 위해서라도 쓰자.</p>
</blockquote>
</li>
</ul>
<h3 id="--짧은-문장의-주석문-처리">- 짧은 문장의 주석문 처리</h3>
<pre><code class="language-c">#include&lt;stdio.h&gt;

int main() {
    printf(&quot;hello world\n&quot;); //Hello World 문자열을 출력한다.
    return 0;
}</code></pre>
<h4 id="--주석이-짧은-문장일-경우--기호를-사용한다">- 주석이 짧은 문장일 경우 &#39;//&#39; 기호를 사용한다.</h4>
<ul>
<li>컴파일러가 &#39;//&#39; 뒷 부분은 해석하지 않는다.</li>
</ul>
<h3 id="--긴-문장의-주석문-처리">- 긴 문장의 주석문 처리</h3>
<pre><code class="language-c">#include&lt;stdio.h&gt;

/*
날짜 : 2022.08.18
작성자 : 박선우
설명 : main() 함수 구현
*/

int main() {
          printf(&quot;hello world\n&quot;); //Hello World 문자열을 출력한다.
          return 0;
}

/* 열고
닫음 */ 
</code></pre>
<ul>
<li>주석을 기록의 용도로도 쓰기도 하지만,</li>
<li>짧은 한 두줄의 코드를 주석 // 으로 막아서 일부 기능만 테스트해보는 용도로도 사용한다.</li>
<li><del>긴 줄의 코드는 툴바에서 찾아 씀 (도움말 아래에)</del></li>
</ul>
]]></description>
        </item>
    </channel>
</rss>