<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>devCecy</title>
        <link>https://velog.io/</link>
        <description>https://velog.io/@dev_cecy 로 벨로그 옮겼습니다👻❣️</description>
        <lastBuildDate>Fri, 27 Nov 2020 09:22:21 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>devCecy</title>
            <url>https://images.velog.io/images/cecy-coding/profile/d21736da-681a-4570-9450-a8139a04b308/KakaoTalk_Photo_2020-11-21-22-29-08.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. devCecy. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/cecy-coding" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[TIL] Scope 이해하기]]></title>
            <link>https://velog.io/@cecy-coding/TIL-Scope-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-w3b7xenq</link>
            <guid>https://velog.io/@cecy-coding/TIL-Scope-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-w3b7xenq</guid>
            <pubDate>Fri, 27 Nov 2020 09:22:21 GMT</pubDate>
            <description><![CDATA[<h1 id="1-scope스코프의-의미">1. Scope(스코프)의 의미</h1>
<blockquote>
<p>*<em>scope란, *</em>
&#39;변수&#39;가 선언되고 사용될 수 있는 범위를 의미한다. </p>
</blockquote>
<p>JavaScript 코드를 작성하다보면, <code>*** is not defined</code>라는 에러 메시지와 만나게 되는 경우가 있다. 즉, 변수가 아직 선언되지 않았다는 뜻이다. 
오잉, 나는 분명 <code>let</code>, <code>const</code>로 변수를 선언해 주었는데 왜 이런 오류 메시지가 뜨는거지? 라는 생각이 든다면,  Scope의 개념을 잘 이해할 필요가 있다. </p>
<p>나는 분명 변수 선언을 해주었지만, 예를 들어 <code>console.log</code>가 찍인 위치에서 변수가 선언된 영역(block)에 접근할 수가 없어서 위와 같은 오류가 생기는 것이다. </p>
<h2 id="1-1-block">1-1) Block</h2>
<blockquote>
<p><code>block</code>이란 중괄호{}(curly brace)로 감싸진 영역을 말한다. 
<code>block</code> 내부에 변수가 정의되면 그 변수는 오로지 <code>block</code> 내부에서만 사용이 가능하다. </p>
</blockquote>
<p>참고로, <code>block</code> 내부에서 정의된 변수는 <code>local variable(지역변수)</code> 라고 한다. </p>
<p>예를들어, </p>
<p>1) <code>function</code>의 내부는 하나의 <code>block</code>이다. </p>
<pre><code class="language-js">function block() {
  return &#39;i am block&#39;; //block 영역
}</code></pre>
<p>2) <code>for</code>문 의 내부도 하나의 <code>block</code>이다. </p>
<pre><code class="language-js">for (let i = 0; i &lt; 10; i++) {
  count++; //block 영역
}</code></pre>
<p>3) <code>if</code>문의 내부도 하나의 <code>block</code>이다.</p>
<pre><code class="language-js">if (i === 1) {
  let number = &#39;one&#39;;   //block 영역
  console.log(number);
}</code></pre>
<h2 id="1-2-global-scope-전역-스코프">1-2) Global Scope (전역 스코프)</h2>
<blockquote>
<p><code>global scope(전역 스코프)</code>는 <code>block</code>밖의 영역을 뜻하며,<code>global scope</code>에서 선언된 변수는 코드 어디서든 접근하여 변수 값을 확인할 수 있다. </p>
</blockquote>
<p>참고로,<code>global scope(전역 스코프)</code>에서 만든 변수를 <code>global variable(전역변수)</code>라고 한다. </p>
<p>예를들어, 
<code>color</code>라는 변수는 <code>global variable(전역변수)</code>이기 때문에 <code>returnColor</code>함수의 <code>block</code>에서도 접근이 가능해 <code>console.log(color)</code>가 찍힌 3곳 모두에서 &#39;red&#39;라는 값을 반환하게 된다. </p>
<pre><code class="language-js">const color = &#39;red&#39;;
console.log(color);  //&#39;red&#39; 반환

function returnColor() {
  console.log(color);  //&#39;red&#39; 반환
  return color;  
}
console.log(returnColor());  //&#39;red&#39; 반환</code></pre>
<h1 id="2-scope의-오염">2. Scope의 오염</h1>
<blockquote>
<p><code>global variable(전역변수)</code>를 선언하면, 해당 프로그램 어디에서나 사용할 수 있는 <code>global namespace</code>를 갖기 때문에, <code>global variable(전역변수)</code>를 너무 남용하면 프로그램에 문제를 일으킬 수 있다.  </p>
</blockquote>
<p>참고로, <code>namespace</code>는 변수명을 사용할 수 있는 영역을 뜻한다.<code>scope</code>라고도 하지만, 특히 &#39;변수이름&#39;을 얘기할 때는 <code>namespace</code>라고 한다.</p>
<p>예를들어, <code>callMyNightSky</code>함수에서 <code>stars</code>라는 새로운 변수를 선언하고 싶었는데 깜빡하고 <code>let</code>으로 선언해주지 않아 <code>stars</code>에 <code>Sirius</code>라는 값이 재할당이 되었다. 그래서 <code>callMyNightSky</code>을 호출하면 <code>stars</code>변수에 재할당 되었던 값인 <code>Sirius</code>가 반환된다. 이렇게되면, 다른 함수에서 <code>global variable(전역변수)</code>인 <code>stars(&#39;North Star&#39;)</code>을 사용하고 싶었는데 값이 수정된 <code>stars(&#39;Sirius&#39;)</code>가 나타나는 문제를 겪게된다. </p>
<pre><code class="language-js">const satellite = &#39;The Moon&#39;;
const galaxy = &#39;The Milky Way&#39;;
let stars = &#39;North Star&#39;;
const callMyNightSky = () =&gt; {
  stars = &#39;Sirius&#39;;
  return &#39;Night Sky: &#39; + satellite + &#39;, &#39; + galaxy + &#39;, &#39; + stars;
};
console.log(callMyNightSky());
console.log(stars);</code></pre>
<h1 id="3-좋은-scoping-습관">3. 좋은 Scoping 습관</h1>
<blockquote>
<p>좋은 scoping습관은 <code>global variable(전역변수)</code>는 최소한으로 하고, 최대한 <code>block</code>내에서 <code>let</code>, <code>const</code>를 사용하여 변수를 새로 만들어 사용하는 것이다. </p>
</blockquote>
<p>*<em>좋은 Scoping 습관을 갖게되면, *</em></p>
<p>1) 코드가 <code>block</code>으로 명확하게 구분되기 때문에 코드 가독성이 높아진다. 
2) 코드를 오랜만에 보더라도 유지보수가 쉬워진다. 
3) <code>block</code>이 끝나면 <code>local variable(지역변수)</code> 사용도 끝이나기 때문에 메모리가 절약된다.  </p>
<p>결론, 좋은 Scoping 습관을 갖자. 👻<img src="https://images.velog.io/images/cecy-coding/post/f9d25063-8d19-4008-922a-ddcd6fde2f50/%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%202020-11-21%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%202.14.46.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JS] Array의 최댓값, 최솟값 구하기 ]]></title>
            <link>https://velog.io/@cecy-coding/JS-Array%EC%9D%98-%EC%B5%9C%EB%8C%93%EA%B0%92-%EC%B5%9C%EC%86%9F%EA%B0%92-%EA%B5%AC%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@cecy-coding/JS-Array%EC%9D%98-%EC%B5%9C%EB%8C%93%EA%B0%92-%EC%B5%9C%EC%86%9F%EA%B0%92-%EA%B5%AC%ED%95%98%EA%B8%B0</guid>
            <pubDate>Tue, 24 Nov 2020 01:35:31 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>Array안에 있는 값 중 최댓값과 최솟값을 여러 방법으로 구해보자👻</p>
</blockquote>
<h1 id="최댓값-최솟값-구하기">최댓값 최솟값 구하기</h1>
<h2 id="방법-1">방법 1</h2>
<h3 id="1최솟값-구하기">(1)최솟값 구하기</h3>
<ul>
<li>변수를 선언할 때 기본값으로 <code>const</code>를 사용했으나, <code>let min = arr[0]</code>의 경우 3줄 아래에서 재할당을 해줄 필요가 있으므로 <code>let</code> 을 사용했다. </li>
<li><code>arr[0]</code>을 <code>min</code>의 기준값으로 잡아주고, 반복문을 <code>i=1;</code> 부터 돌려 값을 비교해준다. </li>
<li><code>arr[i]</code>의 값이 <code>min(arr[0])</code>보다 크다면 <code>min = arr[i]</code>로 할당해주는 작업을 <code>arr.length</code>만큼 반복한다. </li>
<li>아래 예제의 경우 처음 <code>min</code>값은 20이고, 200부터 반복문을 돌다가 1을 만나면 할당을 하게된다. <code>if문</code>의 조건처럼 20은 1보다 크기 때문에! 계속 해서 반복문을 돌게 되지만 나머지 배열에서 1이 더 큰 경우를 찾을 수 없어 <code>min</code>은 1로 반환된다.</li>
</ul>
<pre><code class="language-js">//최솟값을 구할 Array
const arr = [20, 200, 23, 1, 3, 9];

function getMin(arr){
  let min = arr[0];   // 3줄 아래에서 min을 arr[i]로 재할당 해주어야 하기 때문에 let 선언 
  for (let i= 1; i &lt; arr.length; i++){  //arr[0]과 비교해주기위해 i = 1  부터 시작
    if ( arr[i] &lt; min ) 
       min = arr[i];  // 할당 
    }
  return min;
} 

getMin(arr)  //1</code></pre>
<h3 id="2최댓값-구하기">(2)최댓값 구하기</h3>
<p>최댓값은 최솟값과 조건문만 살짝 수정해주면 도출해 낼 수 있다. </p>
<pre><code class="language-js">//최댓값을 구할 Array
const arr = [20, 200, 23, 1, 3, 9];

function getMax(arr){
  let max = arr[0];   
  for (let i= 1; i &lt; arr.length; i++){  
    if ( arr[i] &gt; max ) 
       max = arr[i];  ![](https://images.velog.io/images/cecy-coding/post/a0ade87a-a4ec-47a0-aa43-7f61e2c3126c/%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%202020-11-24%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2010.34.59.png)
    }
  return max;
} 

getMax(arr)  // 200 </code></pre>
<h2 id="방법2">방법2</h2>
<p>Math.max 와 apply를 이용한 최댓값 구하기 정리할 것 !</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JS] 객체(object)이해하기2]]></title>
            <link>https://velog.io/@cecy-coding/JS-%EA%B0%9D%EC%B2%B4object%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B02</link>
            <guid>https://velog.io/@cecy-coding/JS-%EA%B0%9D%EC%B2%B4object%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B02</guid>
            <pubDate>Mon, 23 Nov 2020 04:12:40 GMT</pubDate>
            <description><![CDATA[<h1 id="1-객체의-키를-변수로-접근하기">1. 객체의 키를 변수로 접근하기</h1>
<p>객체의 특정 키의 값을 가져오는것도 가능하지만, 반대로 객체에 특정 키를 만들고 값을 할당하는것도 가능하다. </p>
<p>information이라는 객체를 먼저 하나 만들고, </p>
<pre><code class="language-jsx![](https://images.velog.io/images/cecy-coding/post/42ab7098-c892-45ab-888d-74cd419eeb28/%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%202020-11-23%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%201.12.13.png)">const information = {
  name: &#39;김개발&#39;
}</code></pre>
<p>여기에 키와 값을 만들어주고,</p>
<pre><code class="language-jsx">const verb = &#39;developes&#39;  //키
const project = &#39;facebook&#39;  //값</code></pre>
<p>verb의 값을 키로, project의 값을 그 키의 값으로 할당해준다. 
[A],[B]방법 모두 할당이 가능하다. 
[A]의 경우 verb와 project가 어떤 값을 가지냐에 따라 다른 키와 값을 가지게되지만, [B]의 경우는 키와 값이 항상 정해져 있게 된다. </p>
<pre><code class="language-jsx">information[verb] = project // [A]
information.developes = &#39;facebook&#39; // [B]</code></pre>
<h1 id="2-객체-순회하기">2. 객체 순회하기</h1>
<p>객체도 배열과 같이 순회가 가능하다. 그러나, 배열과는 다르게 명확한 순서가 없기 때문에, 어떤 순서로 객체의 키 값에 접근하게되는지는 알 수 없다. 따라서, 객체의 순회는 <code>&quot;순서가 보장되지 않은 순회&quot;</code> 라고 부른다.</p>
<p>배열 순회시에는 <code>for문</code>을 이용했으나, 객체는 length 키가 따로 주어져있지 않고, 인덱스도 없기 때문에 for문을 이용한 순회는 불가능하다. 대신, 다음의 2가지 방법으로 객체를 순회할 수 있다. </p>
<h2 id="2-1-objectkeys">2-1) Object.keys()</h2>
<blockquote>
<p>Object.keys 메소드는 어떤 객체가 가지고 있는 키들의 목록을 배열로 리턴하는 메소드이다. 더불어, 객체의 내장 메소드가 아니라 객체 생성자인 Object가 직접 가지고 있는 메소드다. </p>
</blockquote>
<p><code>object.keys()</code>의 사용방법을 보자. </p>
<pre><code class="language-jsx">const obj = {
  name: &#39;melon&#39;,
  weight: 4350,
  price: 16500,
  isFresh: true
}

Object.keys(obj) // [&#39;name&#39;, &#39;weight&#39;, &#39;price&#39;, &#39;isFresh&#39;]</code></pre>
<p><code>Object.keys()</code>는 배열을 리턴하기 때문에, 이제 반복문을 사용할 수 있게된다!</p>
<pre><code class="language-jsx">const keys = Object.keys(obj) // [&#39;name&#39;, &#39;weight&#39;, &#39;price&#39;, &#39;isFresh&#39;]

for (let i = 0; i &lt; keys.length; i++) {
  const key = keys[i] // 각각의 키
  const value = obj[key] // 각각의 키에 해당하는 각각의 값

  console.log(value)
}</code></pre>
<p>새로운 ES6 문법에서 Object생성자의 메소드인 <code>Object.values</code>, <code>Object.entries</code>와 같은 자매품들이 추가되었다. </p>
<h2 id="2-2-objectvalues">2-2) Object.values()</h2>
<blockquote>
<p><code>Object.values</code>는 객체의 키가 아닌 값으로 이루어진 배열을 리턴한다.</p>
</blockquote>
<pre><code class="language-js">const values = Object.values(obj)
// values === [&#39;melon&#39;, 4350, 16500, true]</code></pre>
<h2 id="2-3-objectentries">2-3) Object.entries()</h2>
<blockquote>
<p><code>Object.entries</code>는 객체의 키와 값의 쌍으로 이루어진 길이 2짜리 배열로 이루어진, 배열을 리턴한다. 각 배열에서 인덱스 [0]의 값은 각각의 키를, 인덱스 [1]의 값은 해당 키에 해당하는 값을 가지게 된다. </p>
</blockquote>
<pre><code class="language-jsx">const entries = Object.entries(obj)

