<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>s_i_o_n.log</title>
        <link>https://velog.io/</link>
        <description>공부한 것을 글로 저장하자!</description>
        <lastBuildDate>Sat, 30 Apr 2022 03:59:44 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>s_i_o_n.log</title>
            <url>https://images.velog.io/profiles/s_i_o_n/thumbnails/1561360552.438.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. s_i_o_n.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/s_i_o_n" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[react] styled-components - Theming]]></title>
            <link>https://velog.io/@s_i_o_n/react-styled-components-Theming</link>
            <guid>https://velog.io/@s_i_o_n/react-styled-components-Theming</guid>
            <pubDate>Sat, 30 Apr 2022 03:59:44 GMT</pubDate>
            <description><![CDATA[<h1 id="styled-components-theming">Styled Components Theming</h1>
<p>Styled Components의 강점 중 하나는 테마를 제공하는 것이다.
컨텍스트 API를 통해 아래에 있는 모든 React구성 요소에 테마를 적용시킬 수 있다.</p>
<p>이를 활용하면 다크모드, 라이트모드 등 다양한 테마를 홈페이지에 적용시킬 수 있다.
(만약 CSS를 활용했다면..? 고생스러운 일이 아닐 수 없다.)</p>
<h2 id="themeprovider">ThemeProvider</h2>
<p>Styled Components에서는 ThemeProvider에 속한 모든 컴포넌트에게 theme속성을 가지게 해준다.
(Context API) </p>
<p>기본 사용방법은 다음과 같다.</p>
<pre><code class="language-javascript">// App.js
import styled, { ThemeProvider } from &quot;styled-components&quot;;

const Wrapper = styled.section`
  background-color: ${props =&gt; props.theme.bgColor};
  color: ${props =&gt; props.theme.color};
  padding: 4em;
  text-align: center;
`;

const Title = styled.h1`
  font-size: 1.5em;
  text-align: center;
`;
const theme = {
  bgColor: &quot;black&quot;,
  color: &quot;white&quot;
}

function App() {
  return (
    &lt;ThemeProvider theme={theme}&gt;
      &lt;Wrapper&gt;
        &lt;Title&gt;안녕하세요!&lt;/Title&gt;
      &lt;/Wrapper&gt;
    &lt;/ThemeProvider&gt;
  );
}
export default App;</code></pre>
<p><img src="https://velog.velcdn.com/images/s_i_o_n/post/6f9e2950-f468-414f-bbf9-6cf99fe21bce/image.png" alt="theme 적용 결과-1"></p>
<p>원하는 상위 컴포넌트에서 <code>&lt;ThemeProvider theme={사용자 정의}&gt;</code> <code>theme</code> props를 전달하여 하위 컴포넌트에서 받아 사용이 가능하다.</p>
<h3 id="darkmode-lightmode">darkmode, lightmode</h3>
<p><code>ThemeProvide</code>를 사용하면 간단하게 <code>darkmode</code>와 <code>lightmode</code>를 사용할 수 있다.</p>
<pre><code class="language-javascript">//theme.js
export const dark = {
    bgColor: &quot;black&quot;,
    color: &quot;white&quot;
}

export const light = {
    bgColor: &quot;white&quot;,
    color: &quot;dark&quot;
}

// App.js

import styled, { ThemeProvider } from &quot;styled-components&quot;;
import GlobalStyle from &quot;./GlobalStyle&quot;;
import { useState } from &quot;react&quot;;
import { dark, light } from &quot;./theme&quot;;

const Wrapper = styled.section`
  background-color: ${props =&gt; props.theme.bgColor};
  color: ${props =&gt; props.theme.color};
  padding: 4em;
  text-align: center;
`;

const Title = styled.h1`
  font-size: 1.5em;
  text-align: center;
`;

function App() {
  const [isDark, setIsDark] = useState(true);
  const handleMode = () =&gt; setIsDark(!isDark);
  const theme = isDark ? dark : light;
  return (
    &lt;ThemeProvider theme={theme}&gt;
      &lt;GlobalStyle/&gt;
      &lt;Wrapper&gt;
        &lt;Title&gt;안녕하세요!&lt;/Title&gt;
      &lt;/Wrapper&gt;
      &lt;button onClick={handleMode}&gt;모드변경&lt;/button&gt;
    &lt;/ThemeProvider&gt;
  );
}
export default App;
</code></pre>
<p>다음과 같은 방식으로 쉽게 다크모드 및 라이트모드를 구성할 수 있다.
추후 <code>isDark</code> 변수는 <code>Redux</code>와 같은 상태 관리 라이브러리로 제어할 수 있다.</p>
<h2 id="globalstyle">GlobalStyle</h2>
<p>만약 <code>Theme</code>을 활용하지 않고 모든 요소들에게 스타일을 적용시킬려면 어떻게 하면될까?
<code>GlobalStyle</code>을 활용하면 모든 요소들에게 스타일을 줄 수 있다.</p>
<pre><code class="language-javascript">// GlobalStyle.js
import { createGlobalStyle } from &quot;styled-components&quot;;

const GlobalStyle = createGlobalStyle`
  html, body, div, span, applet, object, iframe,
    h1, h2, h3, h4, h5, h6, p, blockquote, pre,
    a, abbr, acronym, address, big, cite, code,
    del, dfn, em, img, ins, kbd, q, s, samp,
    small, strike, strong, sub, sup, tt, var,
    b, u, i, center,
    dl, dt, dd, ol, ul, li,
    fieldset, form, label, legend,
    table, caption, tbody, tfoot, thead, tr, th, td,
    article, aside, canvas, details, embed,
    figure, figcaption, footer, header, hgroup,
    menu, nav, output, ruby, section, summary,
    time, mark, audio, video {
        margin: 0;
        padding: 0;
        border: 0;
        font-size: 100%;
        font: inherit;
        vertical-align: baseline;
    }
    /* HTML5 display-role reset for older browsers */
    article, aside, details, figcaption, figure,
    footer, header, hgroup, menu, nav, section {
        display: block;
    }
    body {
        line-height: 1;
    }
    ol, ul {
        list-style: none;
    }
    blockquote, q {
        quotes: none;
    }
    blockquote:before, blockquote:after,
    q:before, q:after {
        content: &#39;&#39;;
        content: none;
    }
    table {
        border-collapse: collapse;
        border-spacing: 0;
    }
`;

export default GlobalStyle;

//App.js
function App() {
  return (
    &lt;ThemeProvider theme={theme}&gt;
      &lt;GlobalStyle/&gt;
      &lt;Wrapper&gt;
        &lt;Title&gt;안녕하세요!&lt;/Title&gt;
      &lt;/Wrapper&gt;
    &lt;/ThemeProvider&gt;
  );
}</code></pre>
<p>GlobalStyle은  <code>createGlobalStyle</code>를 사용하여 생성하면 된다.
해당 내용은 css reset에 관한 내용으로 전체적인 요소에 적용할 스타일을 넣으면 된다.
또한 <code>&lt;GlobalStyle/&gt;</code>은 최상단에 위치시켜야 전체적인 요소에 적용시킬 수 있다.</p>
<h2 id="참고">참고</h2>
<p><a href="https://styled-components.com/docs">공식문서</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[react] styled-components - 시작하기]]></title>
            <link>https://velog.io/@s_i_o_n/react-styled-components</link>
            <guid>https://velog.io/@s_i_o_n/react-styled-components</guid>
            <pubDate>Mon, 25 Apr 2022 09:54:05 GMT</pubDate>
            <description><![CDATA[<h1 id="styled-components란">Styled Components란?</h1>
<p>공식문서에서는 다음과 같이 설명하고 있다.</p>
<blockquote>
<p>Visual primitives for the component age.
<em>구성 요소에 대한 시각적 기본 요소.</em></p>
</blockquote>
<p>ES6과 CSS의 최상의 비트(?)를 사용해서 스타일링하는데 스트레스를 날릴 수 있다.</p>
<p>이렇게만 설명하면 크게 와 닿지 않으니 다음 예제를 확인해보자.</p>
<h3 id="기존-방식">기존 방식</h3>
<pre><code class="language-css">.button {
    box-sizing: border-box;
    margin: 10px;
    padding: 15px 30px;
    border-radius: 15px;
    box-shadow: 0 15px 35px rgba(0, 0, 0, 0.2);
}

.button--color-white {
    background-color: white;
    color: black;
}

.button--color-black {
    background-color: black;
    color: white;
}
</code></pre>
<pre><code class="language-javascript">import &quot;./App.css&quot;

&lt;div&gt;
  &lt;button className=&quot;button button--color-white&quot;&gt;하얀색&lt;/button&gt;
  &lt;button className=&quot;button button--color-black&quot;&gt;검은색&lt;/button&gt;
&lt;/div&gt;</code></pre>
<p><img src="https://velog.velcdn.com/images/s_i_o_n/post/b9c98738-6d03-4583-ae60-1562d6128cd4/image.png" alt="기존CSS버튼예시"></p>
<h3 id="styled-components방식">styled-components방식</h3>
<pre><code class="language-javascript">const Button = styled.button`
  box-sizing: border-box;
  margin: 10px;
  padding: 15px 30px;
  border-radius: 15px;
  box-shadow: 0 15px 35px rgba(0, 0, 0, 0.2);
  background-color: ${props =&gt; props.bgColor};
  color: ${props =&gt; props.color};
`;

&lt;div&gt;
  &lt;Button bgColor=&quot;white&quot; color=&quot;black&quot;&gt;하얀색&lt;/Button&gt;
  &lt;Button bgColor=&quot;red&quot; color=&quot;white&quot;&gt;빨간색&lt;/Button&gt;
  &lt;Button bgColor=&quot;black&quot; color=&quot;white&quot;&gt;검은색&lt;/Button&gt;
&lt;/div&gt;</code></pre>
<p><img src="https://velog.velcdn.com/images/s_i_o_n/post/30f023cf-4bc3-4a24-9b78-526b710eac6c/image.png" alt="styled-components방식"></p>
<p>Button base에 스타일링을 추가하려면 다음과 같은 방법이 있다.</p>
<ol>
<li>class 추가</li>
<li>style={isBlack ? &quot;{background-color: &quot;black&quot;; color:&quot;white&quot;;}&quot;: &quot;&quot;}</li>
</ol>
<p>만약 한 버튼이 상황에 따라 여러 색상으로 바뀐다면? 지저분한 코드가 더 추가될 뿐이다.</p>
<p>Styled-components를 이용하면 props를 통해 위의 상황을 쉽게 해결할 수 있다.</p>
<h2 id="styled-components-동기부여">styled-components 동기부여</h2>
<ul>
<li>자동 CSS
   페이지에서 랜더링되는 구성 요소를 추적하고 자동으로 스타일을 삽입해 줍니다.</li>
<li>클래스 이름 버그 없음 
   styled-components는 컴파일 때 자동으로 고유한 클래스 이름을 생성하여 중복, 철자오류에 대해 걱정할 필요가 없습니다.</li>
<li>단순 동적 스타일링
  수십 개의 클래스를 수동으로 관리하지 않고도 props 또는 전역 테마를 기반으로 구성 요소를 스타일링할 수 있습니다.</li>
<li>손쉬운 유지 관리
  스타일을 찾기 위해 다른 파일을 검색할 필요가 없어 유지보수하기 쉽습니다.</li>
<li>자동 공급업체 접두사
  CSS를 현재 표준으로 작성해도, 자동으로 변환해 줍니다.</li>
</ul>
<h2 id="설치하기">설치하기</h2>
<pre><code class="language-bash"># npm
npm install styled-components

# yarn
yarn add style-components

# 만약 typescript를 사용하신다면

npm install @types/styled-components
or
yarn add @types/styled-components</code></pre>
<h2 id="시작하기">시작하기</h2>
<h3 id="basic">Basic</h3>
<p>기본적은 구조는 다음과 같다.</p>
<pre><code class="language-javascript">// styled.(구성요소)(백틱);
const Wrapper = styled.section`
  padding: 4em;
  background: papayawhip;  
`;

const Title = styled.h1`
  font-size: 1.5em;
  text-align: center;
  color: palevioletred;
`;

function App() {
  return (
    &lt;Wrapper&gt;
      &lt;Title&gt;안녕하세요!&lt;/Title&gt;
    &lt;/Wrapper&gt;
  );
}
export default App;
</code></pre>
<p><img src="https://velog.velcdn.com/images/s_i_o_n/post/23847d49-2cab-4d3f-9114-ecbf09be1280/image.png" alt="실행화면"></p>
<p>const (변수명) = styled.(구성요소)(백틱)(백틱);
사용하는 것은 기존 컴포넌트 방식과 동일하다.</p>
<h3 id="props">props</h3>
<pre><code class="language-javascript">import &quot;./App.css&quot;
import styled from &quot;styled-components&quot;;

const Wrapper = styled.section`
  padding: 4em;
  background: papayawhip;
  text-align: center;
`;

const Title = styled.h1`
  font-size: 1.5em;
  text-align: center;
  color: palevioletred;
`;

const Button = styled.button`
  /* Adapt the colors based on primary prop */
  background: ${props =&gt; props.palevioletred ? &quot;palevioletred&quot; : &quot;white&quot;};
  color: ${props =&gt; props.palevioletred ? &quot;white&quot; : &quot;palevioletred&quot;};

  font-size: 1em;
  margin: 1em;
  padding: 0.25em 1em;
  border: 2px solid palevioletred;
  border-radius: 3px;
`;


function App() {
  return (
    &lt;Wrapper&gt;
      &lt;Title&gt;안녕하세요!&lt;/Title&gt;
      &lt;Button&gt;기본&lt;/Button&gt;
      &lt;Button palevioletred&gt;palevioletred&lt;/Button&gt;
    &lt;/Wrapper&gt;
  );
}
export default App;</code></pre>
<p><img src="https://velog.velcdn.com/images/s_i_o_n/post/e9d6ada1-0df5-4fa2-8ab3-2d009b5acfaf/image.png" alt="props실행화면"></p>
<p>구성요소에 <code>palevioletred</code> <code>props</code>를 추가하였다.
해당 <code>Button</code>에서는 <code>props</code>를 받을 수 있으며 사용 방법은 위와 같이 활용할 수 있다.</p>
<h3 id="상속">상속</h3>
<pre><code class="language-javascript">import &quot;./App.css&quot;
import styled from &quot;styled-components&quot;;

const Wrapper = styled.section`
  padding: 4em;
  background: papayawhip;
  text-align: center;
`;

const Title = styled.h1`
  font-size: 1.5em;
  text-align: center;
  color: palevioletred;
`;

const Button = styled.button`
  color: palevioletred;
  font-size: 1em;
  margin: 1em;
  padding: 0.25em 1em;
  border: 2px solid  black;
  border-radius: 3px;
`;

const TomatoButton = styled(Button)`
  color: tomato;
  border-color: tomato;
`;

function App() {
  return (
    &lt;Wrapper&gt;
      &lt;Title&gt;안녕하세요!&lt;/Title&gt;
      &lt;Button&gt;기본&lt;/Button&gt;
      &lt;TomatoButton&gt;토마토&lt;/TomatoButton&gt;
    &lt;/Wrapper&gt;
  );
}
export default App;</code></pre>
<p><img src="https://velog.velcdn.com/images/s_i_o_n/post/50019226-9259-4fc8-a7f4-e371913da463/image.png" alt="상속실행화면"></p>
<p>상속하는 방법은 다음과 같다.
<code>styled.(부모 요소)</code> </p>
<pre><code class="language-javascript">const ReversedButton = props =&gt; &lt;Button {...props} children={props.children.split(&#39;&#39;).reverse()} /&gt;</code></pre>
<p>위와 같이 사용자 정의 요소를 추가해도 정삭적으로 작동합니다.</p>
<h2 id="마무리하며">마무리하며</h2>
<p><code>styled-components</code>를 사용하면 기존 CSS에 비해 코드를 재활용하여 쉽게 스타일링을 할 수 있습니다.</p>
<p>최근 화이트모드, 다크모드를 사용할 수 있는 홈페이지가 많이 만들어지고 있는데 이때 사용하면 쉽게 적용시킬 수 가 있습니다.</p>
<h2 id="참고">참고</h2>
<p><a href="https://styled-components.com/">공식문서</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[libft] 나만의 라이브러리를 만들자! - isalpha, isdigit, isalnum, isascii, isprint]]></title>
            <link>https://velog.io/@s_i_o_n/libft-%EB%82%98%EB%A7%8C%EC%9D%98-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC%EB%A5%BC-%EB%A7%8C%EB%93%A4%EC%9E%90-isalpha-isdigit-isalnum-isascii-isprint</link>
            <guid>https://velog.io/@s_i_o_n/libft-%EB%82%98%EB%A7%8C%EC%9D%98-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC%EB%A5%BC-%EB%A7%8C%EB%93%A4%EC%9E%90-isalpha-isdigit-isalnum-isascii-isprint</guid>
            <pubDate>Mon, 28 Mar 2022 08:41:09 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>본 코드는 C언어 기준으로 설명된 것이며 MAC의 man을 참고하고 있습니다. (ver 12.2)</p>
</blockquote>
<h3 id="isalpha">isalpha</h3>
<p>다음 함수는 해당 문자가 알파벳인지 판단하는 함수이다.</p>
<blockquote>
<p>man의 설명으로는 isupper(), islower()의 해당하는 문자인지 판단한다.</p>
</blockquote>
<h4 id="함수-원형">함수 원형</h4>
<pre><code class="language-c">int isalpha(int c);</code></pre>
<h4 id="인자-값">인자 값</h4>
<blockquote>
<p>unsigned char or EOF로 표현 가능한 (int c) 의 형태로 들어가게 되며, C언어에서 char형식의 문자가 int형으로 캐스팅되면 ascii코드로 변환하여 들어가게 된다.</p>
</blockquote>
<h4 id="리턴-값">리턴 값</h4>
<blockquote>
<p>true, false 즉 1과 0의 값을 리턴한다.</p>
</blockquote>
<h4 id="풀이">풀이</h4>
<blockquote>
<p>A-Z의 ascii || a-z의 ascii 값에 c가 포함되는지 확인.</p>
</blockquote>
<h3 id="isdigit">isdigit</h3>
<p>다음 함수는 해당 문자가 숫자인지 판단하는 함수이다.</p>
<blockquote>
<p>man의 설명으로는 isupper(), islower()의 해당하는 문자인지 판단한다.</p>
</blockquote>
<h4 id="함수-원형-1">함수 원형</h4>
<pre><code class="language-c">int isdigit(int c);</code></pre>
<h4 id="인자-값-1">인자 값</h4>
<blockquote>
<p>unsigned char or EOF로 표현 가능한 (int c) 의 형태로 들어가게 되며, C언어에서 char형식의 문자가 int형으로 캐스팅되면 ascii코드로 변환하여 들어가게 된다.</p>
</blockquote>
<h4 id="리턴-값-1">리턴 값</h4>
<blockquote>
<p>true, false 즉 1과 0의 값을 리턴한다.</p>
</blockquote>
<h4 id="풀이-1">풀이</h4>
<blockquote>
<p>0-9의 ascii값에 c가 포함되는지 확인.</p>
</blockquote>
<h3 id="isalnum">isalnum</h3>
<p>다음 함수는 해당 문자가 알파벳 또는 숫자인지 판단하는 함수이다.</p>
<blockquote>
<p>man의 설명으로는 isalpha(), isdigit()의 해당하는 문자인지 판단한다.</p>
</blockquote>
<h4 id="함수-원형-2">함수 원형</h4>
<pre><code class="language-c">int isalnum(int c);</code></pre>
<h4 id="인자-값-2">인자 값</h4>
<blockquote>
<p>unsigned char or EOF로 표현 가능한 (int c) 의 형태로 들어가게 되며, C언어에서 char형식의 문자가 int형으로 캐스팅되면 ascii코드로 변환하여 들어가게 된다.</p>
</blockquote>
<h4 id="리턴-값-2">리턴 값</h4>
<blockquote>
<p>true, false 즉 1과 0의 값을 리턴한다.</p>
</blockquote>
<h4 id="풀이-2">풀이</h4>
<blockquote>
<ol>
<li>A-Z의 ascii || a-z의 ascii || 0-9의 ascii값에 c가 포함되는지 확인.</li>
<li>isalpha(c) || isdigit(c)</li>
</ol>
</blockquote>
<h3 id="isascii">isascii</h3>
<p>다음 함수는 해당 문자가 ascii값에 포함되는지 확인하는 함수이다.</p>
<h4 id="함수-원형-3">함수 원형</h4>
<pre><code class="language-c">int isascii(int c);</code></pre>
<h4 id="인자-값-3">인자 값</h4>
<blockquote>
<p>unsigned char or EOF로 표현 가능한 (int c) 의 형태로 들어가게 되며, C언어에서 char형식의 문자가 int형으로 캐스팅되면 ascii코드로 변환하여 들어가게 된다.</p>
</blockquote>
<h4 id="리턴-값-3">리턴 값</h4>
<blockquote>
<p>true, false 즉 1과 0의 값을 리턴한다.</p>
</blockquote>
<h4 id="풀이-3">풀이</h4>
<blockquote>
<ol>
<li>문자 c가 0 ~ 0177 값에 포함되는지 확인한다. (8진법)</li>
<li>문자 c가 0 ~ 127 값에 포함되는지 확인한다. (10진법)</li>
</ol>
</blockquote>
<h3 id="isprint">isprint</h3>
<p>다음 함수는 해당 문자가 출력가능한 문자인지 판단하는 함수이다.</p>
<blockquote>
<p>man의 설명으로는 공백을 포함한 출력가능한 문자인지 판단한다.</p>
</blockquote>
<h4 id="함수-원형-4">함수 원형</h4>
<pre><code class="language-c">int isprint(int c);</code></pre>
<h4 id="인자-값-4">인자 값</h4>
<blockquote>
<p>unsigned char or EOF로 표현 가능한 (int c) 의 형태로 들어가게 되며, C언어에서 char형식의 문자가 int형으로 캐스팅되면 ascii코드로 변환하여 들어가게 된다.</p>
</blockquote>
<h4 id="리턴-값-4">리턴 값</h4>
<blockquote>
<p>true, false 즉 1과 0의 값을 리턴한다.</p>
</blockquote>
<h4 id="풀이-4">풀이</h4>
<blockquote>
<p>문자 c가 32 - 126에 포함되는지 확인한다.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[42Seoul] 42Seoul 라피신 4주차 후기 및 최종합격 (6기-1차)]]></title>
            <link>https://velog.io/@s_i_o_n/42Seoul-42Seoul-%EB%9D%BC%ED%94%BC%EC%8B%A0-4%EC%A3%BC%EC%B0%A8-%ED%9B%84%EA%B8%B0-%EB%B0%8F-%EC%B5%9C%EC%A2%85%ED%95%A9%EA%B2%A9-6%EA%B8%B0-1%EC%B0%A8</link>
            <guid>https://velog.io/@s_i_o_n/42Seoul-42Seoul-%EB%9D%BC%ED%94%BC%EC%8B%A0-4%EC%A3%BC%EC%B0%A8-%ED%9B%84%EA%B8%B0-%EB%B0%8F-%EC%B5%9C%EC%A2%85%ED%95%A9%EA%B2%A9-6%EA%B8%B0-1%EC%B0%A8</guid>
            <pubDate>Tue, 22 Mar 2022 06:17:32 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>6기 1차로 2022.01.03 ~ 2022.01.28 동안 진행한 후기입니다.</p>
