<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>nevergettingold.log</title>
        <link>https://velog.io/</link>
        <description>개발되는 중입니다.</description>
        <lastBuildDate>Mon, 08 Aug 2022 05:36:29 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>nevergettingold.log</title>
            <url>https://images.velog.io/images/ne_ol/profile/bc69b4d8-71b4-4779-bcf9-580285a92e81/IMG_6982.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. nevergettingold.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/ne_ol" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[항해99로 완전히 바뀐 나의 삶(스파르타부트캠프 항해99 수료 후기)]]></title>
            <link>https://velog.io/@ne_ol/%ED%95%AD%ED%95%B499%EB%A1%9C-%EC%99%84%EC%A0%84%ED%9E%88-%EB%B0%94%EB%80%90-%EB%82%98%EC%9D%98-%EC%82%B6</link>
            <guid>https://velog.io/@ne_ol/%ED%95%AD%ED%95%B499%EB%A1%9C-%EC%99%84%EC%A0%84%ED%9E%88-%EB%B0%94%EB%80%90-%EB%82%98%EC%9D%98-%EC%82%B6</guid>
            <pubDate>Mon, 08 Aug 2022 05:36:29 GMT</pubDate>
            <description><![CDATA[<h1 id="항해99-전의-삶">항해99 전의 삶</h1>
<h2 id="그냥-대기업-사원">&#39;그냥&#39; 대기업 사원</h2>
<p>소제목에서 알 수 있듯이, 나는 진부할 수도 있는 스토리를 가지고 있는 사람이다. 대기업을 다니다가, 이런저런 회의감을 느끼고 그만둔 MZ세대, 중 한 명이라는 뜻이다.
그렇다, 마냥 대기업을 목표로 삼고 취업 준비를 했었고, 실제로 555일 동안 대기업인 회사를 다녔다. 
그래서 555일 동안 뭐했냐고? 요약하자면 오로지 &#39;돈&#39;을 벌기 위해 회사를 다녔다고 할 수 있겠다.
퇴사의 이유에는 여러 가지가 있었지만, <strong>무엇보다 회사에서 흘러가는 나의 시간을 &#39;돈&#39;이 아닌 다른 목적을 가진, &#39;일&#39;에 쓰고 싶었다.</strong></p>
<h1 id="코딩부트캠프-항해99를-선택한-이유">코딩부트캠프 항해99를 선택한 이유</h1>
<p>퇴사하고 디자인과 코딩을 공부하다가 프론트엔드 개발자가 적성에 맞을 것 같아서 코딩부트캠프를 알아봤다.</p>
<h2 id="지인-추천">지인 추천</h2>
<p>나와 비슷한 인생의 길을 미리 걸었던 선배에게 (3년차 개발자) 조언을 구했다. 사실 그 형이 한 말 중에 가장 중요했던 말은 &#39;야, 어딜 가나 똑같아. 너 하기 나름이지.&#39; 였다. 하지만 나는 어쨌든 하나의 부트캠프를 선택해야만 하는 상황이었고 그 형의 지인 중 스타트업 신입 개발자 면접을 보러 다니시는 분이 항해99 수료생들을 칭찬했다고 하여, 항해99를 알아보기 시작했다.</p>
<h2 id="비용">비용</h2>
<p>일단 항해99의 금액은 타 부트캠프와 비교하면 절대적으로 저렴했다. 개발자를 준비하는 시간도 비교적 짧기도 했다.</p>
<h2 id="자기주도적--협업-중심-커리큘럼">자기주도적 / 협업 중심 커리큘럼</h2>
<p>또한 여러 프로젝트들을 과제로 주고, 필요할 때만 매니저들의 케어로 자기주도적 성장을 유도하는 것이 마음에 들었다. 이를 통해 신입 개발자들의 필수 역량이라고 알고 있는 협업과 소통 능력을 향상 시킬 수 있을 거라고 생각했다.</p>
<h1 id="항해99-아쉬울-수-있는-점">항해99 아쉬울 수 있는 점</h1>
<h2 id="자기주도적-성장이-가질-수밖에-없는-양날의-칼">&#39;자기주도적 성장&#39;이 가질 수밖에 없는 양날의 칼</h2>
<p>항해99를 하며 느낀 거지만, 앞서 말한 자기주도적 성장은 개인마다 다르게 적용했다. 
같은 과제를 해도, 같은 팀으로서 같은 목표를 가지고 협업을 해도, 개개인이 가지는 마음가짐은 다르기 때문이다. 누군가의 리드 하에 자기가 맡은 일만 하면 된다는 마음가짐이 있을 수 있고, 자기가 맡은 일은 당연히 잘하면서 보다 좋은 성과를 내기 위해 절대적인 시간을 투자해 노력하려는 마음가짐이 있을 수 있다. 
나는 개인적으로 후자를 가지고 항해99를 수료했고, 따라서 당연하게도 항해99에 굉장히 만족했다.
*<em>나처럼 오로지 좋은 경험만 하고 수료하신 분들도 있는 반면, 항해99를 하면서 여러가지 이유 중 항해99의 시스템이 마음에 들지 않아서 중도에 하차하신 분들도 있다. *</em>
내가 생각했을 때 이분들이 공통적으로 불만을 느낀 근본적인 원인은, 항해99는 수강생들이 스스로 성장할 수 있는 커리큘럼을 가지고 있다는 것이다. 물론 반마다 매니저가 있고 많은 리소스를 들여 케어를 하고 있다. 
하지만 &#39;자기주도적 성장&#39;을 지향하는 이 부트캠프는 무료가 아니다. 상대적으로 타 부트캠프들 보다 저렴한 가격을 유지하고 있지만 400만 원이 땅 파서 나오는 돈은 아니기 때문이다.
이러한 &#39;돈&#39;에서 시작되는 문제에 나의 생각은 조금 다르다는 것을 간단하게 설명해보겠다.</p>
<p>삶 = 시간
시간 = 돈
따라서 삶 = 돈.
어떠한 삶이 건강한 삶인가?
모두가 동의하겠지만 자기주도적인 삶이다.
주어진 삶 혹은 시간을 살아가고 있는 우리는, 매 순간마다 돈을 쓰고 있다고 생각하면 된다. 
즉, 자기주도적인 삶을 살고 있지 않거나 살려고 하지 않는다는 것은, 남들 혹은 자신의 환경 탓만 하며 시간(=돈)을 소비하고 있다는 것이다.
어느 삶을 살든 고민은 있고, 어느 일을 하든 힘든 점은 있다.
모든 것은 자신에게 달려있다.</p>
<p>따라서 자기가 최소한의 지도하에라도 자신의 도전을 진실하게 평가하고 싶다면, 항해99를 추천한다.</p>
<h1 id="항해99-수료-후의-삶">항해99 수료 후의 삶</h1>
<h2 id="돈-만이-이유가-아닌-회사">&#39;돈&#39; 만이 이유가 아닌 회사</h2>
<p><strong>나는 현재 IT 스타트업을 다니고 있다.</strong> 일이 많아서 야근도 많이 하고 보수도 전 회사에 비해서 현저히 적다. 하지만 &#39;돈&#39;을 위해서가 아닌 내가 진정으로 하고 싶은 일을 재미있게 하면서 다니고 있다. </p>
<h2 id="일">&#39;일&#39;</h2>
<p>일이 하고 싶었고, 그 일을 잘하고 있다. 항해99 덕분에.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[항해99 5기 (정규 트랙)_8주차 WIL]]></title>
            <link>https://velog.io/@ne_ol/%ED%95%AD%ED%95%B499-5%EA%B8%B0-%EC%A0%95%EA%B7%9C-%ED%8A%B8%EB%9E%998%EC%A3%BC%EC%B0%A8-WIL</link>
            <guid>https://velog.io/@ne_ol/%ED%95%AD%ED%95%B499-5%EA%B8%B0-%EC%A0%95%EA%B7%9C-%ED%8A%B8%EB%9E%998%EC%A3%BC%EC%B0%A8-WIL</guid>
            <pubDate>Sun, 06 Mar 2022 14:18:02 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/ne_ol/post/c758648e-a719-4196-a2dc-0a56349b92f0/Screen%20Shot%202022-03-06%20at%2011.05.59%20PM.png" alt=""></p>
<h2 id="chapter-6-실전-프로젝트-220225">Chapter 6. 실전 프로젝트 (220225~)</h2>
<ul>
<li>1주일 동안 프로젝트 기획만 했다. 기획 아이디어만 열 개 정도 나왔던 것 같다. 그중에 하루를 꼬박 들여서 디벨롭 했다가 엎어진 것들도 있다. 모든 팀원들이 하나의 아이디어에 만족하는 것도 어려웠지만, 무엇보다 기획하는 과정 자체가 힘들었던 것 같다. 저번 주 금요일부터 이번 주 목요일까지 정말 쉬지 않고 미팅만 했던 것 같다. 그래도 기획이 끝나고 코딩을 시작하니까 힘이 좀 났다. 나는 fabric.js라는 라이브러리를 집중적으로 맡게 되었는데, 처음 접하는 라이브러리고 워낙 React에서의 구현 참고 자료들이 많이 없어서 걱정이다. 하지만 하나씩 해결해나가고 있고, 기대 이상의 퍼포먼스를 만들기 위해 노력할 것이다. 사실 기획이 끝나고 코딩을 시작한 지 얼마 되지 않아서 다들 이제 막 코딩할 틀을 잡고 중요 기능들의 구현을 테스트하고 있는 단계지만, 정말 기대가 된다. 내일부터 또 달려야지</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[항해99 5기 (정규 트랙)_7주차 WIL]]></title>
            <link>https://velog.io/@ne_ol/%ED%95%AD%ED%95%B499-5%EA%B8%B0-%EC%A0%95%EA%B7%9C-%ED%8A%B8%EB%9E%997%EC%A3%BC%EC%B0%A8-WIL</link>
            <guid>https://velog.io/@ne_ol/%ED%95%AD%ED%95%B499-5%EA%B8%B0-%EC%A0%95%EA%B7%9C-%ED%8A%B8%EB%9E%997%EC%A3%BC%EC%B0%A8-WIL</guid>
            <pubDate>Sun, 27 Feb 2022 09:05:24 GMT</pubDate>
            <description><![CDATA[<h1 id="1-what-i-did">1. What I did</h1>
<p><img src="https://images.velog.io/images/ne_ol/post/69090161-10a2-4028-8fa0-76e48178ad13/Screen%20Shot%202022-02-27%20at%205.34.22%20PM.png" alt=""></p>
<h2 id="1-chapter-5-주특기-클론-코딩">1. Chapter 5. (주특기) 클론 코딩</h2>
<ul>
<li>기간: 2022년 2월 18일 (금) @ 09:00 ~ 2022년 2월 24일 (목) @ 19:00</li>
<li>서비스: 마켓 컬리</li>
<li>Github: <a href="https://github.com/hyejin4169/react_marketkurly_clone">https://github.com/hyejin4169/react_marketkurly_clone</a><h3 id="1-this-weeks-keyword-">1. This week&#39;s keyword: ?</h3>
</li>
<li>useEffect로 axios (get) 요청을 하기 전에 redux에서 state값을 불러오는 것에 있어서 어려움이 있었다. 처음에는 useEffect는 해당 component의 렌더링이 끝나고 실행되기 때문에, component가 렌더링 되는 시점에 useEffect로 불러오는 data가 필요한 경우에는 사전에 그 data가 필요할 거라고 판단했다. (에러가 계속 떴기 때문에) 하지만 알고보니 useEffect로 data를 불러오기 전에 비어있던 list (배열) 에 reduce를 실행했기 때문이었다. &quot;배열이 비어있는데 initialValue도 제공하지 않으면 TypeError가 발생합니다.&quot; (<a href="https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce">MDN</a>) 즉 초기값을 0으로 설정하지 않아서 component가 렌더링 될 때 에러가 계속 떴던 것이다. </li>
<li>다른 아이템에서 get reducer 를 사용할 때, 전 아이템에서 get reducer로 불러왔던 data들이 뷰에 뜨는 에러가 발생했는데 이는 state 값에서 중복처리를 안해줘서 발생한 에러였다.</li>
</ul>
<h2 id="2-chapter-6-실전-프로젝트">2. Chapter 6. 실전 프로젝트</h2>
<ul>
<li>기간: 2022년 2월 25일 (금) @ 09:00 ~ </li>
<li>기획 단계에서 차질이 자꾸 생긴다..잘할 수 있겠지..?</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[항해99 5기 CS Study - 9장 웹 브라우저]]></title>
            <link>https://velog.io/@ne_ol/%ED%95%AD%ED%95%B499-5%EA%B8%B0-CS-Study-9%EC%9E%A5-%EC%9B%B9-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80</link>
            <guid>https://velog.io/@ne_ol/%ED%95%AD%ED%95%B499-5%EA%B8%B0-CS-Study-9%EC%9E%A5-%EC%9B%B9-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80</guid>
            <pubDate>Sun, 20 Feb 2022 15:15:30 GMT</pubDate>
            <description><![CDATA[<h1 id="3-html-문서">3. HTML 문서</h1>
<ul>
<li>최초의 웹 페이지</li>
<li>Hypertext 활용<ul>
<li>다른 대상에 대한 링크가 들어있는 텍스트 <img src="https://images.velog.io/images/ne_ol/post/7699de85-f39b-45fb-a1a7-7fce67fe6a35/Screen%20Shot%202022-02-20%20at%2011.52.05%20PM.png" width="80%">
<img src="https://images.velog.io/images/ne_ol/post/1ebeff35-e551-4819-b646-0fd9a1353374/Screen%20Shot%202022-02-20%20at%2011.52.09%20PM.png" width="80%"></li>
<li>HTML의 부등호 (&lt;&gt;)<ul>
<li>마크업 엘리먼트를 시작</li>
<li>시작 <tag> + 끝 </tag><ul>
<li>끝 </tag> 필요없는 tag 존재!</li>
</ul>
</li>
<li>tag는 브라우저가 마크업 엘리먼트를 어떻게 해석할지 결정<ul>
<li><code>&lt;b&gt;</code>와 <code>&lt;big&gt;</code> 은 &quot;Cool!&quot; 의 굵기 (bold) 와 큰 글꼴 (big) 으로 표시</li>
</ul>
</li>
<li>부등호의 기능을 빼았기 위해서 -&gt; 엔티티 참조 사용: <code>&amp;lt;</code></li>
<li>tag의 attribute 요소 포함 가능!<ul>
<li>class를 제외하면 모든 attribute은 똑같이 (문자열) 취급!</li>
<li>class는 공백으로 서로 분리된 값의 리스트로 취급!<img src="https://images.velog.io/images/ne_ol/post/816b1175-bb65-49b8-bad7-4da76080291f/Screen%20Shot%202022-02-20%20at%2011.58.08%20PM.png" width="80%">

</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h1 id="4-dom-문서-객체-모델">4. DOM: 문서 객체 모델</h1>
<ul>
<li>웹 브라우저는 문서를 문서 객체 모델 (DOM, Document Object Model)에 따라 처리</li>
<li>DOM: 메모리에 웹 페이지 문서 구조를 표현함으로써 스크립트 및 프로그래밍 언어와 페이지를 연결 (<a href="https://developer.mozilla.org/ko/docs/Web/API/Document_Object_Model">MDN</a>)<img src="https://images.velog.io/images/ne_ol/post/11842e09-72a6-4e88-b92a-a93505c67720/Screen%20Shot%202022-02-21%20at%2012.01.38%20AM.png" width="80%">
<img src="https://images.velog.io/images/ne_ol/post/931e77bf-b012-41c2-9dcd-13beb89ab46d/Screen%20Shot%202022-02-21%20at%2012.01.53%20AM.png" width="80%">

</li>
</ul>
<h2 id="1-트리-관련-용어">1. 트리 관련 용어</h2>
<ul>
<li>트리의 노드는 순서가 정해져 있다.<ul>
<li>html 첫 번째 자식: head</li>
<li>html 두 번째 as 마지막 자식: body<img src="https://images.velog.io/images/ne_ol/post/62c6a28c-06ab-41ca-bb89-a4bbce664489/Screen%20Shot%202022-02-21%20at%2012.01.59%20AM.png" width="80%">

</li>
</ul>
</li>
</ul>
<h2 id="2-dom-처리">2. DOM 처리</h2>
<ul>
<li>브라우저가 문서 트리로 하는 일: 깊이 우선 순회<img src="https://images.velog.io/images/ne_ol/post/f22b9048-2deb-422e-9137-3c775b47be81/Screen%20Shot%202022-02-21%20at%2012.02.04%20AM.png" width="80%"></li>
<li>루트 -&gt; 첫 번째 자식 -&gt; 첫 번째 자식&#39;s 첫 번째 자식 -&gt; ... -&gt; 종단 노드 -&gt; 종단 노드&#39;s 부모 -&gt; 다음 자식 -&gt; ... -&gt; 부모  -&gt; 방문한 적 없는 자식 -&gt; ...</li>
<li>방문 순서 = HTML 작성 순서</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[항해99 5기 (정규 트랙)_6주차 WIL]]></title>
            <link>https://velog.io/@ne_ol/%ED%95%AD%ED%95%B499-5%EA%B8%B0-%EC%A0%95%EA%B7%9C-%ED%8A%B8%EB%9E%996%EC%A3%BC%EC%B0%A8-WIL</link>
            <guid>https://velog.io/@ne_ol/%ED%95%AD%ED%95%B499-5%EA%B8%B0-%EC%A0%95%EA%B7%9C-%ED%8A%B8%EB%9E%996%EC%A3%BC%EC%B0%A8-WIL</guid>
            <pubDate>Sun, 20 Feb 2022 14:39:22 GMT</pubDate>
            <description><![CDATA[<h1 id="1-what-i-did">1. What I did</h1>
<img src="https://images.velog.io/images/ne_ol/post/db73bcf0-e3ee-4bf2-aaa4-e0313dead566/Screen%20Shot%202022-02-20%20at%2011.27.54%20PM.png">

<h2 id="1-chapter-4-주특기-미니-프로젝트">1. Chapter 4. (주특기) 미니 프로젝트</h2>
<ul>
<li>기간: 2022년 2월 11일 (금) @ 09:00 ~ 2022년 2월 17일 (목) @ 21:00</li>
<li>시연 영상: <a href="https://www.youtube.com/watch?v=5lFRF9gHwYg">https://www.youtube.com/watch?v=5lFRF9gHwYg</a></li>
<li>정말 열심히 만들었다. </li>
</ul>
<h2 id="2-chapter-5-주특기-클론-코딩">2. Chapter 5. (주특기) 클론 코딩</h2>
<ul>
<li>기간 2022년 2월 18일 (금) @ 09:00 ~ </li>
<li>서비스: 마켓 컬리</li>
</ul>
<h2 id="3-this-weeks-keyword">3. This week&#39;s Keyword</h2>
<ul>
<li>첫 협업을 하며 느낀 점 (스스로 아쉬웠던 점/ 보완하고 싶은 점)<ul>
<li>처음으로 3명의 백엔드 분들과 같이 일을 했다. 서로가 구현할 수 있는 기능들이 달랐으며, 강의로 배워왔던 내용들도 달랐다. 로그인 기능 구현하는 것부터가 쉽지 않았다. 일단 내가 스프링에 대한 지식이 하나도 없으니, 백 쪽에서 문제가 생겼을 때 할 수 있는 게 없다는 것이 답답했다. 아마 프론트 쪽에서 문제가 생겼을 때는 백엔드 분들이 답답했을 것이다. 왜 풀스택을 하는지 알 것 같기도 했다. 하지만 <code>axios</code>를 사용하여 백 서버와 연결해 CRUD를 구현했다는 것은 신기하고 뿌듯했다. 연결만 잘되면, 그 후로는 서버리스로 작업했을 때랑 그렇게 차이가 없다는 것을 알았다. 이번 프로젝트 때에는 뷰에 조금 더 많이 신경 썼는데, 앞으로는 새로운 기능도, 기능의 완성도도 신경써서 임해야겠다. </li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[항해99 5기 CS Study - 7장 데이터 구조와 처리]]></title>
            <link>https://velog.io/@ne_ol/%ED%95%AD%ED%95%B499-5%EA%B8%B0-CS-Study-7%EC%9E%A5-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EA%B5%AC%EC%A1%B0%EC%99%80-%EC%B2%98%EB%A6%AC</link>
            <guid>https://velog.io/@ne_ol/%ED%95%AD%ED%95%B499-5%EA%B8%B0-CS-Study-7%EC%9E%A5-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EA%B5%AC%EC%A1%B0%EC%99%80-%EC%B2%98%EB%A6%AC</guid>
            <pubDate>Mon, 14 Feb 2022 18:10:06 GMT</pubDate>
            <description><![CDATA[<h2 id="4-문자열">4. 문자열</h2>
<ul>
<li>정의: 여러 문자로 이뤄진 시퀀스</li>
<li>문자열을 연산할 때도 길이를 알아야 함</li>
<li>길이가 변할 수 있는 가변 문자열 데이터에 작용하는 프로그램이 많기 때문</li>
<li>접근 방법<ul>
<li>문자열 안에 길이를 저장<ul>
<li>첫번째 바이트에 길이를 넣는다 -&gt; 문자열 길이가 255자로 제한되는 단점</li>
<li>더 긴 문자열을 지원하다보면 길이를 저장하기 위한 바이트 수가 문자열 길이를 넘어설 수 있다</li>
<li>문자열은 바이트라서 메모리 정렬이 그때그때 다를 수도</li>
</ul>
</li>
<li>C 언어<ul>
<li>문자 배열에 들어 있는 문자열 데이터 끝에 바이트를 하나 추가하고, 문자열의 끝을 표시하는 문자로 NUL을 넣는다</li>
<li>저장이 쉽다는 장점</li>
<li>부가 비용이 들지 않음</li>
<li>문자열 길이를 알아내려면 문자열을 스캔하면서 문자 수를 세야 한다는 단점<img src="https://images.velog.io/images/ne_ol/post/2fd7a439-7a59-4588-887d-432a51c18099/Screen%20Shot%202022-02-15%20at%201.43.59%20AM.png" width="70%">

</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="5-복합-데이터-타입">5. 복합 데이터 타입</h2>
<ul>
<li>구조체: 원하는 대로 데이터 타입 (=스위트) 을 만들 수 있는 방법</li>
<li>멤버: 구조체 스위트 안에 있는 여러 방</li>
<li>월, 일, 시, 분, 초는 1 바이트인 unsigned char로 </li>
<li>2바이트인 unsigned short를 사용한 C의 일시 표현 구조체:<img src="https://images.velog.io/images/ne_ol/post/c86ccbd6-586d-4e71-bc20-03832d1ba586/Screen%20Shot%202022-02-15%20at%201.55.48%20AM.png" width="80%"> 

</li>
</ul>
<h2 id="6-단일-연결-리스트">6. 단일 연결 리스트</h2>
<img src="https://images.velog.io/images/ne_ol/post/9f71f7af-b298-4d29-8910-0baf397de498/Screen%20Shot%202022-02-15%20at%202.27.08%20AM.png" width="70%">

<ul>
<li><p>데이터 양이 정해져 있지 않는 경우에는 배열이 적합 X</p>
</li>
<li><p>연결 리스트: 목록에 들엉갈 원소 개수를 모르는 경우, 배열보다 BETTER!!</p>
<ul>
<li><p>next: 리스트의 다음 원소 주소를 저장하는 포인터</p>
</li>
<li><p>헤드: 리스트 맨 앞 </p>
</li>
<li><p>테일: 리스트 마지막</p>
</li>
<li><p>원소 위치: 메모리의 아무 위치! 배열의 원소는 메모리에서 연속적으로 위치)</p>
<img src="https://images.velog.io/images/ne_ol/post/f4fb030e-6660-4206-8db9-e63e4857fe92/Screen%20Shot%202022-02-15%20at%202.33.18%20AM.png" width="60%"></li>
<li><p>새 원소 헤드 앞에 쉽게 추가 가능!</p>
<img src="https://images.velog.io/images/ne_ol/post/b98acf26-27f1-4339-99c9-f669b035f4d9/Screen%20Shot%202022-02-15%20at%202.35.43%20AM.png" width="70%"></li>
<li><p>&quot;삭제할 리스트 원소의 바로 앞 원소의 next 포인터가 삭제할 원소의 next 포인터가 가리키는 원소를 가리키게 해야 한다&quot;</p>
<img src="https://images.velog.io/images/ne_ol/post/fe1e6200-08b6-4450-8fd8-d5628ff83e41/Screen%20Shot%202022-02-15%20at%202.38.43%20AM.png" width="70%"></li>
<li><p>포인터를 한 쌍으로 유지하여 단일 연결 리스트의 원소 삭제 가능</p>
</li>
<li><p>리스트의 각 원소 방문 -&gt; previous 포인터를 통해 current.next 포인터 조정 -&gt; 원소 삭제 </p>
<img src="https://images.velog.io/images/ne_ol/post/dab1c665-0fe0-4825-8ce8-ba26e46ade7f/Screen%20Shot%202022-02-15%20at%202.44.21%20AM.png" width="70%">
</li>
<li><p>이중 간접 주소 지정을 통해 보다 효율적인 단인 연결 리스트 원소 삭제 가능</p>
<img src="https://images.velog.io/images/ne_ol/post/686aacb0-4d63-46ea-8897-dcea917cee20/Screen%20Shot%202022-02-15%20at%202.49.48%20AM.png" width="80%">
<img src="https://images.velog.io/images/ne_ol/post/eb956a90-b4e8-4ae7-b3f2-5f8b0df9d978/Screen%20Shot%202022-02-15%20at%202.49.26%20AM.png" width="80%">
1. current0 을 head 주소 설정 -> current1 은 head를 가리킨다 -> head는 리스트 원소 A의 노드를 가리킨다
2. 삭제할 원소가 D가 아니기 때문에 다음으로 진행
3. 점선 화살표가 나타내는 것처럼 방금 전 current (=A)의 next값을 나타낸다 -> current2는 A.next 가리킨다 -> 삭제할 원소가 아니라서 다음 진행
4. 삭제할 원소를 찾을 때까지 반복하고 D를 찾았을 때, C.next를 D.next값으로 덮어쓴다 -> D.next인 E로 진행 </li>
</ul>
</li>
<li><p>두 가지 단일 연결 리스트 원소 삭제 방법을 C코드로 비교하면</p>
<ul>
<li>두 포인터 사용 코드<img src="https://images.velog.io/images/ne_ol/post/9ac38167-f8a2-4445-a5ff-d1e700cb96af/Screen%20Shot%202022-02-15%20at%202.49.55%20AM.png" width="80%">
<img src="https://images.velog.io/images/ne_ol/post/42851700-6fba-4f79-bb0a-66fc9dd9ccee/Screen%20Shot%202022-02-15%20at%203.06.15%20AM.png" width="80%"></li>
<li>이중 간접 주소 지정 사용 코드<img src="https://images.velog.io/images/ne_ol/post/82cae50a-9461-4854-ad23-7e101fc5c0c4/Screen%20Shot%202022-02-15%20at%203.06.22%20AM.png" width="80%"></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[항해99 5기 (정규 트랙)_5주차 WIL]]></title>
            <link>https://velog.io/@ne_ol/%ED%95%AD%ED%95%B499-5%EA%B8%B0-%EC%A0%95%EA%B7%9C-%ED%8A%B8%EB%9E%995%EC%A3%BC%EC%B0%A8-WIL</link>
            <guid>https://velog.io/@ne_ol/%ED%95%AD%ED%95%B499-5%EA%B8%B0-%EC%A0%95%EA%B7%9C-%ED%8A%B8%EB%9E%995%EC%A3%BC%EC%B0%A8-WIL</guid>
            <pubDate>Sun, 13 Feb 2022 14:13:06 GMT</pubDate>
            <description><![CDATA[<h1 id="1-what-i-did">1. What I did</h1>
<p><img src="https://images.velog.io/images/ne_ol/post/8f783ad5-f25f-450e-911d-f2806e31b69d/Screen%20Shot%202022-02-13%20at%203.58.04%20PM.png" alt=""></p>
<h2 id="1-chapter-3-3-주특기-심화-주차">1. Chapter 3-3. 주특기 심화 주차</h2>
<ul>
<li>기간: 2022년 2월 4일 (금) @ 09:00 ~ 2022년 2월 10일 (목) @ 21:00</li>
<li>도메인: <a href="https://magazine-site-ab9c1.web.app/">https://magazine-site-ab9c1.web.app/</a></li>
<li>Github 주소: <a href="https://github.com/nevergettingold/React_magazine_site">https://github.com/nevergettingold/React_magazine_site</a></li>
<li>항해 전 기수 선배님&#39;s Comment:<ul>
<li>redux에서 좋아요기능 구현시에 like와 dislike가 2가지로 분리되어 있는데 같은 파라미터를 받고있는데 좋아요 기능 자체를 1개의 미들웨어 함수로 만들어보면 어떨까요? 그렇다면 컴포넌트에서 like와 dislike 함수를 따로 만들지않고 1개의 함수를 통해서 사용할 수 있겠죠?
-&gt; 사실 처음 like/dislike 로직을 짤 때, 하나의 미들웨어 함수로 실행했었다가 구현 도중에 에러가 조금 생기면서 그냥 두 개로 나눠 진행했었다. 에러를 해결하고 나서 그대로 두었었는데, 다시 합칠 수 있었다는 것을 인지하고 있기 때문에 선배님의 피드백을 단 번에 수긍할 수 있었다. </li>
<li>그리고 좋아요일떄와 아닐경우를 component에서 esls if 조건부 렌더링으로 2가지 경우를 작성하셨는데 이 부분도 하나로 통합하고 예시로 color 속성에 삼향연산자같은걸 이용해서 구현해본다면 코드중복을 줄일수있는 방법이 될 수도 있을것 같네요 🙂</li>
<li><blockquote>
<p>이 부분도 처음에 삼항연산자를 사용하여 좋아요의 버튼 색을 조절하는 코드를 작성했었다가, 첫 번째 코멘트의 코드를 짜면서 로직들을 나누는 과정에서 나누고 그대로 두었었다. </p>
</blockquote>
</li>
<li>코드를 구현하실때 같은 기능을 구현 하더라도 여러가지 방식으로 구현할 수 있습니다. 그래서 한 가지의 방식만 생각해보는게 아니고 여러가지 경우를 생각해보시고 생각해낸 여러가지 방식중에서 본인이 생각했을때 효율적인 방식으로 구현해나가신다면 좋을것 같습니다 😎</li>
<li><blockquote>
<p>당연한 말이지만 가장 중요한 코멘트여서 항상 마음에 새기고 코딩해야겠다.</p>
</blockquote>
</li>
</ul>
</li>
</ul>
<h2 id="2-chapter-4-주특기-미니-프로젝트">2. Chapter 4. (주특기) 미니 프로젝트</h2>
<ul>
<li>기간: 2022년 2월 11일 (금) @ 09:00 ~ </li>
<li>프로젝트 &quot;지금 뭐해?&quot; Wireframe, API 설계 및 역할 분담 완료</li>
<li>메인페이지, 상세페이지, 마이페이지 View 완료</li>
<li>Github JSON mock server에 Post get 요청 완료</li>
</ul>
<h2 id="3-this-weeks-keyword">3. This week&#39;s Keyword</h2>
<h3 id="1-axios">1. Axios</h3>
<ul>
<li><p>정의</p>
<ul>
<li>브라우저, Node.js를 위한 Promise API를 활용하는 HTTP 비동기 통신 라이브러리</li>
</ul>
</li>
<li><p>특징</p>
<ul>
<li>Promise 기반의 API</li>
<li>HTTP 요청과 응답을 JSON 형태로 자동 변경</li>
<li>fetch와 다르게 별도 설치 필요</li>
<li>data 속성을 사용하며 object를 포함</li>
</ul>
</li>
<li><p>문법 구성</p>
<pre><code class="language-js">axios({
url: &#39;https://test/api/cafe/list/today&#39;, // 통신할 웹문서
method: &#39;get&#39;, // 통신할 방식
data: { // 인자로 보낼 데이터
foo: &#39;diary&#39;
}
});</code></pre>
<ul>
<li>파라미터 문법<pre><code class="language-js">axios({
method: &quot;get&quot;, // 통신 방식
url: &quot;www.naver.com&quot;, // 서버
headers: {&#39;X-Requested-With&#39;: &#39;XMLHttpRequest&#39;} // 요청 헤더 설정
params: { api_key: &quot;1234&quot;, langualge: &quot;en&quot; }, // ?파라미터를 전달
responseType: &#39;json&#39;, // default
</code></pre>
</li>
</ul>
<p>maxContentLength: 2000, // http 응답 내용의 max 사이즈
validateStatus: function (status) {
  return status &gt;= 200 &amp;&amp; status &lt; 300; // default
}, // HTTP응답 상태 코드에 대해 promise의 반환 값이 resolve 또는 reject 할지 지정
proxy: {
  host: &#39;127.0.0.1&#39;,
  port: 9000,
  auth: {</p>
<pre><code>username: &#39;mikeymike&#39;,
password: &#39;rapunz3l&#39;</code></pre><p>  }
}, // proxy서버의 hostname과 port를 정의
maxRedirects: 5, // node.js에서 사용되는 리다이렉트 최대치를 지정
httpsAgent: new https.Agent({ keepAlive: true }), // node.js에서 https를 요청을 할때 사용자 정의 agent를 정의
})
.then(function (response) {
// response Action
});</p>
<pre><code>- 응답(res) 스키마
```js
{
data: {}, // 서버가 제공한 응답(데이터)

status: 200, // `status`는 서버 응답의 HTTP 상태 코드

statusText: &#39;OK&#39;,  // `statusText`는 서버 응답으로 부터의 HTTP 상태 메시지

headers: {},  // `headers` 서버가 응답 한 헤더는 모든 헤더 이름이 소문자로 제공

config: {}, // `config`는 요청에 대해 `axios`에 설정된 구성(config)

request: {}
// `request`는 응답을 생성한 요청
// 브라우저: XMLHttpRequest 인스턴스
// Node.js: ClientRequest 인스턴스(리디렉션)
}</code></pre><ul>
<li>GET: axios.get(url[, config])<pre><code class="language-js">axios.get(&#39;/user?ID=12345&#39;)
.then(function (response) {
// 성공했을 때
console.log(response);
})
.catch(function (error) {
// 에러가 났을 때
console.log(error);
})
.finally(function () {
// 항상 실행되는 함수
});</code></pre>
</li>
<li>POST: axios.post(url, data[, config])<pre><code class="language-js">axios.post(&quot;url&quot;, {
  firstName: &#39;Fred&#39;,
  lastName: &#39;Flintstone&#39;
})
.then(function (response) {
  // response  
}).catch(function (error) {
  // 오류발생시 실행
})</code></pre>
</li>
<li>DELETE: axios.delete(url[, config])<pre><code>axios.delete(&#39;/user?ID=12345&#39;)
.then(function (response) {
// handle success
console.log(response);
})
.catch(function (error) {
// handle error
console.log(error);
})</code></pre></li>
<li>PUT: axios.put(url, data[, config]), 서버에 있는 데이터베이스의 내용을 변경하는 것을 주 목적<pre><code>axios.put(&quot;url&quot;, {
  username: &quot;&quot;,
  password: &quot;&quot;
})
.then(function (response) {
   // response  
}).catch(function (error) {
  // 오류발생시 실행
})</code></pre>출처: <a href="https://inpa.tistory.com/entry/AXIOS-%F0%9F%93%9A-%EC%84%A4%EC%B9%98-%EC%82%AC%EC%9A%A9">https://inpa.tistory.com/entry/AXIOS-%F0%9F%93%9A-%EC%84%A4%EC%B9%98-%EC%82%AC%EC%9A%A9</a>, <a href="https://publizm.github.io/posts/javascript/Axios">https://publizm.github.io/posts/javascript/Axios</a><h1 id="2-how-i-felt">2. How I felt</h1>
<code>skip</code></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[항해99 5기 CS Study - 6장 입출력과 네트워킹]]></title>
            <link>https://velog.io/@ne_ol/%ED%95%AD%ED%95%B499-5%EA%B8%B0-CS-Study-6%EC%9E%A5-%EC%9E%85%EC%B6%9C%EB%A0%A5%EA%B3%BC-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%82%B9</link>
            <guid>https://velog.io/@ne_ol/%ED%95%AD%ED%95%B499-5%EA%B8%B0-CS-Study-6%EC%9E%A5-%EC%9E%85%EC%B6%9C%EB%A0%A5%EA%B3%BC-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%82%B9</guid>
            <pubDate>Mon, 07 Feb 2022 17:52:08 GMT</pubDate>
            <description><![CDATA[<h1 id="1-저수준-io">1. 저수준 I/O</h1>
<h2 id="7-쿼드러처">7. 쿼드러처</h2>
<ul>
<li><code>쿼드러처 인코딩</code> (Quadrature Encoding)<ul>
<li>2비트 그레이 코드 패턴의 반복</li>
<li>대상의 절대적 위치 정보 X &amp; 대상의 위치 변경 여부 + 변경된 방향을 알 필요가 있는 경우에 적용 가능 =&gt; 네 가지 상태의 변형 존재 (ex. 자동차 대시보드의 볼륨 놉)</li>
<li>2개의 센서</li>
<li>쿼드러처 인코더를 90도로 엇갈려 놓고 가운데에 고무공을 넣은 것 -&gt; 마우스</li>
</ul>
</li>
</ul>
<p align=center><img src= "https://images.velog.io/images/ne_ol/post/20e62edf-f3ff-473f-a6c5-41b814d1a602/Screen%20Shot%202022-02-08%20at%201.24.13%20AM.png" width="70%">0132 순서로 코드가 발생하며, 4비트 숫자를 만들어 낼 수 있다</p>

<p align=center><img src= "https://images.velog.io/images/ne_ol/post/ad422252-e20c-4fed-be66-686e183908f8/Screen%20Shot%202022-02-08%20at%201.24.18%20AM.png" width="50%">쿼드러처 회전 감지</p>


<h2 id="8-병렬-통신">8. 병렬 통신</h2>
<ul>
<li>LED를 켜는 회로를 확장한 것</li>
<li><code>병렬</code>: 선/모든 LED component -&gt; 동시에 모든 컴포넌트 제어 가능</li>
</ul>
<p align=center><img src= "https://images.velog.io/images/ne_ol/post/c2347f08-f7a2-4b0e-9e42-844390a35701/Screen%20Shot%202022-02-08%20at%201.24.29%20AM.png" width="70%">ASCII 코드를 전송하기 위해 포트B에 8개의 데이터 선이 있다
  <br>스트로브(신호): 데이터 선에 올바른 데이터가 들어있는 순간을 알려주는 신호</p>

<ul>
<li>병렬 인터페이스의 단점<ul>
<li>한 선에서 전달될 수 있는 신호의 속도 한계!</li>
<li>I/O핀, 커넥터 핀, 선 多多多 必 =&gt; 가격 $$$!</li>
</ul>
</li>
</ul>
<h2 id="9-직렬-통신">9. 직렬 통신</h2>
<ul>
<li>최소한의 선으로 통신하는  방법이 경제적</li>
</ul>
<ol>
<li>시프트 레지스터를 통한 직렬 통신</li>
</ol>
<img src= "https://images.velog.io/images/ne_ol/post/758c6744-6608-4096-88df-eadddf9571ad/Screen%20Shot%202022-02-08%20at%201.24.36%20AM.png" width="50%">

<ul>
<li>시프터 레지스터: 클록에 따라 내용을 1비트씩 시프트</li>
<li>송신자: 클록이 시프트 시키고, 밀려나가는 비트를 선을 통해 송신</li>
<li>수신자: 클록이 시프트 시키고, 새로 생긴 빈 자리에 선을 통해 비트 수신</li>
<li>송신자 &amp; 수신자 동기화 必!</li>
<li>클록을 한 번만 놓쳐도 모든 것이 섞인다 -&gt; 세 번째 선 추가 가능 -&gt; 직렬 통신에서의 선을 최소화하는 목표 위반</li>
</ul>
<ol start="2">
<li>직렬 프로토콜
<img src= "https://images.velog.io/images/ne_ol/post/272aad1c-6ad9-44be-a0d4-a36cdefc37ee/Screen%20Shot%202022-02-08%20at%201.24.43%20AM.png" width="80%"><p align=center>마크-스페이스 신호</p></li>
</ol>
<ul>
<li>early 1900&#39;s 텔레타이프 (한 곳에서 타이핑한 내용을 멀리 있는 프린터에 출력하는 기계) 에서 사용되기 시작</li>
<li><code>마크</code>: 1; 아무 일도 일어나지 않을 때 = 하이 상태</li>
<li><code>스페이스</code>: 로우 상태</li>
<li>로우 상태로 내려가는 부분 = <code>시작 비트</code></li>
<li>문자의 끝 부분/하이 상태 = <code>정지 비트</code> (2개)</li>
<li><code>시간 분할 멀티플렉싱</code><ol>
<li>동기화 오류 발생</li>
<li>송신자 <code>문자 시간</code> (character time) 동안 대기</li>
<li>수신자 재 동기화</li>
<li>3 &amp; 4 시간을 나눈 슬롯을 만들고 슬롯마다 다른 비트 할당 &amp; 데이터를 한 선에 멀티플렉싱 </li>
</ol>
</li>
<li><code>보 레이트</code>: 초당 비트 수 </li>
<li><code>반이중</code> 연결<ul>
<li>송신자 &amp; 수신자 같은 선 공유</li>
<li>한 순간에 한 쪽만 말할 수 있다 -&gt; 둘이 동시에 말하면 의미 X 메시지 -&gt; 무선 통신 기자들이 메시지를 송신하고 나면 &quot;오버&quot; 라고 말한다</li>
<li><code>충돌</code>: 둘 이상의 송신자가 송신 시도할 때 데이터의 혼신 발생</li>
</ul>
</li>
<li><code>전이중</code> 통신<ul>
<li>선 2개 =&gt; 다른 방향으로 동시에 통신 가능 </li>
</ul>
</li>
<li>범용 비동기 수신기-송신기 (UART) <ul>
<li><code>전이중</code> 통신을 가능케한 하나의 IC로 만들어진 회로</li>
<li>소프트웨어로도 구현 가능 =&gt; <code>비트 뱅잉</code></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[항해99 5기 (정규 트랙)_4주차 WIL]]></title>
            <link>https://velog.io/@ne_ol/%ED%95%AD%ED%95%B499-5%EA%B8%B0-%EC%A0%95%EA%B7%9C-%ED%8A%B8%EB%9E%994%EC%A3%BC%EC%B0%A8-WIL</link>
            <guid>https://velog.io/@ne_ol/%ED%95%AD%ED%95%B499-5%EA%B8%B0-%EC%A0%95%EA%B7%9C-%ED%8A%B8%EB%9E%994%EC%A3%BC%EC%B0%A8-WIL</guid>
            <pubDate>Sun, 06 Feb 2022 14:14:10 GMT</pubDate>
            <description><![CDATA[<h1 id="1-what-i-did">1. What I did</h1>
<p><img src="https://images.velog.io/images/ne_ol/post/afe700e1-5f9a-4955-b93e-3c36a48ef047/Screen%20Shot%202022-02-06%20at%2010.27.38%20PM.png" alt="">
(토요일에도 18시간 정도 했는데 update되지 않은 시간이다.)</p>
<h2 id="1-chapter-3-2-주특기-숙련-주차">1. Chapter 3-2. 주특기 숙련 주차</h2>
<ul>
<li>기간: 2022년 1월 28일 (금) @ 09:00 ~ 2022년 2월 3일 (목) @ 21:00</li>
<li>개인 과제 및 팀 과제 완료</li>
<li>개인 과제 도메인: <a href="https://nevergettingold.shop/">https://nevergettingold.shop/</a></li>
<li>개인 과제 Github: <a href="https://github.com/nevergettingold/React_my_dictionary">https://github.com/nevergettingold/React_my_dictionary</a><img src = "https://images.velog.io/images/ne_ol/post/6329042f-4438-41aa-90bb-3279fa29d4fc/Screen%20Shot%202022-02-06%20at%2010.31.14%20PM.png"></li>
<li>팀 과제: <a href="https://www.notion.so/React-5-48f248607aa04d7d8f41d8c27645d1de">https://www.notion.so/React-5-48f248607aa04d7d8f41d8c27645d1de</a> </li>
</ul>
<h2 id="2-chapter-3-3-주특기-심화-주차">2. Chapter 3-3. 주특기 심화 주차</h2>
<ul>
<li>기간: 2022년 2월 4일 (금) @ 09:00 ~</li>
<li>리액트 심화반 강의 수강 완료, (추가 기능 제외) 게시글 작성 시 레이아웃 선택 추가 필요<h2 id="3-this-weeks-keywords">3. This week&#39;s Keywords</h2>
<h3 id="1-라이프사이클">1. 라이프사이클</h3>
<ul>
<li>컴포넌트의 수명 주기가 존재하는데, 이는 보통 페이지에서 렌더링되기 전인 준비 과정에서 시작하여 페이지에서 사라질 때 끝이난다.</li>
<li>Mount: DOM이 생성되고 웹 브라우저 상에서 나타나는 것<ul>
<li>Mount 될 때 생하는 생명주기들<ul>
<li>constructor</li>
<li>getDerivedStateFromProps</li>
<li>render </li>
<li>componentDidMount</li>
</ul>
</li>
</ul>
</li>
<li>Update: 컴포넌트의 첫 번째 렌더링이 마치고 나면 호출되는 메서드<ul>
<li>발생 시점<ul>
<li>props가 바뀔 때</li>
<li>state가 바뀔 때</li>
<li>부모 컴포넌트가 리렌더링 될 때</li>
<li>this.forceUpdate로 강제로 렌더링을 트리거할 때</li>
</ul>
</li>
<li>getDerivedStateFromProps</li>
<li>shouldComponentUpdate</li>
<li>render</li>
<li>getSnapshotBeforeUpdate</li>
<li>componentDidUpdate<ul>
<li>Unmount: 컴포넌트가 화면에서 사라지는 것</li>
</ul>
</li>
<li>componentWillUnmount</li>
</ul>
</li>
<li>함수형 컴포넌트는 react hook 중 하나인 useEffect를 통해 라이프사이클을 관리할 수 있다.</li>
</ul>
</li>
</ul>
<img src = "https://images.velog.io/images/ne_ol/post/876d3a59-56b7-417f-bbe5-51f66fc23a9e/Screen%20Shot%202022-02-06%20at%2010.40.14%20PM.png">

<p>(출처: <a href="https://react.vlpt.us/basic/25-lifecycle.html">https://react.vlpt.us/basic/25-lifecycle.html</a>, <a href="https://kyun2da.dev/react/%EB%A6%AC%EC%95%A1%ED%8A%B8-%EB%9D%BC%EC%9D%B4%ED%94%84%EC%82%AC%EC%9D%B4%ED%81%B4%EC%9D%98-%EC%9D%B4%ED%95%B4/">https://kyun2da.dev/react/%EB%A6%AC%EC%95%A1%ED%8A%B8-%EB%9D%BC%EC%9D%B4%ED%94%84%EC%82%AC%EC%9D%B4%ED%81%B4%EC%9D%98-%EC%9D%B4%ED%95%B4/</a>,
<a href="https://guiyomi.tistory.com/21">https://guiyomi.tistory.com/21</a>)</p>
<h3 id="2-react-hooks">2. React hooks</h3>
<ul>
<li><p>Hooks 는 리액트 v16.8 에 새로 도입된 기능이며, 함수형태의 컴포넌트에서 사용되는 몇 가지 기술을 Hook이라고 부른다.</p>
</li>
<li><p>사용 규칙</p>
<ul>
<li>최상위(at the top level)에서만 Hook 호출!</li>
<li>반복문, 조건문, 중첩된 함수 내에서 Hook 실행 X</li>
<li>React 함수 컴포넌트 내에서만 Hook 호출!</li>
<li>일반 JavaScript 함수에서는 Hook을 호출 X</li>
<li>직접 작성한 custom Hook 내는 호출 가능! </li>
</ul>
</li>
<li><p>State Hook (useState)</p>
<ul>
<li><p>함수 컴포넌트 state를 추가하여, 다시 렌더링 되어도 그대로 유지</p>
</li>
<li><p>useState는 현재의 state 값과 이 값을 업데이트하는 함수를 쌍으로 제공</p>
</li>
<li><p>이벤트 핸들러나 다른 곳에서 호출 가능; class의 this.setState와 거의 유사하지만, 이전 state과 새로운 state를 합치지 않는다는 차이점이 있다.</p>
<pre><code class="language-js">import React, { useState } from &#39;react&#39;;

function Example() {
// &quot;count&quot;라는 새 상태 변수를 선언합니다
const [count, setCount] = useState(0);

return (
  &lt;div&gt;
    &lt;p&gt;You clicked {count} times&lt;/p&gt;
    &lt;button onClick={() =&gt; setCount(count + 1)}&gt;
      Click me
    &lt;/button&gt;
  &lt;/div&gt;
);
}</code></pre>
</li>
</ul>
</li>
</ul>
<p align=center>useState는 인자로 초기 state 값을 하나 받는데, count는 0부터 시작하기 때문에 위 예시에서는 초기값으로 0 설정. 이 초기값은 첫 번째 렌더링에만 딱 한번 사용</p>   

<ul>
<li>Effect Hook (useEffect)<ul>
<li>함수 컴포넌트 내에서 side effects (컴포넌트 안에서 데이터를 가져오거나 구독하고, DOM을 직접 조작하는 작업, 등)를 수행할 수 있게 해준다.</li>
<li>React class의 componentDidMount 나 componentDidUpdate, componentWillUnmount와 같은 목적으로 제공되지만, 하나의 API로 통합된 것<pre><code class="language-js">import React, { useState, useEffect } from &#39;react&#39;;
</code></pre>
</li>
</ul>
</li>
</ul>
<p>function FriendStatus(props) {
  const [isOnline, setIsOnline] = useState(null);</p>
<p>  function handleStatusChange(status) {
    setIsOnline(status.isOnline);
  }</p>
<p>  useEffect(() =&gt; {
    ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange);
    return () =&gt; { //해제하는 함수 반환
      ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange);
    };
  });</p>
<p>  if (isOnline === null) {
    return &#39;Loading...&#39;;
  }
  return isOnline ? &#39;Online&#39; : &#39;Offline&#39;;
}</p>
<pre><code>
&lt;p align=center&gt;React는 DOM을 바꾼 뒤에 “effect” 함수를 실행하고, Effects는 컴포넌트 안에 선언되어있기 때문에 props와 state에 접근할 수 있다. 기본적으로 첫 번째 렌더링도 포함하여 매 렌더링 이후에 effects가 실행된다.&lt;/p&gt;

&lt;p align=center&gt;Effect를 “해제”할 필요가 있다면, 해제하는 함수를 반환해준다.(이는 optional)&lt;/p&gt;

(출처: https://devbirdfeet.tistory.com/52, https://ko.reactjs.org/docs/hooks-overview.html)

# 2. How I felt
`skip`</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[모던 JavaScript 튜토리얼 Part 1. 코어 자바스크립트]]></title>
            <link>https://velog.io/@ne_ol/%EB%AA%A8%EB%8D%98-JavaScript-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC-Part-1.-%EC%BD%94%EC%96%B4-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-0rffeb11</link>
            <guid>https://velog.io/@ne_ol/%EB%AA%A8%EB%8D%98-JavaScript-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC-Part-1.-%EC%BD%94%EC%96%B4-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-0rffeb11</guid>
            <pubDate>Thu, 03 Feb 2022 13:54:57 GMT</pubDate>
            <description><![CDATA[<h1 id="12-매뉴얼과-명세서">1.2 매뉴얼과 명세서</h1>
<h2 id="1-명세서">1. 명세서</h2>
<ul>
<li>ECMA-262 명세서 (specification): JavaScript와 관련된 정보를 담는 공식 문서</li>
<li>ECMA-262 명세서는 매년 Renewal </li>
</ul>
<h2 id="2-매뉴얼">2. 매뉴얼</h2>
<ul>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference">MDN JavaScript Reference</a> <ul>
<li>&#39;MDN [원하는 정보]&#39; 로 검색엔진에 검색</li>
</ul>
</li>
<li>Microsoft의 <a href="http://msdn.microsoft.com/">MSDN</a> </li>
</ul>
<h2 id="3-호환성-표">3. 호환성 표</h2>
<ul>
<li>특정 브라우저나 엔진의 JS의 기능 호환성 check<ul>
<li><a href="http://caniuse.com">http://caniuse.com</a> <ul>
<li>브라우저의 호환성을 표 형태로 확인 가능 </li>
</ul>
</li>
<li><a href="https://kangax.github.io/compat-table">https://kangax.github.io/compat-table</a><ul>
<li>자바스크립트 기능 + 해당 기능의 브라우저 지원 유무</li>
</ul>
</li>
</ul>
</li>
</ul>
<h1 id="13-코드-에디터">1.3 코드 에디터</h1>
<h2 id="1-통합-개발-환경">1. 통합 개발 환경</h2>
<ul>
<li>IDE (Integrated Development Environment)</li>
<li>프로젝트 전체를 관장하는 다양한 기능 + 개발 환경을 쾌적하게 해주는 통합 환경 제공</li>
<li>Visual Studio Code, WebStorm, ...<h2 id="2-경량-에디터">2. 경량 에디터</h2>
</li>
<li>Lightweight Editor</li>
<li>기능 제공 less than IDE, but fast and simple!</li>
<li>파일을 열고 바로 수정할 때 사용 -&gt; 파일 하나만 수정하고 싶을 때 IDE 보다 better choice</li>
<li>플러그인 사용으로 IDE와의 엄격한 구분이 사라져가는 중<ul>
<li>Atom</li>
<li>Visual Studio Code</li>
<li>Sublime Text</li>
<li>..</li>
</ul>
</li>
</ul>
<h1 id="14-개발자-콘솔">1.4 개발자 콘솔</h1>
<ul>
<li>브라우저에 내장된 개발자 도구를 사용하여 코드 에러 확인/명렁어 실행/변수 분석 가능</li>
<li>개발자 도구 내 Console에서 명령어 실행 가능 -&gt; Multi-line input은 Shift + Enter로 가능</li>
<li>디버깅: 에러를 확인하고 고치는 방법</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[모던 JavaScript 튜토리얼 Part 1. 코어 자바스크립트 ]]></title>
            <link>https://velog.io/@ne_ol/%EB%AA%A8%EB%8D%98-JavaScript-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC-Part-1.-%EC%BD%94%EC%96%B4-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8</link>
            <guid>https://velog.io/@ne_ol/%EB%AA%A8%EB%8D%98-JavaScript-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC-Part-1.-%EC%BD%94%EC%96%B4-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8</guid>
            <pubDate>Wed, 02 Feb 2022 17:52:32 GMT</pubDate>
            <description><![CDATA[<h1 id="11-자바스크립트란">1.1 자바스크립트란?</h1>
<h2 id="1-정의">1. 정의</h2>
<ul>
<li>&#39;웹페이지에 생동감을 불어넣는&#39; 프로그래밍 언어 </li>
<li>프로그램 written by JS: &#39;script&#39; -&gt; 웹페이지 로딩 때 자동 실행</li>
<li>Java와는 아무런 상관 없는 언어!<ul>
<li>JavaScript가 처음 만들어졌을 때 이름이 LiveScript였는데 당시 Java의 인기가 아주 높은 상황이어서, Java의 &#39;동생&#39; 격인 언어로 홍보하다가 이름이 JavaScript로 바뀌었다. </li>
</ul>
</li>
<li>JavaScript engine이라는 프로그램이 있는 모든 디바이스에서 동작 (브라우저엔 &#39;자바스크립트 가상 머신&#39; 엔진 내장)<ul>
<li>Chrome &amp; Opera: V8</li>
<li>Firefox: SpiderMonkey</li>
<li>IE: Trident or Chakra</li>
<li>Edge: ChakraCore</li>
<li>Safari: SquirrelFish</li>
</ul>
</li>
<li>JS engine Procedure<ul>
<li>파싱 (스크립트 읽기)</li>
<li>컴파일 (기계어로 전환)</li>
<li>코드 실행 (기계어 실행)</li>
</ul>
</li>
</ul>
<h2 id="2-브라우저에서-할-수-있는-일">2. 브라우저에서 할 수 있는 일</h2>
<ul>
<li>모던 자바스크립트 -&gt; &#39;안전한&#39; 프로그래밍 언어 (메모리, CPU 조작 허용 X)</li>
<li>웹페이지 조작, 클라이언트와 서버의 상호작용 관한 모든 일 가능<ul>
<li>새로운 HTML 추가 or HTML, CSS 수정</li>
<li>사용자 행동 (ex.마우스 클릭, 포인터 움직임, 키보드 키 눌림, etc.) 에 반응</li>
<li>원격 서버에 요청, 파일 다운로드, 업로드 (w/AJAX or COMET)</li>
<li>쿠키 가져오거나 설정, 사용자에게 질문/메시지 보여주기</li>
<li>클라이언트 측에 데이터 저장 (로컬 스토리지)</li>
</ul>
</li>
</ul>
<h2 id="3-브라우저에서-할-수-없는-일">3. 브라우저에서 할 수 없는 일</h2>
<ul>
<li>디스크에 저장된 임의의 파일 읽기/쓰기/복사/실행 제약</li>
<li>모던 브라우저도 접근은 제한</li>
<li>타 사이트 or 도메인에서 데이터 받기 불가</li>
</ul>
<h2 id="4-자바스크립트만의-강점">4. 자바스크립트만의 강점</h2>
<ul>
<li>HTML/CSS와 완전히 통합 가능</li>
<li>간단한 일 -&gt; 간단하게 처리</li>
<li>모든 주요 브라우저에 지원, 기본 언어로 사용</li>
</ul>
<h2 id="5-자바스크립트-너머의-언어들">5. 자바스크립트 &#39;너머의&#39; 언어들</h2>
<ul>
<li>CoffeeScript: JS를 위한 &#39;syntactic sugar&#39;, 짧은 문법 + 이해하기 쉬운 코드!</li>
<li>TypeScript: 자료형의 명시화 (strict data typing) 에 집중해서 만든 언어 made by Microsoft</li>
<li>Flow: 자료형 강제 (TypeScript와는 다른 방식) made by Facebook</li>
<li>Dart: 브라우저가 아닌 환경 (ex. 모바일 앱) 에서 동작하는 고유 엔진을 가진 독자적 언어 made by Google</li>
</ul>
<h2 id="6-요약">6. 요약</h2>
<ul>
<li>JavaScript는 브라우저 외에도 다양한 환경에서 쓰이고 있다.</li>
<li>JavaScript는 HTML/CSS 와의 완전한 통합 가능!</li>
<li>JavaScript는 transpile 할 수 있는 언어가 많다! (각 언어마다 고유 기능 제공)</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[항해99 5기 CS Study - 5장 컴퓨터 아키텍처와 운영체제]]></title>
            <link>https://velog.io/@ne_ol/%ED%95%AD%ED%95%B499-5%EA%B8%B0-CS-Study-5%EC%9E%A5-%EC%BB%B4%ED%93%A8%ED%84%B0-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98%EC%99%80-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C</link>
            <guid>https://velog.io/@ne_ol/%ED%95%AD%ED%95%B499-5%EA%B8%B0-CS-Study-5%EC%9E%A5-%EC%BB%B4%ED%93%A8%ED%84%B0-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98%EC%99%80-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C</guid>
            <pubDate>Mon, 31 Jan 2022 14:39:44 GMT</pubDate>
            <description><![CDATA[<h1 id="2-프로시저-서브루틴-함수">2. 프로시저, 서브루틴, 함수</h1>
<ul>
<li>프로그래머들이 피하고 싶은 것: 똑같은 코드를 두 번 이상 작성하는 것
=&gt; 이를 해결해줄 수 있는 함수 (or 프로시저 or 서브루틴; 프로그래밍 안에서 동일한 의미) 는 코드를 재사용하는 주요 수단!!</li>
<li>JavaScript 함수/함수 호출하기<pre><code class="language-js">/함수
function cube (x) { //x라는 parameter 값을 받는 cube 라는 함수 
return (x*x*x) //x 값의 세제곱을 반환
}
</code></pre>
</li>
</ul>
<p>/호출하기
y = cube (3) </p>
<p>```</p>
<ul>
<li>함수를 호출하여 함수를 실행하고 다시 원래 자리로 돌아올 방법이 필요 =&gt; 돌아오기 위해서 함수로 들어간 위치 = &#39;프로그램 카운터의 값&#39; 기억 필요<p align = center><img src = "https://images.velog.io/images/ne_ol/post/074b62a0-edbf-4a94-b250-99697ded4259/Screen%20Shot%202022-01-31%20at%208.00.35%20PM.png" width = 500></p></li>
<li>함수 호출 흐름<p align = center><img src = "https://images.velog.io/images/ne_ol/post/0f490160-f256-4c06-9168-d7c7b538e955/Screen%20Shot%202022-01-31%20at%207.34.15%20PM.png" width = 500></p></li>
</ul>
<ol>
<li>100 번지: 프로그램 시작 </li>
<li>101 번지: 함수에서 돌아올 주소 (105번지) 설정</li>
<li>102 번지: 101번지에서 설정한 주소 값을 200번지에 저장</li>
<li>103 번지: 함수 파라미터 값 전달 </li>
<li>104 번지: function cube 호출 (분기)</li>
<li>200 번지: 함수 산출값을 저장되어 있던 주소로 반환 (간접 분기) </li>
<li>105 번지: 함수 산출값 받기</li>
<li>300~ 번지: 함수 명렁어 </li>
</ol>
<h1 id="3-스택">3. 스택</h1>
<ul>
<li>재귀: 자기 자신을 호출하는 함수 <ul>
<li>핸드폰의 JPEG 압축을 통한 사진 크기 감소</li>
<li>재귀적 분할로 압축하기 (그림 5-3을 4등분으로 나누고 검사하는 과정을 1픽셀 단위 조각까지 반복)<p align = center><img src = "https://images.velog.io/images/ne_ol/post/249165f4-feea-4f41-b7ca-299534a64f95/Screen%20Shot%202022-01-31%20at%209.32.32%20PM.png" width = 300></p>

</li>
</ul>
</li>
</ul>
<p align = center><img src = "https://images.velog.io/images/ne_ol/post/4844a011-4836-4ff6-abda-e08e7291b5fd/Screen%20Shot%202022-01-31%20at%2010.18.33%20PM.png" width = 600>
우리말이나 영어 등의 언어로 간결하게 적은 코드인 '의사 코드'로 작성된 분할 함수 subdivide는 <br> 정사각형의 왼쪽 아래 꼭지점의 x, y 좌표와 size를 파라미터로 취한다.</p>

<p align = center><img src = "https://images.velog.io/images/ne_ol/post/e595d3cf-fda8-4762-9460-8e306516a21f/Screen%20Shot%202022-01-31%20at%209.32.43%20PM.png" width = >
그림 5-3를 subdivide 함수로 그리는 방법 <br> 회색: 검사 영역이 분할이 필요한 경우, 흰색/검은색: 모든 색이 흰색/검은색으로 같을 경우</p>

<ul>
<li><p>그림 5-4</p>
<ul>
<li>트리라고 부르며, 수학에서는 유향 비순환 그래프 (Directed Acyclic Graph) 라고 불리는 구조</li>
<li>각 노드에서 4개의 가지가 뻗어나감 =&gt; 쿼드트리: 공간 데이터 구조에 속함</li>
<li>화살표 방향으로 읽기 때문에, 순환이 없다</li>
<li>루트: 맨 윗부분 </li>
<li>노드: 화살표가 뻗어나가는 (사각형) 부분</li>
<li>잎 노드 (leaf node): 화살표가 뻗어나가지 않는 부분 =&gt; 나뭇가지의 끝에 달린 나뭇잎처럼 트리의 맨 마지막에 달려있다</li>
<li>흰색/검은색 사각형 =&gt; 40개 &lt;&lt;&lt; 64 Pixel =&gt; 저장 Data 少 =&gt; <code>압축!</code></li>
</ul>
</li>
<li><p>재귀적 함수의 한계</p>
<ul>
<li>반환값 저장 위치 1곳 -&gt; 이미 들어 있던 반환값을 덮어써서 되돌아갈 위치를 잃어버리기 때문에 자기 자신을 호출 불가</li>
<li>해결책<ul>
<li>스택<ul>
<li>함수 호출 시: 반환 주소를 접시에 넣어서 접시 더미 맨 위에 Push! (=쌓아올린다)</li>
<li>함수 호출에서 반환 시: 접시 더미 맨 위의 접시를 보고 반환 주소를 결정하고 접시 제거! (Pop)</li>
<li>여러 반환 주소 저장을 가능케 한다</li>
<li>함수에서 호출 지점으로 다시 돌아갈 때, 어떤 주소를 사용할지 결정 가능케 한다</li>
<li>aka LIFO 구조 (late in, first out) </li>
<li>Forth나 PostScript와 옛날 HP 계산기 몇 가지는 스택 기반 언어</li>
<li>한국어/일본어도 스택 기반 언어</li>
<li>스택 오버플로: Push할 공간 X</li>
<li>스택 언더플로: 빈 스택에서 Pop</li>
<li>한계 레지스터: 소프트웨어가 항상 스택 오버플로를 검사하지 않아도 되도록 돕는다</li>
</ul>
</li>
<li>스택 프레임: 함수가 호출될 때마다 스택에 저장되는 데이터 모음</li>
</ul>
</li>
</ul>
</li>
</ul>
<p align = center><img src = "https://images.velog.io/images/ne_ol/post/e7a1b7f0-c6b1-4cc7-a5ab-6bb2d897e4ea/Screen%20Shot%202022-01-31%20at%2011.12.47%20PM.png" width = >각 함수 호출이 반환 주소와 지역 변수를 포함하는 새로운 스택 프레임을법 만들고 있다.</p>]]></description>
        </item>
        <item>
            <title><![CDATA[항해99 5기 (정규 트랙)_3주차 WIL]]></title>
            <link>https://velog.io/@ne_ol/%ED%95%AD%ED%95%B499-5%EA%B8%B0-%EC%A0%95%EA%B7%9C-%ED%8A%B8%EB%9E%993%EC%A3%BC%EC%B0%A8-WIL</link>
            <guid>https://velog.io/@ne_ol/%ED%95%AD%ED%95%B499-5%EA%B8%B0-%EC%A0%95%EA%B7%9C-%ED%8A%B8%EB%9E%993%EC%A3%BC%EC%B0%A8-WIL</guid>
            <pubDate>Sun, 30 Jan 2022 13:59:49 GMT</pubDate>
            <description><![CDATA[<h1 id="1-what-i-did">1. What I did</h1>
<img src = "https://images.velog.io/images/ne_ol/post/1b014e7c-4653-4ec8-8c78-d5cade395e28/Screen%20Shot%202022-01-30%20at%208.15.38%20PM.png"> 

<h2 id="1-chapter-3-1-주특기-입문-주차">1. Chapter 3-1. 주특기 입문 주차</h2>
<ul>
<li>기간: 2022년 1월 21일 (금) @ 09:00 ~ 2022년 1월 27일 (목) 21:00</li>
<li>개인 과제 및 팀 과제 완료</li>
<li>개인 과제 도메인: <a href="http://ilikewinter.shop/">http://ilikewinter.shop/</a></li>
<li>개인 과제 Github: <a href="https://github.com/nevergettingold/React-Personal-Assignment-1">https://github.com/nevergettingold/React-Personal-Assignment-1</a><p align="center"><img src = "https://images.velog.io/images/ne_ol/post/8c3bc39a-67a0-4a50-a6f8-ca00967e4f4f/Screen%20Shot%202022-01-30%20at%2010.17.01%20PM.png" width = "400px"></p></li>
<li>팀 과제: <a href="https://www.notion.so/4c3f1acb761b4986966fb882d6f29652">https://www.notion.so/4c3f1acb761b4986966fb882d6f29652</a></li>
</ul>
<h2 id="2-chapter-3-2-주특기-숙련-주차">2. Chapter 3-2. 주특기 숙련 주차</h2>
<ul>
<li><p>기간: 2022년 1월 28일 (금) @ 09:00 ~ </p>
</li>
<li><p>개인 과제 완료 (추가 기능인 무한 스크롤 진행 예정)</p>
</li>
<li><p>This week&#39;s Keywords</p>
<ul>
<li><p>DOM (Document Object Model)</p>
<ul>
<li><a href="https://developer.mozilla.org/ko/docs/Web/API/Document_Object_Model/Introduction">MDN</a><ul>
<li>DOM (문서 객체 모델) 을 HTML, XML 문서의 프로그래밍 interface 이다.</li>
<li>페이지 콘텐츠는 DOM에 저장되고 JS를 통해 접근하거나 조작할 수 있다 =&gt; API (web or XML page) = DOM + JS (scripting language)</li>
</ul>
</li>
<li>즉 DOM은 HTML 파일에 쓰여진 것이나 페이지의 &#39;View Source&#39; 를 통해 보여지는 것이 아니라, <strong>개발자 도구 (Inspect) 를 통해 볼 수 있는 것</strong>들을 뜻한다.</li>
<li>DOM vs HTML<ul>
<li>자동 교정: 잘못된 HTML 코드를 DOM에서 바로잡아 준다. </li>
</ul>
</li>
<li>DOM vs JS<ul>
<li><strong>JS는</strong> 브라우저가 읽고 어떤 작업을 할 수 있는 <strong>언어</strong>이며,</li>
<li><strong>DOM</strong>은 그 작업이 이루어지는 <strong>장소</strong>이다.</li>
<li>따라서, JS로 하는 것 = DOM의 API </li>
</ul>
</li>
</ul>
</li>
<li><p>서버리스 (serverless)</p>
<ul>
<li>개발자가 서버를 관리할 필요 없이 애플리케이션을 빌드하고 실행할 수 있도록 하는 클라우드 네이티브 개발 모델</li>
<li>서버가 존재하긴 하지만, 애플리케이션 개발에서와 달리 추상화되어 있고, 클라우드 제공업체가 서버 인프라에 대한 프로비저닝, 유지 관리, 스케일링 등의 일상적인 작업을 처리</li>
<li>개발자는 배포를 위해 코드를 컨테이너에 패키징하기만 하면 됨</li>
<li>BaaS (Backend-as-a-Service)<ul>
<li>개발자에게 제 3사 서비스와 애플리케이션 엑세스 제공</li>
<li>일반적으로 API 를 통해 호출</li>
</ul>
</li>
<li>FaaS (Function-as-a-Service)<ul>
<li>개발자가 서버리스를 언급하는 경우 통상적으로 지칭되는 모델</li>
<li>BaaS와 달리 사전 작성된 서비스 라이브러리에 의존하지 않고 사용자 정의 애플리케이션을 생성하는 개발자에게 더 많은 제어 권한을 제공</li>
<li>코드는 클라우드 제공업체가 관리하는 컨테이너에 배포 </li>
<li>AWS의 AWS Lambda, Google Cloud의 여러 오퍼링, ...</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>(출처: <a href="https://www.redhat.com/ko/topics/cloud-native-apps/what-is-serverless">https://www.redhat.com/ko/topics/cloud-native-apps/what-is-serverless</a>)</p>
<h1 id="2-how-i-felt">2. How I felt</h1>
<h2 id="1-chapter-3-1-주특기-입문-주차-1">1. Chapter 3-1. 주특기 입문 주차</h2>
<ul>
<li>처음에는 정말 어렵다고만 느꼈었다. 저번 주 금요일과 토요일에 개인 과제를 하기 위한 강의를 모두 듣고 리액트를 조금 만져보고 월요일에 시작했는데, 오전에는 정말 뭐가 뭔지 몰랐다. 심지어 강의 내용을 시작으로 시작한 게 아니라, 과제 추가 기능 중 하나였던 &#39;오늘 날짜부터 시작하기&#39; 로 시작을 해서 나는 엄청난 구글링부터 시작을 했다. 그래서 결과적으로 정말 긴~ 코드를 작성했지만 구현은 잘 됐다. 월요일~일요일까지의 별점을 줄 수 있는 7개의 component와 메인페이지에서 한 주의 날짜, 별점, 삼각형을 보여주는 1개의 component, 잘못된 경로로 들어왔을 때 보여주는 1개의 component, 총 9개의 component를 만들었다. 월요일 밤에 기능 구현을 다 끝내고 화요일에 css를 만졌던 것으로 기억이 난다. 팀원들과 코드 리뷰를 하며 내 코드가 확실히 길다는 것을 느꼈지만, 그것은 내가 강의 내용으로 시작을 안해서이기 때문에 납득이 가능했다. 하지만 강의 내용 중 React Hook 의 사용은 중요하기 때문에 내 코드를 다시 수정해볼 생각이지만 아직 실천하지는 못했다. 실천하고 나서 정리해야지. (제발)</li>
</ul>
<h2 id="2-chapter-3-2-주특기-숙련-주차-1">2. Chapter 3-2. 주특기 숙련 주차</h2>
<ul>
<li>금요일에 과제를 받고 새벽에 삘이 와서 3시 반 넘어서까지 하고 다 끝냈다. 개인 과제에서 요구하는 기능들 말고 다른 기능들까지 구현시켰고 CSS도 좀 만져놨고 무한 스크롤 기능만 내일 추가해볼 생각인데 쉽지 않을 것 같다. 이번에는 Redux 라는 상태 관리 라이브러리를 사용했다. 아니 사용해야만 했다. 강의 내용을 들으며 이해하는데 생각보다 이해가 잘되서 다행히 첫 주 과제를 시작했던 그 느낌으로 시작하지는 않았다. 이제는 첫 주보다는 속도도 붙어서 조금 더 빨리 구현시키는 것이 가능한 것 같다. 이 과제는 다음 주에 제대로 정리해볼 생각이다. (제발)</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[항해99 5기 CS Study - 2장 전자 회로의 조합 논리]]></title>
            <link>https://velog.io/@ne_ol/%ED%95%AD%ED%95%B499-5%EA%B8%B0-CS-Study-2%EC%9E%A5-%EC%A0%84%EC%9E%90-%ED%9A%8C%EB%A1%9C%EC%9D%98-%EC%A1%B0%ED%95%A9-%EB%85%BC%EB%A6%AC</link>
            <guid>https://velog.io/@ne_ol/%ED%95%AD%ED%95%B499-5%EA%B8%B0-CS-Study-2%EC%9E%A5-%EC%A0%84%EC%9E%90-%ED%9A%8C%EB%A1%9C%EC%9D%98-%EC%A1%B0%ED%95%A9-%EB%85%BC%EB%A6%AC</guid>
            <pubDate>Tue, 25 Jan 2022 01:15:23 GMT</pubDate>
            <description><![CDATA[<h1 id="2-간단한-전기-이론-가이드">2. 간단한 전기 이론 가이드</h1>
<h2 id="1-전기는-수도-배관과-유사하다">1. 전기는 수도 배관과 유사하다</h2>
<ul>
<li>전기 from 에너지 근원 like 배터리 ~ 물 from 물탱크 <img src = "https://images.velog.io/images/ne_ol/post/c77938b4-651e-46df-88a0-72dd95bd48ee/Screen%20Shot%202022-01-25%20at%2012.04.16%20AM.png" width="60%" heigh="60%"></li>
<li>2-10. <ul>
<li>한 밸브 출력 ~ 다른 밸브의 입력 =&gt; 직렬 연결 </li>
</ul>
</li>
<li>2-11.<ul>
<li>두 밸브 입력을 한 관에 연결 ~ 두 밸브 출력을 다른 한 관에 연결 =&gt; 병렬 연결</li>
</ul>
</li>
<li>전파 지연<ul>
<li>전기가 컴퓨터 칩 내부에서 전파되는 시간 </li>
</ul>
</li>
<li>전기의 이동은 사실 전자의 흐름 X =&gt; 전자기 에너지 반응이 전파되는 현상을 뜻하는 &#39;전기&#39;라는 단어가 정착<ul>
<li>스위치로 전기의 흐름을 제어</li>
</ul>
</li>
<li>전기 선<ul>
<li>도체: 내부 금속 (유동성이 있는 전자가 가득)</li>
<li>부도체: 금속 외부 </li>
</ul>
</li>
<li>Ohm&#39;s Law (I = V/R)<ul>
<li>전압: 물에서의 수압과 같이 작용 [Voltage = V]</li>
<li>전류: 전기의 흐름 (I) [Ampere = A]</li>
<li>저항: 도체를 통한 전기의 흐름에 방해 요소 (R) [Ohm]<img src = "https://images.velog.io/images/ne_ol/post/47324475-6314-42b1-a5ca-e7e0aad2a762/Screen%20Shot%202022-01-25%20at%209.26.26%20AM.png" width="60%" heigh="60%">
</li>
</ul>
</li>
</ul>
<ol start="2">
<li>전기 스위치</li>
</ol>
<ul>
<li><p>스위치를 누르면 붙거나 떨어지는 두 조각의 금속으로 구성</p>
</li>
<li><p>스키매틱: 전기 시스템인 회로를 문서화 해놓은 것</p>
</li>
<li><p>단극단투 스위치 스키매틱 기호</p>
<img src = "https://images.velog.io/images/ne_ol/post/497da52b-8bde-4a34-a58e-cd43a5da5086/Screen%20Shot%202022-01-25%20at%209.38.55%20AM.png" width="30%">
- 극 (pole) = 한꺼번에 연결되어 이동하는 스위치의 수 
- 단투 (single throw) = 접점이 하나 -> 하나는 끄고 반대쪽은 키고 X
</li>
<li><p>단극쌍투 스위치 스키매틱 기호</p>
<img src = "https://images.velog.io/images/ne_ol/post/042a3a59-533d-4b37-a49e-152e220b36e7/Screen%20Shot%202022-01-25%20at%209.46.26%20AM.png" width="30%">
</li>
<li><p>쌍극쌍투 스위치 스키매틱 기호</p>
<img src = "https://images.velog.io/images/ne_ol/post/e803f8f4-f7e6-4c12-94cf-dce2ad1386d8/Screen%20Shot%202022-01-25%20at%209.50.31%20AM%201.png" width="30%">
- 점선은 두 극이 서로 연계됐다는 표시 => 두 스위치는 함께 움직인다
</li>
<li><p>전기 회로</p>
<ul>
<li>에너지 근원 -&gt; 회로 구성 요소 (전구, 저항 요소, etc.)<img src = "https://images.velog.io/images/ne_ol/post/32bc3ac7-cfd2-4ac8-844a-5803afaefa27/Screen%20Shot%202022-01-25%20at%2010.01.48%20AM.png" width="50%">
</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[항해99 5기 (정규 트랙)_2주차 WIL]]></title>
            <link>https://velog.io/@ne_ol/%ED%95%AD%ED%95%B499-5%EA%B8%B0-%EC%A0%95%EA%B7%9C-%ED%8A%B8%EB%9E%992%EC%A3%BC%EC%B0%A8-WIL-9vshexmq</link>
            <guid>https://velog.io/@ne_ol/%ED%95%AD%ED%95%B499-5%EA%B8%B0-%EC%A0%95%EA%B7%9C-%ED%8A%B8%EB%9E%992%EC%A3%BC%EC%B0%A8-WIL-9vshexmq</guid>
            <pubDate>Sun, 23 Jan 2022 13:43:44 GMT</pubDate>
            <description><![CDATA[<h1 id="1-what-i-did">1. What I did</h1>
<p><img src="https://images.velog.io/images/ne_ol/post/c74955e3-9f6a-4824-86da-3696edfbe06c/Screen%20Shot%202022-01-23%20at%207.08.46%20PM.png" alt=""></p>
<h2 id="1-chapter-2-알고리즘-기초-걷기반">1. Chapter 2. 알고리즘 기초 (걷기반)</h2>
<ul>
<li>기간: 2022년 1월 14일 (금) @ 09:00 ~ 2022년 1월 20일 (목) @ 19:00</li>
<li>프로그래머스 코딩 테스트 연습 (<a href="https://velog.io/@ne_ol/series/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-JavaScript">JavaScript 시리즈</a>)<ol start="13">
<li>서울에서 김서방 찾기</li>
</ol>
<ul>
<li>.indexOf(searchValue[, fromIndex])</li>
</ul>
<ol start="14">
<li>내적</li>
</ol>
<ul>
<li><code>중복</code></li>
</ul>
<ol start="15">
<li>나누어 떨어지는 숫자 배열</li>
</ol>
<ul>
<li>.sort([compareFunction])</li>
<li>.filter(callback(element[, index[, array]])[, thisArg])</li>
</ul>
<ol start="16">
<li>문자열 내 p와 y의 개수</li>
</ol>
<ul>
<li>.match(regexp)</li>
<li>.split([separator[, limit]])</li>
<li>.toUppercase()</li>
</ul>
<ol start="17">
<li>문자열 다루기 기본</li>
</ol>
<ul>
<li>isNaN()</li>
<li>.forEach(callback(currentvalue[, index[, array]])[, thisArg])</li>
<li>RegExp<ul>
<li>^: 입력의 시작 부분에 대응, (&#39;뒤에 있는 것 제외하고 찾아라&#39; 라는 뜻도 있음)</li>
<li>$: 입력의 끝 부분과 대응</li>
<li>|</li>
<li>regexp.test()</li>
</ul>
</li>
</ul>
<ol start="18">
<li>2016년</li>
</ol>
<ul>
<li>new Date()</li>
<li>getDay()</li>
</ul>
<ol start="19">
<li>정수 내림차순으로 배치하기</li>
</ol>
<ul>
<li>.join()</li>
<li>.reverse()</li>
</ul>
<ol start="20">
<li>이상한 문자 만들기</li>
</ol>
<ul>
<li>regexp<ul>
<li>\w</li>
</ul>
</li>
</ul>
<ol start="21">
<li>콜라츠 추측</li>
</ol>
<ul>
<li><code>중복</code></li>
</ul>
<ol start="22">
<li>최소 직사각형</li>
</ol>
<ul>
<li>Math.max()</li>
</ul>
<ol start="23">
<li>로또의 최고 순위와 최저 순위</li>
</ol>
<ul>
<li>switch</li>
</ul>
<ol start="24">
<li>문자열 내림차순으로 배치하기</li>
</ol>
<ul>
<li><code>중복</code></li>
</ul>
</li>
<li>알고리즘 모의고사 테스트 (220118)</li>
<li>알고리즘 테스트 합격!! (220120)</li>
</ul>
<h2 id="2-chapter-3-주특기-입문-주차">2. Chapter 3. 주특기 입문 주차</h2>
<ul>
<li><p>기간: 2022년 1월 21일 (금) @ 09:00 ~ </p>
</li>
<li><p>SpartaCoding Club 리액트 기초반 1-1 ~ 3-6강 완료</p>
</li>
<li><p>React 환경설정 완료 (nvm, node, yarn 설치 완료)</p>
</li>
<li><p>강사님과 react router dom 버전이 달라, 다운그레이드 하지 않고 구글링하여 해결.
(React Router Dom V6 자료)</p>
<ul>
<li><a href="https://velog.io/@ksmfou98/React-Router-v6-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%EC%A0%95%EB%A6%AC">https://velog.io/@ksmfou98/React-Router-v6-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%EC%A0%95%EB%A6%AC</a></li>
<li><a href="https://velog.io/@soryeongk/ReactRouterDomV6">https://velog.io/@soryeongk/ReactRouterDomV6</a></li>
<li><a href="https://gallery-k.tistory.com/256">https://gallery-k.tistory.com/256</a></li>
</ul>
</li>
<li><p>JavaScript의 ES (EcmaScript) 란?</p>
<ul>
<li>JavaScript를 표준화하기 위해 Ecma International이 ECMA-262 기술 규격에 따라 만든 스크립트 프로그래밍 언어<ul>
<li>Ecma International: 1961년 유럽에서 컴퓨터 시스템을 표준화하기 위해 세워졌고,현재는 정보와 통신 시스템을 위한 국제적 표준화 기구</li>
</ul>
</li>
<li>액션스크립트와 J스크립트 등 다른 구현체도 포함</li>
<li>웹의 클라이언트 사이드 스크립트로 많이 사용 + Node.js를 사용한 서버 응용 프로그램 및 서비스에도 쓰이는 추세</li>
</ul>
</li>
<li><p>ES5 vs ES6</p>
</li>
</ul>
<ol>
<li>Template Literal<ul>
<li>백틱으로 문자열을 감싸 표현하는 기능 </li>
<li>${}를 사용<pre><code class="language-js">&lt;ES5&gt;
var name = &quot;현진&quot;;
var age = 25;
console.log(&quot;저의 이름은 &quot; + name + &quot;이고, 나이는 &quot; + age + &quot;살 입니다.&quot;);
</code></pre>
</li>
</ul>
</li>
</ol>
<ES6>
var name = "현진";
var age = 25;
console.log(`저의 이름은 ${name}이고, 나이는 ${age}살 입니다.`);
```
2. 변수 선언
   - var -> let, const
   - let: 재선언 불가 + 재할당 가능
   - const: 재선언 & 재할당 불가
   - let & const: Block / Function Scope 내부에 선언되면, 외부에서 참조 불가능; 외부 선언은 내부에서 참조 가능 

<ol start="3">
<li>Arrow Function (화살표 함수)<ul>
<li>함수 표현을 더욱 간결하게 표현 가능</li>
<li>인자가 하나일 때는 괄호 생략 가능 <pre><code class="language-js">&lt;ES5&gt;
function plus (a,b) { return a+b; }
var plus = function(a,b) { return a+b; }
</code></pre>
</li>
</ul>
</li>
</ol>
<ES6>
let plus = (a,b) => {return a+b}
```

<ol start="4">
<li><p>this</p>
<ul>
<li><p>ES5</p>
<ul>
<li>객체 내 <code>this</code>는 메소드를 실행 시, 메소드가 선언된 해당 객체를 가리킨다.</li>
<li>객체 내 선언된 함수의 <code>this</code>는 해당 객체가 아닌 window를 바라보기 때문에, innerInfo.call(this)로 바인딩이나 해당 변수에 담아서 접근 필수</li>
</ul>
</li>
<li><p>ES6</p>
<ul>
<li><p>자신을 둘러싸고 있는 <code>this</code>를 바라보기 때문에, 바인딩/해당 변수 담을 필요 X</p>
<pre><code class="language-js">&lt;ES5&gt;
var thisTest = {
name : &quot;김현진&quot;,   
age : 25,
info : function() {
   console.log(this)
   console.log(this.name , this.age)

   function innerInfo() {
       console.log(this)
       return this.name + &quot;:&quot; + this.age
   }
   return innerInfo()
}
}
// 실행결과 
// {name: &quot;김현진&quot;, age: 25, info: ƒ}
// 김현진 25
// Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, parent: Window, …}
// &quot;:undefined&quot;
</code></pre>
</li>
</ul>
</li>
</ul>
</li>
</ol>
<ES6>
let thisTest = {
     name : "김현진",   
     age : 25,
     info() {
          console.log(this)
          console.log(this.name , this.age)

<pre><code>      innerInfo = () =&gt; {
          console.log(this)
          return this.name + &quot;:&quot; + this.age
      }
      return innerInfo()
 }</code></pre><p>}
// 실행결과
// {name: &quot;김현진&quot;, age: 25, info: ƒ}
// 김현진 25
// {name: &quot;김현진&quot;, age: 25, info: ƒ}
// &quot;김현진:25&quot;</p>
<pre><code>
5. 모듈
   - ES5
     - `require (./____.js)`를 통해 모듈화 
   - ES6
     - import/export를 통해 모듈 관리 가능
```js
&lt;ES5&gt;
//index.html
&lt;script&gt;
  src = &quot;slider.js&quot;;
&lt;/script&gt;
&lt;script&gt;
  src = &quot;script.js&quot;;
&lt;/script&gt;

//script.js
var slider = require(./slider.js)
// 혹은 require(./slider)

&lt;ES6&gt;
import &#39;import to loadname&#39; from &#39;파일 경로&#39;

export default &#39;module&#39;</code></pre><ol start="6">
<li>클래스<ul>
<li>ES5<ul>
<li><code>class</code> 키워드 X -&gt; 프로토타입을 통해 실현 가능</li>
</ul>
</li>
<li>ES6 <ul>
<li><code>class</code> 키워드로 선언 가능</li>
<li><code>super</code>로 클래스의 상속과 오버라이딩 수행 가능<pre><code class="language-js">&lt;ES5&gt;
var AddSquare = function(arg1, arg2) {
Add.call(this, arg1, arg2);
};
</code></pre>
</li>
</ul>
</li>
</ul>
</li>
</ol>
<p>Object.assign(AddSquare.prototype, Add.prototype);</p>
<p>AddSquare.prototype = {
  calc: function() {
    // 메소드는 생략될 수 없습니다.
    Add.prototype.calc.call(this);
  },
  calcSquare: function() {
    this.pow = Math.pow(this.arg1 + this.arg2, 2);
    return &quot;(&quot; + this.arg1 + &quot;+&quot; + this.arg2 + &quot;)^2=&quot; + this.pow;
  }
};</p>
<p>var numSquare = new AddSquare(5, 8);
console.log(numSquare.calc()); // 5 + 8 = 13
console.log(numSquare.calcSquare()); // (5 + 8) ^ 2 =169</p>
<ES6>
class AddSquare extends Add {
  constructor(arg1, arg2) {
    super(arg1, arg2);
  }
  calc() {
    super.calc();
  }
  calcSquare() {
    this.pow = Math.pow(this.arg1 + this.arg2, 2);
    return "(" + this.arg1 + "+" + this.arg2 + ") ^ 2 =" + this.pow;
  }
}

<p>var numSquare = new AddSquare(5, 8);
console.log(numSquare.calc()); // 5 + 8 = 13
console.log(numSquare.calcSquare()); // (5 + 8) ^ 2 = 169</p>
<pre><code>(출처: https://doozi0316.tistory.com/entry/JavaScript-ECMAScript%EB%9E%80-ES5%EC%99%80-ES6%EC%9D%98-%EC%B0%A8%EC%9D%B4var-const-let-%ED%99%94%EC%82%B4%ED%91%9C-%ED%95%A8%EC%88%98-class)
# 2. How I felt
## 1. Chapter 2. 알고리즘 기초 (걷기반)
 - 난생 처음 공부해보는 자바스크립트의 문법과 알고리즘이었다. 팀원분들은 어느 정도 공부를 하셨던 분들이라 나보다 푸는 속도도 빠르셨고 자바스크립트에 대한 이해도도 깊으셨다. 처음에는 내가 맡은 두 문제를 푸는 것에도 급급했다. 하지만 날이 갈 수록 희한하게 알고리즘 문제 푸는 것이 재밌어졌고, 내 문제 + 팀원분들 문제를 다 풀고 정리하고 다른 해설들을 공부하며 조금씩 실력을 쌓아나간 것 같다. 새벽에는 다음 날 나의 두 문제를 풀어보기도 했고, 결국 풀리지 않으면 정말 찝찝한 마음에 잠에 들기도 했다. 예전에 수학을 좋아했었던 내가 많이 떠올랐다. 분명 답은 있는데, 내가 못해서 풀지 못하는 것을 받아들이지 못해서 풀 때까지 노력했던 나의 모습이. 한 주 동안 했던 알고리즘 및 자바스크립트 공부는 당연히 충분하지 못했다. 앞으로 꾸준히 계속 공부하며 발전해나가야겠다. 

## 2. Chapter 3. 주특기 입문 주차
- 드디어 진짜가 시작되었다. 내가 선택한 주특기 언어인, React를 처음으로 배워보는 시간이 시작되었다. 제대로 써보고 싶었던 VSC도 쓰게 되었고, 자바스크립트 문법을 제대로 활용해보며 React가 얼마나 어려운지 실감하고 있다..ㅋㅋ 뭔가 머리로는 &#39;어 쉬운데?&#39; 이러지만, 강의를 보지 않고 키보드를 치는 손가락은 없다. 다음 주까지 React로 개인 과제 한 개를 완성해야 한다. (+팀 과제) 개인 과제를 위한 강의는 다 봤으니 이제 부족한 것은 구글링해가며 과제를 제대로 시작하려고 한다. 그래도 나름 재밌는 언어라고 느껴지고 있으니, 나만 잘한다면 나중에 정말 재밌게 일할 수 있을 거라고 생각된다. </code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 문자열 내림차순으로 배치하기_JavaScript]]></title>
            <link>https://velog.io/@ne_ol/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%82%B4%EB%A6%BC%EC%B0%A8%EC%88%9C%EC%9C%BC%EB%A1%9C-%EB%B0%B0%EC%B9%98%ED%95%98%EA%B8%B0JavaScript</link>
            <guid>https://velog.io/@ne_ol/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%82%B4%EB%A6%BC%EC%B0%A8%EC%88%9C%EC%9C%BC%EB%A1%9C-%EB%B0%B0%EC%B9%98%ED%95%98%EA%B8%B0JavaScript</guid>
            <pubDate>Wed, 19 Jan 2022 13:42:37 GMT</pubDate>
            <description><![CDATA[<h1 id="문제-설명">문제 설명</h1>
<p>문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.</p>
<h2 id="제한-조건">제한 조건</h2>
<ul>
<li>str은 길이 1 이상인 문자열입니다.</li>
</ul>
<h2 id="입출력-예">입출력 예</h2>
<table>
<thead>
<tr>
<th>s</th>
<th>return</th>
</tr>
</thead>
<tbody><tr>
<td>&quot;Zbcdefg&quot;</td>
<td>&quot;gfedcbZ&quot;</td>
</tr>
</tbody></table>
<hr>
<h1 id="기본-solution-코드">기본 solution 코드</h1>
<pre><code class="language-js">function solution(s) {
    var answer = &#39;&#39;;
    return answer;
}</code></pre>
<h2 id="문제-풀이">문제 풀이</h2>
<pre><code class="language-js">function solution(s) {
    let answer = &#39;&#39;;
    let lowercase = (s.replace(/[A-Z]/g, &#39;&#39;).split(&#39;&#39;)).sort().reverse().join(&#39;&#39;);
    let uppercase = (s.replace(/[a-z]/g, &#39;&#39;).split(&#39;&#39;)).sort().reverse().join(&#39;&#39;);
    return answer = lowercase + uppercase;
}
</code></pre>
<h2 id="풀이-설명">풀이 설명</h2>
<p>대/소문자들을 &#39;&#39;로 replace하고 배열로 바꾸고 sort로 오름차순 후 다시 reverse하고 join으로 배열의 모든 문자를 합쳤다. 알파벳은 내림차순 할 때 sort((a,b) =&gt; b-a) 가 적용되지 않았다. <a href="https://stackoverflow.com/questions/52030110/sorting-strings-in-descending-order-in-javascript-most-efficiently">여기</a>를 참고하면 실제로 obj.sort().reverse()가 효율성 측면에서 같은 기능을 구현하는 하위 두가지 메소드 보다 좋다.</p>
<pre><code class="language-js">obj.sort((a, b) =&gt; (a &gt; b ? -1 : 1)

obj.sort((a, b) =&gt; b.localeCompare(a) )</code></pre>
<h2 id="사용-함수">사용 함수</h2>
<p><code>중복</code></p>
<hr>
<h1 id="다른-풀이">다른 풀이</h1>
<pre><code class="language-js">function solution(s) {
  return s.split(&quot;&quot;).sort().reverse().join(&quot;&quot;);
}</code></pre>
<h2 id="다른-풀이-설명">다른 풀이 설명</h2>
<ol>
<li><p>사용된 함수
<code>중복</code></p>
</li>
<li><p>풀이</p>
</li>
</ol>
<ul>
<li>예시는  정렬이 이미 되어있어서 다른 예시로. s = &quot;DajBziAlC&quot;</li>
<li>s.split(&#39;&#39;) -&gt; [&#39;D&#39;, &#39;a&#39;, &#39;j&#39;, &#39;B&#39;, &#39;z&#39;, &#39;i&#39;, &#39;A&#39;, &#39;l&#39;, &#39;C&#39;]</li>
<li>s.split(&#39;&#39;).sort() -&gt; [&#39;A&#39;, &#39;B&#39;, &#39;C&#39;, &#39;D&#39;, &#39;a&#39;, &#39;i&#39;,  &#39;j&#39;, &#39;l&#39;, &#39;z&#39;]</li>
<li>s.split(&#39;&#39;).sort().reverse() -&gt; [&#39;z&#39;, &#39;l&#39;, &#39;j&#39;, &#39;i&#39;, &#39;a&#39;, &#39;D&#39;, &#39;C&#39;, &#39;B&#39;, &#39;A&#39;]</li>
<li>s.split(&#39;&#39;).sort().reverse().join(&#39;&#39;) -&gt; zljiaDCBA</li>
<li>알파벳은 sort()를 할 경우, 자동으로 대문자가 먼저 A부터 Z로 정렬되고, 소문자가 a-&gt;z 로 정렬된다는 것을 잘 이용했다.</li>
</ul>
<ol start="3">
<li>재밌네</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 로또의 최고 순위와 최저 순위_JavaScript]]></title>
            <link>https://velog.io/@ne_ol/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%A1%9C%EB%98%90%EC%9D%98-%EC%B5%9C%EA%B3%A0-%EC%88%9C%EC%9C%84%EC%99%80-%EC%B5%9C%EC%A0%80-%EC%88%9C%EC%9C%84JavaScript</link>
            <guid>https://velog.io/@ne_ol/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%A1%9C%EB%98%90%EC%9D%98-%EC%B5%9C%EA%B3%A0-%EC%88%9C%EC%9C%84%EC%99%80-%EC%B5%9C%EC%A0%80-%EC%88%9C%EC%9C%84JavaScript</guid>
            <pubDate>Wed, 19 Jan 2022 10:04:46 GMT</pubDate>
            <description><![CDATA[<h1 id="문제-설명">문제 설명</h1>
<p>로또 6/45(이하 &#39;로또&#39;로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. </p>
<table>
<thead>
<tr>
<th>순위</th>
<th>당첨 내용</th>
</tr>
</thead>
<tbody><tr>
<td>1</td>
<td>6개 번호가 모두 일치</td>
</tr>
<tr>
<td>2</td>
<td>5개 번호가 모두 일치</td>
</tr>
<tr>
<td>3</td>
<td>4개 번호가 모두 일치</td>
</tr>
<tr>
<td>4</td>
<td>3개 번호가 모두 일치</td>
</tr>
<tr>
<td>5</td>
<td>2개 번호가 모두 일치</td>
</tr>
<tr>
<td>6 (낙첨)</td>
<td>그 외</td>
</tr>
</tbody></table>
<p>로또를 구매한 민우는 당첨 번호 발표일을 학수고대하고 있었습니다. 하지만, 민우의 동생이 로또에 낙서를 하여, 일부 번호를 알아볼 수 없게 되었습니다. 당첨 번호 발표 후, 민우는 자신이 구매했던 로또로 당첨이 가능했던 최고 순위와 최저 순위를 알아보고 싶어 졌습니다. 
알아볼 수 없는 번호를 0으로 표기하기로 하고, 민우가 구매한 로또 번호 6개가 44, 1, 0, 0, 31 25라고 가정해보겠습니다. 당첨 번호 6개가 31, 10, 45, 1, 6, 19라면, 당첨 가능한 최고 순위와 최저 순위의 한 예는 아래와 같습니다.</p>
<table>
<thead>
<tr>
<th>당첨 번호</th>
<th>31</th>
<th>10</th>
<th>45</th>
<th>1</th>
<th>6</th>
<th>19</th>
<th>결과</th>
</tr>
</thead>
<tbody><tr>
<td>최고 순위 번호</td>
<td>31</td>
<td>0-&gt;10</td>
<td>44</td>
<td>1</td>
<td>0-&gt;6</td>
<td>25</td>
<td>4개 번호 일치, 3등</td>
</tr>
<tr>
<td>최저 순위 번호</td>
<td>31</td>
<td>0-&gt;11</td>
<td>44</td>
<td>1</td>
<td>0-&gt;7</td>
<td>25</td>
<td>2개 번호 일치, 5등</td>
</tr>
</tbody></table>
<ul>
<li>순서와 상관없이, 구매한 로또에 당첨 번호와 일치하는 번호가 있으면 맞힌 걸로 인정됩니다.</li>
<li>알아볼 수 없는 두 개의 번호를 각각 10, 6이라고 가정하면 3등에 당첨될 수 있습니다.<ul>
<li>3등을 만드는 다른 방법들도 존재합니다. 하지만, 2등 이상으로 만드는 것은 불가능합니다.</li>
</ul>
</li>
<li>알아볼 수 없는 두 개의 번호를 각각 11, 7이라고 가정하면 5등에 당첨될 수 있습니다.<ul>
<li>5등을 만드는 다른 방법들도 존재합니다. 하지만, 6등(낙첨)으로 만드는 것은 불가능합니다.</li>
</ul>
</li>
</ul>
<p>민우가 구매한 로또 번호를 담은 배열 lottos, 당첨 번호를 담은 배열 win_nums가 매개변수로 주어집니다. 이때, 당첨 가능한 최고 순위와 최저 순위를 차례대로 배열에 담아서 return 하도록 solution 함수를 완성해주세요.</p>
<h2 id="제한-사항">제한 사항</h2>
<ul>
<li>lottos는 길이 6인 정수 배열입니다.</li>
<li>lottos의 모든 원소는 0 이상 45 이하인 정수입니다.<ul>
<li>0은 알아볼 수 없는 숫자를 의미합니다.</li>
<li>0을 제외한 다른 숫자들은 lottos에 2개 이상 담겨있지 않습니다.</li>
<li>lottos의 원소들은 정렬되어 있지 않을 수도 있습니다.</li>
</ul>
</li>
<li>win_nums은 길이 6인 정수 배열입니다.</li>
<li>win_nums의 모든 원소는 1 이상 45 이하인 정수입니다.<ul>
<li>win_nums에는 같은 숫자가 2개 이상 담겨있지 않습니다.</li>
<li>win_nums의 원소들은 정렬되어 있지 않을 수도 있습니다.</li>
</ul>
</li>
</ul>
<h2 id="입출력-예">입출력 예</h2>
<table>
<thead>
<tr>
<th>lottos</th>
<th>win_nums</th>
<th>result</th>
</tr>
</thead>
<tbody><tr>
<td>[44, 1, 0, 0, 31, 25]</td>
<td>[31, 10, 45, 1, 6, 19]</td>
<td>[3, 5]</td>
</tr>
<tr>
<td>[0, 0, 0, 0, 0, 0]</td>
<td>[38, 19, 20, 40, 15, 25]</td>
<td>[1, 6]</td>
</tr>
<tr>
<td>[45, 4, 35, 20, 3, 9]</td>
<td>[20, 9, 3, 45, 4, 35]</td>
<td>[1, 1]</td>
</tr>
</tbody></table>
<h2 id="입출력-예-설명">입출력 예 설명</h2>
<p>입출력 예 #1</p>
<ul>
<li>문제 예시와 같습니다.</li>
</ul>
<p>입출력 예 #2</p>
<ul>
<li>알아볼 수 없는 번호들이 아래와 같았다면, 1등과 6등에 당첨될 수 있습니다.</li>
</ul>
<table>
<thead>
<tr>
<th>당첨 번호</th>
<th>38</th>
<th>19</th>
<th>20</th>
<th>40</th>
<th>15</th>
<th>25</th>
<th>결과</th>
</tr>
</thead>
<tbody><tr>
<td>최고 순위 번호</td>
<td>0-&gt;38</td>
<td>0-&gt;19</td>
<td>0-&gt;20</td>
<td>0-&gt;40</td>
<td>0-&gt;15</td>
<td>0-&gt;25</td>
<td>6개 번호 일치, 1등</td>
</tr>
<tr>
<td>최저 순위 번호</td>
<td>0-&gt;21</td>
<td>0-&gt;22</td>
<td>0-&gt;23</td>
<td>0-&gt;24</td>
<td>0-&gt;25</td>
<td>0-&gt;26</td>
<td>0개 번호 일치, 6등</td>
</tr>
</tbody></table>
<p>입출력 예 #3</p>
<ul>
<li>민우가 구매한 로또의 번호와 당첨 번호가 모두 일치하므로, 최고 순위와 최저 순위는 모두 1등입니다.</li>
</ul>
<hr>
<h1 id="기본-solution-코드">기본 solution 코드</h1>
<pre><code class="language-js">function solution(lottos, win_nums) {
    var answer = [];
    return answer;
}</code></pre>
<h2 id="문제-풀이">문제 풀이</h2>
<pre><code class="language-js">function solution(lottos, win_nums) {
    let match = [];
    let answer = [];
    for(let i=0 ; i&lt;lottos.length ; ++i) {
        for(let j=0 ; j&lt;win_nums.length ; ++j) {
      lottos[i] === win_nums[j] ? match.push(lottos[i]) : null;
      }
    }
        switch (match.length + lottos.filter(el =&gt; el === 0).length) {
        case 0: answer.push(6) 
            break;
        case 1: answer.push(6) 
            break;
        case 2: answer.push(5) 
            break;
        case 3: answer.push(4) 
            break;
        case 4: answer.push(3) 
            break;
        case 5: answer.push(2) 
            break;
        case 6: answer.push(1) 
            break;
    }
    switch (match.length) {
        case 0: answer.push(6) 
            break;
        case 1: answer.push(6) 
            break;
        case 2: answer.push(5) 
            break;
        case 3: answer.push(4) 
            break;
        case 4: answer.push(3) 
            break;
        case 5: answer.push(2) 
            break;
        case 6: answer.push(1) 
            break;
    }
    return answer;
}</code></pre>
<h2 id="풀이-설명">풀이 설명</h2>
<p>알고리즘 풀면서 가장 긴 코드를 작성했다. 일단 매치되는 번호를 따로 array로 빼두고, 그 array의 length를 가지고 switch를 통해 최저 순위 번호를 구했다. 그리고 그 array의 length와 lottos array 안에 있는 0의 개수를 더하고 switch를 통해 최고 순위 번호를 구했다.</p>
<h2 id="사용-함수">사용 함수</h2>
<ul>
<li><p>switch: 복수의 if 문 </p>
<pre><code class="language-js">switch (expression) { 
case &#39;value1&#39;: // (if x === &#39;value1&#39;)
     ...
  break;

case &#39;value2&#39;:  // (if x === &#39;value1&#39;)
      ...
  break;
  ...
}   </code></pre>
</li>
<li><p>.filter(): 주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환</p>
<ul>
<li>arr.filter(callback(element[, index[, array]])[, thisArg])</li>
</ul>
</li>
</ul>
<p>(출처: <a href="https://developer.mozilla.org/ko/">https://developer.mozilla.org/ko/</a>)</p>
<hr>
<h1 id="다른-풀이">다른 풀이</h1>
<pre><code class="language-js">function solution(lottos, win_nums) {
    const rank = [6, 6, 5, 4, 3, 2, 1];

    let minCount = lottos.filter(v =&gt; win_nums.includes(v)).length;
    let zeroCount = lottos.filter(v =&gt; !v).length;

    const maxCount = minCount + zeroCount;

    return [rank[maxCount], rank[minCount]];
}</code></pre>
<h2 id="다른-풀이-설명">다른 풀이 설명</h2>
<ol>
<li>사용 함수</li>
</ol>
<ul>
<li><code>중복</code></li>
</ul>
<ol start="2">
<li>풀이</li>
</ol>
<ul>
<li>rank 를 array로 만들어버린 idea가 좋다. .includes 쓴 것도 깔끔하다.</li>
<li>!0 = true 를 이용해서 0을 카운트한 것도 좋은 것 같다.</li>
</ul>
<ol start="3">
<li>참고로 나랑 똑같은 코드는 프로그래머스에서 &#39;제발...ㅋㅋㅋ&#39; 댓글을 받았다.. ㅋㅋㅋㅋㅋ</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 최소 직사각형 _JavaScript]]></title>
            <link>https://velog.io/@ne_ol/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%B5%9C%EC%86%8C-%EC%A7%81%EC%82%AC%EA%B0%81%ED%98%95-JavaScript</link>
            <guid>https://velog.io/@ne_ol/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%B5%9C%EC%86%8C-%EC%A7%81%EC%82%AC%EA%B0%81%ED%98%95-JavaScript</guid>
            <pubDate>Wed, 19 Jan 2022 01:08:52 GMT</pubDate>
            <description><![CDATA[<h1 id="문제-설명">문제 설명</h1>
<p>명함 지갑을 만드는 회사에서 지갑의 크기를 정하려고 합니다. 다양한 모양과 크기의 명함들을 모두 수납할 수 있으면서, 작아서 들고 다니기 편한 지갑을 만들어야 합니다. 이러한 요건을 만족하는 지갑을 만들기 위해 디자인팀은 모든 명함의 가로 길이와 세로 길이를 조사했습니다.
아래 표는 4가지 명함의 가로 길이와 세로 길이를 나타냅니다.</p>
<table>
<thead>
<tr>
<th>명함 번호</th>
<th>가로 길이</th>
<th>세로 길이</th>
</tr>
</thead>
<tbody><tr>
<td>1</td>
<td>60</td>
<td>50</td>
</tr>
<tr>
<td>2</td>
<td>30</td>
<td>70</td>
</tr>
<tr>
<td>3</td>
<td>60</td>
<td>30</td>
</tr>
<tr>
<td>4</td>
<td>80</td>
<td>40</td>
</tr>
<tr>
<td>가장 긴 가로 길이와 세로 길이가 각각 80, 70이기 때문에 80(가로) x 70(세로) 크기의 지갑을 만들면 모든 명함들을 수납할 수 있습니다. 하지만 2번 명함을 가로로 눕혀 수납한다면 80(가로) x 50(세로) 크기의 지갑으로 모든 명함들을 수납할 수 있습니다. 이때의 지갑 크기는 4000(=80 x 50)입니다.</td>
<td></td>
<td></td>
</tr>
<tr>
<td>모든 명함의 가로 길이와 세로 길이를 나타내는 2차원 배열 sizes가 매개변수로 주어집니다. 모든 명함을 수납할 수 있는 가장 작은 지갑을 만들 때, 지갑의 크기를 return 하도록 solution 함수를 완성해주세요.</td>
<td></td>
<td></td>
</tr>
</tbody></table>
<h2 id="제한-사항">제한 사항</h2>
<ul>
<li>sizes의 길이는 1 이상 10,000 이하입니다.<ul>
<li>sizes의 원소는 [w, h] 형식입니다.</li>
<li>w는 명함의 가로 길이를 나타냅니다.</li>
<li>h는 명함의 세로 길이를 나타냅니다.</li>
<li>w와 h는 1 이상 1,000 이하인 자연수입니다.</li>
</ul>
</li>
</ul>
<h2 id="입출력-예">입출력 예</h2>
<table>
<thead>
<tr>
<th>sizes</th>
<th>result</th>
</tr>
</thead>
<tbody><tr>
<td>[[60, 50], [30, 70], [60, 30], [80, 40]]</td>
<td>4000</td>
</tr>
<tr>
<td>[[10, 7], [12, 3], [8, 15], [14, 7], [5, 15]]</td>
<td>120</td>
</tr>
<tr>
<td>[[14, 4], [19, 6], [6, 16], [18, 7], [7, 11]]</td>
<td>133</td>
</tr>
</tbody></table>
<h2 id="입출력-예-설명">입출력 예 설명</h2>
<p>입출력 예 #1</p>
<ul>
<li>문제 예시와 같습니다.</li>
</ul>
<p>입출력 예 #2</p>
<ul>
<li>명함들을 적절히 회전시켜 겹쳤을 때, 3번째 명함(가로: 8, 세로: 15)이 다른 모든 명함보다 크기가 큽니다. 따라서 지갑의 크기는 3번째 명함의 크기와 같으며, 120(=8 x 15)을 return 합니다.</li>
</ul>
<p>입출력 예 #3</p>
<ul>
<li>명함들을 적절히 회전시켜 겹쳤을 때, 모든 명함을 포함하는 가장 작은 지갑의 크기는 133(=19 x 7)입니다.</li>
</ul>
<hr>
<h1 id="기본-solution-코드">기본 solution 코드</h1>
<pre><code class="language-javascript">function solution(num) {
    var answer = 0;
    return answer;
}</code></pre>
<h2 id="문제-풀이">문제 풀이</h2>
<pre><code class="language-javascript">function solution(sizes) {
    var width = [], height = [];
    sizes.forEach(el =&gt; el.sort((a,b)=&gt;b-a));
    for (let i = 0; i &lt; sizes.length; i++) {
        width.push(sizes[i][0]);
        height.push(sizes[i][1]);
    }
    return Math.max(...width) * Math.max(...height);
}</code></pre>
<h2 id="풀이-설명">풀이 설명</h2>
<p>고민을 많이 했던 문제. 처음에 가장 큰 값은 빼낸 다음에 어찌어찌해서 풀려고 했지만 역시 되지 않았다. 가로 길이에서 가장 큰, 세로 길이에서 가장 큰 값 두 개를 사용하는 게 아니기 때문제 조금 복잡했다. 결국 명함을 뒤집어서  가로나 세로 중 큰 값으로 나열을 하고, array들의 같은 index값을 비교해서 가장 큰 두 값을 반환했다.</p>
<h2 id="사용-함수">사용 함수</h2>
<ul>
<li>Math.max(): 입력값으로 받은 0개 이상의 숫자 중 가장 큰 숫자를 반환<ul>
<li>arr.reduce(function(a, b) {
return Math.max(a, b);
});<br>혹은 
... / spread operator를 사용해서 array의 최대값을 가져올 수 있다. </li>
</ul>
</li>
</ul>
<p>(출처: <a href="https://developer.mozilla.org/ko/">https://developer.mozilla.org/ko/</a>)</p>
<hr>
<h1 id="다른-풀이">다른 풀이</h1>
<pre><code class="language-javascript">function solution(sizes) {
    let w = 0;
    let h = 0;
    sizes.forEach(s =&gt; {
        const [a, b] = s.sort((a,b) =&gt; a-b);
        if (a &gt; h) h = a;
        if (b &gt; w) w = b;
    });
    return w * h;
}</code></pre>
<h2 id="다른-풀이-설명">다른 풀이 설명</h2>
<ol>
<li>사용 함수
<code>중복</code></li>
</ol>
<ol start="2">
<li><p>풀이</p>
<ul>
<li>비슷한 맥락</li>
</ul>
</li>
<li></li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[항해99 5기 CS Study - 1장 컴퓨터 내부의 언어 체계]]></title>
            <link>https://velog.io/@ne_ol/%ED%95%AD%ED%95%B499-5%EA%B8%B0-CS-Study-1</link>
            <guid>https://velog.io/@ne_ol/%ED%95%AD%ED%95%B499-5%EA%B8%B0-CS-Study-1</guid>
            <pubDate>Tue, 18 Jan 2022 12:57:07 GMT</pubDate>
            <description><![CDATA[<h1 id="5-정수를-비트로-표현하는-방법">5. 정수를 비트로 표현하는 방법</h1>
<h2 id="1-양의-정수-표현">1. 양의 정수 표현</h2>
<ul>
<li>인간<ul>
<li>10진수 (Decimal Number)</li>
<li>손가락과 발가락이 열 개라서 사용</li>
<li>10가지의 기호 (Digit)을 상자에 담을 수 있다<img src="https://images.velog.io/images/ne_ol/post/cefc1694-ec94-4f2b-9b2a-1544d1644f78/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202022-01-18%20%EC%98%A4%ED%9B%84%207.10.20.png" width="30%" height="30%"></li>
<li>밑이 10인 시스템 (base-10)</li>
<li>5,028 in 10진수 -&gt; 네 자리<img src="https://images.velog.io/images/ne_ol/post/57b91e1f-0e51-4e7b-abea-981d398cc6c8/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202022-01-18%20%EC%98%A4%ED%9B%84%207.17.54.png" width="30%" height="30%"></li>
</ul>
</li>
<li>비트<ul>
<li>2진법 -&gt; 0, 1만 상자에 담을 수 있다</li>
<li>5,028 in 2진수 -&gt; 13 비트<img src="https://images.velog.io/images/ne_ol/post/424e7c38-7837-451b-9a71-75396d3a40e6/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202022-01-18%20%EC%98%A4%ED%9B%84%207.32.32.png"></li>
<li>LSB: least significant bit, 가장 작은 유효 비트</li>
<li>MSB: most signficant bit, 가장 큰 유효 비트</li>
</ul>
</li>
</ul>
<h2 id="2-2진수-덧셈">2. 2진수 덧셈</h2>
<ul>
<li>10진수의 덧셈과 같이 가장 오른쪽에서 왼쪽으로 각 자리의 숫자를 더하고, 결과가 2보다 크면 1을 다음 자리 (왼쪽)로 올린다.<p align="center"><img src="https://images.velog.io/images/ne_ol/post/a599fffc-0dda-4797-9dcb-094e63ad5de2/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202022-01-18%20%EC%98%A4%ED%9B%84%208.51.28.png" width="30%" height="30%"></p>
- A + B = A XOR B 
- A + B의 올림 = A AND B
<p align="center"><img src="https://images.velog.io/images/ne_ol/post/b8476c3a-fb76-43c3-8d35-51de9a780b3c/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202022-01-18%20%EC%98%A4%ED%9B%84%209.03.52.png"></p></li>
<li>Overflow: 비트 덧셈의 결과가 비트의 개수로 표현 가능 범위 초과 (=MSB에서 올림 발생)<ul>
<li>Condition code register (조건 코드 레지스터)에서 Overflow bit 확인 가능</li>
</ul>
</li>
<li>Underflow: MSB 위쪽에서 1을 빌려오는 경우</li>
</ul>
<h2 id="3-음수-표현">3. 음수 표현</h2>
<h3 id="1-부호와-크기">1. 부호와 크기</h3>
<ul>
<li>MSB를 부호에 사용한다.</li>
<li>2진수 부호 표현<ul>
<li>0: 양수</li>
<li>1: 음수</li>
<li>부호와 크기 표현<ul>
<li>한 비트를 부호에 사용 + 나머지 비트로 크기 표현</li>
<li>0을 표현하는 방법 두 가지 (비용 낭비) &amp; XOR과 AND릍 통한 덧셈 불가 =&gt; 널리 사용 X</li>
</ul>
</li>
<li>2진수 부호와 크기 표현법 (4 비트)</li>
</ul>
</li>
</ul>
<p align="center"><img src="https://images.velog.io/images/ne_ol/post/6465b4a6-5728-492d-a3e5-23a56a38a346/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202022-01-18%20%EC%98%A4%ED%9B%84%209.22.57.png" width="50%" height="50%"></p>

<h3 id="2-1의-보수-ones-compliment">2. 1의 보수 (One&#39;s compliment)</h3>
<ul>
<li>양수의 모든 비트를 뒤집어서 표현</li>
<li>NOT 연산을 통해 보수를 얻음</li>
<li>부호와 크기 표현법처럼 현대 컴퓨터에서 사용 X (추가 하드웨어 필요 -&gt; 비용 낭비)</li>
<li>2진수 1의 보수 표현법 (4 비트)</li>
</ul>
<p align="center"><img src="https://images.velog.io/images/ne_ol/post/83760522-3fee-4896-a404-fa81afa60759/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202022-01-18%20%EC%98%A4%ED%9B%84%209.31.19.png" width="50%" height="50%"></p>


<h3 id="3-2의-보수-twos-compliment">3. 2의 보수 (Two&#39;s compliment)</h3>
<ul>
<li>부호가 있는 정수를 표현할 때 가장 보편적</li>
<li>비트의 NOT + 1 = 음수값<ul>
<li>비트: 0010 (+2)
-&gt; 1101 (NOT 비트) + 1 = 1111 (-2)</li>
</ul>
</li>
<li>2진수 1의 보수 표현법 (4 비트)<p align="center"><img src="https://images.velog.io/images/ne_ol/post/a11d403b-57e9-45da-afab-8a70fa3fcbad/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202022-01-18%20%EC%98%A4%ED%9B%84%209.46.26.png" width="50%" height="50%"></p></li>
<li>같은 숫자로 이뤄진 수라도 문맥에 따라 값이 달라진다!<ul>
<li>Quiz. 2진수 1111<ul>
<li>2의 보수: </li>
<li>1의 보수: </li>
<li>부호와 크기 표기: </li>
</ul>
</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 콜라츠 추측
_JavaScript]]></title>
            <link>https://velog.io/@ne_ol/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%BD%9C%EB%9D%BC%EC%B8%A0-%EC%B6%94%EC%B8%A1JavaScript</link>
            <guid>https://velog.io/@ne_ol/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%BD%9C%EB%9D%BC%EC%B8%A0-%EC%B6%94%EC%B8%A1JavaScript</guid>
            <pubDate>Tue, 18 Jan 2022 08:28:52 GMT</pubDate>
            <description><![CDATA[<h1 id="문제-설명">문제 설명</h1>
<p>문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.</p>
<h2 id="제한-사항">제한 사항</h2>
<p>문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.</p>
<h2 id="입출력-예">입출력 예</h2>
<table>
<thead>
<tr>
<th>n</th>
<th>result</th>
</tr>
</thead>
<tbody><tr>
<td>6</td>
<td>8</td>
</tr>
<tr>
<td>16</td>
<td>4</td>
</tr>
<tr>
<td>626331</td>
<td>-1</td>
</tr>
</tbody></table>
<h2 id="입출력-예-설명">입출력 예 설명</h2>
<p>입출력 예 #1</p>
<ul>
<li>문제의 설명과 같습니다.</li>
</ul>
<p>입출력 예 #2</p>
<ul>
<li>16 -&gt; 8 -&gt; 4 -&gt; 2 -&gt; 1 이되어 총 4번만에 1이 됩니다.</li>
</ul>
<p>입출력 예 #3</p>
<ul>
<li>626331은 500번을 시도해도 1이 되지 못하므로 -1을 리턴해야합니다.</li>
</ul>
<hr>
<h1 id="기본-solution-코드">기본 solution 코드</h1>
<pre><code class="language-javascript">function solution(num) {
    var answer = 0;
    return answer;
}</code></pre>
<h2 id="문제-풀이">문제 풀이</h2>
<pre><code class="language-javascript">function solution(num) {
    var answer = 0;
    while (num !== 1) { //num이 1이 아니라면 계속 loop를 돌린다
        if (answer &gt;= 500) { //500번이 넘어가면 
            return -1;
        }
        num %2 ? num = num * 3 + 1 : num = num / 2;
        answer++;
    }
    return answer;
}</code></pre>
<h2 id="풀이-설명">풀이 설명</h2>
<p>.while을 처음 써봤다. 조금 헷갈렸다. 조건 삼항 연산자 우측에 true와 false에 해당하는 action을 적을 때 앞단에 &#39;num=&#39;을 안 써줘서 고생했었다.</p>
<h2 id="사용-함수">사용 함수</h2>
<p><code>중복</code></p>
<hr>
<h1 id="다른-풀이">다른 풀이</h1>
<p><code>내 풀이랑 비슷해서 skip</code></p>
]]></description>
        </item>
    </channel>
</rss>