/*
entries === [
  [&#39;name&#39;, &#39;melon&#39;],
  [&#39;weight&#39;, 4350],
  [&#39;price&#39;, 16500],
  [&#39;isFresh&#39;, true]
]
*/</code></pre>
<h2 id="2-4-for-in">2-4) for-in</h2>
<blockquote>
<p><code>for-in 문</code>은 반복문인 for문과 같은 종류의 문법이며, 객체와 배열에서 모두 사용가능하다. </p>
</blockquote>
<pre><code class="language-jsx">//for 문을 사용한 반복문 
const arr = [&#39;coconut&#39;, &#39;banana&#39;, &#39;pepper&#39;, &#39;coriander&#39;]

for (let i = 0; i &lt; arr.length; i ++) {
  console.log(i)
  console.log(arr[i])
} </code></pre>
<pre><code class="language-jsx">// for-in 문을 사용한 반복문 
const arr = [&#39;coconut&#39;, &#39;banana&#39;, &#39;pepper&#39;, &#39;coriander&#39;]

for (let i in arr) {
  console.log(i)
  console.log(arr[i])
}</code></pre>
<p>i를 0으로 초기화하고, 배열의 길이와 비교하고, i를 1씩 증가시키는 등의 코드를 생략할수 있게 만든 ES6 문법으로, <code>for-in 문</code>은 인덱스의 값으로 무엇을 할당하고, 반복문이 몇번 돌아야 할 지를 자바스크립트 엔진 내부에서 자동 결정한다. </p>
<pre><code class="language-jsx">//for-in문을 사용한 객체 순회
const obj = {
  name: &#39;melon&#39;,
  weight: 4350,
  price: 16500,
  isFresh: true
}

for (let key in obj) {
  const value = obj[key]

  console.log(key)
  console.log(value)
}</code></pre>
<p><del>이렇게 객체를 가지고 for-in 문을 사용하면, for-in 문의 인덱스에 해당하는 변수가, 숫자가 아닌 객체의 각각의 키에 해당하는 문자열을 할당받게 됩니다.??</del></p>
<h1 id="3-assignment">3. Assignment</h1>
<p>getExamResult 함수를 구현해주세요.
인자 scores 는 다음과 같은 객체입니다.객체의 요소의 갯수 및 키의 이름들은 달라질 수 있습니다.객체의 값은 다음 9가지 문자열 중에서 하나를 가지고 있습니다.
(&#39;A+&#39;, &#39;A&#39;, &#39;B+&#39;, &#39;B&#39;, &#39;C+&#39;, &#39;C&#39;, &#39;D+&#39;, &#39;D&#39;, &#39;F&#39;)</p>
<pre><code class="language-jsx">{
  &#39;생활속의회계&#39;: &#39;C&#39;,
  &#39;논리적글쓰기&#39;: &#39;B&#39;,
  &#39;독일문화의이해&#39;: &#39;B+&#39;,
  &#39;기초수학&#39;: &#39;D+&#39;,
  &#39;영어회화&#39;: &#39;C+&#39;,
  &#39;인지발달심리학&#39;: &#39;A+&#39;,
}</code></pre>
<p>인자 requiredClasses 는 다음과 같이 문자열로 된 배열입니다.</p>
<pre><code class="language-jsx">[&#39;영어회화&#39;, &#39;기초수학&#39;, &#39;공학수학&#39;, &#39;컴퓨터과학개론&#39;]</code></pre>
<p>다음 조건을 만족하는 객체를 리턴하도록 함수를 구현해주세요</p>
<ol>
<li>scores 객체가 가지고 있는 키들은 새로운 객체에 포함되어야 합니다.
단, 그 값들은 다음 원리에 따라 숫자로 바뀌어 할당되어야 합니다.</li>
</ol>
<p>A+ =&gt; 4.5
A =&gt; 4
B+ =&gt; 3.5
B =&gt; 3
C+ =&gt; 2.5
C =&gt; 2
D+ =&gt; 1.5
D =&gt; 1
F =&gt; 0</p>
<p>2.requiredClass 배열의 요소로는 존재하지만, scores의 키로는 존재하지 않는 항목이 있다면,해당 요소는 새로운 객체의 키가 되고, 값으로 0을 가져야 합니다.위에서 예시로 묘사된 객체와 배열이 인자로 들어왔다면,
다음과 같은 객체과 리턴됩니다. </p>
<pre><code class="language-jsx">{
  &#39;생활속의회계&#39;: 2,
  &#39;논리적글쓰기&#39;: 3,
  &#39;독일문화의이해&#39;: 3.5,
  &#39;기초수학&#39;: 1.5,
  &#39;영어회화&#39;: 2.5,
  &#39;인지발달심리학&#39;: 4.5,
  &#39;공학수학&#39;: 0,
  &#39;컴퓨터과학개론&#39;: 0,
}</code></pre>
<h2 id="3-1-완료-코드">3-1) 완료 코드</h2>
<h3 id="풀이과정">풀이과정</h3>
<ul>
<li><p>최종 결과값을 넣어줄 빈 객체<code>result</code>를 만들고, </p>
</li>
<li><p>A,B,C..학점을 키값으로, 1,2,3..학점을 벨류값으로하는 객체를 만든다. </p>
</li>
<li><p>먼저, <code>requiredClasses</code>을 for in으로 반복문을 돌려 key값을 얻고, value 값은 0으로 만들어 아까 만들어둔 <code>result</code> 객체에 넣는다. </p>
</li>
<li><p>여기까지하면, </p>
<pre><code class="language-js">result = {
영어회화 : 0,
기초수학 : 0,
공학수학 : 0,
컴퓨터학개론 : 0
} </code></pre>
<p>이다. </p>
</li>
</ul>
<p>-scores를 for in 반복문을 돌려 반환될 키값을 <code>obj</code>라는 변수에 담아준다. </p>
<p>*<em>- (가장 중요한 부분!!!) *</em></p>
<ul>
<li>여기서 obj 값은
&#39;C&#39;
&#39;B&#39;
&#39;B+&#39;
&#39;D+&#39;
&#39;C+&#39;
&#39;A+&#39;
이고, </li>
</ul>
<p>score의 값은,
&#39;생활속의회계&#39;
&#39;논리적글쓰기&#39;
&#39;독일문화의이해&#39;
&#39;기초수학&#39;
&#39;영어회화&#39;
&#39;인지발달심리학&#39;
이다. </p>
<ul>
<li><code>result</code>객체 안에 <code>score</code>값을 키값으로 넣어주면, 일단, <code>result</code>의 키값과 <code>score</code>의 값이 겹치는 경우 그 값의 키값은 undifined가 될것이고, 겹치지 않는 경우 <code>score</code>의 값이 <code>result</code>에 새로 추가될 것이다. </li>
</ul>
<p>-그렇게 만들어진 <code>result[score]</code>는 <code>numToString[obj]</code>로 할당이 되는데, <code>numToString[obj]</code>는 <code>munToString</code>의 키값과 obj의 값이 겹칠 경우, <code>munToString</code>의 value값인 숫자를 얻게된다. </p>
<ul>
<li>즉, <code>result[score]</code>가 키값으로 <code>numToString[obj]</code>를 갖게된다!!</li>
</ul>
<pre><code class="language-js">const scores = {
  &#39;생활속의회계&#39;: &#39;C&#39;,
  &#39;논리적글쓰기&#39;: &#39;B&#39;,
  &#39;독일문화의이해&#39;: &#39;B+&#39;,
  &#39;기초수학&#39;: &#39;D+&#39;,
  &#39;영어회화&#39;: &#39;C+&#39;,
  &#39;인지발달심리학&#39;: &#39;A+&#39;,
};

const requiredClasses = [&#39;영어회화&#39;, &#39;기초수학&#39;, &#39;공학수학&#39;, &#39;컴퓨터과학개론&#39;];


const getExamResult = (scores, requiredClasses) =&gt; {
  const result = {}
  const numToString = {
    &#39;A+&#39;:4.5,
    &#39;A&#39;:4,
    &#39;B+&#39;:3.5,
    &#39;B&#39;:3,
    &#39;C+&#39;:2.5,
    &#39;C&#39;:2,
    &#39;D+&#39;:1.5,
    &#39;D&#39;:1,
    &#39;F&#39;:0
  }
   for (let requiredClass in requiredClasses) {
    const key = requiredClasses[requiredClass];
    result[key] = 0;
  }
  for (let score in scores){
    const obj = scores[score];
    result[score] = numToString[obj];
  }
  return result
}

getExamResult(scores, requiredClasses)

/*
{
  &#39;영어회화&#39;: 2.5,
  &#39;기초수학&#39;: 1.5,
  &#39;공학수학&#39;: 0,
  &#39;컴퓨터과학개론&#39;: 0,
  &#39;생활속의회계&#39;: 2,
  &#39;논리적글쓰기&#39;: 3,
  &#39;독일문화의이해&#39;: 3.5,
  &#39;인지발달심리학&#39;: 4.5
}*/</code></pre>
<h2 id="3-2-오류가-났던-부분">3-2) 오류가 났던 부분</h2>
<p>두번째 for in문의 <code>result[score] = numToString[obj];</code> 부분을 이해하지 못했었다. 할당이라는 개념을 이해하는데 혼동이 있었던 것같다. 할당이라는 개념으로 이 한줄을 해결하고나니 속이 엄청나게 시원했다 ㅠㅠㅠㅠ행복쓰 😭</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JS] ES6. arrow function ]]></title>
            <link>https://velog.io/@cecy-coding/JS-ES6.-arrow-function</link>
            <guid>https://velog.io/@cecy-coding/JS-ES6.-arrow-function</guid>
            <pubDate>Sun, 22 Nov 2020 09:02:18 GMT</pubDate>
            <description><![CDATA[<h1 id="arrow-function">arrow function</h1>
<blockquote>
<p><code>arrow function</code>은 es6에서 추가된 새로운 함수 표현방법이다. </p>
</blockquote>
<h2 id="1-이름없는-함수-표현">1) 이름없는 함수 표현</h2>
<pre><code class="language-js">//ES5 - 일반 함수
function() {}

//ES6 - arrow function 
() =&gt; {}</code></pre>
<h2 id="2-이름이-있는-함수-표현">2) 이름이 있는 함수 표현</h2>
<pre><code class="language-jsx">//ES5 - 일반 함수
function getName() {}

//ES6 - arrow function 
const getName = () =&gt; {}</code></pre>
<h2 id="3-함수-호출">3) 함수 호출</h2>
<p>두 함수 모두 동일한 방법으로 호출 할 수 있다. </p>
<pre><code class="language-js">getName()</code></pre>
<h2 id="4-es5-함수를-변수에-저장하기">4) ES5 함수를 변수에 저장하기</h2>
<p>ES6의 arrow function은 함수를 이미 <code>getName</code>이라는 변수에 저장한다. 
ES5의 함수도 <code>getName</code>이라는 변수에 저장이 가능하다. </p>
<pre><code class="language-js">//ES5 - Function Expression
const getName = function() {}</code></pre>
<h2 id="5-함수에-인자-받기">5) 함수에 인자 받기</h2>
<p>ES6의 arrow function은 인자가 하나일 때는 소괄호 생략이 가능하며, 인자가 두 개일 때는 괄호를 생략할 수 없다. </p>
<pre><code class="language-jsx">//ES5 
const getName = function(name) {}