</blockquote>
<h3 id="4주차-후기">4주차 후기</h3>
<p>대망의 마지막 주차인 4주차입니다!! 🥳 
4주차에는 개인 과제 vs BSQ로 나누어 진행하는데 저희 팀은 개인 과제를 빠르게 끝내고 BSQ를 하자하여 C08 C09를 빠르게 진행하였습니다.
다른 피시너분들도 대부분 진도가 비슷했는데, 전 RUSH에서 다 0점을 받아 초초함을 느끼며 만점을 위해 열심히 과제 풀이를 진행하였습니다.</p>
<p>목요일날 BSQ를 피시너분들이 평가하는데 개인과제 및 BSQ 평가 받으시려는 분들이 많아 엄청난 티켓팅을 해야합니다. 무한 새로고침!</p>
<p>하지만,</p>
<p><span style="color : red;"><strong>BSQ 0점...</strong></span> norminette error... 가 나왔네여</p>
<p>동료 평가에서는 만점이였고 다시 한번 깃 클론해서 norminette 확인했는데 에러라니.. 너무 허무한 결과가 나왔습니다..  </p>
<h4 id="최종-시험">최종 시험</h4>
<p>최종 시험은 10-18시까지 8시간 동안 진행되며, 중간에 나올 수 없었습니다.
저는 미리 스타벅스에서 동료들을 만나 간단한 샌드위치를 먹고 진행하였습니다.</p>
<p>최종 시험에서 70점 이상을 받아야 합격한다는 썰이 있어서 전 최선을 다했습니다. 아무래도 팀 과제 0점이 커서 100점 목표로 시험을 진행했습니다.
(대부분 70-80점 정도 받고 시험 종료 후 나가십니다. 13-14시 정도에 마무리하네요.)</p>
<p>최종 결과는 90점으로 마무리했습니다.</p>
<h4 id="최종-결과">최종 결과</h4>
<p>과제 : C07을 제외한 C09까지 진행하였습니다.
시험 : exam00 - 80 exam01 - x exam02 - 84 final exam - 90
팀과제 : 0점 (전부 참여하긴함.)
LEVEL : 9lv 3%</p>
<p>9lv을 넘겨 다행이였지만, 아쉬움이 많이 남았습니다. (평균 9lv - 10lv정도 입니다.)</p>
<h4 id="라피신을-하면서-느낀점">라피신을 하면서 느낀점</h4>
<p>42Seoul의 본과정을 하기위한 첫 걸음인 라피신을 하면서 배운 것이라면 <strong>동료학습</strong>을 뽑을 것 같습니다. 혼자 진도를 잘 나가시는 분들도 있지만, 동료들과 함께 학습하면서 토론과 평가를 진행하는와 배우는게 많이 있었습니다. 라피신에서 코딩쪽으로 실력이 올라가는 것보다 동료들과 함께하면서 같이 성장할 수 있다는 생각을 하게된 한달이였습니다. (좋은 문화를 경험할 수 있는 기회) </p>
<h4 id="결과">결과</h4>
<p><img src="https://images.velog.io/images/s_i_o_n/post/c8606b4d-36dd-4423-be78-31632b3ab331/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-03-03%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%207.28.05.png" alt="최종합격"></p>
<p>결과는 최종 합격으로 42서울의 카뎃이 되었습니다!! 🥳🥳🥳🥳🥳
개발자라는 꿈을 가진 동료들과 2년 간 잘 공부해서 더욱 성장하는 개발자가 되겠습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[42Seoul] 42Seoul 라피신 2-3주차 후기 (6기-1차)]]></title>
            <link>https://velog.io/@s_i_o_n/42Seoul-42Seoul-%EB%9D%BC%ED%94%BC%EC%8B%A0-2-3%EC%A3%BC%EC%B0%A8-%ED%9B%84%EA%B8%B0-6%EA%B8%B0-1%EC%B0%A8</link>
            <guid>https://velog.io/@s_i_o_n/42Seoul-42Seoul-%EB%9D%BC%ED%94%BC%EC%8B%A0-2-3%EC%A3%BC%EC%B0%A8-%ED%9B%84%EA%B8%B0-6%EA%B8%B0-1%EC%B0%A8</guid>
            <pubDate>Sun, 20 Mar 2022 06:26:59 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>6기 1차로 2022.01.03 ~ 2022.01.28 동안 진행한 후기입니다.</p>
</blockquote>
<h3 id="2주차-후기">2주차 후기</h3>
<p>2주차 쯤 아이맥 사용과 zsh사용에 익숙해지며, 과제 진행에 대해 어느정도 이해가 되셨을 겁니다!! 이제 익숙한 C언어 과제를 풀면서 진도를 쭉 빼는 시간이였습니다.
저는 월-목 동안 C02까지 채점받아 LV4 78점 이였습니다.</p>
<p>C02는 문제수가 엄청 많았는데, 꼼꼼하게 NORM체크와 GCC체크를 하시는 것을 추천합니다.</p>
<h4 id="꿀팁">꿀팁</h4>
<p>저는 zsh를 사용하며 .zshrc 파일을 생성하여 아래의 명령어를 추가했습니다.</p>
<pre><code class="language-bash">alias norm=&quot;norminette -R checkHeader&quot;
alias gcc=&quot;gcc -Wall -Wextra -Werror&quot;</code></pre>
<p>추가 후 <strong>source .zshrc</strong> 명령어를 입력하시고 터미널을 껏다 켜주시면 됩니다.</p>
<p>위의 명령어를 추가하면 norminette나 gcc 할 때 옵션을 추가로 넣지 않아도 되며, 확실하게 평가를 받을 수 있습니다.</p>
<h4 id="시험-취소-이슈">시험 취소 이슈</h4>
<p>저희 기수 exam01에서는 서버 문제로 인해 시험이 중단되었습니다.
규정에 따르면 시험 시작 후 2시간 동안 서버가 고쳐지지 않는다면 자동 중단되었습니다.
(시험 서버는 프랑스 서버이며, 한국에서 따로 조치를 하기 어렵다고 합니다. 시차 등의 문제)
기술적인 이슈로 시험을 치루지 못하면 1차와 2차 인원을 분리 선발한다고 얘기들었습니다.</p>
<h4 id="rush01">Rush01</h4>
<p>Rush01의 문제는 스토쿠 알고리즘과 유사한 문제가 나왔습니다.
이전 Rush00과 다르게 난이도가 있었으며, 시간 복잡도를 고려해야했습니다.
(저희 팀은 7x7까지 가능했습니다 - 9x9까지하면 보너스 점수가!!)
하지만, 입력에 대한 예외처리가 부족하여 0점을 맞게 되었을 때 멘탈이 많이 흔들렸습니다.. 토일 빡시게 준비했는데... 0점이라니!!! 다들 입출력에 관한 예외를 잘 처리하시기 바랍니다.</p>
<h4 id="2주차-진도">2주차 진도</h4>
<p>과제 : C02까지 클리어
시험 : 0점 (서버 이슈)
RUSH : 0점
LEVEL : 4lv 78%</p>
<h3 id="3주차-후기">3주차 후기</h3>
<p>3주차에는 육체적으로 많이 힘들어지는 시기였습니다. 맨날 출퇴근을 하여 밤늦게 들어가니 지치지만, 같이하는 동료가 있기에 힘이 났던 시기였습니다. </p>
<p>3주차가 진행되면서 다른 사람들과 진도의 차이, 레벨의 차이 등 서로 예민할 수도 있습니다. 하지만, 신경쓰지말고 자신의 페이스를 잘 찾는걸 추천드립니다. 또한 평가가 마르게 되며, 엄청난 평가 티켓팅이 발생합니다! (사전에 평가포인트를 많이 모아두세요!)</p>
<p>또한 선택과 집중이 필요한 시기입니다. 모든 C과제를 풀 수 없으면 풀 수 있는 과제 먼저 빠르게 풀어야합니다! (저는 C07을 포기하고 C09먼저 풀었습니다.) Rush와 BSQ에 관해서도 포기할지, 투자를 할지 선택해야합니다.</p>
<p>저는  Rush02를 포기하고 개인과제와 BSQ에 몰입하였습니다.</p>
<h3 id="3주차-진도">3주차 진도</h3>
<p>과제 : C06까지 클리어
시험 : 84점
RUSH : 0점
LVEL : 7lv 20%</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[42Seoul] 42Seoul 라피신 1주차 후기 (6기-1차)]]></title>
            <link>https://velog.io/@s_i_o_n/42Seoul-42Seoul-%EB%9D%BC%ED%94%BC%EC%8B%A0-1%EC%A3%BC%EC%B0%A8-%ED%9B%84%EA%B8%B0-6%EA%B8%B0-1%EC%B0%A8</link>
            <guid>https://velog.io/@s_i_o_n/42Seoul-42Seoul-%EB%9D%BC%ED%94%BC%EC%8B%A0-1%EC%A3%BC%EC%B0%A8-%ED%9B%84%EA%B8%B0-6%EA%B8%B0-1%EC%B0%A8</guid>
            <pubDate>Sun, 20 Mar 2022 06:02:09 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>6기 1차로 2022.01.03 ~ 2022.01.28 동안 진행한 후기입니다.</p>