//ES6
const getName = (name) =&gt; {}
const getName = name =&gt; {}</code></pre>
<pre><code class="language-jsx">//ES5
const getName = function(name, age) {}

//ES6
const getName = (name, age) =&gt; {}</code></pre>
<h2 id="6-함수-return">6) 함수 return</h2>
<pre><code class="language-jsx">//ES5
function hi(text) {
  text += &#39;하세요&#39;;
  return text;
}

//ES6
const hi = text =&gt; { 
  text += &#39;하세요&#39;;
  return text 
};</code></pre>
<p>ES6의 arrow function은 실행내용없이 return만 한다면 return 키워드와 중괄호가 생략가능하다. 화살표 오른쪽에는 리턴될 <strong>&quot;값&quot;</strong>만 써야 한다. </p>
<p>example 1)</p>
<pre><code class="language-jsx">//ES5
function getName(name) {
  return name;
}

//ES6
const hi = name =&gt; { return name };
const hi = name =&gt; name;</code></pre>
<p>example 2)</p>
<pre><code class="language-jsx">//ES5
function getFullName(first, family) {
  return first + family;
}

//ES6
const hi = (first, family) =&gt; { return first + family };
const hi = (first, family) =&gt; first + family;</code></pre>
<h1 id="ecma-script-">ECMA Script ?</h1>
<blockquote>
<p>ES는 ECMA Script의 줄임말로, ECMA Script는 JavaScript를 표준화 시키려고 탄생했다. 현재는 ES10 버전 까지 나왔으며, 현재 주로 쓰이는 것은 ES6이며, ES6은 버전 이름이고 ES 2015라고도 한다.</p>
</blockquote>
<h1 id="assignment">Assignment</h1>
<p>1) ES5 &gt; ES6 로 변환 </p>
<pre><code class="language-js">//ES5
function welcome(name){
  return &quot;안녕하세요&quot; + name
}
welcome(name);

//ES6
const welcome = name =&gt; 
{
  return &quot;안녕하세요&quot; + name
};

welcome(name);
</code></pre>
<p>1) ES6 &gt; ES5 로 변환 </p>
<pre><code class="language-js">//ES6
const handleBio = (nickname, bio) =&gt;  {
  const user = {
    nickname : nickname,
    bio : bio,
  };
   return user
};

handleBio(nickname, bio);

//ES5
function handleBio (nickname, bio){
  const user = {
    nickname : nickname,
    bio : bio
  }
  return user;
}

handleBio(nickname, bio);
</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JS] Class 이해하기 ]]></title>
            <link>https://velog.io/@cecy-coding/JS-Class-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@cecy-coding/JS-Class-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0</guid>
            <pubDate>Sun, 22 Nov 2020 08:24:02 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/cecy-coding/post/c370fc4a-128a-490a-ad54-8d567056917b/%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%202020-11-22%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.23.31.png" alt=""></p>
<h1 id="class-란">Class 란?</h1>
<p>class는 함수다. 함수를 함수표현식과 함수 선언으로 정의할 수 있듯이, class도 class 표현식과 class 선언 두가지로 class는 몸체에 0개 이상의 메서드만 정의할 수 있다. class 몸체에서 정의 할 수 있는 메서드는 constructor(생성자), 프로토타입 메서드, 정적 메서드 세가지가 있다. </p>
<h2 id="1-생성자-constructor">1. 생성자 (constructor)</h2>
<blockquote>
<p>생성자는 인스턴스를 생성하고 초기화하기 위한 특수한 메서드다. 생성자는 이름을 변경할 수 없다. </p>
</blockquote>
<pre><code class="language-js">class Car {
  constructor(name, price) {
    this.name = name;
    this.price = price;
  }
}</code></pre>
<ul>
<li>Car는 class이름이며 class이름은 <strong>항상 대문자</strong>로 시작하고, CamelCase로 작성해야 합니다.</li>
<li>Car class의 instance를 생성할 때마다 constructor메서드가 호출된다.</li>
<li>constructor()메서드는 <code>name</code>, <code>price</code> 2개의 argument(인자)를 받는다.</li>
<li>constructor()메서드에서 사용한 <code>this</code> 키워드class의 실행범위(context)에서 해당 <code>instance</code>를 의미합니다.</li>
<li>constructor()에서 인자로 넘어오는 name과 price를 사용해 Car instance의 <code>name</code>, <code>price</code> 프로퍼티에 값을 할당했습니다.</li>
<li>이렇게 클래스 내에서 <code>name</code>, <code>price</code>와 같이 변경 가능한 상태값이자 class내의 컨텍스트에서 어느 곳에서나 사용할 수 있는 변수를 &#39;멤버 변수&#39;라고 부릅니다.</li>
<li>멤버 변수는 <code>this</code> 키워드로 접근합니다.</li>
</ul>
<h2 id="2-인스턴스-instance">2. 인스턴스 (Instance)</h2>
<blockquote>
<p>인스턴스는 class를 통해 생성된 객체이며, class의 property이름과 메서드를 갖는 객체이다. class로 객체를 생성하는 과정을 &#39;인스턴스화&#39;라고 부릅니다. </p>
</blockquote>
<pre><code class="language-js">//인스턴스 생성 
const morning = new Car(&#39;Morning&#39;, 20000000);
console.log(morning); 

/*생성된 인스턴스 
Car {
  name: &#39;Morning&#39;,
  price: 20000000,
  __proto__: Car { constructor: ƒ Car() }
} */</code></pre>
<ul>
<li>인스턴스는 class이름에 new를 붙여서 생성한다.</li>
<li>클래스 이름 우측에 ()괄호를 만들고, 내부에는 생성자에 필요한 정보를 인자로 넘겨준다. </li>
<li>그럼, Car라는 클래스의 인스턴스가 moring이라는 변수에 저장된다. </li>
</ul>
<h2 id="3-메서드-method">3. 메서드 (Method)</h2>
<p>객체의 프로퍼티 값을 함수로 갖고 있는 것을 메서드라고 부른다. </p>
<pre><code class="language-js">//메서드 생성하여 인스턴스 정보 변경하기 
class Car {
  constructor(name, price) {
    this.name = name;
    this.price = price;
    this.department = &quot;선릉지점&quot;;
  }
  changeDepartment(departmentName) {
    this.department = departmentName;
  }
}
const morning = new Car(&quot;morning&quot;, 2000);
const newDepartment = morning.changeDepartment(&quot;강남지점&quot;)

console.log(morning)

/* derpartment의 정보가 &quot;선릉지점&quot; 에서 &quot;강남지점&quot;으로 변경되었다! 
Car {
  name: &#39;morning&#39;,
  price: 2000,
  department: &#39;강남지점&#39;,
  __proto__: Car { constructor: ƒ Car(), changeDepartment: ƒ changeDepartment() }
}
*/</code></pre>
<h2 id="4-assignment">4. Assignment</h2>
<blockquote>
<ul>
<li>MyMath라는 class를 생성해주세요.</li>
</ul>
</blockquote>
<ul>
<li>constructor에서는 숫자 2개를 인자로 받아 프로퍼티로 저장합니다.</li>
<li>총 4개의 메서드를 구현해주세요.
  1) getNumber: 두 개의 숫자가 무엇인지 배열로 반환하는 메서드 ex) [1, 2]
  2) add: 두 개의 숫자를 더하는 메서드
  3) substract: 두 개의 숫자를 빼는 메서드
  4) multiply: 두 개의 숫자를 곱하는 메서드</li>
</ul>
<pre><code class="language-js">class MyMath {
  constructor(num1,num2){
    this.num1 = num1;
    this.num2 = num2;
  }
  getNumber(num1,num2){
    return [this.num1, this.num2];
  }
  add(num1,num2){
    return this.num1+this.num2;
  }
  substract(num1,num2){
    return this.num1-this.num2;
  }
  multiply(num1,num2){
    return this.num1*this.num2;
  }
}

let myNumber = new MyMath(2,5);
console.log(myNumber.multiply());</code></pre>
<h3 id="오류가-났던-부분">오류가 났던 부분</h3>
<p>새로 생성한 메서드에 <code>this.num1</code>, <code>this.num2</code>가 아니라 num1, num2라고 적어주었던 것. 
사실, this.num1대신 왜 num1로 적으면 안되지는 아직 클리어하게 이해하지 못했다. class구조에 대해서 좀 더 명확하게 정리할 필요가 있다! </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JS] Assignment - 배열조합으로 새로운 객체 만들기 ]]></title>
            <link>https://velog.io/@cecy-coding/JS-Assignment-%EB%B0%B0%EC%97%B4%EC%A1%B0%ED%95%A9%EC%9C%BC%EB%A1%9C-%EC%83%88%EB%A1%9C%EC%9A%B4-%EA%B0%9D%EC%B2%B4-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@cecy-coding/JS-Assignment-%EB%B0%B0%EC%97%B4%EC%A1%B0%ED%95%A9%EC%9C%BC%EB%A1%9C-%EC%83%88%EB%A1%9C%EC%9A%B4-%EA%B0%9D%EC%B2%B4-%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Sun, 22 Nov 2020 01:57:55 GMT</pubDate>
            <description><![CDATA[<h1 id="1-assignment">1. Assignment</h1>
<blockquote>
<p>다음 요구사항을 충족하는 객체를 만들어서 return 해주세요.
objData가 갖고 있는 property는 3개 입니다.
sumAmount: 총 판매량
sumReview: 총 리뷰개수
sumLike: 총 좋아요수 </p>
</blockquote>
<p>이번에는 인자로 받은 데이터를 조합해서, 구조를 바꿔서 리턴합니다.
getData에 배열 세 개를 인자로 넘길 것이고,
이 배열 세 개를 조합해서 하나의 새로운 객체를 만들 것입니다.
getData는 세 개의 배열을 인자로 받는 함수입니다.</p>
<p>salesArr: 날짜별 판매량
ex) [[&quot;20190401&quot;, 34], [&quot;20190402&quot;, 23], [&quot;20190403&quot;, 29]]
reviewArr: 날짜별 리뷰수
ex) [[&quot;20190328&quot;, 3], [&quot;20190401&quot;, 0], [&quot;20190403&quot;, 1]]
likeArr: 날짜별 좋아요수
ex) [[&quot;20190328&quot;, 98], [&quot;20190401&quot;, 102], [&quot;20190403&quot;, 125]]</p>
<p>위의 예시로 보여드린 배열은 단지 예일뿐,
날짜별 판매량 배열은 365일치 요소가 들어있을 수도 있습니다.
위의 예시로 보여드린 배열은 단지 예일뿐,</p>
<p>날짜별 판매량 배열은 365일치 요소가 들어있을 수도 있습니다.
왜 각각 세 개의 배열을 하나의 객체로 구조를 바꿔야 할까요?
위의 배열에서 4월 1일에 판매량, 리뷰수, 좋아요수를 확인하려면
세 개의 배열을 각각 for문으로 반복해서 날짜를 확인해야 하므로 좋은 구조의 데이터라고 할 수 없습니다.
(날짜가 365일이라고 하면, 세 개의 배열이 각자 365번 돌아야 하니까요)
그래서 세 개의 배열을 사용하기 좋게 객체로 바꿀 것입니다.
객체는 프로퍼티명으로 바로 접근 가능하니까,
날짜만 알면 반복문을 돌지 않아도 바로 데이터를 얻을 수 있습니다.
그래서 객체의 형태로 데이터 구조를 바꾸려는 것입니다.</p>
<h1 id="2-완성코드">2. 완성코드</h1>
<pre><code class="language-js">salesArr = [[&quot;20190401&quot;, 34], [&quot;20190402&quot;, 23], [&quot;20190403&quot;, 29]];
reviewArr = [[&quot;20190328&quot;, 3], [&quot;20190401&quot;, 0], [&quot;20190403&quot;, 1]];
likeArr = [[&quot;20190328&quot;, 98], [&quot;20190401&quot;, 102], [&quot;20190403&quot;, 125]];


function getData (salesArr,reviewArr,likeArr){
  let sumAmount = 0;
  let sumReview = 0;
  let sumLike = 0;

    for (let i in salesArr){
      sumAmount += salesArr[i][1];
  }
   for (let i in reviewArr){
      sumReview += reviewArr[i][1];
  }
   for (let i in likeArr){
      sumLike += likeArr[i][1];
  }
  let objData = {
    sumAmount:sumAmount,
    sumReview:sumReview,
    sumLike: sumLike
  };

  return objData;
}

getData(salesArr,reviewArr,likeArr);</code></pre>
<h1 id="3-오류가-났던-부분">3. 오류가 났던 부분</h1>
<p>코드이 오류보다는 문제를 읽고 salesArr,reviewArr,likeArr 배열 속의 각각 겹치는 날짜를 하나로하여, 날짜가 프로퍼티 명이되고, 프로퍼티 값으로 판매량, 리뷰수, 좋아요수를 묶어 나타내라는 것으로 이해해 시간을 많이 할애하고 말았다.😭 그런데 objData가 갖고 있는 프로퍼티는 총3개로 sumAmount, sumReview,sumLike를 가지고 있다는 문장을 보고 내가 생각했던 로직과 일치하지 않아 혼란스러웠다. 그러나 결국 문제에서 정확히 요구하는 것을 도출해 내는것이 관건이였던 것 같다! </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JS]  객체(Object) 이해하기]]></title>
            <link>https://velog.io/@cecy-coding/JS-%EA%B0%9D%EC%B2%B4Object-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@cecy-coding/JS-%EA%B0%9D%EC%B2%B4Object-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0</guid>
            <pubDate>Sat, 21 Nov 2020 15:52:58 GMT</pubDate>
            <description><![CDATA[<h1 id="객체object란">객체(object)란?</h1>
<blockquote>
<p>객체(Object)는 0개 이상의 프로퍼티로 구성된 집합이며, 프로퍼티는 Key(이름)와 Value(값)로 구성된다.  </p>
</blockquote>
<p><strong>객체(Object)는</strong> </p>
<ul>
<li>{}(중괄호)로 감싸져 있고,</li>
<li>콜론으로 구분된 프로퍼티 이름/프로퍼티값의 쌍들이 쉼표로 분리된 목록의 형태이다.</li>
</ul>
<p><img src="https://images.velog.io/images/cecy-coding/post/039a2d57-9338-49f0-baa2-7cfd756f6b31/%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%202020-11-21%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%2011.04.39.png" alt=""></p>
<h2 id="1-property-규칙">(1) property 규칙</h2>
<ul>
<li>property 이름은 중복될 수 없다. 중복 선언하면 나중에 선언한 프로퍼티가 먼저 선언한 프로퍼티를 덮어쓴다. </li>
</ul>
<pre><code class="language-js">// 프로퍼티 이름을 중복 선언해 주어 마지막에 선언한 값이 반환되었다.
let myObj = {
    name: &quot;cecy&quot;,
        name: &quot;cecilia&quot;
    };

console.log(myObj); //{name: &quot;cecilia&quot;}</code></pre>
<ul>
<li>property 이름은 식별자 네이밍 규칙을 따르지 않을 경우 반드시 따옴표&quot;&quot;를 사용해 줘야한다. </li>
</ul>
<pre><code class="language-js">//프로퍼티이름 &quot;my-age&quot;에서 &quot;&quot;를 생략할 경우 -연산자가 있는 표현식으로 인식한다.  
let properties = {
    myName = &quot;cecy&quot;,
    &quot;my-age&quot; = 28
    };</code></pre>
<ul>
<li>property 값으로 모든 type이 가능하다(string, number, array, object, function 등)</li>
</ul>
<pre><code class="language-js">let myObj = {
  property1: &quot;hello&quot;, //string
  property2: [1,2,3,4,5],  //array
  property3: {
    childproperty: &quot;hi&quot;  //object
  },
  property4: function(){  //function
    console.log(&quot;Hi, I&#39;m Cecy&quot;)  
  }
};</code></pre>
<h2 id="2-property값에-접근하기">(2) property값에 접근하기</h2>
<p>*<em>객체의 property값에 접근하려면, *</em></p>
<p>1) 마침표(.) 연산자를 사용하며, 접근하려는 객체명은 왼쪽에, 프로퍼티명은 오른쪽에 위치시킨다. </p>
<p>또는,
2) 대괄호([])를 사용하여, 접근하려는 객체명은 왼쪽에, 프로퍼티명은 쌍따옴표(&quot;&quot;)와 함께 대괄호 안에 넣어준다. </p>
<p><img src="https://images.velog.io/images/cecy-coding/post/1e15c6a3-3146-4ca2-82c5-6a24b20fbecd/%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%202020-11-21%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%2011.12.01.png" alt=""></p>
<p>참고로, 마침표로 프로퍼티에 접근하는 것이 더 간단해 보이는데 2)와 같이 대괄호를 사용하여 접근하는 이유는, 대괄호안에는 변수를 넣어 접근할 수 있기 때문에 프로퍼티명을 변수로 선언해준 후 해당 프로퍼티에 접근하고 싶은 경우 사용할 수 있다. </p>
<p>참고1)</p>
<pre><code class="language-js">//프로퍼티명인 name을 propertyName이라는 변수로 선언해 준 경우, 
let plan1 = {   
  name: &quot;Basic&quot;
};

let propertyName = &quot;name&quot;;

console.log(plan1[propertyName]); // &#39;Basic&#39;이 반환된다. 
</code></pre>
<p>참고2)</p>
<pre><code class="language-js">let myObj = {
  property1: &quot;hello&quot;,
  property2: {
    childproperty: &quot;hi&quot;
  }
};

let name = &quot;property&quot;;
console.log(myObj[name+&quot;1&quot;]);  //&#39;hello&#39;가 반환된다. 
console.log(myObj[name+&quot;2&quot;][&quot;child&quot;+name]);  //&#39;hi&#39;가 반환된다. 

console.log(myObj.property1); //&#39;hello&#39;가 반환된다. 
console.log(myObj.property2.childproperty);  //&#39;hi&#39;가 반환된다. </code></pre>
<h2 id="3-property값-수정-및-생성">(3) property값 수정 및 생성</h2>
<p>1) 이미 존재하는 프로퍼티에 값을 &#39;할당&#39;하면 프로퍼티 값이 수정된다. </p>
<pre><code class="language-js">let myObj = {
  property1: &quot;hello&quot;
};

myObj.property1 = [&quot;hi&quot;, &quot;hello&quot;];  //할당

console.log(myObj); //[&quot;hi&quot;, &quot;hello&quot;] </code></pre>
<p>2) 존재하지 않는 프로퍼티에 값을 할당하면 프로퍼티가 동적으로 생성되어 추가되고 프로퍼티 값이 할당된다. </p>
<pre><code class="language-js">let myObj = {
  property1: &quot;hello&quot;
};

myObj.property2 = &quot;hi&quot;;  // 존재하지 않는 프로퍼티 값 할당

console.log(myObj); //{property1: &quot;hello&quot;, property2: &quot;hi&quot;} </code></pre>
<h2 id="4-property-삭제">(4) property 삭제</h2>
<p>delete연산자를 사용하여 프로퍼티를 삭제할 수 있다. </p>
<pre><code class="language-js">let myObj = {
  property1: &quot;hello&quot;
};

delete myObj.property1;
console.log(myObj); // {} 빈 객체</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[TIL] Scope 이해하기]]></title>
            <link>https://velog.io/@cecy-coding/TIL-Scope-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@cecy-coding/TIL-Scope-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0</guid>
            <pubDate>Sat, 21 Nov 2020 05:13:25 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/cecy-coding/post/79fb7849-305c-4a91-a728-41be10a44482/%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%202020-11-21%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%202.14.46.png" alt=""></p>
<h1 id="1-scope스코프의-의미">1. Scope(스코프)의 의미</h1>
<blockquote>
<p>*<em>scope란, *</em>
&#39;변수&#39;가 선언되고 사용될 수 있는 범위를 의미한다. </p>
</blockquote>
<p>JavaScript 코드를 작성하다보면, <code>*** is not defined</code>라는 에러 메시지와 만나게 되는 경우가 있다. 즉, 변수가 아직 선언되지 않았다는 뜻이다. 
오잉, 나는 분명 <code>let</code>, <code>const</code>로 변수를 선언해 주었는데 왜 이런 오류 메시지가 뜨는거지? 라는 생각이 든다면,  Scope의 개념을 잘 이해할 필요가 있다. </p>
<p>나는 분명 변수 선언을 해주었지만, 예를 들어 <code>console.log</code>가 찍인 위치에서 변수가 선언된 영역(block)에 접근할 수가 없어서 위와 같은 오류가 생기는 것이다. </p>
<h2 id="1-1-block">1-1) Block</h2>
<blockquote>
<p><code>block</code>이란 중괄호{}(curly brace)로 감싸진 영역을 말한다. 
<code>block</code> 내부에 변수가 정의되면 그 변수는 오로지 <code>block</code> 내부에서만 사용이 가능하다. </p>
</blockquote>
<p>참고로, <code>block</code> 내부에서 정의된 변수는 <code>local variable(지역변수)</code> 라고 한다. </p>
<p>예를들어, </p>
<p>1) <code>function</code>의 내부는 하나의 <code>block</code>이다. </p>
<pre><code class="language-js">function block() {
  return &#39;i am block&#39;; //block 영역
}</code></pre>
<p>2) <code>for</code>문 의 내부도 하나의 <code>block</code>이다. </p>
<pre><code class="language-js">for (let i = 0; i &lt; 10; i++) {
  count++; //block 영역
}</code></pre>
<p>3) <code>if</code>문의 내부도 하나의 <code>block</code>이다.</p>
<pre><code class="language-js">if (i === 1) {
  let number = &#39;one&#39;;   //block 영역
  console.log(number);
}</code></pre>
<h2 id="1-2-global-scope-전역-스코프">1-2) Global Scope (전역 스코프)</h2>
<blockquote>
<p><code>global scope(전역 스코프)</code>는 <code>block</code>밖의 영역을 뜻하며,<code>global scope</code>에서 선언된 변수는 코드 어디서든 접근하여 변수 값을 확인할 수 있다. </p>
</blockquote>
<p>참고로,<code>global scope(전역 스코프)</code>에서 만든 변수를 <code>global variable(전역변수)</code>라고 한다. </p>
<p>예를들어, 
<code>color</code>라는 변수는 <code>global variable(전역변수)</code>이기 때문에 <code>returnColor</code>함수의 <code>block</code>에서도 접근이 가능해 <code>console.log(color)</code>가 찍힌 3곳 모두에서 &#39;red&#39;라는 값을 반환하게 된다. </p>
<pre><code class="language-js">const color = &#39;red&#39;;
console.log(color);  //&#39;red&#39; 반환