</blockquote>
<h2 id="라피신-1주차">라피신 1주차</h2>
<p>첫날 O.T에는 빨리가도 되고 늦게 가도 됩니다! 저는 2시30분쯤 강남 클러스터에 도착하여 진행하였습니다.
처음 가면 간단한 신상 정보를 알려주고 프로필 사진도 찍습니다. (웹캠으로 찍어 사진이 아주... 😵)
클러스터에 도착했을 때 아이맥이 두둔!! 엄청 납니다.
( 처음 mac os를 사용하면서왜 애플애플 하는지... 느꼈습니다. )</p>
<p align="center">
<img src="https://images.velog.io/images/s_i_o_n/post/3ef5fb3c-c5db-4426-a790-6721ffe1accf/%E1%84%8B%E1%85%A1%E1%84%8B%E1%85%B5%E1%84%86%E1%85%A2%E1%86%A8.jpeg" width="40%" height="30%"/>
</p>
<p align="center"> 첫날 받은 출입 카드와 아이맥 </p>


<h3 id="꿀팁">꿀팁!</h3>
<p>처음 로그인 시 바탕화면에 유튜브 링크가 있습니다. 유튜브 링크로 들어가 동영상 시청 후 진행하는 것이 좋습니다!</p>
<p>처음 가게되면 git ssh-keygen 부터 설정하게 됩니다.  (모든 과제는 git으로 채점합니다.)</p>
<p>42서울의 모든 과제는 친절하지 않습니다. 따라서 주위 피시너분들과 많이 소통해야합니다! 어색해도 말 걸고 친해집시다 ㅎㅎ.. 저는 옆에 계신분들이랑 한달을 함께하고 지금도 함께하고 있습니다.! </p>
<p>기본 설정이 끝났으면 Shell00 부터 과제를 시작하게 됩니다! (문제는 친절하지 않으니 <span style="color : red;"><strong>영문버전과 한글버전</strong> </span>둘 다 확인하세요!)</p>
<p>과제를 통과하기 위해서는 한 과제당 2번의 평가를 받아야합니다. 1평가당 1개의 포인트가 소모됩니다! 예약 취소 시에도 포인트가 차감되며 포인트는 다른 동료를 평가해주면 1개의 포인트를 획득할 수 있습니다!!</p>
<p><strong>포인트 이벤트</strong>가 있습니다! 이벤트 기간에는 평가 시 2개의 포인트를 획득할 수 있으며, 평가 포인트없이 평가를 받으실 수 있습니다!</p>
<p>평가 포인트가 많으시면 기부도 할 수 있습니다! 기부를 많이하게되면 포인트가 쌓여 다시 이벤트가 진행됩니다!</p>
<p>평가 시 주의사항을 잘 읽어보세요! 잘 읽지 않고 평가시 <span style="color : red;">T.I.G<span>를 받게됩니다.. </p>
<p>과제를 시작한 당신에게! 꼭 100점에 목매일 필요는 없습니다! 또한 재도전한다해서 감점도 없습니다. 도전에 두려워하지 마세요!!</p>
<p>100점 맞느라 시간을 많이 버리시는 분들도 있습니다!! 모르는 문제는 빠르게 넘어가시길..</p>
<p>또한 평가 중 한 문제가 틀릴 시 남은 문제도 다 0점처리됩니다. 모르는 것은 바로바로 동료에게 물어보세요!</p>
<p>첫 주차는 대부분 월-목까지 Shell01까지 끝내고 토-일은 rush를 진행합니다.  </p>
<h3 id="rush를-꼭해야하나요">rush를 꼭해야하나요?</h3>
<p>하는 것을 추천드립니다! rush를 진행하게되면 과제보다 많은 점수를 획득합니다. 저는 모든 rush를 신청했지만 다 0점처리됬습니다 하하.</p>
<h3 id="스케줄-관리">스케줄 관리</h3>
<p>1주차 때 느낀게 스케줄 관리를 빡시게 해야합니다. 보통 피시너일 때 하루에 10~11시간 정도 클러스터에서 과제를 푸는데 체력소모가 장난이 아닙니다.
저는 점심을 먹고 13시에 집에서 출발해 14:30분쯤 도착하여 23시까지 했습니다 (집 도착해서 씻고 누우면 12시 30분..)</p>
<h3 id="tig란">T.I.G란?</h3>
<p>42서울에서는 T.I.G라고 규칙을 위반할 시 2시간의 활동을 진행하게 됩니다!</p>
<p>(처음에는 규칙 설명도 불친절하고 받는 이유를 모르는 경우가 허다합니다. 하지만 잘 생각해보면 이유가 다 있습니다.)</p>
<p>저희 기수는 2틀차에서 100여명 정도 한번에 T.I.G를 받았던 경험도 있습니다... </p>
<p> T.I.G를 받게 되면 다양한 활동(?)을 진행합니다. 또한 2시간 동안 로그인이 불가하니.. 안받는 것을 추천드립니다. </p>
<p>T.I.G를 많이 받았다고 평가에서 불이익을 받지 않습니다. (큰 위반이 아닌이상..) 받았다면 맘편히 활동을 진행하면 됩니다.</p>
<p>저도 첫주에 2번의 T.I.G를 받았으며 그 이후로는 대부분 받지 않습니다.</p>
<h3 id="대망의-시험">대망의 시험!!!</h3>
<p>시험은 1~5시까지 진행됩니다! </p>
<p>시험 등록 무조건 하시길.. 2번해야합니다. 등록을 안할 시 로그인이 되지 않습니다.</p>
<p>시험 시작 후 로그인이 되셨다면 설명을 자세히 읽어보세요! 로그인하였다고 시험을 시작한 것은 아닙니다!</p>
<p>10분이내 시험을 시작못하면 강제 퇴실이 됩니다.
실제로 첫 시험에서 30%이상이 강제 퇴실 하였습니다...</p>
<h3 id="1-주차-진행사항">1 주차 진행사항</h3>
<p>과제 : shell00, shell01 100점</p>
<p>rush : 0점</p>
<p>시험 : 80점 
Level : 2lv 74%</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[42 Seoul] 42서울에 지원하게 된 계기]]></title>
            <link>https://velog.io/@s_i_o_n/42-Seoul-42%EC%84%9C%EC%9A%B8%EC%97%90-%EC%A7%80%EC%9B%90%ED%95%98%EA%B2%8C-%EB%90%9C-%EA%B3%84%EA%B8%B0</link>
            <guid>https://velog.io/@s_i_o_n/42-Seoul-42%EC%84%9C%EC%9A%B8%EC%97%90-%EC%A7%80%EC%9B%90%ED%95%98%EA%B2%8C-%EB%90%9C-%EA%B3%84%EA%B8%B0</guid>
            <pubDate>Sun, 20 Mar 2022 05:39:09 GMT</pubDate>
            <description><![CDATA[<h1 id="42서울-이란">42서울 이란?</h1>
<p>42서울은 프랑스 42에꼴로 부터 시작된 소프트웨어 인재양성 프로그램 중 하나입니다.</p>
<p>주요 특징으로는 교수, 교재, 학비가 없는 3無 교육이라는 점입니다.</p>
<p><a href="https://42seoul.kr/seoul42/main/view">https://42seoul.kr/seoul42/main/view</a></p>
<h2 id="신청-방법">신청 방법</h2>
<p>42서울을 신청하게되면 크게 2가지 단계로 진행되어 최종 본과정에 들어갈 수 있습니다.</p>
<h3 id="1-신청단계">1. 신청단계</h3>
<p>신청단계에서는 온라인 신청, 온라인 테스트, 체크인 미팅이 진행됩니다.</p>
<h3 id="1-1-온라인-신청-및-온라인-테스트">1-1. 온라인 신청 및 온라인 테스트</h3>
<p>온라인 신청 및 온라인 테스트는 언제나 볼 수 있으며, 이메일 당 한번의 시험기회를 주어집니다. 코딩 없이 논리력을 보는 테스트로 </p>
<p>간단한 게임으로 진행됩니다.</p>
<ul>
<li>2개의 게임에서  level 10 이상이면 대부분 통과됩니다.</li>
</ul>
<h3 id="1-2-체크인-미팅">1-2. 체크인 미팅</h3>
<p>여기서 부터 엄청난 티켓팅 실력이 필요합니다!! 선착순으로 체크인 미팅 신청을 받으며, 간단한 신상정보를 확인하는 단계입니다.</p>
<p>저는 집 인터넷이 느려 피시방에서 진행하였으며, 로그인 대기상태로 기다리다가 해당시간에 로그인 후 절대 새로고침하면 안됩니다!</p>
<p>새로고침 시 대기 순서가 밀려날 수 있으며, 로딩을 계속 기다리면 저절로 되게됩니다.</p>
<h3 id="2-라피신-1개월-집중교육">2. 라피신 1개월 집중교육</h3>
<p>라피신은 1개월 동안 Shell, C언어 과제를 학습하며 피신이 되기위한 마지막 테스트입니다!</p>
<p>라피신에 등록하기 위해서는 위의 체크인 미팅과 같이 티켓팅(?)을 해야합니다! (완전 빡셈)</p>
<p>2022년도 부터 모집인원 증가로 인해 비교적 쉬워졌지만, 어려운 것은 마찬가집니다.</p>
<p>라피신을 진행하게 되면 평가 목록이 무엇인지 모르지만! 다음과 같은 평가를 진행한다 말하고 있습니다.</p>
<ol>
<li><p>피시너가 2년의 기간동안 학습을 잘 할 수 있을까?</p>
</li>
<li><p>42서울의 문화를 받아드리고 동료와 함께 성장할 수 있을까?</p>
</li>
</ol>
<p>크게 2가지로 나뉘어지며, 실력이 좋으면 최종 합격될 확률이 높겠지만,</p>
<p>주로 동료 평가, 열정, 시험을 통해 평가하고 합격된다고 느꼈습니다.</p>
<h3 id="42서울을-진행하게-된-계기">42서울을 진행하게 된 계기</h3>
<p>2021년도 취업준비를 진행하면서 CS나 사용하는 기술에 대해 얕은 지식을 가지고 있다는 것을 느꼈습니다.</p>
<p>부족한 부분을 알고 해당 부분만 집중적으로 공부하여 취업 준비를 할 수 있으나, 42서울을 진행하게되면 동료들과 함께하며 공부하는 것이 많은 도움이 될거라 생각하여 지원하게 되었습니다.</p>
<p>또한 취업 후에도 같은 42서울 동료들과의 개발자  커뮤니티는 도움이 될거라 생각하였습니다.</p>
<p>취업 준비를 바로 하실분들은 42서울보다는 데브코스나 우테코, 싸피 등 다른 프로그램이 어울릴 수도 있습니다!</p>
<h3 id="qna">QNA</h3>
<ul>
<li>대학교와 병행할 수 있나요?</li>
</ul>
<p>크게 42서울에서 제한하지 않지만, 라피신 기간에는 클러스터 (학습 공간)에서 하는 것이 좋습니다!</p>
<p>(지원금 요건, 평가, 시험등의 이슈)</p>
<p>학생분들은 방학 기간이 어울리며 휴학을 추천드립니다!</p>
<ul>
<li>비전공자도 가능할까요?</li>
</ul>
<p>가능합니다! 하지만, 노력을 엄청 열심히 해야합니다.</p>
<p>비전공자와 전공자의 차이는 무시할 수 없습니다!  (진도를 보면 전공자가 훨씬 빠릅니다.)</p>
<p>C언어에 대해 공부하시면서 라피신 지원하시면 좋을 것 같습니다.</p>
<p>마무리하며
42서울 프로그램은 국가에서 소프트웨어 인재 육성을 위해 지원하는 만큼 많은 혜택이 있습니다. 이러한 혜택을 누리며 공부까지할 수 있다니 1석2조 아니겠습니까!?</p>
<p>제 생각에는 일단 신청먼저 해보시고! 자신과 맞지않다면 그때 포기하셔도 괜찮으니 신청해보세요! 👍</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JavaScript] 자바스크립트의 자료형]]></title>
            <link>https://velog.io/@s_i_o_n/JavaScript-%EC%9E%90%EB%A3%8C%ED%98%95</link>
            <guid>https://velog.io/@s_i_o_n/JavaScript-%EC%9E%90%EB%A3%8C%ED%98%95</guid>
            <pubDate>Sat, 19 Mar 2022 09:44:31 GMT</pubDate>
            <description><![CDATA[<h1 id="javascript의-자료형">Javascript의 자료형</h1>
<h3 id="동적타입">동적타입</h3>
<p>Javascript는 느슨한 타입의 동적 언어이다. 즉 변수는 어떤 특정 타입과 연결되지 않으며, 모든 타입의 값으로 할당이 가능하다.</p>
<pre><code class="language-javascript">let x = 42;
x = &#39;bar&#39;;
x = true;</code></pre>
<h3 id="원시타입-vs-객체타입">원시타입 vs 객체타입</h3>
<p>자바스크립트는 크게 원시타입과 객체타입으로 나뉜다.</p>
<ul>
<li>원시타입<ul>
<li>Boolean, Null, Undefined, Number, BigInt, String, Symbol</li>
</ul>
</li>
<li>객체타입 (속성의 컬렉션)</li>
</ul>
<h3 id="원시타입">원시타입</h3>
<p>객체를 제외한 모든 타입은 불변 값을 정의한다. (변경할 수 없는 값)</p>
<h4 id="boolean">Boolean</h4>
<ul>
<li>Boolean타입은 논리 요소를 나타내며 true, false 두 가지의 값을 가질 수 있다.</li>
<li>0, -0, null, false, NaN, undeifined, &quot;&quot; 이라면 객체의 초기값은 false이다.</li>
<li>위의 예시 이외의 값은 true로 설정한다.</li>
<li>값이 undefined, null이 아닌 모든 객체는 조건문에서 true로 계산된다.</li>
<li>이는 값이 false인 Boolean객체도 포함된다.</li>
</ul>
<pre><code class="language-javascript">const x = new Boolean(false);
if (x) {
    // 코드 실행 가능
}</code></pre>
<pre><code class="language-javascript">const x = false;
if (x) {
    // 코드 실행 불가능.
}</code></pre>
<h4 id="null">Null</h4>
<ul>
<li>Null은 어떤 값이 의도적으로 비어있음을 표현한다.</li>
<li>Boolean 연산에서는 false로 취급한다.</li>
<li>특정 경우에, null은 원시적이지 않다. 모든 객체는 null값으로부터 파생되며 따라서 typeof 연산자에서는 object를 반환한다.</li>
</ul>
<pre><code class="language-javascript">typeof null === &#39;object&#39; // true</code></pre>
<h4 id="undefined">Undefined</h4>
<ul>
<li>변수를 선언한 후 값을 할당하지 않은 변수 혹은 값이 주어지지 않는 인수에 자동으로 할당된다.<pre><code class="language-javascript">function test(x) {
  let y;
    console.log(x); // undefined
    console.log(y); // undefined
}
test();</code></pre>
</li>
</ul>
<h4 id="number">Number</h4>
<ul>
<li><p>Number 타입은 -(2^53 - 1) ~ (2^53 - 1) 까지의 값을 가질 수 있다.</p>
</li>
<li><p>부동소수점 숫자 외에도 +Infinity, -Infinity, Nan(&quot;Not a Number&quot;) 값을 가질 수 있다.</p>
</li>
<li><p>0, -0으로도 표현 가능하며 +0 === -0 은 참이다. 
```</p>
<blockquote>
<p>42 / +0
Infinity
42 / -0</p>
</blockquote>
</li>
<li><p>Infinity</p>
<pre><code>#### BigInt</code></pre></li>
<li><p>임의 정밀도로 정수를 나타낼 수 있다.</p>
</li>
<li><p>Number의 안전 한계를 넘어서는 큰 정수도 저장과 연산을 할 수 있다.</p>
</li>
<li><p>BigInt는 정수 끝에 n을 추가하거나 생성자를 호출해 생성할 수 있다.</p>
</li>
<li><p>BigInt는 Number와 혼합해 연산할 수 없으며, 이때 TypeError가 발생한다.</p>
<pre><code>&gt; const x = 2n ** 53n;
9007199254740992n
&gt; const y = x + 1n;
9007199254740993n</code></pre></li>
</ul>
<h4 id="string">String</h4>
<ul>
<li>String은 문자열을 나타내는 타입이며 인덱스 0 ~ 시작하게된다.</li>
<li>C언어와 달리 Javascript 문자열은 불변하다.</li>
<li>따라서 문자열 연산이 필요하다면 원본 문자열을 사용해 새로운 문자열을 생성해야한다.</li>
</ul>
<h4 id="symbol">Symbol</h4>
<ul>
<li>변경 불가능하며 다른 값과 중복되지 않는 고유한 값이다.</li>
<li>충돌 위험이 없는 오브젝트의 유일한 프로퍼티 키를 만들기 위해서 사용할 수 있다.</li>
<li>심볼 값은 외부로 노출되지 않아 확인할 수 없다. (고유 심볼 값)</li>
<li>ECMAScript 2015 (ES6)에 추가되었다.</li>
</ul>
<h3 id="객체타입">객체타입</h3>
<ul>
<li>다양한 데이터를 담을 수 있다.</li>
<li>키(key)와 값(value) 쌍으로 구성된 프로퍼티를 여러 개 넣을 수 있는데 키(key)에는 문자형이 들어가야하며 값(value)에는 모든 타입이 들어갈 수 있다.</li>
</ul>
<pre><code class="language-javascript">let user = new Object(); // 객체 생성자 문법
let user = {}; // 객체 리터럴 문법</code></pre>
<h4 id="예제">예제</h4>
<pre><code class="language-javascript">let user = {
     name: &quot;sion&quot;, // 키: name, 값: &quot;sion&quot;
      age: 42,
      printInfo: function() {
        console.log(&quot;제 이름은 : &quot; + this.name + &quot; 나이는 : &quot; + this.age + &quot;입니다.&quot; );
    }
};

console.log(user.name); // sion
console.log(user[&quot;name&quot;]); // sion
user.printInfo(); // 제 이름은 : sion 나이는 : 42입니다.</code></pre>
<h4 id="참고자료">참고자료</h4>
<p><a href="https://developer.mozilla.org/ko/docs/Web/JavaScript/Data_structures">mdn JavaScript docs</a>
<a href="https://ko.javascript.info/object">모던자바스크립트</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[C] 예제를 통한 Makefile만들기]]></title>
            <link>https://velog.io/@s_i_o_n/C-%EC%98%88%EC%A0%9C%EB%A5%BC-%ED%86%B5%ED%95%9C-Makefile%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@s_i_o_n/C-%EC%98%88%EC%A0%9C%EB%A5%BC-%ED%86%B5%ED%95%9C-Makefile%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Thu, 17 Mar 2022 09:24:55 GMT</pubDate>
            <description><![CDATA[<h1 id="makefile이란">Makefile이란?</h1>
<p><strong>make</strong>는 주어진 쉘 명령어들을 조건에 맞게 실행하는 프로그램이다.
이때 어떠한 조건으로 명령어를 실행할지 담은 파일을 <strong>Makefile</strong>이라고 부른다!</p>
<blockquote>
<p>그러면 Shell Script를 사용하면 되지 않나?
Makefile을 사용하면 변화가 생긴 소스파일만 컴파일 하지만,
Shell Script를 사용하게 하면 전체를 다 컴파일 하게 된다.
따라서 <strong>Makefile</strong>을 사용하는게 효율적이다.</p>
</blockquote>
<h3 id="예제">예제</h3>
<pre><code>NAME = libft.a
CC = gcc
CFLAG = -Wall -Wextra -Werror
RM = rm -f
AR = ar
ARFLAGS = rcs
INC = libft.h
SRCS = ft_isalpha.c ft_isdigit.c ...
OBJS = $(SRCS:.c=.o)

all : $(NAME)
$(NAME) : $(OBJ_FILES)
    $(AR) $(ARFLAGS) $@ $^
.c.o:
    $(CC) -I $(INC) $(CFLAG) -c -o $@ $&lt;
clean:
    $(RM) $(OBJS)
fclean: clean
    $(RM) $(NAME)
re: fclean all
.PHONY : all clean fclean re
</code></pre><p>NAME (TARGET) : 최종적으로 만들어 낼 아카이브 명
CC : 컴파일 종류
CFLAG : 컴파일 옵션
RM : 삭제 옵션
AR : ar (여러 오브젝트를 하나의 아카이브로 묶음)
ARFLAGS : ar 옵션</p>
<ul>
<li>r : 새로운 오브젝트 파일이면 추가, 기존 파일이면 치환</li>
<li>c : 아카이브 생성시 표준 에러 진단 메세지 출력을 제한</li>
<li>s : 아카이브 파일의 정보를 담는 인덱스를 생성한다.<ul>
<li>아카이브 인덱스를 생성하지 않으면 링크 속도가 느려진다.</li>
</ul>
</li>
</ul>
<p>INC : include 될 header file
SRCS : 컴파일 할 c file
OBJS : object 파일 $($srcs:.c=.o) 명령어를 통해 SRCS의 *.c 파일을 *.o로 변환
all : 결과물
.PHONY : 만약 target과 겹치는 파일이 있을 때 해당 명령어 실행이 불가능한 것을 막기 위함.</p>
<p><strong>기본적인 명령어 형식</strong></p>
<pre><code>target : dependency1 ....2 .... n
    command1
        command2

$(NAME) : $(OBJ_FILES)
    $(AR) $(ARFLAGS) $@ $^

$(NAME) : target
$(OBJ_FILES) : dependency1
$(AR) $(ARFLAGS) $@ $^ : command 

해석 : 다음과 같은 명령어로. dependency를 이용해 target을 생성함.
실제 수행되는 명령어 : ar rcs libft.a ft_isalpha.o ...</code></pre><p>$@ : 타켓 이름에 대응된다.</p>
<p>$&lt; : 의존 파일 목록에 첫 번째 파일에 대응된다.</p>
<p>$^ : 의존 파일 목록 전체에 대응된다.</p>
<p>$? : 타켓보다 최신인 의존 파일에 대응된다.</p>
<p>$+ : $^ 와 비슷하지만, 중복된 파일 이름까지 모두 포함된다.</p>
<p><strong>확장자 규칙 (Suffix rule)</strong></p>
<p>파일의 확장자를 보고, 그에 따라 적절한 연산을 수행시키는 규칙이다.</p>
<pre><code>.c.o:
    $(CC) -I $(INC) $(CFLAG) -c -o $@ $&lt;

.c.o 표현은 .c와 .o 확장자를 가진 파일들을 확장자 규칙에 의거해서 처리될 수 있도록 표현된 것 이다.

즉 아래 명령어를 통해 .c를 컴파일해서 .o를 만들어 내는 루틴이 자동적으로 동작한다.
$(CC) -I $(INC) $(CFLAG) -c -o $@ $&lt;

실제 수행되는 명령어 : gcc -I libft.h -Wall -Wextra -Werror -c -o ft_isalpha.a ... .a ft_isalpha.c ... .c </code></pre><h4 id="참고">참고</h4>
<p><a href="https://modoocode.com/311">씹어먹는 C++ Makefile</a>
<a href="http://doc.kldp.org/KoreanDoc/html/GNU-Make/GNU-Make-3.html">GNU Make 강좌</a></p>
]]></description>
        </item>
    </channel>
</rss>