function returnColor() {
  console.log(color);  //&#39;red&#39; 반환
  return color;  
}
console.log(returnColor());  //&#39;red&#39; 반환</code></pre>
<h1 id="2-scope의-오염">2. Scope의 오염</h1>
<blockquote>
<p><code>global variable(전역변수)</code>를 선언하면, 해당 프로그램 어디에서나 사용할 수 있는 <code>global namespace</code>를 갖기 때문에, <code>global variable(전역변수)</code>를 너무 남용하면 프로그램에 문제를 일으킬 수 있다.  </p>
</blockquote>
<p>참고로, <code>namespace</code>는 변수명을 사용할 수 있는 영역을 뜻한다.<code>scope</code>라고도 하지만, 특히 &#39;변수이름&#39;을 얘기할 때는 <code>namespace</code>라고 한다.</p>
<p>예를들어, <code>callMyNightSky</code>함수에서 <code>stars</code>라는 새로운 변수를 선언하고 싶었는데 깜빡하고 <code>let</code>으로 선언해주지 않아 <code>stars</code>에 <code>Sirius</code>라는 값이 재할당이 되었다. 그래서 <code>callMyNightSky</code>을 호출하면 <code>stars</code>변수에 재할당 되었던 값인 <code>Sirius</code>가 반환된다. 이렇게되면, 다른 함수에서 <code>global variable(전역변수)</code>인 <code>stars(&#39;North Star&#39;)</code>을 사용하고 싶었는데 값이 수정된 <code>stars(&#39;Sirius&#39;)</code>가 나타나는 문제를 겪게된다. </p>
<pre><code class="language-js">const satellite = &#39;The Moon&#39;;
const galaxy = &#39;The Milky Way&#39;;
let stars = &#39;North Star&#39;;
const callMyNightSky = () =&gt; {
  stars = &#39;Sirius&#39;;
  return &#39;Night Sky: &#39; + satellite + &#39;, &#39; + galaxy + &#39;, &#39; + stars;
};
console.log(callMyNightSky());
console.log(stars);</code></pre>
<h1 id="3-좋은-scoping-습관">3. 좋은 Scoping 습관</h1>
<blockquote>
<p>좋은 scoping습관은 <code>global variable(전역변수)</code>는 최소한으로 하고, 최대한 <code>block</code>내에서 <code>let</code>, <code>const</code>를 사용하여 변수를 새로 만들어 사용하는 것이다. </p>
</blockquote>
<p>*<em>좋은 Scoping 습관을 갖게되면, *</em></p>
<p>1) 코드가 <code>block</code>으로 명확하게 구분되기 때문에 코드 가독성이 높아진다. 
2) 코드를 오랜만에 보더라도 유지보수가 쉬워진다. 
3) <code>block</code>이 끝나면 <code>local variable(지역변수)</code> 사용도 끝이나기 때문에 메모리가 절약된다.  </p>
<p>결론, 좋은 Scoping 습관을 갖자. 👻</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JS] Assignment - 문자열 찾기]]></title>
            <link>https://velog.io/@cecy-coding/JS-Assignment-%EB%AC%B8%EC%9E%90%EC%97%B4-%EC%B0%BE%EA%B8%B0</link>
            <guid>https://velog.io/@cecy-coding/JS-Assignment-%EB%AC%B8%EC%9E%90%EC%97%B4-%EC%B0%BE%EA%B8%B0</guid>
            <pubDate>Fri, 20 Nov 2020 00:36:18 GMT</pubDate>
            <description><![CDATA[<h1 id="1-assignment">1. Assignment</h1>
<blockquote>
<p>sliceCityFromAddress 함수를 구현해 주세요.</p>
</blockquote>
<ul>
<li>sliceCityFromAddress 함수는 address 인자를 받습니다.</li>
<li>address 인자에는 주소를 나타내는 string이 주어집니다.</li>
<li>주어진 주소가 어느 도시인지를 찾아내서, 해당 주소에서 도시 부분만 삭제한 새로운 주소를 리턴해 주세요.</li>
<li>주소는 무조건 &quot;시&quot; 로 끝납니다. 예를 들어, &quot;서울시&quot;.</li>
<li>&quot;도&quot; 와 &quot;시&quot; 는 주소에 한번 밖에 포함되어 있지 않습니다.</li>
</ul>
<h1 id="2-완성-코드">2. 완성 코드</h1>
<pre><code class="language-js">let address = &quot;경기도 성남시 분당구 중앙공원로 53&quot;;
// let address = &quot;서울특별시 강남구 테헤란로 427 위워크타워&quot;

function sliceCityFromAddress(address) {

  let city = address.indexOf(&quot;도&quot;);
  let bigCity = address.indexOf(&quot;시&quot;);
  if (city !== -1){ 
    return address.slice(0,city+1) + address.slice(city+5,address.length);
  } else {
   return address.slice(bigCity + 2, address.length);
  }
}

sliceCityFromAddress(address);
//&#39;경기도 분당구 중앙공원로 53&#39;</code></pre>
<h1 id="3-오류가-났던-부분">3. 오류가 났던 부분</h1>
<p>1) if 조건문을 return 해주지 않아 값을 만들어 주기만하고 반환하지 않았던 부분.</p>
<p>2)&#39;서울특별시&#39;와 같이 5글자로 늘어나는 지역을 생각하지 않았던 부분. </p>
<h1 id="4-추가-정리할-부분">4. 추가 정리할 부분</h1>
<ul>
<li>indexOf의 개념</li>
<li>slice의 사용 </li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JS] Array 배열 조작하기 ]]></title>
            <link>https://velog.io/@cecy-coding/JS-Array-%EB%B0%B0%EC%97%B4-%EC%A1%B0%EC%9E%91%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@cecy-coding/JS-Array-%EB%B0%B0%EC%97%B4-%EC%A1%B0%EC%9E%91%ED%95%98%EA%B8%B0</guid>
            <pubDate>Thu, 19 Nov 2020 12:23:46 GMT</pubDate>
            <description><![CDATA[<h1 id="1-배열조작">1. 배열조작</h1>
<h2 id="1-1index로-접근">1-1)index로 접근</h2>
<p>index로 접근 할 경우 꼭 순서대로 접근할 필요는 없다. <code>cities[3] = &quot;대구&quot;;</code> 원하는 순서에 배열에 접근할 수 있다. </p>
<pre><code class="language-js">let cities = [];
cities[0] = &quot;서울&quot;;
cities[1] = &quot;대전&quot;; 
cities[3] = &quot;대구&quot;; 
console.log(cities) //[ &#39;서울&#39;, &#39;대전&#39;, &lt;1 empty item&gt;, &#39;대구&#39; ]
~~텍스트~~
cities[3] = &quot;대구말고인천!&quot;  //재할당 
console.log(cities)  //[ &#39;서울&#39;, &#39;대전&#39;, &lt;1 empty item&gt;, &#39;대구말고인천!&#39; ]


</code></pre>
<h2 id="1-2push-unshift-함수로-접근-및-추가">1-2)push, unshift 함수로 접근 및 추가</h2>
<p><code>push</code>는 배열의 맨 뒷부분에 요소를 추가해주며, 
<code>unshift</code>는 배열의 맨 앞부분에 요소를 추가해준다. </p>
<pre><code class="language-js">cities.push(&quot;경주&quot;)  
console.log(cities);  //[ &#39;서울&#39;, &#39;대전&#39;, &lt;1 empty item&gt;, &#39;대구말고인천!&#39;, &#39;경주&#39; ]

cities.unshift(&quot;전주&quot;) 
console.log(cities);  //[ &#39;전주&#39;, &#39;서울&#39;, &#39;대전&#39;, &lt;1 empty item&gt;, &#39;대구말고인천!&#39;, &#39;경주&#39; ]</code></pre>
<h2 id="1-3-pop함수로-접근-및-삭제">1-3) pop함수로 접근 및 삭제</h2>
<p><code>pop</code>은 배열의 가장 마지막 요소를 삭제해 준다. </p>
<pre><code class="language-js">cities.pop(); //맨 마지막의 &quot;경주&quot;가 삭제될 예정 
console.log(cities);  //[ &#39;전주&#39;, &#39;서울&#39;, &#39;대전&#39;, &lt;1 empty item&gt;, &#39;대구말고인천!&#39; ]</code></pre>
<h1 id="2-assignment">2. Assignment</h1>
<blockquote>
</blockquote>
<ul>
<li>divideArrayInHalf 함수를 다음과 같이 구현해주세요.</li>
<li>divideArrayInHalf 함수의 인자인 array는 숫자 값으로만 구성되어 있으며 정확히 총 5개의 요소(element)로 구성되어 있습니다.</li>
<li>array의 요소들 중 10과 같거나 작은 값의 element들은 result의 맨 앞으로,- 10보다 큰 값의 요소들은 result의 맨 뒤로 재구성된 배열을 리턴해주세요.</li>
</ul>
<h2 id="2-1-완성-코드">2-1) 완성 코드</h2>
<pre><code class="language-js">let array = [1,20,10,5,100];

function divideArrayInHalf(array){
  let length = array.length;
  let result = [];

  for (i=0; i &lt; length; i++){  
    let number = array.pop();
    if (number&lt;=10){
        result.unshift(number);
    } else {
        result.push(number);
      }
    }
   return result;
}                   

divideArrayInHalf(array);   
// 반환 값 [1,10,5,100,20]</code></pre>
<h2 id="2-2-오류났던-부분">2-2) 오류났던 부분</h2>
<p>1) <code>let length = array.length;</code>와 <code>let result = [];</code>를 for문 안쪽으로 넣어버린것. {}의 범위를 잘 파악하자. </p>
<p>2)  <code>for문</code>안에 <code>array.length</code>를 그대로 넣어주어 <code>array</code>가 <code>pop</code>되면서 <code>length</code>가 줄어들었다. 그래서 기본 <code>array.length</code>만큼 반복하지 못하고 끝나버렸다.🤪
반복문 바깥으로 <code>array.length</code>를 <code>length</code>로 선언해 값을 고정해 주는것을 오류를 해결하였다. 
더불어, 위의 문제는 <code>array</code>의 요소가 5개라고 알려주었기 때문에 <code>array.length</code> 대신 5를 넣어줬어도 되지만 <code>array</code>의 길이를 모를경우를 대비하여 위와 같이 해결하였다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[HTML / CSS] 이미지를 띄워주는 float 속성]]></title>
            <link>https://velog.io/@cecy-coding/CSS-%EC%9D%B4%EB%AF%B8%EC%A7%80%EB%A5%BC-%EB%9D%84%EC%9B%8C%EC%A3%BC%EB%8A%94-float-%EC%86%8D%EC%84%B1</link>
            <guid>https://velog.io/@cecy-coding/CSS-%EC%9D%B4%EB%AF%B8%EC%A7%80%EB%A5%BC-%EB%9D%84%EC%9B%8C%EC%A3%BC%EB%8A%94-float-%EC%86%8D%EC%84%B1</guid>
            <pubDate>Wed, 18 Nov 2020 12:20:20 GMT</pubDate>
            <description><![CDATA[<h1 id="float-속성">float 속성</h1>
<blockquote>
<p><code>float</code> 속성은 이미지를 띄워서 텍스트를 이미지 주변에 배치되도록 만들어준다.  </p>
</blockquote>
<h2 id="float을-사용하지-않는다면">float을 사용하지 않는다면?</h2>
<p>이미지와 텍스트 사이에 빈 공간이 생기게된다. 
<img src="https://images.velog.io/images/cecy-coding/post/766eeca9-10bb-4cea-99d8-07b316516004/%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%202020-11-18%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%209.15.16.png" alt=""></p>
<h2 id="float를-사용해주면">float를 사용해주면?</h2>
<p><code>float:left;</code>를 사용해주면, 라이언 이미지가 왼쪽에 뜨게 되고 텍스트들이 그 주변을 감싸준다. 
<img src="https://images.velog.io/images/cecy-coding/post/88b5ac74-2154-429c-93b6-8cd4179ddaf2/%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%202020-11-18%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%209.15.33.png" alt=""></p>
<p><code>float:right;</code>를 사용해주면 라이언이미지가 오른쪽에 뜨게 되고, 텍스트들이 그 주변을 감싸준다.<br><img src="https://images.velog.io/images/cecy-coding/post/8ed1bd8a-1244-42e0-a5b0-4aa3ee09c641/%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%202020-11-18%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%209.15.58.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[HTML / CSS] Display 속성]]></title>
            <link>https://velog.io/@cecy-coding/HTML-CSS-Display-%EC%86%8D%EC%84%B1</link>
            <guid>https://velog.io/@cecy-coding/HTML-CSS-Display-%EC%86%8D%EC%84%B1</guid>
            <pubDate>Wed, 18 Nov 2020 12:01:33 GMT</pubDate>
            <description><![CDATA[<h1 id="display-속성">Display 속성</h1>
<blockquote>
<p><code>css</code>를 통해 레이아웃을 컨트롤할 수 있는 <code>Display</code> 속성 중 가장 많이 사용되고 있는  <code>block, inline, inline-block</code>에 대해서 알아보자!</p>
</blockquote>
<h1 id="1-block">1) block</h1>
<p><code>block</code>은 한줄의 영역을 모두 사용하는 박스형태이며, 기본적으로 <code>width</code>값이 100%이다. 그렇기 때문에 요소들은 위에서 아래로 차곡차곡 쌓이게된다. 또한, <code>width</code>와 <code>height</code>, <code>margin</code>과 <code>padding</code>값을 지정해 줄 수 있다. </p>
<p><code>block</code>을 속성으로 갖는 대표적인 태그로는 <code>div</code>, <code>p</code>, <code>header</code>, <code>footer</code> 등이 있다. <strong>(<code>block</code> 요소와 <code>margin: 0 auto;</code>가 만나면 중앙정렬 끄읕, 최고!)</strong></p>
<h1 id="2-inline">2) Inline</h1>
<p><code>inline</code>은 텍스트를 삽입하기 위해 주로 사용하며, 텍스트 값만큼의 <code>width</code>를 갖기때문에 다음 요소 추가시 다음줄이 아닌 같은 줄의 옆으로 차곡차곡 쌓인다. <code>height</code>또한 폰트 크기와 같게 설정이 된다. 따라서, <code>width</code>와 <code>height</code> 값은 따로 지정해 줄 수 없으며, <code>margin-top</code>, <code>margin-bottom</code>은 적용이 되지 않는다. </p>
<h1 id="3-inline-block">3) Inline-block</h1>
<p><code>inline-block</code>은 <code>inline</code>과 <code>block</code>의 특징을 모두 가진 요소이다. 
<code>block</code>처럼 <code>width</code>와 <code>height</code>을 지정할 수 있지만, 만약 <code>width</code>와 <code>height</code>을 지정해 주지 않으면 <code>inline</code>처럼 텍스트 만큼의 영역만 지정이된다. 또한, <code>inline</code>과 같이 줄 바꿈이 이루어지지 않아 옆으로 차곡차곡 쌓이게 된다. 
<img src="https://images.velog.io/images/cecy-coding/post/d9848d90-e82d-453d-9393-5a4ab17809c2/%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%202020-11-18%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%208.59.56.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[TIL] Semantic Web과 Semantic Tag 한번에 이해하기!]]></title>
            <link>https://velog.io/@cecy-coding/TIL-Semantic-Web%EA%B3%BC-Semantic-Tag-%ED%95%9C%EB%B2%88%EC%97%90-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@cecy-coding/TIL-Semantic-Web%EA%B3%BC-Semantic-Tag-%ED%95%9C%EB%B2%88%EC%97%90-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0</guid>
            <pubDate>Tue, 17 Nov 2020 10:41:45 GMT</pubDate>
            <description><![CDATA[<p>알고보면 간단한 시맨틱 웹과 시맨틱 태그 한번에 이해하기 👻
<img src="https://images.velog.io/images/cecy-coding/post/c7f854ce-3abf-4be3-9125-4c18d858151d/simple.gif" alt=""></p>
<h1 id="1-시맨틱-웹-시맨틱-태그">1. 시맨틱 웹? 시맨틱 태그?</h1>
<blockquote>
<p>웹 기술의 발전에 따라 많은 수 많은 정보들이 웹상에 쌓이게 되었는데, 컴퓨터가 그 정보들을 보다 쉽게, 의미있는 해석할 수 있도록하기 위해 <strong>시맨틱 웹(Semantic Web)과 시맨틱 태그(Semantic Tag)</strong>라는 웹 개념이 등장했다. </p>
</blockquote>
<p>예를들어, 헤더의 위치를 잡아주기 위해 <code>&lt;div&gt; 헤더자리 &lt;/div&gt;</code>라고 적었다고 생각해보자. <code>&lt;div&gt;</code>태그 안에 &#39;헤더자리&#39;라는 내용을 넣어주었기 때문에 &#39;컴퓨터 사용자&#39;는 이 자리가 헤더자리임을 알 수 있지만, 컴퓨터는 <code>&lt;div&gt;</code>태그만으로 이 자리가 헤더자리임을 알 수가 없다. 물론, <code>&lt;div&gt;</code>태그 안에 <code>id</code>값을 <code>header</code>로 부여하여<code>&lt;div id=&quot;header&quot;&gt; 헤더자리 &lt;/div&gt;</code> 이렇게 나타낼 수도 있다. 그러나<code>id</code>값을 부여하기위해서는 의미없는 <code>div</code>태그를 무조건 사용해줘야 한다. </p>
<p>이러한 문제를 개선하고자, HTML5에서는 시맨틱 웹의 개념과 시맨틱웹을 쉽게 구성할 수 있도록 만들어주는 시맨틱 태그가 등장했다. (시맨틱 태그에는 <code>header</code>, <code>nav</code>, <code>article</code>, <code>section</code>,<code>aside</code>, <code>footer</code>,<code>main</code> 등 과 같은 태그들이 존재한다.)</p>
<p>따라서, 시맨틱 웹 환경이 구축된 HTML5를 사용하는 현재는 컴퓨터에게 헤더자리임을 알려주기위해서 <code>header</code>태그를 사용하여<code>&lt;header&gt;헤더자리&lt;/header&gt;</code>라고 간단하게 적어주면 된다.👍🏻👍🏻</p>
<p><img src="https://images.velog.io/images/cecy-coding/post/70193099-d78d-4d3d-8731-ad65009d8d80/semantic%20tag.svg" alt="">(이미지 출처 - <a href="https://eunsukim.me/posts/understanding-semantic-html">https://eunsukim.me/posts/understanding-semantic-html</a>)</p>
<br>

<h1 id="2-시맨틱-태그-적용-사례">2. 시맨틱 태그 적용 사례</h1>
<p>무조건 시맨틱 태그를 사용하는 좋은 것은 아니며, 이는 상황에 맞게 사용해 주면된다. 
예시로 웹 페이지에 배경 이미지를 삽입할때, 시맨틱 태그를 사용하는 것과 사용하지 않는 것의 차이점을 알아보자. </p>
<ol>
<li><code>img</code> *<em>시맨틱 태그를 사용하는 경우, *</em> 
<code>&lt;img class=&quot;클래스명&quot; alt=&quot;이미지 속성&quot; src=&quot;이미지 주소&quot;&gt;</code>
위와 같이 배경이미지를 넣어 줄 수 있으며, <code>alt</code>속성에 해당 이미지에 대한 속성값을 넣을 수 있고 이는 검색엔진에서 인식된다. 따라서, 이미지가 검색엔진에 노출되기 원하면 <code>img</code>시맨틱 태그를 사용해 주면 된다. </li>
</ol>
<br>

<ol start="2">
<li>*<em>css파일에서 이미지 삽입하는 경우, *</em>
<code>.클래스명 {
background-image: url(&quot;이미지 주소&quot;);
}</code>
위와 같이 css를 통해 배경이미지를 넣어주면 어떤 의미있는 값도 컴퓨터에서는 읽을 수 없기 때문에 그저 이미지 삽입에서 그치게된다. 하지만, 웹사이트에서 단순하게 보여주기를 위한 이미지라면 유지보수에 편리한 본 방법을 사용해 주면 된다. </li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[HTML / CSS] 박스크기의 기준을 정하는 box-sizing]]></title>
            <link>https://velog.io/@cecy-coding/HTML-CSS-box-sizing</link>
            <guid>https://velog.io/@cecy-coding/HTML-CSS-box-sizing</guid>
            <pubDate>Mon, 16 Nov 2020 09:30:54 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/cecy-coding/post/30efe444-8018-4271-ae26-bc40a3825c19/%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%202020-11-21%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%209.00.10.png" alt="">&gt; box-sizing은 박스의 크기를 어떤 값을 기준으로 계산할지 결정하는 속성이다👻</p>
<h2 id="box-sizing">box-sizing</h2>
<p>아래 예시를 보자. </p>
<p>노란박스 4개의 가로 사이즈를 모두 300px로 지정해 주었는데 두번째 박스의 가로길이가 더 길다. 그 이유는 두번째 박스의 스타일에 <code>padding</code>과 <code>border</code> 속성을 추가해주었기 때문! css의<code>.second</code>를 보면 왼쪽, 오른쪽 <code>pdding 50px</code> + 왼쪽, 오른쪽 <code>border 10px</code>이 추가되었음을 확인할 수 있다. 따라서 두번째 박스의 가로길이는 현재 (50+50+10+10+300)px = 420px 이다! 
<img src="https://images.velog.io/images/cecy-coding/post/dce7950d-9fc8-4414-ae11-30f750ffc6b1/%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%202020-11-16%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%206.18.15.png" alt=""></p>
<pre><code class="language-html">//html
&lt;div class=&quot;first&quot;&gt;
      첫 번째 박스, 가로 300px
    &lt;/div&gt;

    &lt;div class=&quot;second&quot;&gt;
      두 번째 박스, 나도 가로 300px
    &lt;/div&gt;

    &lt;div class=&quot;first new&quot;&gt;
      new 첫 번째 박스, 가로 300px
    &lt;/div&gt;

    &lt;div class=&quot;second new&quot;&gt;
      new 두 번째 박스, 나도 가로 300px
    &lt;/div&gt;</code></pre>
<pre><code class="language-css">//css
.first {
  width: 300px;
  margin-bottom: 20px;
}

.second {
  width: 300px;
  margin-bottom: 20px;
  padding: 50px;
  border-width: 10px;
}

div {
  background-color: yellow;
}</code></pre>
<p><strong>위와 같이 <code>padding</code>과 <code>border</code>로 인해 width값이 무너지는 현상을 해결하기 위해서는?</strong><code>box-sizing</code>속성을 사용해주면 된다. 속성값으로는 <code>box-sizing: content-box | border-box | initial | inherit</code>이 있으며, 이번 예제에서는 <code>border</code>를 기준으로 박스크기를 정해주었다. (참고로 모든 태그에 적용하기 위해서 선택자를<code>*</code>로 지정해 주었다.)</p>
<pre><code class="language-css">*{
box-sizing: border-box;
}</code></pre>
<p>그럼 이렇게 <code>border</code>기준으로 예쁘게 박스 가로길이가 통일된다! 얍! 
<img src="https://images.velog.io/images/cecy-coding/post/ce31142a-7aeb-4f9d-b6d7-caf519858dd8/%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%202020-11-16%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%206.29.29.png" alt=""></p>
<h3 id="참고-box-sizing의-속성-값">참고) box-sizing의 속성 값</h3>
<p>content-box : 콘텐트 영역을 기준으로 크기를 정한다.
border-box : 테두리를 기준으로 크기를 정한다. 
initial : 기본값으로 설정한다. 
inherit : 부모 요소의 속성값을 상속받는다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[HTML / CSS] boder 속성 활용]]></title>
            <link>https://velog.io/@cecy-coding/HTML-CSS-boder-%EC%86%8D%EC%84%B1-%ED%99%9C%EC%9A%A9</link>
            <guid>https://velog.io/@cecy-coding/HTML-CSS-boder-%EC%86%8D%EC%84%B1-%ED%99%9C%EC%9A%A9</guid>
            <pubDate>Mon, 16 Nov 2020 09:16:39 GMT</pubDate>
            <description><![CDATA[<h1 id="boder-속성-활용">boder 속성 활용</h1>
<blockquote>
<p>css의 border 속성은 테두리를 만들어주는 역할을 하지만, 테두리의 스타일이나  색, 굵기 등을 커스터마이징 할 수 있기 때문에 이를 이용하여 밑줄이나, 인용문 등으로도 활용할 수 있다. </p>
</blockquote>
<h2 id="1-밑줄-긋는-2가지-방법">1) 밑줄 긋는 2가지 방법</h2>
<ol>
<li><code>text-decoration: underline;</code> 으로 밑줄 긋기</li>
<li>css의 <code>border</code> 속성 이용하여 밑줄 긋기<pre><code>//html
&lt;span&gt; border속성으로 그은 밑줄 &lt;/span</code></pre><pre><code class="language-css">//css
border-bottom: 2px solid;</code></pre>
<img src="https://images.velog.io/images/cecy-coding/post/d53b1720-f945-4f2a-a584-4ff46c45054c/%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%202020-11-16%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%206.04.50.png" alt=""></li>
</ol>
<p>밑줄은<code>text-decoration: underline;</code> 로 만들 수 있지만, 실제로 대부분의 개발자는 커스터마이징하기 좋은 <code>border-bottom: 2px solid;</code> 이런식으로 구현한다. </p>
<h2 id="2-인용문-만드는-2가지-방법">2) 인용문 만드는 2가지 방법</h2>
<ol>
<li><code>blockquote</code>태그를 이용<pre><code class="language-css">&lt;blockquote&gt;blockquote을 이용한 인용문입니다.&lt;/blockquote&gt;</code></pre>
</li>
</ol>
<ol start="2">
<li>css의 <code>border</code>속성 이용
css 속성값을 아래와 같이 주면 인용문 스타일을 만들 수 있다. <pre><code>//html
&lt;div&gt;border이용해 인용문 처럼 만들기!&lt;/div&gt;</code></pre><pre><code class="language-css">//css
margin-left: 20px;
border-left: 2px solid;
padding-left: 20px;</code></pre>
<img src="https://images.velog.io/images/cecy-coding/post/471636d0-3556-46f6-9fdc-0b0c01c96792/%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%202020-11-16%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%206.07.32.png" alt=""></li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[HTML / CSS] FlexBox 정복하기 3]]></title>
            <link>https://velog.io/@cecy-coding/CSS-FlexBox-%EC%A0%95%EB%B3%B5%ED%95%98%EA%B8%B0-3</link>
            <guid>https://velog.io/@cecy-coding/CSS-FlexBox-%EC%A0%95%EB%B3%B5%ED%95%98%EA%B8%B0-3</guid>
            <pubDate>Fri, 13 Nov 2020 10:11:48 GMT</pubDate>
            <description><![CDATA[<h1 id="flexbox-정복하기-3">FlexBox 정복하기 3</h1>
<blockquote>
<p>마지막으로, <code>flex-grow</code> <code>flex-shrink</code> <code>flex-basis</code>를 통해 브라우저 크기가 커지거나 작아질때 요소의 크기도 변화할 수 있도록 만들어보자. 
그리고 진짜 진짜 마지막으로 <a href="https://flexboxfroggy.com/#ko">FLEXBOX FROGGY</a>로 마무리!</p>
</blockquote>
<h2 id="1-기본틀-만들기">(1) 기본틀 만들기</h2>
<p><code>html 파일</code></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;flex box 연습&lt;/title&gt;
    &lt;link rel=&quot;stylesheet&quot; href=&quot;index2.css&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class=&quot;container&quot;&gt;
        &lt;div class=&quot;item item1&quot;&gt;1&lt;/div&gt;
        &lt;div class=&quot;item item2&quot;&gt;2&lt;/div&gt;
        &lt;div class=&quot;item item3&quot;&gt;3&lt;/div&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p><code>css파일</code></p>
<pre><code class="language-css">.container {
  background-color: beige;
  height: 100vh;
  display: flex;
}

.item {
  width: 80px;
  height: 80px;
}
.item1 {
  background-color: #ffcdd2;
}

.item2 {
  background-color: #e1bee7;
}

.item3 {
  background-color: #d1c4e9;
}
</code></pre>
<p><img src="https://images.velog.io/images/cecy-coding/post/2eb2e717-644e-4a85-be97-0f300f3897d6/%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%202020-11-13%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%206.16.39.png" alt=""></p>
<h2 id="2-flex-grow--flex-shrink">(2) flex-grow &amp; flex-shrink</h2>
<p><code>flex-grow</code>와 <code>flex-shrink</code>는 브라우저 창의 크기에 따라 요소의 크기를 변화 시켜준다. 이름에서 유추할 수 있듯, <code>flex-grow</code>는 창 크기가 커질때, <code>flex-shrink</code>는 창크기가 작아질때 요소크기를 어떻게 변화 시킬지 정해준다!</p>
<p><code>flex-frow</code>기준으로 확인해보자. 
<code>flex-frow</code>가 적용되지 않는 경우, 아래와 같이 아무리 브라우저 창을 크게 해도 요소의 크기가 달라지지 않는다. 
<img src="https://images.velog.io/images/cecy-coding/post/fca8146d-2b8c-46af-85bc-dbd2e2ebbfed/none%20flex-grow.gif" alt=""></p>
<p><code>flex-grow</code>값을 아래와 같이 각각1로 준다면?</p>
<pre><code class="language-css">.item1 {
  background-color: #ffcdd2;
  flex-grow: 1;
}

.item2 {
  background-color: #e1bee7;
  flex-grow: 1;
}

.item3 {
  background-color: #d1c4e9;
  flex-grow: 1;
}</code></pre>
<p>브라우저 창이 커짐에 따라 박스1,2,3이 같은 비율로 예쁘게 잘 커진다!
<img src="https://images.velog.io/images/cecy-coding/post/ee736c72-6906-477a-8ff5-62fedb4effd2/flex-grow.gif" alt=""></p>
<p>1번,3번박스는 <code>flex-grow: 1;</code> 2번박스는 <code>flex-grow: 2;</code>로 적용해주면?</p>
<pre><code class="language-css">.item1 {
  background-color: #ffcdd2;
  flex-grow: 1;
}

.item2 {
  background-color: #e1bee7;
  flex-grow: 2;
}

.item3 {
  background-color: #d1c4e9;
  flex-grow: 1;
}</code></pre>
<p>2번박스가 1,3번박스보다 2배 큰 비율로 늘어난다~! 
<img src="https://images.velog.io/images/cecy-coding/post/4e002182-3c57-43a8-88fa-e51e2e0d7d4d/flex-grow2.gif" alt=""></p>
<p><code>flex-grow</code>와 같은 방식으로 <code>flex-shrink</code>도 동작한다. 
1,3번박스는 <code>flex-shrink: 1;</code>, 2번박스는 <code>flex-shrink: 2;</code>로 적용해보자. </p>
<pre><code class="language-css">.item {
  width: 300px;
  height: 300px;
}
.item1 {
  background-color: #ffcdd2;
  flex-shrink: 1;
}

.item2 {
  background-color: #e1bee7;
  flex-shrink: 2;
}

.item3 {
  background-color: #d1c4e9;
  flex-shrink: 1;
}</code></pre>
<p>2번박스가 1,3번 박스보다 2배 더 작아지는것을 확인!
<img src="https://images.velog.io/images/cecy-coding/post/990f9a62-2615-40e8-aef0-40a8c18184cd/flex-shrink.gif" alt=""></p>
<h2 id="3-flex-basis">(3) flex-basis</h2>
<p><code>flex-basis</code>는 브라우저 크기 변화에 따라 <code>flex-grow</code> 나 <code>flex-shrink</code>보다 더 디테일하게 요소의 비율을 정해 줄 수있다. </p>
<p>1번 박스는 20%, 2번 박스 50%, 3번 박스는 30%의 비율을 유지해줘!라고 적었다. </p>
<pre><code class="language-css">.item1 {
  background-color: #ffcdd2;
  flex-basis: 20%;
}

.item2 {
  background-color: #e1bee7;
  flex-basis: 50%;
}

.item3 {
  background-color: #d1c4e9;
  flex-basis: 30%;
}</code></pre>
<p>브라우저 크기를 조절해보면 이렇게 20%,50%,30%비율을 유지하며 박스 크기가 달라지는 것을 확인할 수 있다 👍🏻
<img src="https://images.velog.io/images/cecy-coding/post/5b3445a7-813e-4a4a-be5a-2bcddb4d4130/flex-basis.gif" alt=""></p>
<h2 id="4-order">(4) order</h2>
<p>요소들의 순서를 바꿔보자. </p>
<pre><code class="language-css">.item1 {
  background-color: #ffcdd2;
  order: 2;
}

.item2 {
  background-color: #e1bee7;
  order: 0;
}

.item3 {
  background-color: #d1c4e9;
  order: 1;
}
</code></pre>
<p>1번박스는 2, 2번박스는 0, 3번박스는 1로 순서를 바꿔 주었다. 
<img src="https://images.velog.io/images/cecy-coding/post/8de81b15-db2e-42b7-a2ba-865c8af6785c/%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%202020-11-13%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%206.16.01.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[HTML / CSS] FlexBox 정복하기 2]]></title>
            <link>https://velog.io/@cecy-coding/HTML-CSS-FlexBox-%EC%A0%95%EB%B3%B5%ED%95%98%EA%B8%B0-2</link>
            <guid>https://velog.io/@cecy-coding/HTML-CSS-FlexBox-%EC%A0%95%EB%B3%B5%ED%95%98%EA%B8%B0-2</guid>
            <pubDate>Fri, 13 Nov 2020 10:10:53 GMT</pubDate>
            <description><![CDATA[<h1 id="flexbox-정복하기-2">FlexBox 정복하기 2</h1>
<blockquote>
<p>flexBox 중 요소들을 축의 중심방향<code>(justify-content)</code> 혹은 축의 수직방향<code>(align-content)</code>을 중심으로 정렬하는 방법을 알아보자. </p>
</blockquote>
<h2 id="1-justify-content">(1) justify-content</h2>
<p>축의 방향으로 요소들을 정렬시켜준다. </p>
<p><code>(기본값)justify-content: flex-first;</code>
<img src="https://images.velog.io/images/cecy-coding/post/385d0348-2cf4-4d2f-839f-c934a5d37778/%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%202020-11-13%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%204.29.59.png" alt=""></p>
<p><code>justify-content: flex-end;</code> 
요소의 순서는 유지시켜주되 위치만 오른쪽으로 이동시켜 준다. 
<img src="https://images.velog.io/images/cecy-coding/post/4a23bc4b-25bd-4c42-b927-94e8383c2b57/%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%202020-11-13%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%204.43.07.png" alt="">
<code>justify-content: center;</code> 
예상대로! 무지개 요소들이 중앙에 위치한다. 
<img src="https://images.velog.io/images/cecy-coding/post/f858583f-b5fa-4dfa-8bce-355886ca3aa8/%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%202020-11-13%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%204.43.36.png" alt="">
<code>justify-content: space-between;</code>
무지개 요소들 사이에&#39;만&#39; 공간이 생긴다. 
<img src="https://images.velog.io/images/cecy-coding/post/93797a0b-99d3-4565-81b4-15cb62210331/%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%202020-11-13%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%204.46.32.png" alt="">
<code>justify-content: space-evenly;</code>
무지개 요소 사이사이 뿐만아니라 1번박스와 10번박스 옆에도 동일한 공간이 생긴다. 
<img src="https://images.velog.io/images/cecy-coding/post/9ccbc593-3256-4a2f-910a-61afb4647813/%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%202020-11-13%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%204.47.09.png" alt="">
<code>justify-content: space-around;</code>
요 아이는 각 무지개 박스 주변에 공간이 생기는건데, 1번박스 왼쪽부분과 오른쪽 부분의 공간의 크기가 다른 이유는 1번박스의 오른쪽여백은 2번박스의 왼쪽여백과 더해진 것이기 때문이다 !! 
<img src="https://images.velog.io/images/cecy-coding/post/ea3b8da3-8352-42b1-8eee-4b25b1c55380/%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%202020-11-13%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%204.47.37.png" alt=""></p>
<h2 id="2align-content">(2)align-content</h2>
<p> justify-content와 동일한 속성들을 적용할 수 있으며, 축의 수직방향으로 정렬된다. 
 이번 속성을 확인해 보기 전 먼저, 무지개 박스의 갯수를 늘린 후<code>flex-wrap: wrap;</code>을 적용해 주었다. </p>
<p> <code>align-content: flex-first;</code></p>
<p> <img src="https://images.velog.io/images/cecy-coding/post/4f9751b6-4402-40f3-a8af-70de8cdd80c0/%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%202020-11-13%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.09.22.png" alt="">
 <code>align-content: flex-end;</code>
 <img src="https://images.velog.io/images/cecy-coding/post/5ec01f41-a03b-48ec-b86e-95b1c196ac03/%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%202020-11-13%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.09.51.png" alt="">
 <code>align-content: center;</code>
 <img src="https://images.velog.io/images/cecy-coding/post/f8ba37d2-723c-4c8f-b11d-96a71af27fe6/%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%202020-11-13%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.10.12.png" alt="">
 <code>align-content: space-between;</code>
 <img src="https://images.velog.io/images/cecy-coding/post/190fcf3f-c7d6-4fa3-bed6-defb4955de6c/%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%202020-11-13%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.10.33.png" alt="">
 <code>align-content: space-evently;</code>
 <img src="https://images.velog.io/images/cecy-coding/post/afd87ecf-b2a2-4a4d-80e9-a44ba5c76385/%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%202020-11-13%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.10.54.png" alt="">
 <code>align-content: space-around;</code>
 <img src="https://images.velog.io/images/cecy-coding/post/b5d2f520-9a5f-4d72-b736-ae787da23a2c/%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%202020-11-13%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.11.11.png" alt=""></p>
<h2 id="3-align-self">(3) align-self</h2>
<p>요소 하나만 위치를 변경하고 싶으면?  <code>align-self</code> 사용해주기!
박스1에만 <code>align-self: center;</code>를 적용해주면, </p>
<pre><code class="language-css">.item1 {
  background-color: #ffcdd2;
  align-self: center;
}

.item2 {
  background-color: #e1bee7;
}

.item3 {
  background-color: #d1c4e9;
}
</code></pre>
<p>아래와 같이 1번 박스만 중앙에 위치하게 된다. 
<img src="https://images.velog.io/images/cecy-coding/post/23630809-859e-429a-a337-774526757e6e/%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%202020-11-13%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%206.59.16.png" alt=""></p>
<h1 id="참고링크">참고링크</h1>
<p> <a href="https://www.youtube.com/watch?v=7neASrWEFEM&amp;t=59s">https://www.youtube.com/watch?v=7neASrWEFEM&amp;t=59s</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[HTML / CSS] FlexBox 정복하기 1]]></title>
            <link>https://velog.io/@cecy-coding/HTML-CSS-FlexBox-%EC%A0%95%EB%B3%B5%ED%95%98%EA%B8%B0-1</link>
            <guid>https://velog.io/@cecy-coding/HTML-CSS-FlexBox-%EC%A0%95%EB%B3%B5%ED%95%98%EA%B8%B0-1</guid>
            <pubDate>Fri, 13 Nov 2020 08:30:28 GMT</pubDate>
            <description><![CDATA[<h1 id="flexbox-정복하기-1">FlexBox 정복하기 1</h1>
<blockquote>
<p>flex box를 생성하고<code>(display: flex;)</code>, 
요소들의 방향을 설정해주고 <code>(flex-direction)</code>,
요소들을 다음줄로 넘겨주는 방법 <code>(flex-wrap)</code> 까지 알아보자. </p>
</blockquote>
<p><strong>MDN에서 가져온 flex model</strong>
<img src="https://images.velog.io/images/cecy-coding/post/e2cfd10c-08ae-42f8-afee-0ca3c6fc86e3/%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%202020-11-13%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%207.02.56.png" alt=""></p>
<h2 id="1-기본-코드-만들고-시작-">1. 기본 코드 만들고 시작 !</h2>
<p>오늘 사용한 기본 코드는 아래와 같다. 
<code>기본 html코드</code></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;flex box 연습&lt;/title&gt;
    &lt;link rel=&quot;stylesheet&quot; href=&quot;index2.css&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class=&quot;container&quot;&gt;
        &lt;div class=&quot;item item1&quot;&gt;1&lt;/div&gt;
        &lt;div class=&quot;item item2&quot;&gt;2&lt;/div&gt;
        &lt;div class=&quot;item item3&quot;&gt;3&lt;/div&gt;
        &lt;div class=&quot;item item4&quot;&gt;4&lt;/div&gt;
        &lt;div class=&quot;item item5&quot;&gt;5&lt;/div&gt;
        &lt;div class=&quot;item item6&quot;&gt;6&lt;/div&gt;
        &lt;div class=&quot;item item7&quot;&gt;7&lt;/div&gt;
        &lt;div class=&quot;item item8&quot;&gt;8&lt;/div&gt;
        &lt;div class=&quot;item item9&quot;&gt;9&lt;/div&gt;
        &lt;div class=&quot;item item10&quot;&gt;10&lt;/div&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p><code>기본 css코드</code></p>
<pre><code class="language-css">.container {
  background-color: beige;
  height: 100vh;
}

.item {
  width: 80px;
  height: 80px;
}
.item1 {
  background-color: #ffcdd2;
}

.item2 {
  background-color: #e1bee7;
}

.item3 {
  background-color: #d1c4e9;
}

.item4 {
  background-color: #bbdefb;
}

.item5 {
  background-color: #b2ebf2;
}

.item6 {
  background-color: #c8e6c9;
}

.item7 {
  background-color: #fff9c4;
}

.item8 {
  background-color: #ffe0b2;
}

.item9 {
  background-color: #ffccbc;
}

.item10 {
  background-color: #f5f5f5;
}</code></pre>
<p>위와 같이 html과 css파일을 만들어주면 아래와 같이 예쁜 무지개 박스가 생성된다. 🌈
<img src="https://images.velog.io/images/cecy-coding/post/f2b1e467-445e-43d7-8086-87b194f2862d/%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%202020-11-13%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%204.20.43.png" alt=""></p>
<h2 id="2-flex-box-생성">2. flex box 생성</h2>
<p>flex box 모델을 시작하려면 <code>display: flex;</code>로 먼저 시작을 알려주면 된다. </p>
<pre><code class="language-css">/* flex box 시작!*/
.container {
  background-color: beige;
  height: 100vh;
  display: flex;
}</code></pre>
<p>그럼 이렇게 촤르륵 옆으로 붙는다. 
<img src="https://images.velog.io/images/cecy-coding/post/385d0348-2cf4-4d2f-839f-c934a5d37778/%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%202020-11-13%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%204.29.59.png" alt=""></p>
<h3 id="1-flex-direction">(1) flex-direction</h3>
<p><code>flex-direction</code>은 요소의 방향을 잡아 줄수 있다. </p>
<p><code>(기본값)flex-direction: row;</code>
<img src="https://images.velog.io/images/cecy-coding/post/385d0348-2cf4-4d2f-839f-c934a5d37778/%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%202020-11-13%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%204.29.59.png" alt=""></p>
<p><code>flex-direction: row-reverse;</code> 무지개박스가 기본방향에서 반대편은 오른쪽에서 시작된다. 
<img src="https://images.velog.io/images/cecy-coding/post/bd76f96d-7003-460d-88a0-5f91e6b68306/%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%202020-11-13%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%204.31.45.png" alt="">
<code>flex-direction: column;</code> 축의 수직 방향으로 무지개 박스의 방향 변경!
<img src="https://images.velog.io/images/cecy-coding/post/f47f4e42-9235-46a3-9d32-1e3008ec27c1/%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%202020-11-13%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%204.32.27.png" alt="">
<code>flex-direction: column-reverse;</code> 축의 수직방향이되 기본 값이 위 아래 &gt; 아래 위로 방향 변경!
<img src="https://images.velog.io/images/cecy-coding/post/2e175e46-ae5a-48de-92c9-8bab63310144/%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%202020-11-13%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%204.33.06.png" alt=""></p>
<h3 id="2-flex-wrap">(2) flex-wrap</h3>
<p> 기본값인<code>flex-wrap: nowrap;</code>상태에서는 브라우져 창을 줄이면 무지개 요소들이 창에 맞춰 작아진다. 
<img src="https://images.velog.io/images/cecy-coding/post/1ba35f0b-3a2c-49a2-a202-55b66899230d/%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%202020-11-13%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%204.37.02.png" alt=""></p>
<p><code>flex-wrap: wrap;</code>
이떄, <code>flex-wrap: wrap;</code>을 사용하면 브라우져가 줄어들어도 무지개 요소들이 원래 사이즈를 유지하며 부족한 공간만큼 다음 줄로 무지개 요소를 이동시켜준다. 
 <img src="https://images.velog.io/images/cecy-coding/post/11649ed9-3b5c-49b2-a502-761faca7bbc0/%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%202020-11-13%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%204.39.15.png" alt=""></p>
<h1 id="참고링크">참고링크</h1>
<p><a href="https://www.youtube.com/watch?v=7neASrWEFEM&amp;t=59s">https://www.youtube.com/watch?v=7neASrWEFEM&amp;t=59s</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[HTML / CSS] Position 속성 - relative 와 absolute ]]></title>
            <link>https://velog.io/@cecy-coding/HTML-CSS-relative-%EC%99%80-absolute</link>
            <guid>https://velog.io/@cecy-coding/HTML-CSS-relative-%EC%99%80-absolute</guid>
            <pubDate>Fri, 13 Nov 2020 04:30:26 GMT</pubDate>
            <description><![CDATA[<h1 id="1-position-속성">1. Position 속성</h1>
<blockquote>
<p>css의 position 속성 중 relative와 absolute의 차이를 알아보자! </p>
</blockquote>
<p>이 둘의 차이를 알려면, 먼저 position의 기본 속성인 static 을 알아야한다. </p>
<h2 id="1-static">1) static</h2>
<p><code>static</code>은 position속성의 기본값으로 모든 태그들은 이미 처음부터 <code>static</code> 상태다. 그러므로 우리가 <code>position: stactic;</code>이라고 적어줄 일은 없다. position 속성을 갖지 않은 버튼을 하나 만들어보자. </p>
<pre><code class="language-css">/*position 속성을 부여하지 않은 버튼*/
        .btn1{
            all: unset; 
            background-color: cornflowerblue;
            color: white;
            padding: 5px 20px;
            border-radius: 20px;
            cursor: pointer;
            border-style: dotted;
            border-color: white;
        }</code></pre>
<p>그럼, 아래와 같은 버튼이 생성된다. 이미지의 선은 브라우저 상단을 보여주기 위해서 같이 캡쳐했다. 어떤 값도 부여해주지 않았음에도 버튼과 브라우저 사이에 약간의 여백이 있음을 알 수 있다. 이게 모든 태그들이 <code>static</code> 상태에 있다는 증거!  
<img src="https://images.velog.io/images/cecy-coding/post/48ee9c37-63f6-4601-900c-5a639bf591d5/%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%202020-11-13%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%2012.12.47.png" alt=""></p>
<h2 id="2-relative">2) relative</h2>
<p>버튼의 위치를 바꿔 여백을 좀 주고싶다면 이제 <code>position: relative;</code>가 등장할 차례다. <code>relative</code>는 <code>static</code>이었을때의 위치를 기준으로 값을 갖게된다.  </p>
<pre><code class="language-css">/*position: relative속성을 부여하고 top: 100px; 로 지정해 주었다.*/ 
        .btn1{
            all: unset; 
            background-color: cornflowerblue;
            color: white;
            padding: 5px 20px;
            border-radius: 20px;
            cursor: pointer;
            border-style: dotted;
            border-color: white;
            position :relative;
            top: 100px;
        }</code></pre>
<p>역시나 상단 브라우저창을 함께 캡쳐했다. btn1은 static 상태에서 top: 100px; 만큼 이동했다. 
<img src="https://images.velog.io/images/cecy-coding/post/30bdb86b-0b73-4852-b3e2-f6e46daca16c/%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%202020-11-13%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%2012.22.43.png" alt=""></p>
<h2 id="3-absolute">3) absolute</h2>
<p><code>absolute</code>는 <code>static</code>속성값에 구애 받지 않고 요소를 위치시킬 수 있다. </p>
<pre><code class="language-css">/*position: absolute;  top: 100px을 부여해준 버튼 */
.btn2{
            all: unset; 
            background-color: cornflowerblue;
            color: white;
            padding: 5px 20px;
            border-radius: 20px;
            cursor: pointer;
            border-style: dotted;
            border-color: white;
            position : absolute;
            top: 100px;
        }</code></pre>
<p>btn2에<code>position: absolute; top: 100px;</code>값을 부여해주었다. 그럼 아래와 같이 브라우져 상단에서부터 100px떨어진 곳에 버튼이 위치하게 된다. 
<img src="https://images.velog.io/images/cecy-coding/post/9c3498a3-21c6-4ca8-8312-d433ffd73727/%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%202020-11-13%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%2012.35.29.png" alt=""></p>
<h3 id="relative와-absolute-비교">relative와 absolute 비교</h3>
<p>따로 보니 relative top: 100px; 인 버튼과 absolute top:100px인 버튼의 위치 차이를 느끼기 어려워 동시에 만들어 보았다. 
 <code>btn1</code>에는 <code>position: relative; top: 100px;</code>, <code>btn2</code>에는 <code>position: absolute; top: 100px;</code>을 부여해 주었다. </p>
<pre><code class="language-css">       .btn1{
            all: unset; 
            background-color: cornflowerblue;
            color: white;
            padding: 5px 20px;
            border-radius: 20px;
            cursor: pointer;
            border-style: dotted;
            border-color: white;
            position :relative;
            top: 100px;
        }
        .btn2{
            all: unset; 
            background-color: cornflowerblue;
            color: white;
            padding: 5px 20px;
            border-radius: 20px;
            cursor: pointer;
            border-style: dotted;
            border-color: white;
            position : absolute;
            top: 100px;
        }</code></pre>
<p>그럼 아래와 같은 결과가 나오는데, static기본값을 가진 상태에서 top: 100px; 만큼 이동한 <code>btn1</code>이 <code>btn2</code>보다 더 아래에 있는 것을 확인 할 수 있다. 
<img src="https://images.velog.io/images/cecy-coding/post/e394a9f3-2625-4929-a48c-c9d393ba2d8d/%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%202020-11-13%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%2012.42.24.png" alt=""></p>
<p>++참고로 <code>position: fixed;</code> 요 아이도 static속성을 기본으로 갖지 않아 기준점이 브라우저 왼쪽 상단이 된다. </p>
<h3 id="참고-링크">참고 링크</h3>
<p><a href="https://engkimbs.tistory.com/922">https://engkimbs.tistory.com/922</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[HTML / CSS] 요소의 모든 속성을 초기화 시켜주는 all 속성]]></title>
            <link>https://velog.io/@cecy-coding/HTML-CSS-%EC%9A%94%EC%86%8C%EC%9D%98-%EB%AA%A8%EB%93%A0-%EC%86%8D%EC%84%B1%EC%9D%84-%EC%B4%88%EA%B8%B0%ED%99%94-%EC%8B%9C%EC%BC%9C%EC%A3%BC%EB%8A%94-all-%EC%86%8D%EC%84%B1</link>
            <guid>https://velog.io/@cecy-coding/HTML-CSS-%EC%9A%94%EC%86%8C%EC%9D%98-%EB%AA%A8%EB%93%A0-%EC%86%8D%EC%84%B1%EC%9D%84-%EC%B4%88%EA%B8%B0%ED%99%94-%EC%8B%9C%EC%BC%9C%EC%A3%BC%EB%8A%94-all-%EC%86%8D%EC%84%B1</guid>
            <pubDate>Thu, 12 Nov 2020 07:33:02 GMT</pubDate>
            <description><![CDATA[<h1 id="all-속성">all 속성</h1>
<blockquote>
<p>css 스타일 속성 중 <code>all</code>이라는 아이가 있는데, 요 아이는 예를들어 버튼을 생성하면 브라우저마다 기본적으로 적용되어있는 버튼의 기본 스타일 값을 초기화 시켜주는 아이다. </p>
</blockquote>
<p>예를들어, 아래와 같이 버튼을 생성했다면?</p>
<pre><code class="language-html">&lt;body&gt;
    &lt;button&gt; Click Me ! &lt;/button&gt;
&lt;/body&gt;</code></pre>
<p>이런 버튼이 생성된다. 
<img src="https://images.velog.io/images/cecy-coding/post/a719e2b6-91a0-4dae-bdc0-c313053999a4/%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%202020-11-12%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%203.59.25.png" alt=""></p>
<p>여기서 <code>all: unset;</code>스타일 속성을 입혀주면,  </p>
<pre><code class="language-css">button{
    all: unset; 
        }</code></pre>
<p>이렇게 기본 버튼 모양이 초기화되어, 텍스트만 남게된다. 
<img src="https://images.velog.io/images/cecy-coding/post/36e80c7c-2a0a-4072-b9be-f82a8a12e2c6/%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%202020-11-12%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%204.02.55.png" alt=""></p>
<p>스타일이 초기화된 버튼에 배경색을 입혀주면? </p>
<pre><code class="language-css">button{
    all: unset; 
        background-color: cornflowerblue;
        }</code></pre>
<p> 이렇게 배경색이 입혀진다! 그말은 즉, 이제 원하는 스타일을 마음껏 적용해주면 된다는 것! 
 <img src="https://images.velog.io/images/cecy-coding/post/680ec1dd-4b4d-466d-bd6f-cf2817245a76/%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%202020-11-12%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%204.04.46.png" alt=""></p>
<p>버튼의 폰트 컬러와 여백, 포인터, 동글동글한 모양으로 속성을 입혀주고나면~</p>
<pre><code class="language-css">button{
    all: unset; 
            background-color: cornflowerblue;
            color: white;
            padding: 5px 20px;
            border-radius: 10px;
            cursor: pointer;
        }</code></pre>
<p> 예쁜 버튼 완성! 
 <img src="https://images.velog.io/images/cecy-coding/post/e9d0a64d-a470-46a6-9dae-70ecf65c005c/%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%202020-11-12%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%204.17.41.png" alt=""></p>
<p> 아, 참고로 <code>all:unset;</code>속성을 해주지 않으면 기본 스타일과 새로 적어준 스타일이 충돌되어 아래와 같이 안에쁜 모양의 버튼이 생성되니 잘 확인 할 것! 
 <img src="https://images.velog.io/images/cecy-coding/post/5d497eab-e180-48a4-94b9-7b07a449a9c2/%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%202020-11-12%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%204.19.08.png" alt=""></p>
<h2 id="참고">참고</h2>
<p> MDN참고하여 나머지 속성값 정리하기 
 <a href="https://developer.mozilla.org/ko/docs/Web/CSS/all">https://developer.mozilla.org/ko/docs/Web/CSS/all</a></p>
]]></description>
        </item>
    </channel>
</rss>