<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>&lt;kimjyunny/&gt;</title>
        <link>https://velog.io/</link>
        <description>호기심이 많은 프론트엔드 개발자</description>
        <lastBuildDate>Fri, 14 Oct 2022 09:09:12 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>&lt;kimjyunny/&gt;</title>
            <url>https://velog.velcdn.com/images/kimjyunny_dev/profile/fef1cfeb-e9cd-4b97-87df-750db6f59cbf/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. &lt;kimjyunny/&gt;. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/kimjyunny_dev" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[파이썬 입문기 - 기초]]></title>
            <link>https://velog.io/@kimjyunny_dev/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%9E%85%EB%AC%B8%EA%B8%B0-%EA%B8%B0%EC%B4%88</link>
            <guid>https://velog.io/@kimjyunny_dev/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%9E%85%EB%AC%B8%EA%B8%B0-%EA%B8%B0%EC%B4%88</guid>
            <pubDate>Fri, 14 Oct 2022 09:09:12 GMT</pubDate>
            <description><![CDATA[<h1 id="1-print-출력과-문자열">1. print() 출력과 문자열</h1>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/98aa15f8-cf1c-437c-998f-ba683b4f492c/image.png" alt=""></p>
<blockquote>
<p><strong>✅ end 키워드 이해하기</strong>
print 뒤에 end를 붙이면 자동으로 발생하는 줄바꿈을 없앨 수 있다. 
사실, end 키워드를 사용한다고** 줄바꿈이 없어지는 것이 아니다<strong>.
end 키워드를 사용하지 않을때는 print 문 끝에 **자동으로 \n(줄바꿈)이 삽입</strong>된다. </p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/489daf06-e610-498b-a004-42df7cfc38c4/image.png" alt="">
end 키워드는 자동으로 추가되는 \n 대신 <strong>내가 넣는 문자열을 끝에 사용</strong>하겠다는 의미가 된다.
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/42a48db7-205f-435c-b455-5c35d374367a/image.png" alt="">
<strong>결과</strong>
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/4b1428ad-e299-4030-ae7c-52fa24830ed1/image.png" alt=""></p>
<h1 id="2-자료형과-변수">2. 자료형과 변수</h1>
<h2 id="1-숫자형">1. 숫자형</h2>
<blockquote>
<p>✔️ <strong>정수형 **: int(Integer type) / 소수점이 없고 사람의 수를 세거나 카드 개수를 세는 등의 계산에 사용
✔️</strong> 실수형** : float(Floating type) / 소수점이 포함된 실수. 분수나 정확한 측정값에 이용되고 평균을 구할 때 많이 쓰임 </p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/387bd928-5b99-4afd-8f91-abb18e75da0c/image.png" alt="">
type(___)을 print하면 일반적인 풀력문과 달리 &lt;class &#39;int&#39;&gt;, &lt;class&#39;float&#39;&gt; 이렇게 괄호 안의 자료형이 출력된다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/cec9f42e-7be7-4c05-94bb-bedf0f4fa987/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/b2a4dcbf-da58-47f1-ac08-4f6a178095d3/image.png" alt="">
print안에 계산식을 넣어도 결과가 출력되는 이유는 문자열이 아니라 숫자형이기 때문이다. 
하지만 따옴표로 감싸게 된다면 문자열로 출력되기 때문에 그대로 출력이된다. 
❓문자열에 type을 넣는다면?
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/68501eba-9bfe-44df-83b8-782f1166fbe5/image.png" alt="">
0.2+1.8은 2.0이기 때문에 float가
&quot;0.2+1.8&quot;은 문자열로 출력되기 때문에 str이 출력된다.</p>
<h2 id="2-불-자료형">2. 불 자료형</h2>
<p><strong>bool</strong>은 boolean의 줄임말로** 참(True), 거짓(False)*<em>를 나타내는 자료형이다. 
_(</em>파이썬에서는 True, False 모두 맨 앞글자가 대문자여야한다!)_
조건문에서 많이 사용되니 기억하기~!</p>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/4eedff6a-f0ea-451d-8510-642bb097f08f/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/0ab1324f-dd1f-43f4-9e02-31ccab2403f1/image.png" alt=""></p>
<h2 id="3-변수">3. 변수</h2>
<p>사람들이 무언가를 기억할 때 외에 기억을 저장하는 것 처럼,
컴퓨터 안에 공간을 만들어 원하는 데이터를 저장 할 수 있다. 
컴퓨터는 이 공간에 이름을 정하고, 데이터를 매번 바꿔가며 저장 할 수 있는데 이 공간의 이름을 <strong>변수</strong>라고 부른다. 
파이썬은 <strong>=</strong>부호를 이용해 변수를 만들고 그 안에 데이터를 저장한다.<br><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/50577d76-5920-46af-ab88-f535bbddfbb2/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/6104b675-29a5-47cc-8646-c4b0543fb672/image.png" alt="">
<strong>변수(Variable)</strong>는 말 그대로, <strong>변하는 값</strong>을 의미하며, 한번 선언한다고 끝이 나는게 아닌 <strong>언제든지 데이터를 변경 할 수 있다</strong>. </p>
<h2 id="4-숫자형을-저장하는-변수">4. 숫자형을 저장하는 변수</h2>
<p>파이썬의 변수에는 <strong>모든 자료형</strong>을 저장 할 수 있다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/bf1e1b3b-192b-4a32-930a-6be2910b2f1b/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/d85d5cd0-cf69-43d7-b577-72b4af5a2715/image.png" alt=""></p>
<h2 id="5-문자열을-다루는-방법---인덱싱">5. 문자열을 다루는 방법 - 인덱싱</h2>
<p>문자열 인덱싱을 이용하면 문자열에서 원하는 부분만 골라서 가져 올 수 있다.
<strong>인덱싱(Indexing)</strong>은 <strong>무언가를 가리킨다</strong>는 의미로, 문자열의 글자에 <strong>번호를 지정하고 가리키는 것</strong>을 문자열 인덱싱이라고 한다.
인덱스 번호(위치)의 시작은 1이 아니라 <strong>0에서부터 시작</strong>된다.
또한 띄어쓰기랑 !와 같은 특수문자도 마찬가지로 한 공간을 차지하고 번호로 지정이된다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/487436d3-aac6-4839-83e4-3b6b1d2ef605/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/978d00dc-189d-472f-adec-b0372cf75b3e/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/99b1866d-7ab6-4d0b-bb95-d5f18f4e9a8c/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/ff260b54-e8c9-4417-a251-a02046ce5cc4/image.png" alt=""></p>
<blockquote>
<p><strong>✅ 정리</strong></p>
</blockquote>
<p>1) 인덱싱을 사용할 땐 대괄호를 사용하고 그 안에 인덱스 번호를 넣는다. 
2) 변수[n] : 변수에 저장된 문자열의 n번쨰 자리수(번호)
3) 문자열[인덱스번호]의 형식으로 문자열 인덱싱
파=&gt;[0], 이=&gt;[1], 썬=&gt;[2] / 파=&gt;[-12], 이=&gt;[-11], 썬=&gt;[-10]
4) 음수 인덱싱은 뒤에서 부터 읽을 수 있게 한다.</p>
<h2 id="6-슬라이싱">6. 슬라이싱</h2>
<p><strong>인덱싱</strong>으로 문자열 중 <strong>하나를 골라</strong> 가져왔다면,
<strong>슬라이싱</strong>은 <strong>문자열을 잘라서</strong> 가져오는 방법이다.
슬라이싱은 <strong>콜론(:)</strong>을 사용해서 수행 할 수 있다.
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/ffac0343-9a91-4fd6-bd37-e8ba52a8c4bd/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/23c7e3df-c2a2-4ce2-a1da-b9519918946a/image.png" alt=""></p>
<blockquote>
<p>✔️ 문자열[시작:끝] =&gt; 시작번호<del>끝번호-1
✔️ 슬라이싱의 끝 번호를 쓰지 않으면 =&gt; 시작번호</del>문자열의 마지막까지 슬라이싱
✔️ 슬라이싱의 시작 번호를 쓰지 않으면 =&gt; 문자열의 첫글자부터 끝번호 -1까지 슬라이싱</p>
</blockquote>
<h1 id="3-산술연산자">3. 산술연산자</h1>
<h2 id="1-연산자">1) 연산자</h2>
<p><strong>연산</strong>: 프로그램에서 수나 식을 계산해서 결과를 도출하는 것
*<em>연산자 *</em>: 계산할 때 사용되는 기호(+,-등)</p>
<h2 id="2-파이썬으로-사칙연산하기">2) 파이썬으로 사칙연산하기</h2>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/91e7bdf1-e215-44fb-9d53-afaaf8dee837/image.png" alt=""></p>
<h3 id="1-파이썬의-나눗셈">(1) 파이썬의 나눗셈</h3>
<blockquote>
<ul>
<li>/연산자 : 나눗셈(division)</li>
</ul>
</blockquote>
<ul>
<li>//연산자 : 버림 나눗셈(floor division)</li>
<li>% 연산자 : 모듈로 연산자(modulo)</li>
</ul>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/d7e2a786-12fd-4ab4-a3c6-4f9b753bae32/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/1316f8bb-9d6b-4ddd-bf47-e093a1b73f6b/image.png" alt=""></p>
<h3 id="2-파이썬의-거듭제곱">(2) 파이썬의 거듭제곱</h3>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/cc602b6e-9b73-4e07-914b-dcf17061dc61/image.png" alt=""></p>
<h3 id="3-복합-대입-연산자">(3) 복합 대입 연산자</h3>
<p>대입연산자는 변수에 값을 넣어줄 때 사용했던 <strong>등호(=)</strong>를 의미한다.
복합 대입 연산자란 <strong>대입연산자와 산술연산자를 합친 것</strong>을 말한다. </p>
<blockquote>
<ul>
<li>+= 기존 변수에 값을 더한 후 대입</li>
</ul>
</blockquote>
<ul>
<li>-= 기존 변수에 값을 뺀 후 대입</li>
<li>*= 기존 변수에 값을 곱한 후 대입</li>
<li>/= 기존 변수에 값을 나눈 후 대입</li>
</ul>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/8cdc2cc4-80c7-4414-bde7-2a5416dffd3e/image.png" alt=""></p>
<h3 id="4-산술연산자-활용">(4) 산술연산자 활용</h3>
<p><strong>✅ 홀수 판정기</strong>
홀수는 2로 나누면 나머지가 1이라는 공통된 특징이 있다. 
홀수 짝수를 구할때 나머지를 구하는 연산자를 이용한다.
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/55b78608-4de0-4276-81d9-81e1180a1bf1/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/2d5a7ae6-02ea-4bdc-9429-fb5fc9082f31/image.png" alt=""></p>
<p>✅ <strong>응용</strong>
물건 가격이 3420원이라고 가정했을때 1000원 지폐, 100원 동전, 10원 동전은 각각 몇개가 필요한지 출력하고, 그리고 동전은 몇개가 필요한지 출력하라.
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/8b11187b-36c2-4f39-97b3-30021f46455c/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/5ce1523a-f08a-4649-b5b2-6e9449945c69/image.png" alt=""></p>
<h1 id="4-입력받기-자료형-변환">4. 입력받기, 자료형 변환</h1>
<p>프로그래밍은 입력(input)을 전달받아 출력(output)을 만들어내는 과정을 의미한다. </p>
<h2 id="1-파이썬으로-입력받기">1) 파이썬으로 입력받기</h2>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/673676ec-9891-4094-936e-a9dc2f8e7384/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/9993cbb4-838d-45c3-82f1-f8d1a315d428/image.png" alt="">
&quot;문자를 입력하세요:&quot; 에 hi를 입력하면 hi라는 결과가 출력되고
type은 str로 출력된다. </p>
<h2 id="2-자료형-변환하기">2) 자료형 변환하기</h2>
<p>입력값은 모두 문자로 처리가 된다.
입력을 숫자로 처리하기 위해선 문자열 타입(자료형)을 강제로 변환해야한다. 
정수(int)로 변환하기 위해서는 int() 함수를, 실수(float)는 float()를 사용한다. </p>
<h3 id="1-숫자-→-숫자">(1) 숫자 → 숫자</h3>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/6755f4ff-e281-41e8-8a67-91d968b1cbac/image.png" alt=""></p>
<h3 id="2-문자-→-숫자">(2) 문자 → 숫자</h3>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/e025cdb2-e402-49bb-98d2-7418e8e3cfbd/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/6b98175e-23fa-419b-9703-b08df8b69268/image.png" alt=""></p>
<h3 id="3-숫자-→-문자">(3) 숫자 → 문자</h3>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/1108edaf-c2ac-4adc-bdc3-06156f7a523e/image.png" alt=""></p>
<blockquote>
<p><strong>✅ 정리</strong>
✔️ 사용자를 통해 입력받기는 input()사용
✔️ input()으로 입력받은건 무조건 문자열!
✔️ 자료형 변환하기</p>
</blockquote>
<ul>
<li>정수형으로 바꾸고 싶을땐 int()</li>
<li>실수형으로 바꾸고 싶을땐 float()</li>
<li>문자열로 바꾸고 싶을땐 str()</li>
</ul>
<p><strong>✅ 응용</strong>
숫자로 생일을 입력받아 연도와 월, 일을 출력하기
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/e47b93d1-9b26-4e18-8011-3e2e39619247/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/08529db7-39a5-4328-8516-1741ca8b88d1/image.gif" alt=""></p>
<h1 id="5-비교연산자와-조건문">5. 비교연산자와 조건문</h1>
<h2 id="1-비교연산자">1) 비교연산자</h2>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/42eb40ea-7a81-4002-935c-16b66a5af4d1/image.png" alt=""></p>
<h2 id="2-논리연산자">2) 논리연산자</h2>
<blockquote>
<ul>
<li>a and b : a와 b 모두 참이여야 참이다.</li>
</ul>
</blockquote>
<ul>
<li>a or b : a와 b 둘 중 하나만 참이여도 참이다. </li>
<li>not a : a가 거짓이면 참이다. a가 참이면 거짓이다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/59d21c0e-c59d-4834-bcf0-e8a9ba902451/image.png" alt=""></li>
</ul>
<h2 id="3-if문">3) if문</h2>
<p>파이썬의 경우 들여쓰기에 예민한 언어이다. 
들여쓰기 된 코드는 바로 위의 코드, 이경우엔 조건문에 종속이 된다. 
들여쓰기가 중괄호 {}의 역할을 한다.
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/e9fb1683-e4ab-4060-af1c-df6d2f139df8/image.png" alt="">
<strong>if</strong> 조건문1 → 만약 조건문1이 &quot;참&quot;이라면 실행문1이 실행
<strong>elif</strong> 조건문2 → 만약 조건문1이 &quot;거짓&quot;이고, 조건문2가 &quot;참&quot;이라면 실행문2가 실행
<strong>else</strong> → 조건문1, 조건문2가 모두 &quot;거짓&quot;이라면 실행문3이 실행</p>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/b1e841fa-eec4-401c-8de6-fc533263af8e/image.png" alt=""></p>
<p><strong>✔️ if a in b</strong>
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/00ba92e7-2938-4137-8130-0b4503cef105/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/6e10de46-519c-4834-ad12-4c601b56aeca/image.png" alt=""></p>
<p><strong>✅ 응용</strong></p>
<p>1) 세과목의 점수를 입력받아 평균 점수가 50점 이상이면&#39;합격&#39;, 50점 미만이면 &#39;불합격&#39;을 출력해주세요.
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/58e170ee-e16a-4127-aa1c-f0aafab3a8c9/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/560b7043-cc94-4820-ab04-e27e47c3b6ec/image.gif" alt=""></p>
<p>2) 하나의 단어 &#39;a&#39;와 하나의 문장&#39;b&#39;을 입력받아 b안에 a가 있다면 &#39;단어가 있습니다.&#39;를 출력하고 없다면 &#39;단어가 없습니다.&#39;를 출력해주세요.
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/c01e709e-a112-4b59-8187-7cdf56277423/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/2e5ee4b5-c766-4f5a-8700-18670c4f7612/image.gif" alt=""></p>
<h1 id="6-반복문">6. 반복문</h1>
<h2 id="1-for문">1) for문</h2>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/b364a250-ded1-4e05-81c6-68c60e4bc643/image.png" alt="">
반복문도 조건문처럼 다음줄에서 tab을 통해 들여쓰기를 해줘야한다!
range()함수는 바로 숫자 리스트를 만들어주기 때문에 for문과 함께 쓰인다.</p>
<p>range(시작숫자, 끝나는 숫자)는 변수가 시작 숫자부터 (끝나는 숫자-1)까지 1씩 증가하는 동안이라는 뜻이다. 
range(10)은 range(0,10)과 같은 의미이다. 따라서 i는 0부터 시작해서 9까지 1씩 증가하면서 for문을 돌게 된다. 
=&gt; 결과: 0 1 2 3 4 5 6 7 8 9</p>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/fcfc88c8-88f8-4ca8-90a6-3a807bb1a1e0/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/bce38bc0-4e4c-4f8e-a088-15f51b341202/image.png" alt=""></p>
<h2 id="2-while문">2) while문</h2>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/3479f0d1-067b-4bbc-abc6-843f56f0a51e/image.png" alt="">
조건문이 참이면, while 내부의 실행문으로 들어간다.
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/f45bf991-3f7c-4bbf-a41f-5f68c9f61e2e/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/4f2f2ca3-6c29-47be-8940-4ae9dcebf3f9/image.png" alt=""></p>
<p><strong>✅ while문을 사용한 무한반복문</strong>
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/57724c05-a025-4969-ac33-ba5f2c69fbcb/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/9c3d7e1d-c316-4249-968b-159c7f449142/image.png" alt="">
이 코드를 실행하게 되면 무한으로 Hello World가 출력이된다.
이러한 상황을 피하기 위해 <strong>break구문</strong>을 사용하여 while문을 벗어난다.
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/9ee7e710-4211-405c-ad74-91dbc07f86d9/image.png" alt="">
while True:를 통해 무한 반복문을 만든 다음, number를 통해 사용자의 입력값을 받는다.
만약 number이 1이라면 &quot;문이 열렸습니다.&quot;가 출력되고 다시 while문을 반복한다.
number가 2라면 break를 통해 while문을 벗어나게 되고, 프로그램이 종료된다.</p>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/c9bfef90-9124-49a6-a3a9-939830df43dd/image.gif" alt=""></p>
<blockquote>
<p>✔️ 범위가 정해져 있을 때는 <strong>for문</strong>
✔️ 범위가 정해져 있지 않을 때는 <strong>while문</strong>
✔️ while+true를 이용하면 <strong>무한반복 가능</strong>
✔️ <strong>break</strong>를 사용하면 반복문 탈출 !</p>
</blockquote>
<p><strong>✅ 응용</strong>
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/d45e5787-99aa-4ccf-b193-631b29d299dd/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/a8ab9ce0-458d-44e7-bd09-40bf306b8fdf/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/3b9f237c-9872-45da-88e9-a128958ff286/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/b8d22ef5-fd50-4d15-ad2e-95cce6eb72dd/image.gif" alt="">
<em>if, while 응용들어가니까 어렵땅,,,,</em></p>
<h1 id="7-함수">7. 함수</h1>
<p><strong>함수란?</strong> 어떠한 기능을 하는 코드 덩어리
함수를 사용하는 이유는 반복적인 코드를 줄이기 위해서다.
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/9b577d07-fb7c-4d99-8100-8e7d5c781b4f/image.png" alt="">
<strong>✔️ def *<em>: 함수를 만들때 가장 먼저 적어줘야하는 키워드로, def 뒤에 나오는 코드는 함수다! 라는 것을 알려주는 역할
*</em>✔️ 함수명</strong> : print, input 등의 함수의 이름을 의미한다.
<strong>✔️ 매개변수 *<em>: 이 함수에 전달될 값을 의미한다. 만약 print(10)이라고 코드를 작성했다면, 10이 매개변수가 된다. 그 함수 내부에서 사용되는 변수값을 입력받는다.<br><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/e0d42ad9-f4a8-4ac4-adf7-9ed676055eb9/image.png" alt="">
def로 함수임을 알려주었고, 함수의 이름은 getSum, 매개변수로는 a,b가 있다.
✅ *</em>return</strong>이란 함수가 끝나고 <strong>돌려줄 값</strong>을 정하는 것 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/0ecc0f0b-59dd-41e5-93f2-92001d53fe29/image.png" alt="">
<strong>🧐 getSum은 매개 변수가 a, b인데 num1, num2가 들어가는 이유는?</strong>
함수의 매개변수는 기본적으로 값을 <strong>받아오는 역할</strong>을 한다.
a와 b는 값을 받을 받을 그릇이기 때문에 num1의 값이 a로 옮겨지기만 할 뿐 변수의 이름은 중요하지 않다.
<strong>✅ 응용</strong>
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/02925ffe-5a4f-45d8-bf6e-cee0de1c3505/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/11f9fff3-c28f-4189-a9bf-f5619bd55a8e/image.png" alt=""></p>
<h1 id="8-리스트">8. 리스트</h1>
<h2 id="1-리스트">1) 리스트</h2>
<pre><code>example_lst=[1,3,5,7,9]</code></pre><p>대괄호[]와 콤마를 사용해 선언하면 된다. </p>
<pre><code>example_lst[1,2,3,4,5]

print(example_lst[0])
print(example_lst[1])
print(example_lst[2])
print(example_lst[3])
print(example_lst[4])</code></pre><p>리스트이름[인덱스]의 형식을 통해 값을 꺼내면 된다. 
하지만 이렇게 하나하나씩 다 꺼낼 수 없으니 이럴때는** for**문을 사용한다!</p>
<h3 id="1-인덱스를-사용해-리스트에-접근">(1) 인덱스를 사용해 리스트에 접근</h3>
<pre><code>example_lst[1,2,3,4,5]

for i in range(0,len(example_lst)):
    print(example_lst[i])</code></pre><p>len함수는 매개변수로 전달된 변수의 크기를 구해준다. </p>
<pre><code>결과 :
1
2
3
4
5</code></pre><h3 id="2-반복문을-사용해-리스트-데이터를-받아오기">(2) 반복문을 사용해 리스트 데이터를 받아오기</h3>
<pre><code>example_lst[1,2,3,4,5]

for i in example_lst:
    print(i)</code></pre><p>리스트 자페를 반복문의 대상으로 사용하였다.</p>
<pre><code>결과:
1
2
3
4
5</code></pre><h2 id="2-리스트-요리하기">2) 리스트 요리하기</h2>
<h3 id="1-리스트-자르기">(1) 리스트 자르기</h3>
<p>리스트를 자르는 방법을 <strong>리스트 슬라이싱(List Slicing)</strong>이라고 부른다. </p>
<pre><code>example_lst[1,2,3,4,5,6,7,8,9,10]

sliceOne = example_lst[0:5]
sliceTwo = example_lst[5:10]
sliceThree = example_lst[:5]
sliceFour = example_lstt[5:]

print(example_lst)
print(sliceOne)
print(sliceTwo)
print(sliceThree)
print(sliceFour)</code></pre><pre><code>결과 :
[1,2,3,4,5,6,7,8,9,10]
[1,2,3,4,5]
[6,7,8,9,10]
[1,2,3,4,5]
[6,7,8,9,10]
</code></pre><p>콜론 (:)을 포함시켜 리스트의 일부분을 자를 수 있다.
list[a:b]라고 슬라이싱을 하면 list의 인덱스 a 값부터 인덱스 b의 값까지 잘리게 된다.
list[:b]는 0부터 b의 값까지,
list[a:]는 인덱스 a부터 리스트의 끝까지로 인식이된다. </p>
<h3 id="2-리스트-삽입">(2) 리스트 삽입</h3>
<blockquote>
<p>리스트의 <strong>마지막</strong>에 값을 삽입하는 <strong>append **함수와
리스트의 특</strong>정 인덱스<strong>에 값을 삽입하는 **insert</strong> 함수가 있다. </p>
</blockquote>
<h4 id="✔️append">✔️append</h4>
<pre><code>example_lst[1,2,3,4,5]
print(example_lst)

example_lst.append(6)
print(example_lst)</code></pre><pre><code>결과:
[1,2,3,4,5]
[1,2,3,4,5,6]</code></pre><h4 id="✔️insert">✔️insert</h4>
<pre><code>example_lst[1,2,3,4,5]
print(example_lst)

example_lst.insert(3,6)
print(example_lst)</code></pre><pre><code>결과:
[1,2,3,4,5]
[1,2,3,6,4,5]</code></pre><p>insert함수는 list.insert(인덱스,값)의 형태로 사용된다. 
인덱스3의 위치에 6을 넣게된다.</p>
<h3 id="3-리스트에서-값을-제거">(3) 리스트에서 값을 제거</h3>
<h4 id="✔️-del">✔️ del</h4>
<pre><code>example_lst[1,3,5,7,9]
print(example_lst)

del example_lst(3)
print(example_lst)</code></pre><pre><code>결과:
[1,3,5,7,9]
[1,3,5,9]</code></pre><p><strong>del</strong>은 <strong>특정 인덱스</strong>의 값을 제거할때 사용한다.
3번 인덱스의 값을 제거해 리스트에서 7이 없어진 것 !</p>
<h4 id="✔️-remove">✔️ remove</h4>
<pre><code>example_lst[1,3,5,7,9]
print(example_lst)

example_lst.remove(7)
print(example_lst)</code></pre><pre><code>결과:
[1,3,5,7,9]
[1,3,5,9]</code></pre><p><strong>remove</strong>는 <strong>값</strong>을 통해 원소를 제거한다.
그래서 7이 없어진 것 !</p>
<h1 id="9-튜플-집합">9. 튜플, 집합</h1>
<h2 id="1-튜플">1) 튜플</h2>
<blockquote>
<p>튜플 vs 리스트</p>
</blockquote>
<ul>
<li>리스트는 []로, 튜플은 ()로 감싼다.</li>
<li>리스트는 값의 생성, 삭제, 수정이 가능하지만, <strong>튜플은 값을 바꿀 수 없다.</strong></li>
</ul>
<pre><code>example_tupleOne = (1,2)
example_tupleTwo = (&quot;python&quot;,2,5)
example_tupleThree = (0.4(1,2,3))

print(example_tupleOne)
print(example_tupleTwo)
print(example_tupleThree)</code></pre><pre><code>결과:
(1,2)
(&#39;python&#39;,2,5)
(0,4,(1,2,3)</code></pre><p>튜플은 값을 추가, 삭제는 할 수 없지만
+,* 연산으로 튜플을 추가, 반복 할 수 있다.</p>
<pre><code>example_tupleOne = (1,2,3)
example_tupleTwo = (4,5,6,7)

plus_tuple = example_tupleOne + example_tupleTwo
multi_tuple = example_tupleOne*2

print(plus_tuple)
print(multi_tuple)
</code></pre><pre><code>(1,2,3,4,5,6,7)
(1,2,3,1,2,3)</code></pre><p>튜플의 또다른 장점은 함수의 리턴 값을 한꺼번에 여러 개를 받을 수 있다는 점이다.</p>
<pre><code>def minmax(ex_lst):
return min(ex_lst),max(ex_lst)

ex_lst = [1,2,3,4,5]
result_tuple = minmax(ex_lst)

print(result_tuple)</code></pre><pre><code>결과:
(1,5)</code></pre><p>콤마로 분리해, 리스트의 최대/최솟값을 함수의 return 값으로 사용한다.
이 경우, 함수의 리턴값이 자동으로 튜플로 처리된다!</p>
<h2 id="2-집합">2) 집합</h2>
<pre><code>setOne = {1,2,3}
setTwo = set([7,6,5,4,1])
setThree = set(&quot;Hello World&quot;!)

print(setOne)
print(setTwo)
print(setThree)</code></pre><pre><code>결과:
{1,2,3}
{1,4,5,6,7}
{&#39;r&#39;,&#39;!&#39;,&#39;W&#39;,&#39;e&#39;,&#39;d&#39;,&#39;H&#39;,&#39;o&#39;,&#39;&#39;}</code></pre><p>집합은 {}를 이용해서 생성 할 수도 있고, set()를 통해서도 생성 할 수 있다. 
단, <strong>{}</strong>를 이용해 생성 할 경우 <strong>원소를 넣지 않으면</strong> 집합이 아닌 <strong>딕셔너리</strong>가 생성이된다. </p>
<p>setTwo의 경우 [7,6,5,4,1]을 집합으로 만들었는데 {1,4,5,6,7}이 생성되고, setThree의 경우 &quot;Hello World!&quot;에서 l이 3개였는데 하나 밖에 생성되지 않았다. </p>
<p>이는 집합의 특성으로 발생하는 현상이다</p>
<blockquote>
<p><strong>집합의 특성</strong>
✅ 집합은 생성될 때, <strong>중복된 값은 허락하지 않는다.</strong> 
따라서 &quot;Hello World!&quot;에서 l이 하나 밖에 생성되지 않은 것
✅ 집합은 <strong>순서가 존재하지 않는다.</strong> 
그래서 순서가 뒤죽박죽으로 된 것
✅ 집합은 <strong>인덱스를 통한 값의 접근이 불가능하다</strong></p>
</blockquote>
<h3 id="1-교집합">(1) 교집합</h3>
<p>&amp; 또는 intersection 함수를 이용해서 구할 수 있다. </p>
<pre><code>setOne = {1,2,3}
setTwo = {2,3,4}

print(setOne &amp; setTwo)
print(setOne.intersection(setTwo))</code></pre><pre><code>결과:
{2,3}
{2,3}</code></pre><h3 id="2-합집합">(2) 합집합</h3>
<p>|기호 혹은 union 함수를 이용해서 구할 수 있다.</p>
<pre><code>setOne = {1,2,3}
setTwo = {2,3,4}

print(setOne | setTwo)
print(setOne.union(setTwo))</code></pre><pre><code>결과:
{1,2,3,4}
{1,2,3,4}</code></pre><h3 id="3-차집합">(3) 차집합</h3>
<p>-기호 혹은 difference 함수를 이용해서 구할 수 있다. </p>
<pre><code>setOne = {1,2,3}
setTwo = {2,3,4}

print(setOne - setTwo)
print(setOne.difference(setTwo))</code></pre><pre><code>결과:
{1}
{1}</code></pre><h2 id="3-집합과-관련된-함수들">3) 집합과 관련된 함수들</h2>
<p>집합은 튜플과 다르게 값의 추가와 제거가 가능하다.</p>
<h3 id="1-값의-추가">(1) 값의 추가</h3>
<blockquote>
<p><strong>하나의 값</strong>을 추가 할 때 사용하는 <strong>add</strong> 함수,
<strong>여러 개의 값</strong>을 추가 할 때 사용하는 <strong>update</strong>함수</p>
</blockquote>
<pre><code>setOne = {1,2,3}
setTwo = {2,3,4}

print(setOne)
print(setTwo)

setOne.add(5)
setTwo.update([9,8,7])

print(setOne)
print(setTwo)</code></pre><pre><code>결과:
{1,2,3}
{2,3,4}
{1,2,3,5}
{2,3,4,7,8,9}</code></pre><h3 id="2-값의-제거">(2) 값의 제거</h3>
<p>집합에서 원소의 제거는** remove<strong>함수를 사용해 **특정 값 제거</strong>가 가능하다.
인덱싱을 할 수 없기 때문에, 값을 사용한 원소의 제거만 가능하다.</p>
<pre><code>setOne={1,2,3}

print(setOne)

setOne.remove(2)

print(setOne)</code></pre><pre><code>결과:
{1,2,3}
{1,3}</code></pre><h3 id="💡정리하기">💡정리하기</h3>
<blockquote>
<p>✔️ 튜플: ()</p>
</blockquote>
<ul>
<li>인덱스로 접근가능</li>
<li>값을 제거, 추가 할 수 없지만 +,* 연산으로 추가, 반복 가능</li>
<li>함수의 리턴값을 한꺼번에 여러개 받기 가능</li>
</ul>
<blockquote>
<p>✔️ 집합: {},set()</p>
</blockquote>
<ul>
<li>인덱스를 통한 값의 접근 불가능</li>
<li>값의 제거와 추가 가능</li>
<li>생성될 때, 중복된 값은 허락하지 않고 순서가 없다. </li>
</ul>
<h1 id="10-딕셔너리">10. 딕셔너리</h1>
<p>딕셔너리는** Key값<strong>과 **value값</strong>을 가지고 있다. 
key가 영어단어, value가 단어의 뜻이라고 생각하면 된다. </p>
<pre><code>dic = {1:&quot;python&quot;, 2:&quot;C&quot;, 3:&quot;java&quot;}
</code></pre><p>딕셔너리는 중괄호 안에 선언하고, key:value 형태로 데이터를 저장한다.
즉, 1,2,3이 key이고, &quot;python&quot;&quot;C&quot;&quot;java&quot;가 value이다. </p>
<p><strong>딕셔너리</strong>는 리스트와 다르게 *<em>순차적으로 요소들을 구할 수 없다. *</em>
즉, 인덱스로 접근 할 수 없다!
따라서 print(ex_dict[0])과 같이 인덱스를 사용해 코드를 작성하면 오류가 발생한다.</p>
<h2 id="1-딕셔너리에-데이터-추가">1) 딕셔너리에 데이터 추가</h2>
<pre><code>ex_dict = {&quot;a&quot;:&quot;python&quot;, &quot;b&quot;:&quot;C&quot;, &quot;c&quot;:&quot;java&quot;}

ex_dict[&quot;d&quot;]=&quot;C++&quot;
print(ex_dict)

ex_dict.update({&quot;b&quot;:&quot;javascript&quot;,&quot;e&quot;:&quot;C#})
print(ex_dict)</code></pre><pre><code>결과:
{&#39;a&#39;:&#39;python&#39;,&#39;b&#39;:&#39;C&#39;,&#39;c&#39;:&#39;java&#39;,&#39;d&#39;:&#39;C++&#39;}
{&#39;a&#39;:&#39;python&#39;,&#39;b&#39;:&#39;javascript&#39;,&#39;c&#39;:&#39;java&#39;,&#39;d&#39;:&#39;C++&#39;, &#39;e&#39;:&#39;C#&#39;}</code></pre><p>✅ 하나의 key와 value를 추가하는 방법</p>
<pre><code>dict[key]=value</code></pre><p>✅ 여러 개의 key와 value를 추가하는 방법</p>
<pre><code>dict.update({업데이트 할 딕셔너리 내용})</code></pre><p>기존의 딕셔너리 안에 key 값이 존재하게 되면 기존의 key에 대한 value가 업데이트 할 딕셔너이릐 value로 대체된다. </p>
<h2 id="2-key-value-삭제-방법">2) key-value 삭제 방법</h2>
<pre><code>ex_dict = {&quot;a&quot;:&quot;python&quot;, &quot;b&quot;:&quot;C&quot;, &quot;c&quot;:&quot;java&quot;}

del ex_dict[&quot;a&quot;]

print(ex_dict)</code></pre><pre><code>결과:
{&#39;b&#39;,&#39;C&#39;,&#39;c&#39;:&#39;java&#39;}</code></pre><p>리스트와 유사하게 del 키워드와 key 값을 통해 key:value 쌍으로 없앨 수 있다. </p>
<h2 id="3-key-value-쌍으로-추출하기">3) key, value 쌍으로 추출하기</h2>
<pre><code>ex_dict = {&quot;a&quot;:&quot;python&quot;, &quot;b&quot;:&quot;C&quot;, &quot;c&quot;:&quot;java&quot;}

print(ex_dict.keys())
print(ex_dict.values())
</code></pre><pre><code>결과:
dict_keys([&#39;a&#39;,&#39;b&#39;,&#39;c&#39;])
dict_values([&#39;python&#39;,&#39;C&#39;,&#39;java&#39;])</code></pre><p><strong>=&gt; 리스트형으로 변환</strong></p>
<pre><code>ex_dict = {&quot;a&quot;:&quot;python&quot;, &quot;b&quot;:&quot;C&quot;, &quot;c&quot;:&quot;java&quot;}

keys_lst = list(ex_dict.keys())
values_lst = list(ex_dict.values())

print(keys_lst)
print(values_lst)</code></pre><pre><code>결과:
[&#39;a&#39;,&#39;b&#39;,&#39;c&#39;]
[&#39;python&#39;,&#39;C&#39;,&#39;java&#39;]</code></pre><h1 id="11-클래스와-생성자">11. 클래스와 생성자</h1>
<h2 id="1-클래스">1) 클래스</h2>
<p>흔히 클래스를 설명할때 붕어빵과 붕어빵 틀에 비유한다.
<strong>클래스</strong>는 붕어빵을 계속 만들 수 있는 <strong>틀</strong>을 의미하고
이 틀을 통해 만들어진 <strong>붕어빵</strong>을 <strong>객체</strong>라고 한다.</p>
<p>각각의 객체는 고유의 기능과 성격을 가지고 있고 <strong>서로 다른 객체들에 영향을 미치지 않는다</strong> !</p>
<pre><code>class 클래스이름:
    클래스내용(코드)</code></pre><h1 id="12-클래스의-상속">12. 클래스의 상속</h1>
]]></description>
        </item>
        <item>
            <title><![CDATA[SPA와 링크 ]]></title>
            <link>https://velog.io/@kimjyunny_dev/SPA%EC%99%80-%EB%A7%81%ED%81%AC</link>
            <guid>https://velog.io/@kimjyunny_dev/SPA%EC%99%80-%EB%A7%81%ED%81%AC</guid>
            <pubDate>Tue, 11 Oct 2022 07:32:43 GMT</pubDate>
            <description><![CDATA[<h1 id="1-page">1. Page</h1>
<p>HTML을 다룰땐 a 태그를 사용하여 링크를 만들 수 있었다. 
하지만 <strong>리액트는 SPA(Single Page Application)</strong>이기 때문에 a태그를 사용한 페이지 이동이 불가능하다. 즉, <strong>페이지가 하나인 어플리케이션</strong>이기 때문에 페이지 이동이 불가능하다는 것 !
SPA에서는 페이지 이동이 아닌, 주솟값에 따른 화면을 만들어 준다. 주소마다 다른 화면을 보여주는 것을 <strong>라우팅(Routing)</strong>이라고 한다. </p>
<h1 id="2-routing">2. Routing</h1>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/7630c84a-500a-405f-a2d8-37ea67f844b5/image.png" alt="">
렌더링되는 유일한 컴포넌트인 App 컴포넌트를 BrowserRouter로 감싸줌으로써 리액트 앱에서 라우팅을 가능하도록 허락한다. </p>
<h1 id="3-페이지-생성">3. 페이지 생성</h1>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/8df3641d-8b8d-4358-a07c-6fcdc35454f8/image.png" alt="">
먼저 페이지 컴포넌트들을 모아둘 pages 폴터를 src 폴더 아래 만들어 준 후 컴포넌트를 생성해준다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/1ab4c38d-7bd9-4a43-a08e-a088e48d1929/image.png" alt="">
세개의 컴포넌트 모두 위와 같이 Layout컴포넌트를 사용해 내용을 만들어준다. </p>
<h1 id="4-주소값-생성">4. 주소값 생성</h1>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/5e6eb613-30f1-4c7c-bf06-f1a990247de0/image.png" alt="">
주솟값에 각 컴포넌트를 연결해준다. 
1️⃣ <a href="http://localhost:3000/">http://localhost:3000/</a> 👉 Home 컴포넌트 렌더링
2️⃣ <a href="http://localhost:3000/explore">http://localhost:3000/explore</a> 👉 Explore 컴포넌트 렌더링
3️⃣ <a href="http://localhost:3000/subscription">http://localhost:3000/subscription</a> 👉 Subscription 컴포넌트 렌더링</p>
<h1 id="5-링크-구현">5. 링크 구현</h1>
<p>Menu 컴포넌트에 링크를 구현해준다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/d09caa1e-e8ec-47fd-8e9c-d6116a608861/image.png" alt="">
주소 값과 컴포넌트를 연결할 때 Route 컴포넌트를 사용했다면,
페이지 이동은 Link 컴포넌트를 사용한다.
Link 컴포넌트의 to 속성에는 이동 할 주소값을 넣어준다. </p>
<ul>
<li>결과<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/d853d5a3-bc64-4bee-b3af-8cd58d754c88/image.gif" alt="">
링크를 누를때마다 주소값과 컨텐츠의 내용이 변하는 것을 볼 수 있다. </li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Props]]></title>
            <link>https://velog.io/@kimjyunny_dev/Props</link>
            <guid>https://velog.io/@kimjyunny_dev/Props</guid>
            <pubDate>Thu, 06 Oct 2022 10:24:24 GMT</pubDate>
            <description><![CDATA[<h1 id="props">Props</h1>
<h2 id="1-props">1. Props</h2>
<p>리액트에서 데이터는 위에서 아래로, 
즉, 부모 컴포넌트에서 자식 컴포넌트로 진행되는 단방향의 흐름을 가진다. 
이 데이터의 흐름 아래에서 자식에게 전달되는 데이터가 바로 props이다!
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/e23ffb83-680b-46cd-a2cb-9293baddc3c7/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/319d9e69-be2e-46dc-b27e-d2adb17eb19f/image.png" alt="">
컴포넌트에선 props라는 객체를 받고, 그 객체의 onClick, text 요소를 사용한다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/8b5998b8-65cc-472e-af2c-ceeb9d356253/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/66d7d475-eb44-4ed9-b557-cc9f4582dfe8/image.gif" alt=""></p>
<h2 id="2-비구조화-할당">2. 비구조화 할당</h2>
<p>비구조화 할당(구조분해) : 배열이나 객체의 속성을 해체하여** 그 값을 개별 변수에 담을 수 있게 **하는 자바스크립트 표현식이다.<br>즉, 배열[], 혹은 객체{} 안의 값을 편하게 꺼내 쓸 수 있는 문법이다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/44b29c9b-1f07-4371-b97d-3208026cb87a/image.png" alt="">
간단하게 해보자면, 기존에 받고 있던 props라는 객체 안에 있는 값 text와 onClick을 추출해서 각각의 변수의 값에 할당한다. 
이렇게 비구조화 할당을 사용하는 경우, 코드의 가독성이 올라갈 뿐만 아니라, 다른사람이 컴포넌트의 구조를 볼때 각 컴포넌트마다 필요한 데이터의 종류를 손쉽게 파악할 수 있다는 장점이 있다. </p>
<h2 id="3-children">3. Children</h2>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/0c67de99-6afd-41bb-af71-53ae14310cec/image.png" alt="">
지금까지 컴포넌트를 사용할때 전부 <strong>닫힌 괄호</strong>를 사용했다. 
children을 사용하면 컴포넌트 안에 다른 태그나 컴포넌트를 담을 수 있다. 
<strong>children 속성</strong>은 다른 속성들이 컴포넌트 태그에서 값을 대입하는 것과 다르게, *<em>자식태그를 값으로 갖게된다. *</em>
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/18e84dd9-4d91-464e-8109-4911c3c10f95/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/ed76793b-d503-4188-a058-9d952f744ff1/image.png" alt="">
기존에 사용하던 div 태그에서 Layout 컴포넌트로 변경시켜준다. 
이때 Layout의 children은 div 태그 하나와 Button 컴포넌트 2개로 이루어진 자식 태그를 그대로 전달한다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/d7593675-e262-479c-b708-b4f3d18ed5ad/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Hook과 State]]></title>
            <link>https://velog.io/@kimjyunny_dev/Hook%EA%B3%BC-State</link>
            <guid>https://velog.io/@kimjyunny_dev/Hook%EA%B3%BC-State</guid>
            <pubDate>Thu, 06 Oct 2022 09:11:50 GMT</pubDate>
            <description><![CDATA[<h1 id="usestate">useState</h1>
<p>리액트의 컴포넌트들은 여러가지 데이터를 받아야하는 경우가 많다. 이 데이터는 컴포넌트 내부에서 선언 할수도, 혹은 다른 컴포넌트로부터 넘겨받을 수도 있다. 
여기서 내부에서 선언하고 관리되는 데이터를 <strong>state</strong>라고 하며, 컴포넌드로부터 받은 데이터를 <strong>Props</strong>라고 한다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/66375424-d0e3-4fb6-b38e-4f5acdf9bb08/image.png" alt=""></p>
<p><strong>Props</strong>는 함수에 전달되는 <strong>매개변수</strong>, 
<strong>State</strong>는 함수에서 선언된** 변수 값<strong>,
**useState</strong>는 이러한 state, 즉 상태를 선언하고 그 값을 변경하기 위한 함수이다. </p>
<p>먼저, 외부 모듈인 useState를 사용하기 위해선 import 구문을 사용해 react에서 useState Hook을 불러와야한다. </p>
<p>useState를 사용할 땐 초기값이 필요하다. 이렇게 넣어준 초기값은 상태 변수의 초기값으로 사용된다. 
<strong>함수를 호출하면 배열이 리턴 되기 때문에, 상태 변수와 상태 값 변경 함수를 받아와야한다.</strong></p>
<pre><code>const[상태변수, 상태 값 변경함수]=useState(초기값);</code></pre><pre><code>const[number,setNumber]=useState(0)

setNumber(값)</code></pre><p>상태 값으로 number, 변경함수로 setNumber라는 변수명을 사용했다고 가정할 때
setNumber 함수를 값과 함께 호출하면 number 변수의 값이 변경이 된다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/8730eac0-27e2-488c-b6bc-3f66a76e9c6c/image.png" alt=""></p>
<h3 id="누르면-증가하는-버튼-만들기"><strong>누르면 증가하는 버튼 만들기</strong></h3>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/5eaa90cc-214a-40a8-85e5-8a77535b72bb/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/f611da51-7831-43f7-ad71-640090741bdf/image.png" alt=""></p>
<p><strong>XML</strong>에선 중괄호를 사용해 태그 내부에 자바스크립트 문법을 사용할 수 있다. 
자바스크립트와 HTML을 사용할때와는 다르게, <strong>함수 이름을 이벤트에 넣어야한다.</strong> </p>
<h3 id="🧐-왜-var을-놔두고-usestate를-사용하는가">🧐 왜 var을 놔두고 useState를 사용하는가?</h3>
<p>💡 변수가 변해도 렌더링이 다시 되지 않기 때문이다!
렌더링이란, 사용자 화면에 내용을 보여주는 것인데, 변수가 변해도 렌더링이 다시 되지 않는다는 것은 데이터의 변화를 사용자가 볼 수 없다는 것을 의미한다. </p>
<p><strong>컴포넌트가 다시 렌더링이 되기 위해서는?</strong></p>
<ol>
<li>자신의 상태가 변경될 때</li>
<li>부모 컴포넌트가 리렌더링될 때</li>
<li>부모에게 받은 Props가 변경될 때</li>
<li>forceUpdate 함수가 실행될 때</li>
</ol>
<p>→ 단순히 var로 변수를 선언하게 되면** 변수값 자체는 증가** 하지만, *<em>상태는 변경되지 않아 *</em> 리렌더링이 일어나지 않는다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/443075d1-612b-418e-8009-a38f5ba2a606/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/49bcaf0d-40c0-4842-9432-d9fffbebc4cd/image.gif" alt="">
즉, 데이터가 증가하는건 콘솔에 출력되지만 화면 리렌더링은 일어나지 않는다. </p>
<h4 id="응용---1-2-추가하기">응용 : -1, *2 추가하기</h4>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/cfae17fa-5637-4246-b506-350297a19715/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/aa6e1a3e-4798-4e4a-95e3-372a23de14f0/image.gif" alt=""></p>
<p>출처: <a href="https://codemate.kr/project/WEB-%EB%A9%94%EC%9D%B4%ED%8A%B8-React-%ED%8E%B8/4-1.-Hook%EA%B3%BC-State">https://codemate.kr/project/WEB-%EB%A9%94%EC%9D%B4%ED%8A%B8-React-%ED%8E%B8/4-1.-Hook%EA%B3%BC-State</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[컴포넌트 스타일링]]></title>
            <link>https://velog.io/@kimjyunny_dev/%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8-%EC%8A%A4%ED%83%80%EC%9D%BC%EB%A7%81</link>
            <guid>https://velog.io/@kimjyunny_dev/%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8-%EC%8A%A4%ED%83%80%EC%9D%BC%EB%A7%81</guid>
            <pubDate>Thu, 06 Oct 2022 08:17:45 GMT</pubDate>
            <description><![CDATA[<h1 id="css-적용">css 적용</h1>
<h2 id="1-css">1. css</h2>
<p>import&#39;./App.css&#39;로 파일을 불러와 css를 적용하는 많이 사용했던 방법이다. </p>
<p>먼저 &#39;hello.css&#39; 파일을 생성 후 title이라는 클래스를 갖는 태그에 스타일을 적용한다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/3fadce89-5627-4e71-93d3-e2d2f0354a33/image.png" alt=""></p>
<p>&#39;hello.js&#39;, &#39;bye.js&#39; 파일에 Hello, Bye 컴포넌트를 각각 만들어 준다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/f6e14e7a-473d-4256-b9a7-48f4e10a2ae5/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/b87d80fe-712d-4f73-a2ec-0a9804eba903/image.png" alt="">
bye컴포넌트에는 css를 적용하지 않고 title이라는 클래스는 갖는 div태그만 반환한다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/01f35447-be06-4c16-8e02-6fb68d474ac5/image.png" alt="">
결과 :
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/c0bce2b4-528b-4a90-a780-984cb3426cac/image.png" alt="">
리액트는 모든 파일을 하나로 압축하는 과정에서 hello 컴포넌트와 bye 컴포넌트의 클래스의 이름은 똑같다고 처리하기 때문에 bye 컴포넌트에서 css를 불러오지 않더라도 hello 컴포넌트에서 불러온 css의 속성이 적용이된다. </p>
<p>따라서, css 클래스의 이름이 중복되지 않게 작성하기 위해서는 aaa-bb-cc와 같이 css 클래스 네이밍 규칙을 잘 따라야 했었는데 이를 해결하기 위해 나온것이 ** CSS Module** 이라는 것이다!</p>
<h2 id="2-css-module">2. CSS Module</h2>
<p>CSS Module을 사용하면 컴포넌트마다 <strong>고유한 클래스 이름</strong>을 가질 수 있다. </p>
<p>먼저, 기존 hello.css 파일명을 hello.module.css로 변경해준다. 
단, module css를 사용하게 되면 css 적용방법이 달라지게 된다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/644e8fab-ca4c-44b2-84b7-a137c69e1478/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/4c99dea3-375a-47b7-a804-e479c27d0af8/image.png" alt=""></p>
<p>module css 파일에 선언했던 title 클래스가 hello_title__HhDNd 클래스로 변환한 것을 볼 수 있다. 
-JSX에서는 중괄호를 사용해 JSX 내부에 자바스크립트 문법을 사용 할 수 있다. </p>
<h4 id="응용">응용</h4>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/dfebcb89-2eab-4693-ac1c-efbbec9b4ca0/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[HTTP 프로토콜 ]]></title>
            <link>https://velog.io/@kimjyunny_dev/HTTP-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C</link>
            <guid>https://velog.io/@kimjyunny_dev/HTTP-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C</guid>
            <pubDate>Wed, 24 Aug 2022 07:29:21 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/6375d895-367c-4521-85b7-09fef7573598/image.png" alt=""></p>
<h1 id="http의-정의">HTTP의 정의</h1>
<blockquote>
<p><strong>HTTP란?</strong>
HTTP(Hypertext Transfer Protocol)으로 프로토콜이란 상호 간에 정의한 규칙을 의미하며 특정 기기 간에 데이터를 주고 받기 위해 정의 되었다. 웹에서는 브라우저와 서버 간에 데이터를 주고 받기 위한 방식으로  HTTP 프로토콜을 사용한다. </p>
</blockquote>
<h1 id="1-http의-특징">1. HTTP의 특징</h1>
<ul>
<li>HTTP 프로토콜은 stateless 즉 상태가 없는 프로토콜로, 데이터를 주고 받기 위한 각각의 데이터 요청이 서로 독립적으로 관리가 된다는 뜻이다. 이전 데이터 요청과 다음 데이터 요청이 서로 관련이 없다는 말 !
이러한 특징으로 서버는 세션과 같은 별도의 추가 정보를 관리 하지 않아도 되고, 다수의 요청 처리 및 서버의 부하를 줄일 수 있는 성능상의 이점이 생긴다. 
HTTP 프로토콜은 일반적으로 TCP/IP 통신 위에서 동작하며 기본 포트는 80이다. </li>
</ul>
<h1 id="2-request--response">2. Request &amp; Response</h1>
<p>HTTP 프로토콜을 데이터로 주고 받기 위해서는 요청(request)를 보내고 응답(response)을 받아야한다. </p>
<p>클라이언트(client)란 요청을 보내는 쪽을 의미하며 일반적으로 웹 관점에서는 브라우저를 의미한다. 
서버(server)란 요청을 받는 쪽을 의미하며 일반적으로 데이터를 보내주는 원격지의 컴퓨터를 의미한다. </p>
<h1 id="3-url">3. URL</h1>
<p>Uniform Resource Locators의 약자로 서버에 자원을 요청하기 위해 입력하는 영문주수이다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/334587fb-41b8-4a6d-b716-b55d93f12a41/image.png" alt=""></p>
<h1 id="4-http-요청-메서드">4. HTTP 요청 메서드</h1>
<p>서버의 특정 동작을 수행하고 싶을땐 HTTP 요청 메서드(HTTP Request Method)를 이용한다. 일반적으로 HTTP 요청 메스드는 HTTP Verbs라고도 불리며 데이터에 대한 조회, 생성, 변경, 삭제 동작을 HTTP 요청메서드로 정의 할 수 있다. 때에 따라서 POST 메서드로 PUT, DELETE의 동작도 수행 할 수 있다.</p>
<ul>
<li><strong>GET</strong> : 존재하는 자원에 대한 <strong>요청</strong></li>
<li><strong>POST</strong> : 새로운 자원을 <strong>생성</strong></li>
<li><strong>PUT</strong> : 존재하는 자원에 대한 <strong>변경</strong></li>
<li><strong>DELETE</strong> : 존재하는 자원에 대한 <strong>삭제</strong></li>
<li>HEAD: 서버 헤더 정보를 획득, GET과 비슷하나 Response Body를 반환하지 않음</li>
<li>OPTIONS: 서버 옵션들을 확인하기 위한 요청 CORS에서 사용</li>
</ul>
<h1 id="5-http-상태코드">5. HTTP 상태코드</h1>
<p>http 요청 메서드가 클라이언트에서 설정해야 할 정보라면
<strong>HTTP 상태코드(HTTP Status Code)</strong>는 서버에서 설정해주는 응답(Response) 정보이다.<br>ex) </p>
<pre><code>http://domain.com/users</code></pre><p>위 요청을 보내고 나면 서버에서 응답으로 오는 코드는 200(성공)혹은 404(실패)이다. 따라서 이 HTTP 상태 코드로 추가적인 로직을 구현 할 수 있게 된다. </p>
<h2 id="2xx-성공">2xx (성공)</h2>
<p>200번대의 상태코드는 대부분 성공을 의미한다. </p>
<ul>
<li>200: GET 요청에 대한 성공</li>
<li>204: No Content 성공은 했으나 응답 본문에 데이터가 없음</li>
<li>205: Reset Content 성공은 했으나 클라이언트의 화면을 새로고침하도록 권고</li>
<li>206: Partial Content 성공은 했으나 일부 범위의 데이터만 반환</li>
</ul>
<h2 id="3xx-리다이렉션">3xx (리다이렉션)</h2>
<p>300번대의 상태 코드는 대부분 클라이언트가 이전 주소로 데이터를 요청하여 서버에서 새URL로 리다이렉트를 유도하는 경우이다.</p>
<ul>
<li>301: Moved Permanenetly 요청한 자원이 새URL에 존재</li>
<li>303: See Other, 요청한 자원이 임시 주소에 존재</li>
<li>304: Not Modified 요청한 자원이 변경되지 않았으므로 클라이언트에서 캐싱된 자원을 사용하도록 권고, ETag와 같은 정보를 활용하여 변경여부를 확인 </li>
</ul>
<blockquote>
<p>Etag(entity tag) HTTP 응답의 헤더는 자원의 특정 버전에 대한 식별자이다. 콘텐츠가 변경되지 않은 경우 웹서버에서 전체 응답을 다시 보낼 필요가 없으므로 캐시를 보다 효율적으로 사용하고 대역폭을 절약 할 수 있다. 또한 리소스의 동시 업데이트가 서로를 덮어 쓰는 것을 방지하는데 도움을 준다.</p>
</blockquote>
<h2 id="4xx-클라이언트-에러">4xx (클라이언트 에러)</h2>
<p>400번대 상태코드는 대부분 클라이언트의 코드가 잘못된 경우이다. 유효하지 않은 자원을 요청했거나 요청한 권한이 잘못된 경우 발생한다. 우리가 가장 자주보는 에러코드는 404로 요청한 자원이 서버에 없다는 뜻이다. </p>
<ul>
<li>400: Bad Request  잘못된 요청</li>
<li>401: Unauthorized 권한 없이 요청, Authorization 헤더가 잘못된 경우</li>
<li>403: Forbidden 서버에서 해당 자원에 대해 접근 금지</li>
<li>405: Method Not Allowed 허용되지 않은 메서드</li>
<li>409: Conflict 최신 자원이 아닌데 업데이트를 하는 경우 ex) 파일업로드시 버전 충돌</li>
</ul>
<h2 id="5xx-서버에러">5xx (서버에러)</h2>
<p>500번대 상태 코드는 서버 쪽에서 오류가 난 경우이다. </p>
<ul>
<li>501: Not Implemented 요청한 동작에 대해 서버가 수행 할 수 없는 경우</li>
<li>503: Service Unvailable 서버가 과부하 또는 유지보수로 내려간 경우 </li>
</ul>
<p>_참고: _ <a href="https://joshua1988.github.io/web-development/http-part1/">https://joshua1988.github.io/web-development/http-part1/</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Figma를 통한 아이콘 만들기 ]]></title>
            <link>https://velog.io/@kimjyunny_dev/Figma%EB%A5%BC-%ED%86%B5%ED%95%9C-%EC%95%84%EC%9D%B4%EC%BD%98-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@kimjyunny_dev/Figma%EB%A5%BC-%ED%86%B5%ED%95%9C-%EC%95%84%EC%9D%B4%EC%BD%98-%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Wed, 24 Aug 2022 00:33:35 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/30d6ee99-15ee-4ba8-abe4-d67ee5e2a27f/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/d2611437-bb3a-414b-b1b8-d92837eb53df/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/716822ad-34dd-4767-b159-195b1a815178/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/ac380850-3470-4b0c-95de-129efc34c06f/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/9074d56f-a0f1-48c0-95ce-e6fe52460f87/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/20054d9f-b2ed-49bb-8d8f-072fb533b8a2/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/c059d2b5-f7c1-4ad3-bd3b-16475b317069/image.svg" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/86b20ccf-b1a1-4a47-85ee-c0272e90af09/image.svg" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/e5a92ac3-1f83-4fbb-a3a6-fa49a562cb76/image.svg" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/6f0242f0-488a-4306-b697-f7157d0b865e/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/701a5f2c-b7ea-460e-a543-a3abf58e27da/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Javascript - 타입과 변수 ]]></title>
            <link>https://velog.io/@kimjyunny_dev/Javascript-%ED%83%80%EC%9E%85%EA%B3%BC-%EB%B3%80%EC%88%98</link>
            <guid>https://velog.io/@kimjyunny_dev/Javascript-%ED%83%80%EC%9E%85%EA%B3%BC-%EB%B3%80%EC%88%98</guid>
            <pubDate>Wed, 10 Aug 2022 08:18:31 GMT</pubDate>
            <description><![CDATA[<h1 id="타입">타입</h1>
<blockquote>
<p><strong>타입이란?</strong>
프로그램에서 다룰 수 있는 값의 종류</p>
</blockquote>
<h2 id="1-숫자number">1) 숫자(Number)</h2>
<p>-Js는 정수와 실수를 따로 구분하지 않는다. </p>
<pre><code>var num1 = 10;
var num2 = 10.1;</code></pre><h2 id="2-문자열string">2) 문자열(String)</h2>
<pre><code>var str1 = &quot;문자열1&quot;;
var str2 = &#39;문자열2&#39;;
var str3 = &quot;문자열&#39;입니다&quot;;
var str4 = &quot;문자열&quot;입니다&#39;;</code></pre><p>-문자열과 숫자를 합칠 수 있는 기능도 있다. </p>
<pre><code>var num = 5;
var str = &quot;Hello&quot;;</code></pre><p>결과 : num+str 연산을 진행하면 자동으로 num이 문자열고 변환되어 5Hello가 나온다. </p>
<h2 id="3-불리언boolean">3) 불리언(Boolean)</h2>
<pre><code>var trueValue = true;
var falseValue = false;</code></pre><h2 id="4-null과-undefined">4) null과 undefined</h2>
<p><strong>null</strong> <strong>&#39;값</strong>&#39;이 정해지지 않은 것
<strong>undefined</strong> <strong>&#39;타입&#39;</strong>이 정해지지 않은 것</p>
<h2 id="5-객체object">5) 객체(Object)</h2>
<p>키(key)와 값(value)로 이루어져있다
키(key)를 통해 값(value)을 불러올 수 있는 타입이다. 
(=파이썬 딕셔너리)</p>
<pre><code>var dog = {name:&quot;돌돌이&quot;, age:5};</code></pre><p>name과 age가 키(key)값이고, &quot;돌돌이&quot;와 5가 값(value)에 해당한다. </p>
<h2 id="변수">변수</h2>
<blockquote>
<p><strong>변수란?</strong>
데이터를 저장 할 수 있는 메모리 공간이며, 그 데이터(값)는 변경될 수 있다. </p>
</blockquote>
<ul>
<li>변수 사용의 특징
1) 선언되지 않은 변수를 사용하려고 하거나 접근하려 하면 오류가 발생한다. <pre><code>var num = 1; //정상
str = &quot;문자열&quot; //오류</code></pre>2) 선언된 변수는 나중에 초기화 할 수 도 있고, 선언하면서 동시에 초기화도 가능하다. <pre><code>var num; //선언
var str = &quot;문자열&quot;; //선언과 동시에 초기화
num-10; //선언 후 초기화 </code></pre></li>
</ul>
<p>✅ typeof키워드를 통하여 변수의 타입 출력하기
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/b0f92f4e-eb15-4d2a-867c-729e788fc8a2/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/42e88687-544d-446f-9c36-3e4f32e0bde2/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[버튼 클릭 이벤트 만들기 ]]></title>
            <link>https://velog.io/@kimjyunny_dev/%EB%B2%84%ED%8A%BC-%ED%81%B4%EB%A6%AD-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@kimjyunny_dev/%EB%B2%84%ED%8A%BC-%ED%81%B4%EB%A6%AD-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Tue, 09 Aug 2022 02:47:29 GMT</pubDate>
            <description><![CDATA[<p>✅** console.log( ) 함수를 사용해, 버튼을 누르면 0부터 값이 증가하면서 출력되는 버튼을 만들어 보세요.**
HTML : 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/ba44e87f-95d1-4292-b2e4-78bb73868309/image.png" alt="">
Js : 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/56a118cc-1307-4f38-ba15-e5ae302d15eb/image.png" alt=""></p>
<p>결과 : 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/693f6c51-25ce-446c-94ce-4f53bc48a22f/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[HTML속 Javascript]]></title>
            <link>https://velog.io/@kimjyunny_dev/HTML%EC%86%8D-Javascript</link>
            <guid>https://velog.io/@kimjyunny_dev/HTML%EC%86%8D-Javascript</guid>
            <pubDate>Mon, 08 Aug 2022 08:20:34 GMT</pubDate>
            <description><![CDATA[<h3 id="html-속-javscript-넣기">HTML 속 Javscript 넣기</h3>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/061b53ac-11c0-4e40-add0-5d09184de707/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/fa282367-40ff-46e9-834f-3ad650bd21ec/image.png" alt="">
같은 폴더 내에 index.js라는 파일을 만들고 html과 js를 연결시켜준다. 
getElementsByTagName는 해당태그이름의 요소를 모두 선택함으로써 (&#39;h1&#39;)에는 h1인 요소가 모두 선택되어 저장이 된다.
따라서 h1은 배열이 되므로 인덱스를 사용하여 &#39;hello world&quot;에 해당하는 요소를 선택하여 innerHTML을 &quot;우리모두 화이팅&quot;으로 바꿔주었다. </p>
<blockquote>
<p>innerHTML 속성과 textContent  속성을 사용해서 문서 객체 내부의 글자를 조작 할 수 있다. 
문서객체.textContent : 입력된 문자열을 그대로 넣어준다. 
문서객체.innerHTML : 입력된 문자열을 HTML 형식으로 넣어준다. </p>
</blockquote>
<h3 id="버튼-생성하기">버튼 생성하기</h3>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/dd426827-47ec-4de0-9a18-604ea5a4f9a5/image.png" alt="">
*script 순서가 바뀌지 않도록 주의 해야한다 !
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/12c70d18-d358-44b7-8e1e-1e30683c9c7b/image.png" alt="">
결과 :
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/f5b1a933-3e49-4e51-bdb9-f65ecc720dcb/image.png" alt="">
(클릭 전)</p>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/bdc4efe9-a626-4a52-9270-628f081e64f8/image.png" alt="">
(클릭 후)</p>
<p>✅ 삼행시 만들어보기 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/b1e9b401-29dd-4a8a-a178-8737e569e9c9/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/67e14870-1d8a-4625-8cdf-4b7c353d38bc/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/36311ca8-1c5a-4d94-ad03-fb1d7b613de6/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/13a84b5d-0e68-48fa-b238-62e2958e3306/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Javascript - DOM]]></title>
            <link>https://velog.io/@kimjyunny_dev/Javascript-DOM</link>
            <guid>https://velog.io/@kimjyunny_dev/Javascript-DOM</guid>
            <pubDate>Mon, 08 Aug 2022 07:25:37 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><strong>DOM이란?</strong>
Document Object Model의 약어로, 단순히 텍스트로만 작성된 HTML 파일을 트리형태로 표현한 객체를 말한다. </p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/7e7e323c-8128-4b30-859b-75e4c2b40715/image.png" alt="">
DOM을 통해 Javascript와 HTML 파일이 연결되고, document의 객체는 DOM 트리의 최상단에 있는 객체에 접근하게 해준다.</p>
<p><strong>✅ DOM에 접근하는 방법</strong>
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/92601a21-36fc-4c04-b265-4701a958f227/image.png" alt="">
document라는 객체를 통해 id가 &quot;header&quot;인 태그를 선택하기 위해 getElementById라는 함수를 사용했고, 태그를 선택한뒤 innerHTML을 &quot;우리모두 화이팅&quot;으로 교체하였다. </p>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/e9280e2e-850f-426d-9bbd-92a1529985ca/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[HTML과 CSS의 심화]]></title>
            <link>https://velog.io/@kimjyunny_dev/HTML%EA%B3%BC-CSS-%EC%8B%AC%ED%99%94</link>
            <guid>https://velog.io/@kimjyunny_dev/HTML%EA%B3%BC-CSS-%EC%8B%AC%ED%99%94</guid>
            <pubDate>Fri, 05 Aug 2022 08:12:52 GMT</pubDate>
            <description><![CDATA[<h1 id="html">HTML</h1>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/fea63860-00ca-40aa-963c-a23f3ec70e23/image.png" alt="">
div 태그 안에 div가 존재하고, 그안에 h3태그가 존재하는 것처럼 태그는 중첩이 가능하다. </p>
<pre><code>✅ &lt;!DOCTYPE html&gt; 

▶ html 이 html5 버전임을 알려주는 코드
html도 언어인 만큼, 버전이 존재
html5가 가장 최근에 업데이트되고, 또 가장 많이 사용되는 버전


✅ &lt;html&gt; ~~~ &lt;/html&gt;

▶ html 구조의 기본, 모든 html 문서는 html 태그로 감싸져 있다.


✅ &lt;head&gt; ~~~ &lt;/head&gt;

▶ html 문서의 메타데이터를 모아놓는 부분이에요. 
웹사이트에 표시되진 않지만 웹사이트의 정보/데이터를 담아놓는 부분
head 안에 적는 주요한 태그로는 &lt;meta&gt; 태그, &lt;title&gt; 태그, &lt;style&gt; 태그, &lt;script&gt; 태그 등이 있다.


✅ &lt;body&gt; ~~~ &lt;/body&gt;

▶ html 구조의 컨텐츠 영역을 의미
디자인/기능이 있는 태그들(h1, h2, ul, div, p 등등)을 body 안에 넣어야한다.</code></pre><h1 id="css">CSS</h1>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/73f6fd5c-9109-4dd8-8370-958dda0810ec/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/3f635af9-3a22-42d9-bdd0-0899ff63a96f/image.png" alt=""></p>
<pre><code>✅ h1 = 선택자

▶ 중괄호({, }) 안의 디자인 속성을 적용할 대상을 의미


✅ 중괄호

▶ CSS를 적을 때는 선택자를 작성한 후, 중괄호 안에 CSS 속성을 작성하고, 꼭 중괄호 짝을 맞춰주어야 한다.


✅ CSS 속성 선언 방법

위의 코드에서 color와 background-color는 CSS 속성 이름이고, 뒤의 red와 #582793은 지정하고자 하는 속성값이다.
각 속성값을 적은 뒤에는 세미콜론(;)을 붙여 코드가 끝났다는 걸 알려줘야 한다.

속성 이름 : 속성값 ;


* CSS를 선언할 때는 줄 바꿈, 띄어쓰기는 영향을 미치지 않는다 하지만 세미콜론은 잊지말기.
</code></pre><h2 id="css-적용하는-3가지-방법">CSS 적용하는 3가지 방법</h2>
<h2 id="선택자">선택자</h2>
<h3 id="1-html-태그">1) HTML 태그</h3>
<p>html 태그에 대해 디자인 속성을 적용하면 html 문서 안의 모든 같은 이름의 태그에 적용된다. 따라서 html 태그는 아주 많이 사용하는 선택자는 아니며 기본으로 설정되어 있는 디자인 속성이 마음에 들지 않을 때 없애려는 목적으로 주로 활용한다. </p>
<h3 id="2-클래스-선택자">2) 클래스 선택자</h3>
<p>가장 많이 사용하는 선택자 중 하나로 한 html 요소의 특성을 보여주기 위해 사용한다. 
원하는 html태그에 class=&quot;클래스이름&quot;을 설정해 태그의 클래스를 설정한다. </p>
<pre><code>&lt;div class=&quot;color&quot;&gt;색&lt;/div&gt;</code></pre><p>*<em>클래스 선택자를 이용할 때는 클래스 이름 앞에 마침표를 붙인다. *</em></p>
<pre><code>.color {
  color: purple;
}</code></pre><p>color 라는 클래스를 가진 모든 html 태그에 대해 중괄호 안의 디자인 속성을 적용하겠다는 의미이다. </p>
<p>클래스 선택자는 한 태그에 여러 개의 클래스를 지정 할 수 있다. 이땐 띄어쓰기로 클래스 이름을 구분해주어야 한다. 그러므로 클래스의 이름에는 띄어쓰기가 들어가면 안된다. 따라서 보통 여러 단어로 클래스 명을 짓고 싶을 때는 -혹은 _표시를 사용한다. 
ex) title, red-text, center라는 3가지 클래스를 가진 div를 만든 코드이다. </p>
<pre><code>&lt;div class=&quot;title red-text center&quot;&gt;나는 제목&lt;/div&gt;</code></pre><h3 id="3-아이디-선택자">3) 아이디 선택자</h3>
<p>클래스와 마찬가지로 많이 활용하며 id=&quot;아이디이름&quot;을 html 여는 태그에 작성하면 된다. 
클래스를 선택 할 때는 앞에 마침표를 사용했지만, <strong>아이디를 사용할 때는 아이디는 이름 앞에 샾(#)을 붙이면 된다.</strong> </p>
<pre><code>&lt;div id=&quot;title&quot;&gt;제목&lt;/div&gt;</code></pre><pre><code>#title {
  background-color: red;
}</code></pre><p>*주의 : 하나의 클래스를 여러 html에 사용해도 괜찮지만, 하나의 아이디는 왠만하면 하나의 html에만 사용하는 것이 좋다. </p>
<h2 id="다양한-단위">다양한 단위</h2>
<h3 id="1-픽셀px">1) 픽셀(px)</h3>
<p>어떠한 상황에서도 변하지 않는 절댓값을 의미한다.</p>
<h3 id="2-em--rem">2) em / rem</h3>
<p>em과 rem은 대값을 의미한다.
↓ em은 상위(부모)요소의 글자 크기를 1em으로 두고 계산하며, 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/78b4c549-efab-4e1e-8508-224709a349d8/image.png" alt=""></p>
<p>↓ rem은 최상위(html) 요소의 글자크기를 1rem으로 두고 계산한다.
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/1f061c64-3545-49a2-abcd-f0d424394fa2/image.png" alt=""></p>
<p>-상황에 따라 px, em, rem을 선택하여 사용하게 되는데 반응형 웹사이트를 만들땐 px보다 em, rem을 권장한다. </p>
<p>✅ 화면의 크기가 변할때 변해야 하는 수치인가 ? em, rem
✅ 화면의 크기가 변해도 변하지 않는 수치인가? px</p>
<blockquote>
<p><strong>반응형 웹(Responsive Web)이란?</strong>
하나의 웹사이트가 pc, 스마트폰, 태블릿 등 다양한 사이즈의 화면(디스플레이)에 따라 자동으로 화면 크기가 변하게 만드는 것을 의미한다. </p>
</blockquote>
<h3 id="3-퍼센트-">3. 퍼센트 (%)</h3>
<p>일반적으로 폰트 크기보다는 너비나 높이 등에서 주로 사용횐다. 
퍼센트에서의 비율도 상위요소 기준이라는 것을 주의해야한다.
ex) 상위요소의 너비가 50px이고, 현재요소의 너비가 50%라면&gt;&gt; 현재 요소의 너비는 25px로 설정이 된다.</p>
<h2 id="display-속성">Display 속성</h2>
<h3 id="1-displayblock">1) display:block</h3>
<p>대표주자 div태그로 기본적인 속성에서 width: 100%이므로 한즐 전체를 차지한다. 
width, height, margin, padding 값을 지정 할 수 있다. </p>
<h3 id="2-displayinline">2) display:inline</h3>
<p>대표주자 span태그로 태그 내부의 텍스트/콘텐츠의 크기만큼 공간을 차지하게 되므로, width, height, margin(위, 아래), padding(위, 아래) 값을 지정 할 수 없다. 단, margin(좌, 우), padding(좌, 우)는 가능하다. </p>
<h3 id="3-displayinline-block">3) display:inline-block</h3>
<p>inline 처럼 텍스트/콘텐츠 크기만큼 차지하되, width, height, margin, padding도 설정이 가능하다. 
div와 span 태그 중에는 div가 더 보편적이며 div 태그에 display:inline-block;속성을 설정하여 사용하는 경우도 많다. 
span의 경우 주로 div내에서 색깔, 폰트 크기가 다른 글자가 들어가야 할 경우에 많이 사용된다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/09fea9e1-8cc4-4d41-9ca3-0761c3e787da/image.png" alt=""></p>
<h2 id="position-속성">Position 속성</h2>
<p>요소(태그)들을 어디에 배치할지 결정하는 속성, 즉 화면의 레이아웃을 만들때 유용하게 사용되는 속성이다. 주로 특정 위치에 고정되어 있도록 만들때 유용하게 사용된다. </p>
<h3 id="1-static">1) Static</h3>
<p>모든 태그의 기본 position 속성으로 position 속성을 따로 설정하지 않았을 때의 기본값이다. 
기본 static 값일 경우 위치를 임의로 배치 할 수 없고, 알아서 배치된다. </p>
<h3 id="2-relative">2) Relative</h3>
<p>static일 때의 원래 위치를 기준으로 상대적으로 위치를 지정 할 수 있는 속성이다. </p>
<h3 id="3-absolute">3) Absolute</h3>
<p>relative 속성인 상위 요소를 기준으로 상대 위치를 지정 할 수 있다. </p>
<h3 id="4-fixed">4) Fixed</h3>
<p>화면(디스플레이)을 기준으로 상대적인 위치를 설정 할 수 있다. </p>
<h2 id="flex-속성">Flex 속성</h2>
<p>복잡한 레이아웃을 구현하기 위한 css 속성으로 display 속성 값 중에 하나이다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/48a76775-ae73-4078-bb09-63d7ef457c01/image.png" alt=""></p>
<h3 id="✅flex-적용해보기"><strong>✅flex 적용해보기</strong></h3>
<h4 id="1-flex-레이아웃은-무조건-큰-박스-▶-작은-박스-순서로-만든다">1) &quot;flex 레이아웃은 무조건 큰 박스 ▶ 작은 박스 순서로 만든다&quot;</h4>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/7dd447d5-2e1c-4596-ad67-eb423e93913d/image.png" alt="">
flex 레이아웃의 기본은 컨테이너(container)과 아이템(item)이다. 
파란색의 배경박스가 가장 큰 박스이고, 그 안에 빨간색 테두리로 표시한 부분이 2번째 박스이다. 
빨간색이 flex 레이아웃으로 배치하고 싶은 박스 아이템이 되고, 파란색이 아이템을 둘러싼 박스가 컨테이너가 된다. </p>
<h4 id="컨테이너에-displayflex속성을-무조건-설정하기">컨테이너에 display:flex;속성을 !무조건! 설정하기</h4>
<ul>
<li>컨테이너에 display:flex; 속성이 적용되면 그 안에 속해있는 아이템에 flex 레이아웃에 적용 할 수 있는 다양한 속성을 설정 할 수 있다. (flex, flex-basis, flex-shrink, flex-grow 등) </li>
<li>아이템에서 flex:숫자;형태로 flex를 적용 할 수 있다. 
이때 숫자는 컨테이너의 너비를 100이라고 했을때 해당 아이템이 차지할 면적의 비율을 의미한다. <h4 id="flex-direction---row-vs-column">flex-direction - row vs column</h4>
하나의 div 태그가 아이템이 될수도, 컨테이너가 될 수도 있다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/c3e85711-5a00-4f0e-aa44-8722ed8e0372/image.png" alt="">
flex의 레이아웃의 종류는 크게 2가지이다.
가로로 쌓이는 레이아웃(flex-direction:row → 기본설정)
세로로 쌓이는 레이아웃(flex-direction:column)
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/b84c2745-ab6c-48cb-a264-d87b1960a57c/image.png" alt=""><h3 id="✅flex-레이아웃-속성의-2종류">✅flex 레이아웃 속성의 2종류</h3>
<h4 id="1-아이템에-적용-할-수-있는-속성">1) 아이템에 적용 할 수 있는 속성</h4>
</li>
<li><em>flex: 숫자; 속성*</em></li>
</ul>
<p><strong>(1) flex-basis</strong> 
아이템의 기본 크기를 설정하는데
기본 크기란 flex-direction이 row일때는 너비, column일때는 높이를 의미한다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/94d7779d-cdf8-4448-bf74-4340d7044534/image.png" alt=""></p>
<p><strong>(2) flex-grow</strong>
아이템이 얼마나 커질 수 있는지를 비율로 정하는 속성이다. 
0일경우에는 기본 크기에서 절대 늘어나지 않고,
0보다 큰 값일 경우에는 다른 아이템가 flex-grow 비율만큼 늘어난다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/4f8cc70b-1013-44c5-99af-d62ba7ed0168/image.png" alt=""></p>
<p><strong>(3) flex-shrink</strong>
flex-growth와 정반대의 속성으로 아이템이 얼마나 작아질 수 있는지를 비율로 정하는 속성이다. 
0일경우에는 기본크기보다 절대 작아지지 않고,
0보다 큰 값일 경우 아른 아이템과 flex-shink 비율만큼 줄어든다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/48e7d189-148c-4941-ac30-1c07f4d5e523/image.png" alt=""></p>
<p>*<em>(4) flex-basis, flex-shrink, flex-grow를 한번에 *</em>
띄어쓰기로 구분하여 3가지 값을 지정 할 수 있고, 각각 flex-grow, flex-shrink, flex-basis 순서로 지정이 된다. 
flex : 1 ▶ flex-grow: 1; flex-shrink: 1; flex-basis: 0%
flex: 1 1 auto ▶ flex-grow: 1; flex-shrink: 1; flex-basis: auto;</p>
<p>다른 축약형으로는 auto, none 등이 있다.
flex-basis를 auto로 설정하게 되면, item 안에 들어있는 콘텐츠(이미지, 텍스트) 크기만큼 자동으로 너비가 설정이 된다. 
flex: auto ▶ flex: 1 1 auto 와 동일
flex: none ▶ flex: 0 0 auto 와 동일</p>
<h4 id="2-컨테이너에-적용-할-수-있는-속성">2) 컨테이너에 적용 할 수 있는 속성</h4>
<p><strong>(1) flex-direction</strong>
flex의 레이아웃의 방향을 설정하는 속성으로 column과 row가 가능하고 
column일 경우 가로로 쌓이는 flex 레이아웃,
row일 경우 세로로 쌓이는 flex 레이아웃이다. 
flex-direction을 설정하지 않으면 기본으로 row가 설정된다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/bd25b6b5-3a6c-47f1-aaae-f3a4172ad4c2/image.png" alt=""></p>
<p><strong>(2) flex-wrap</strong>
flex 아이템이 컨테이너 크기를 넘어갈 때 처리하는 방법 속성이다. 
flex-wrap 속성을 사용해 자동으로 여러줄이 생성되게끔 만들 수 있다. 
wrap ▶ 컨테이너 크기를 넘어가면 다음 줄로 표시
nowrap ▶ 컨테이너 크기를 넘어가도 다음 줄로 표시하지 않음
wrap-reverse ▶ 컨테이너 크기를 넘어가면 마지막 아이템부터 거꾸로 여러줄로 표시
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/b528cd6b-d448-4294-b976-d18826ebfe0f/image.png" alt=""></p>
<p><strong>(3) align-items</strong>
글자를 정렬할때 수평축과 수칙축 두가지가 있는데 align-item은 수직축으로 정렬 할 수 있는 속성이다. 
flex-directrion : row ▶ 레이아웃의 축 : 가로
flex-directrion : column ▶ 레이아웃의 축 : 세로
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/0eb64198-57f8-4f2a-a597-90c3bf3025dd/image.png" alt="">
center ▶ 수직축의 가운데로 정렬
flex-start ▶ 수직축의 시작점에 정렬
flex-end ▶ 수직축의 끝에 정렬
stretch ▶ 수직축 방향으로 쭉~ 늘어나게 정렬
baseline ▶ 텍스트 베이스라인 기준으로 정렬
(❗ 텍스트 베이스라인이란 글자의 하단 정렬 선을 의미한다)
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/c8f69c54-e53d-4b8f-a5f6-750bbf64160f/image.png" alt=""></p>
<p><strong>(4) justify-content</strong>
수평축(레이아웃의 축과 같은 방향)으로 정렬하는 속성이다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/b97a6d0c-31eb-4096-948c-cf4ceb282bfd/image.png" alt="">
center ▶ 수평축의 가운데 정렬
flex-start ▶ 수평축의 시작점에 정렬
flex-end ▶ 수평축의 끝에 정렬
space-between ▶ 아이템들의 사이에 간격을 만들어 정렬
space-around ▶ 아이템들의 둘레에 간격을 만들어 정렬
space-evenly ▶ 아이템들의 사이와 양 끝에 간격을 만들어 정렬
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/36787deb-b4f1-4b4e-b838-ded464cdd349/image.png" alt=""></p>
<p>space-between, space-around, space-evenly 속성을 그림을 통해 차이점을 알아보기</p>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/9932453c-f8af-4a7c-80b0-6cf0b41d355e/image.png" alt=""></p>
<h2 id="선택자-속성">선택자 속성</h2>
<h3 id="여러가지-조건을-가진-선택자">여러가지 조건을 가진 선택자</h3>
<h4 id="1-and-조건">1) AND 조건</h4>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/ea794d25-336d-42fd-9401-6790796297ca/image.png" alt="">
띄어쓰기 없이 선택자를 붙여서 작성하면 AND 조건으로 CSS 속성이 적용된다. 
✅ 선택자의 AND조건
div#name ▶ div 태그 중 name 아이디를 가진 요소에 스타일을 적용
div.menu#name ▶ div 태그 중 menu 클래스와 name 아이디를 가진 요소에 스타일을 적용
menu#name ▶ menu 클래스와 name 아이디를 동시에 가진 요소에 스타일을 적</p>
<h4 id="2-or-조건">2) OR 조건</h4>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/967f6507-228a-48aa-964a-1ccc229d7554/image.png" alt="">
선택자를 쉼표로 구분해서 나열하면된다. 
✅ 선택자의 OR조건
#name, .menu ▶ name 아이디 혹은 menu 클래스를 가진 요소에 적용
item1, .item2, .item3 ▶ item1 클래스 혹은 item2 클래스 혹은 item3 클래스를 가진 요소에 적용</p>
<h3 id="상위-하위-요소에-따라-결정되는-선택자">상위-하위 요소에 따라 결정되는 선택자</h3>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/be3fdd99-f216-4c96-a936-8066a5f4ee52/image.png" alt="">
선택자1 요소 하위에 있는 선택자2 요소에 모두 적용된다. 
✅ 하위 선택자
menu a ▶ menu 클래스 요소의 하위 요소 중 a 태그인 요소에 적용
menu #name ▶ menu 클래스 요소의 하위 요소 중 name 아이디를 가진 요소에 적용
div .menu #name ▶ div 태그 요소의 하위 요소 중 menu 클래스를 가진 요소의 하위 요소 중 name 아이디를 가진 요소에 적용</p>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/c08388ef-a87e-463f-8562-163ac67f94e4/image.png" alt="">
menu a가 menu 클래스의 하위 요소 중 a태그인 모든 요소에 적용되었다면,
menu &gt; a는 menu 클래스의 하위 요소 중에서 a 태그이고,
menu 클래스와 a 태그 사이에 다른 태그가 없는 순수한 부모-자식 관계일 경우에만 적용된다.
→menu 와 a 태그 사이에 div 태그가 하나 있으므로 적용되지 않는다. 대신 .menu-items &gt; a 선택자는 적용되는데 .menu-items 와 a 태그 사이에 다른 태그가 없기 때문이다.</p>
<h3 id="속성-선택자">속성 선택자</h3>
<p>특정 요소의 상태(state)에 따라 css속성 적용하기
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/a035bc9d-da3a-4286-bdf1-88346cfb034a/image.png" alt=""></p>
<ul>
<li>hover : 마우스를 해당 요소로 올린 상태를 의미하며 버튼에 마우스를 올리면 배경색과 글자색이 바뀐다. </li>
<li>active : 마우스로 해당 요소를 클릭했을 떄 상태를 의미하며 버튼을 클릭하면 배경색이 빨간색으로 바뀐다. </li>
<li>focus : 해당요소가 활성화 되었을 때를 의미하며, 활성화란 입력창에 입력 할 수 있도록 커서가 깜빡깜빡하는 상태를 의미한다. </li>
<li>상태를 지정할때는 태그:상태 말고도 선택자:상태로 지정 할 수 있으며 menu:hover, #name:active 이런식으로도 가능하다.</li>
</ul>
<h3 id="모두-섞어서-사용하기">모두 섞어서 사용하기</h3>
<p>div.menu &gt; .name, div.menu &gt; a
menu &gt; a &gt; ul li
div.menu &gt; a:hover
이런식으로 모두 섞어서 사용 할 수 있다. </p>
<h2 id="스크롤">스크롤</h2>
<blockquote>
<p>** 스크롤은 언제 필요할까?**
안의 내용물이 컨테이너보다 클 때 스크롤이 필요하다. 
안의 내용물이 컨테이너보다 큰지 작은지 알기 위해선 컨테이너의 사이즈가 정해져있어야한다. </p>
</blockquote>
<h3 id="overflow-속성">Overflow 속성</h3>
<h4 id="1-visible">(1) visible</h4>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/ec483e3d-204a-4cb4-8ae4-45afeb1e0058/image.png" alt=""></p>
<p>overflow 속성을 설정하지 않았을땐, visible이 기본값이된다. 
안의 내용물이 컨테이너보다 많으면 컨테이너를 뚫고 모두 그냥 보여지며, 스크롤은 생기지 않는다. </p>
<h4 id="2-auto">(2) auto</h4>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/e1dcb443-049d-4885-843c-724c411bb191/image.png" alt=""></p>
<p>스크롤이 필요할때만 스크롤이 생기며, overflow 속성중에서 가장 많이 사용하는 값이다. </p>
<h4 id="3-scroll">(3) scroll</h4>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/647618d1-4830-4264-a125-42499468d10d/image.png" alt=""></p>
<p>언제나 스크롤이 뜨게 되며, 스크롤이 필요없는 경우에도 스크롤이 뜨게 된다. </p>
<h4 id="4-hidden">(4) hidden</h4>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/8bfb7515-f4f6-4a3c-bbe6-ac1bd7e00906/image.png" alt="">
컨테이너 사이즈를 넘는 내용물을 보여주지 않게 하는 속성이다. </p>
<h4 id="5-overflow-x-overflow-y">(5) overflow-x, overflow-y</h4>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/8d3863c3-707b-4776-bfa7-249f821d26d9/image.png" alt=""></p>
<p>overflow 라는 속성은 overflow-x와 overflow-y를 합친 속성이다.
따라서 overflow:auto를 설정하게 되면, 스크롤이 필요할때 x축,y축 스크롤이 모두 생긴다. 
또한 따로 지정도 가능하다.</p>
<h2 id="외부라이브러리">외부라이브러리</h2>
<blockquote>
<p><strong>왜 외부라이브러리를 쓰는가?</strong>
라이브러리란 다른 사람들이 많이 쓰이는 코드, 프로그램을 미리 작성해놓은 것으로 
원래는 한땀 한땀 코드를 직접 적어줘야하는 기능들을 라이브러리를 통해 쉽고 빠르게 적용 할 수 있다. 
ex) font-awesome, bootstrap</p>
</blockquote>
<blockquote>
<p><strong>CDN 이란?</strong>
Content Delivery Network의 약자로 협력하여 인터넷 콘텐츠를 고속 전송하는 지리적으로 분산된 서버 집단을 의미한다.
즉, CND 주소만 있으면 라이브러리를 자신이 개발하는 프로젝트로 가져올 수 있다.</p>
</blockquote>
<p>*FONT-AWSOME 라이브러리 활용하는 방법
<a href="https://codemate.kr/project/WEB-%EB%A9%94%EC%9D%B4%ED%8A%B8-HTMLCSS-%EC%8B%AC%ED%99%94%ED%8E%B8/11-1.-%EC%99%B8%EB%B6%80-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC">https://codemate.kr/project/WEB-%EB%A9%94%EC%9D%B4%ED%8A%B8-HTMLCSS-%EC%8B%AC%ED%99%94%ED%8E%B8/11-1.-%EC%99%B8%EB%B6%80-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC</a></p>
<p>참고 :
<a href="https://codemate.kr/project/WEB-%EB%A9%94%EC%9D%B4%ED%8A%B8-HTMLCSS-%EC%8B%AC%ED%99%94%ED%8E%B8">https://codemate.kr/project/WEB-%EB%A9%94%EC%9D%B4%ED%8A%B8-HTMLCSS-%EC%8B%AC%ED%99%94%ED%8E%B8</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[HTML과 CSS의 기초]]></title>
            <link>https://velog.io/@kimjyunny_dev/HTML%EA%B3%BC-CSS</link>
            <guid>https://velog.io/@kimjyunny_dev/HTML%EA%B3%BC-CSS</guid>
            <pubDate>Fri, 05 Aug 2022 05:27:14 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/e4becda7-089b-46cf-929d-2b4c9b3335d5/image.jpg" alt="">
상단 빨간 박스는 html, 하단 파란 박스는 css</p>
<h1 id="html">HTML</h1>
<blockquote>
<p>(Hypertext Markup Language)
웹문서를 만드는데 사용하는 웹언어 중에 하나로 , 하이퍼테스트를 작성하기 위해 개발된 언어</p>
</blockquote>
<p>html은 프로그래밍 언어가 아닌 마크업 언어이다. </p>
<blockquote>
<p>Markup 언어란?
태크 등을 이용하여 문서나 데이터의 구조를 명기하는 언어의 한가지</p>
</blockquote>
<p>즉, 마크업 언어란 태그라는 것이 있고, 그 태그를 이용해 문서의 구조(뼈대)를 명시하는 언어이다. html은 태크를 사용해 웹사이트의 뼈대를 그리는 것이다. </p>
<h4 id="태그의-종류-html의-명령어는-태그tag로-로-나타낸다">태그의 종류 (html의 명령어는 태그(tag)로 &quot;&lt;&gt;&quot;로 나타낸다)</h4>
<pre><code>**&lt;!DOCTYPE&gt;** : 페이지의 html 버전이 무엇인지 브라우저에 알리는 역할

&lt;html&gt;  - 웹페이지의 시작과 끝

&lt;head&gt; - 웹 페이지의 정보, 문서에서 사용할 외부 파일들을 링크할 때 사용

&lt;meta&gt; - 문자 인코딩 및 문서 키워드, 요약 정보 ex) &lt;meta charset=&quot;UTF-8&quot;&gt;

&lt;title&gt; - 문서 제목

&lt;body&gt; - 브라우저에 실제 표시되는 내용

&lt;h1 ~ h6&gt; 숫자가 클수록 글자가 작아짐

&lt;div&gt; (division) - 영역을 나누는 기능 (한페이지 내에서 영역을 지정해줌), 자동 줄바꿈이 됨, 디자인 속성이 내장되어 있어 컬러를 지정하면 브라우저 전체에 박스를 생성한다. 

 &lt;span&gt; - 범위를 지정하는 기능 (영역을 나누거나 줄 바꿈을 하지 않고 일정 범위를 지정), 자동 줄바꿈이 되지 않음, 아무런 속성이 없어 컬러를 지정하면 텍스트 만큼만 생성한다. 

&lt;a&gt; - anchor, 웹 페이지나 외부 사이트 연결 ex) **&lt;a href=&quot;링크&quot; target=&quot;_blank&quot;&gt;~~~&lt;/a&gt;** 

(herf : 연결하고자 하는 링크, ~~~~: 링크가 생성 될 부분, target : 연결하는 창의 종류, _blank : 웹 브라우저의 새 창으로 연결되는 소스 = **target=&quot;_blank&quot;**를 추가하면 링크를 클릭했을 때 새 창으로 열 수 있다.)

&lt;img&gt; - 이미지 삽입 ex) &lt;imag src=”이미지 주소”&gt;

&lt;script&gt; - 코드 삽입

&lt;link&gt; - 외부 파일을 연결할 때 사용

&lt;p&gt;(paragragh) - 문단을 지정하는 기능 (단락, 문단 바꿈)

&lt;li&gt; - &lt;ul&gt;과 &lt;ol&gt;안에서 각 항목을 나열할 때 사용

&lt;ul&gt; - unordered list, 순서가 없는 list

&lt;ol&gt; - olordered list, 순서가 있는 list

&lt;style&gt; - 스타일 정보를 정의할 때 사용하는 태그

&lt;hr&gt; - 수평선

&lt;br&gt;( line Break) - 줄을 바꾸는 기능 

&lt;hn&gt; - 제목

&lt;input&gt; - form의 요소중 하나, 사용자가 정보를 입력하는 부분을 만들어야 할 때 사용

&lt;form&gt; - form 생성

&lt;iframe&gt; - 외부 페이지 삽입

&lt;nav&gt; - 문서 연결 링크

&lt;strong&gt; - 중요한 내용 강조

&lt;footer&gt; - 제작 정보와 저작권 정보

&lt;header&gt; - 제목 지정

&lt;button&gt; - 버튼

&lt;i&gt; - italic, 기울임

&lt;b&gt; - bold, 진하게

&lt;aside&gt; - 본문 이외의 내용</code></pre><h1 id="css">CSS</h1>
<blockquote>
<p>(cascading style sheets)
html에서 웹에 관한 내용을 구성한다면 css에서는 디자인의 역할을 맡고 있다. 텍스트의 크기나 굵기, 색깔, 폰트를 지정 해 줄 수 있다.</p>
</blockquote>
<h2 id="style-sheet">Style Sheet</h2>
<h3 id="1-inline-style-sheet">1) Inline Style Sheet</h3>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/b1b43a36-aee1-407e-8ffc-41bfc6403cce/image.png" alt=""></p>
<p>h1 태그 안에 속성값을 만들어 글씨와 배경에 색을 적용 할 수 있다. 디자인 요소를 태그마다 하나하나 지정해 줘야하기 때문에 한계가 있으며 재사용이 불가능 하다는 단점이 있다. </p>
<h3 id="2-internal-style-sheet">2) Internal Style Sheet</h3>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/94b3d228-8725-45c7-a08d-d4738119e50e/image.png" alt=""></p>
<p>style 태그를 넣어 디자인을 적용한다. html 문서 안의 여러요소를 한번에 꾸밀 수 있다는 장점이 있지만 다른 html 문서에는 적용 할 수 없다는 단점이 있다. </p>
<p>주로  style 태그는 head와 /head사이에 넣지만 어디에 넣어도 상관 없다.</p>
<h3 id="3-linking-style-sheet">3) Linking Style Sheet</h3>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/cea9cf70-9c46-430a-8520-d19b361806ab/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/237f00b7-bb2a-47b9-af38-c0156ec2664c/image.png" alt=""></p>
<p>별도의 css 파일을 생성하고 html문서에 연결하는 방법이며,
가장 유용하며 자주 쓰인다. </p>
<p>style.css 파일을 만들고 html 파일에 원하는 스타일 시트를 link 태그로 연결해준다. </p>
<p>ex) link rel = “stylesheet” href=”./style.css”/ 
: html과 css가 같은 폴더에 있으므로 href=”./style.css”고 작성한다. 만약 &quot;design&quot;이라는 폴더 안에 &quot;style.css&quot;라는 파일을 두면 <strong>href=&quot;./design/style.css&quot;</strong>로 작성한다. </p>
<p>이것을  <strong>상대경로</strong>라고 한다.</p>
<blockquote>
<p> *<em>상대경로 *</em>
해당 파일과 폴더의 위치를 상대적으로 표시한 경로 즉, 현재 위치한 곳을 기준으로 그곳의 위치</p>
</blockquote>
<pre><code> / : 루트 (가장 최상의 디렉토리로 이동)
 ./ : 현재위치
 ../ : 현재위치의 상단 폴더
 ../../ : 두단계 상위 디렉토리로 이동

 ex) stlye.css가 C:\users\documents에 위치 한다

 / : C:

 ./ : document

 ../ : stlye</code></pre><blockquote>
<p><strong>절대경로</strong> 
어떠한 웹페이지나 파일이 가지고 있는 고유한 경로 
 ex) <a href="https://www.naver.com/">https://www.naver.com/</a>를 절대경로라고 말하며 ‘위치’라는 개념을 주소라고 이해하면생각하면 쉽다.</p>
</blockquote>
<h2 id="글의-크기와-굵기">글의 크기와 굵기</h2>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/13837906-de33-454a-9437-d676b3898067/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/82d5096c-a2f2-46c0-aaf5-a9612b661d00/image.png" alt=""></p>
<h3 id="font-size">font-size</h3>
<p>medium : 보통 크기
larger : 상대적으로 큰 크기
smaller : 상대적으로 작은 크기
length : px, %, em, rem</p>
<h3 id="font-weight">font-weight</h3>
<p>normal : 보통 굵기
bolder : 상대적으로 굵은 굵기
lighter : 상대적으로 얇은 굵기
number : 100, 200, 300, 400, 500, 600, 700, 800, 900</p>
<ul>
<li><strong>폰트 적용하기</strong> 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/5855b445-af17-4cdb-a121-da3c02485be0/image.png" alt="">
style은 html head안에 넣기 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/880689e7-b1dd-4e96-9c45-40223144c2ac/image.png" alt="">
font-family는 css의 body안에 넣어서 적용하기
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/71e2fdca-225a-497a-a07a-869f8f4e19a5/image.png" alt="">
결과 :
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/d0492900-bf60-4d46-a7d8-57baa65925ec/image.png" alt=""></li>
</ul>
<h2 id="class-속성">class 속성</h2>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/9a96c495-f071-4fa8-81ba-d3673badea90/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/43315a11-66e1-416f-a948-5a3aaef7de68/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/a7fcca6a-2c12-4d6a-a555-076cfa94061a/image.png" alt="">
태그를 특정 클래스 이름으로 설정하면 css에서 디자인 속성을 한번에 지정 가능하며 클래스로 지정해놓으면 복잡하고 반복되는 코드를 피할 수 있다. </p>
<h2 id="패딩padding과-마진margin">패딩(Padding)과 마진(Margin)</h2>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/ac2a1dc5-e74a-4305-a9a6-c427e8b0e453/image.png" alt="">
패딩과 마진은 가독성 때문에 중요하다</p>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/77bae223-69bf-44b1-86e7-37f31fb26abe/image.png" alt="">
파란색 : 콘텐츠, 초록색 : 패딩, 주황색 : 마진</p>
<h3 id="패딩padding">패딩(padding)</h3>
<p>: 속을 넣다, 채워넣다.</p>
<pre><code>padding: 20px;  ▶ 상하좌우 = 20px로 지정
padding: 3px 10px; ▶ 상하 = 3px, 좌우 = 10px로 지정
padding: 5px 10px 3px;  ▶ 위쪽 = 5px, 좌우 = 10px, 아래쪽 = 3px으로 지정
padding: 5px 10px 7px 3px; ▶ 위쪽 = 5px, 오른쪽 = 10px, 아래쪽 = 7px, 왼쪽 = 3px으로 지정</code></pre><h3 id="마진margin">마진(margin)</h3>
<p>: 여백, 여유</p>
<pre><code>margin: 20px;  ▶ 상하좌우 = 20px로 지정
margin: 3px 10px; ▶ 상하 = 3px, 좌우 = 10px로 지정
margin: 5px 10px 3px;  ▶ 위쪽 = 5px, 좌우 = 10px, 아래쪽 = 3px으로 지정
margin: 5px 10px 7px 3px; ▶ 위쪽 = 5px, 오른쪽 = 10px, 아래쪽 = 7px, 왼쪽 = 3px으로 지정</code></pre><p>✅ width(폭)과 height(높이)가 200px인 분홍색 박스를 만들고 padding과 margin을 상하좌우 모두 20px로 지정해보시오.
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/777e8f35-6402-49da-adfb-95fb5682d395/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/b4304603-cb9e-41a6-981a-76edc590ee4f/image.png" alt="">
결과 :
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/5c755a88-5441-4a8f-8fe9-82c2b7c9b9e8/image.png" alt="">
<strong>문제점</strong> : margin을 20px로 지정 했으나 마진의 폭이 전체로 지정이 되었다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/be81cf66-39a9-46d8-9779-8f48d10c58db/image.png" alt="">
입력하지 않은 &quot;<strong>div { display: block; }</strong>&quot;라는 요소가 자동으로 배치되어있음</p>
<p>(<strong>display: block; : 앞뒤로 줄바꿈이 이루어져서 가로는 100%, 세로는 내용만큼 차지함</strong>)</p>
<p><strong>해결법</strong> : </p>
<p>css파일에 “dispaly:inline-block;”을 추가하여 줄바꿈 없이 박스를 표시 할 수 있게 해줌
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/1430a4c0-cad8-4694-b686-f069317dd446/image.png" alt=""></p>
<h2 id="단위와-위치">단위와 위치</h2>
<h3 id="단위">단위</h3>
<blockquote>
<p><strong>절대단위</strong> : 고정된 값을 출력 (출력장치의 물리적 속성을 아는 경우 효율적)
→ in, cm, mm, pt, pc</p>
</blockquote>
<blockquote>
<p> <strong>상대단위</strong> : 다른요소의 크기에 영향을 받아 크기가 변함 (호환성을 유지하는데 유리)
→ em, ex, px, %</p>
</blockquote>
<p>✔ em : font_size, 해당 폰트의 대문자 M의 너비를 기준으로 함</p>
<p>✔ ex : x-height, 해당 폰트의 소문자 x의 높이를 기준으로 함</p>
<p>✔ px : pixel, 출력장치에 따라 상대적인 크기를 가짐</p>
<p>✔ % : percent, 기본글꼴의 크기에 대하여 상대적인 값을 가짐</p>
<pre><code>단위끼리 변환도 가능하다.
px  = pt / 0.75
pt   = px * 0.75
em = pt / 12
%    = pt * 100 / 12
</code></pre><p>단위변환 사이트 : <a href="http://pxtoem.com/">http://pxtoem.com/</a></p>
<h3 id="위치">위치</h3>
<h4 id="1-static">1) Static</h4>
<p>모든 요소의 default 값, 포지션 속성을 따로 설정하지 않았을때 가장 위쪽, 왼쪽으로 자동 저장이 된다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/d98d8cf3-06c3-4b3d-8856-6ffdd556c43d/image.png" alt=""></p>
<h4 id="2-relative">2) Relative</h4>
<p>위치를 이동하고 싶을때 사용하는 태그로 top, bottom, right, left를 사용하여 조절 할 수 있다. </p>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/f67a12e8-7858-4bfe-9bc3-f7e346964d5a/image.png" alt=""></p>
<h4 id="3-absolute">3) Absolute</h4>
<p>위치를 이동하고 싶을때 사용하는 태그로 top, bottom, right, left를 사용하여 조절 할 수 있다.</p>
<ul>
<li><strong>relative와 absolute의 차이</strong>
relative → static 속성을 기준으로 상대적인 위치를 지정
absolute → stacic 속성이 아닌 요소를 기준으로 상대적인 위치를 지정
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/2e5cf8b9-1a9b-4f5f-9efb-9d3d31e566c2/image.png" alt="">
부모태그인 relative를 기준으로 위치를 정하는 것이 absolute</li>
</ul>
<h4 id="4-fixed">4) Fixed</h4>
<p>위치를 고정해주는 역할로 스크롤을 내여도 fixed된 요소는 그자리에 고정된다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/3554d09b-a3c2-4bc3-806b-aa4490e3bfc3/image.png" alt=""></p>
<h2 id="도형만들기">도형만들기</h2>
<p>border-radius는 모서리를 둥글게 만들어주는 역할이다.
정사각형을 만드는 코드에서 &quot;border-radius: 50%;&quot; 즉, 네 변을 모두 50%씩 둥글데 만들어서** 원**을 만든다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/f4b1110a-c216-4afd-8661-fcead52764a3/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/5acb7ff7-f220-49fd-95b0-350e9d10d2b8/image.png" alt="">
정사각형의 꼭짓점만 둥글게 하고 싶다면 속성값을 위, 오른쪽, 아래, 왼쪽 순으로 지정하면 된다. 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/ea116d93-5ffb-435d-a006-c06b403ac635/image.png" alt="">
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/819aa834-6291-4887-85b7-af9938c3dec2/image.png" alt=""></p>
<ul>
<li><h4 id="border-속성">border 속성</h4>
border-width : 선 굵기
border-style : 선 모양
solid (실선)
dotted (점선)
dashed (대쉬선)
double (이중실선)
border-color : 선 색깔</li>
</ul>
<p>✅ 네변을 다른 속성을 이용한 네모 만들기
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/82596516-5bf4-48b1-81cc-a01acb4dce59/image.png" alt="">
결과 : 
<img src="https://velog.velcdn.com/images/kimjyunny_dev/post/df6b600e-8656-4bf2-8029-d594a0ef283f/image.png" alt=""></p>
<p>🔗css 전용 도형 사이트 링크 : <a href="https://css-tricks.com/the-shapes-of-css/">https://css-tricks.com/the-shapes-of-css/</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[UI vs API]]></title>
            <link>https://velog.io/@kimjyunny_dev/UI-vs-API</link>
            <guid>https://velog.io/@kimjyunny_dev/UI-vs-API</guid>
            <pubDate>Thu, 04 Aug 2022 08:18:20 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><strong>UI (User Interface)</strong>
사용자가 시스템을 제어하기 위해서 사용하는 조작장치 ex) 버튼 </p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/097a21cb-5a24-4c91-b9bd-4289a710cb9f/image.PNG" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/851bd2ea-cf98-449f-8178-19fced7d1810/image.PNG" alt=""></p>
<blockquote>
<p><strong>API (Application Programming Interface)</strong>
어플리케이션을 만들기 위해서 프로그래밍을 할때 사용하는 조작장치들 </p>
</blockquote>
<p>alert 창을 만들기 위한 코드에는 경고창의 기능이나 모양 같은게 설명되어 있지 않다.</p>
<p><strong>Why?</strong> 웹브라우저를 만드는 사람들이 경고창을 미리 만들어 놓았다가 함수를 실행하면 띄우도록 만든 경고창 실행 조작장치이다. </p>
<blockquote>
<p><strong>Open API</strong>
특정 서비스를 제공하는 서비스 업체가 자신들의 서비스에 접근 할 수 있도록 그 방법을 외부에 공개한 것으로 해당 서비스로 접근하기 위한 규칙을 정의한 것 </p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/df2447ab-121e-45ef-a139-5ef3990bb0aa/image.png" alt=""></p>
<p>ex) 네이버 오픈 API, 정부 3.0 공공데이터 포털</p>
<p>기존의 API를 이용해 새로운 프로그램을 만드는 것을 <strong>매쉬업(Mash Up)</strong>이라고 하는데 대표적인 예로 구글지도와 부동산 매물정보가 만들어진 구글 하우징 맵스가 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[UI/UX툴 피그마(Figma)]]></title>
            <link>https://velog.io/@kimjyunny_dev/UIUX%ED%88%B4-%ED%94%BC%EA%B7%B8%EB%A7%88Figma</link>
            <guid>https://velog.io/@kimjyunny_dev/UIUX%ED%88%B4-%ED%94%BC%EA%B7%B8%EB%A7%88Figma</guid>
            <pubDate>Thu, 04 Aug 2022 07:44:36 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><strong>피그마를 사용하게 된 계기</strong>
2022년 1월 말쯤 아이디어 해커톤에 참여하게 되었었는데 아쉽게도 우리 팀원 중에 디자이너가 없었다. 그나마 나는 포토샵을 어느정도 할 줄 알았기에 프론트엔드 겸 디자인을 맡았었다. 하지만 디자인을 배워 본 적이 없기 때문에 막막하던 찰나 팀원 덕분에 피그마를 알게 되었고, ui/ux에 대하여 배워보는게 도움이 될 것이라 생각하여 사용하게 되었다. </p>
</blockquote>
<blockquote>
<p><strong>UI란</strong> user interface로 사용자가 앱을 사용 할 때 마주하는 디자인, 레이아웃, 기술적인 부분이다. 
디자인의 구성 요소인 폰트, 색깔, 줄간격 등 상세한 요소가 포함되고, 기술적 부분은 반응형이나 애니메이션 등이 포함되며 사용자가 사용 할때 큰 불편함이 없이 만족도를 높여야한다. </p>
</blockquote>
<blockquote>
<p><strong>UX는</strong> User eXperience의 약자로 앱을 주로 사용하는 사용자들의 경험을 분석하여 더 편하고 효윻적인 방향으로 프로세스가 진행될 수 있도록 만드는 것이다. UX는 통계자료, 데이터를 기반으로 앱을 사용하는 유저들의 특성을 분석하여 상황과 시점에 맞도록 변화 시킬 수 있어야한다. </p>
</blockquote>
<h2 id="피그마란">피그마란?</h2>
<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/e1fdde23-c986-4115-9ba4-dfa761607e00/image.png" alt=""></p>
<p>웹기반 UI/UX 디자인 및 프로토타이핑툴로 설치가 따로 필요하지 않아 인터넷이 가능한 곳이면 어떤 운영체제를 사용하던지 동일하게 작업 할 수 있다. 또한 따로 저장이 존재하지 않으며 작업을 하는 순간 순간 자동 저장이 된다는 특징이 있다. </p>
<h2 id="기능">기능</h2>
<h3 id="1-다양한-프레임">1. 다양한 프레임</h3>
<p><img src="https://velog.velcdn.com/cloudflare/kim_jyuuny/d13c5c91-f22e-49ce-bd75-09568ccba3c9/vmfpdla.PNG" alt="">
좌측 상단 우물정자 표시의 아이콘을 누르면 폰, 태블릿, 데스크탑 등등의 프레임을 선택 할 수 있다. 
*<em>포토샵을 사용 할 때는 일일이 기기의 크기를 찾아보곤 했는데 그럴 필요가 없어졌다는게 너무 편했다.</em></p>
<h3 id="2-동시-작업">2. 동시 작업</h3>
<p><img src="https://velog.velcdn.com/cloudflare/kim_jyuuny/b201bbf5-1617-49dc-9e8c-05decac1e5fc/%EC%B4%88%EB%8C%80.PNG" alt="">
포토샵으로 작업을 할때에는 완성하고 파일을 보내면 수정할 사안을 따로 전달받아 다시 작업을 해야한다는게 너무 불편했다. 하지만 피그마를 사용하면 링크를 카카오톡으로 공유 받아 같이 작업을 진행하여 상대의 마우스 커서가 어디있는지, 어느 부분을 수정하는지를 실시간으로 볼 수 있다는 점이 가장 큰 이점인것 같다. </p>
<h3 id="3-폰트의-다양성">3. 폰트의 다양성</h3>
<p><img src="https://velog.velcdn.com/cloudflare/kim_jyuuny/28fb7c6c-5610-4533-8a0f-a7995efa4ec7/%ED%8F%B0%ED%8A%B8.PNG" alt=""></p>
<p>구글폰트(900여 개 이상의 무료폰트)를 다운받지 않고 활용할 수 있어 협업 과정에서도 별도로 설치하지 않아도 되고, 폰트 때문에 글씨가 깨지거나 사라지는 일이 없다. 또한 사용자가 별도로 보유하고 있는 폰트도 적용 할 수 있다. </p>
<h3 id="4-재사용이-가능한-컴포넌트">4. 재사용이 가능한 컴포넌트</h3>
<p>수정이 필요 할 때 마다 모든 페이지를 다 열어서 버튼의 색을 바꾸는 번거로움이 있었는데 피그마에서는 많이 사용하는 요소들을 컴포넌트로 묶어 메인 컴포넌트만 수정하면 되는 효율성을 가졌다. </p>
<h3 id="5-개발-툴바">5. 개발 툴바</h3>
<p><img src="https://velog.velcdn.com/cloudflare/kim_jyuuny/1c103625-ce3e-4da2-8bae-494e1a58d73b/%EA%B0%9C%EB%B0%9C%ED%88%B4%EB%B0%94.PNG" alt="">
개인적으로 개발 툴바 기능에 너무 놀랐었다.또한 마우스 툴바로도 수치 값을 확인 할 수 있다는 점이 디자이너 뿐만 아닌 개발자들의 관점에서도 신경을 되게 많이 쓴 페이지라고 생각이 들었다. </p>
<h2 id="마무리">마무리</h2>
<p>이외에도 직관적인 UI에 처음 피그마를 접하는 나도 이것 저것 만져보니 금세 익숙해졌었다. 디자인은 아직 나에게 너무 어렵지만 피그마를 경험함으로써 꼭 UI/UX가 디자이너에게만 한정되는 영역은 아닌것 같다는 생각이 들었다. 피그마를 통해 아직 경험해보지 못한 zeplin 기능이나 스크롤 기능 등 여러가지를 공부 할 예정이다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Framework vs Library]]></title>
            <link>https://velog.io/@kimjyunny_dev/Framework-VS-Library</link>
            <guid>https://velog.io/@kimjyunny_dev/Framework-VS-Library</guid>
            <pubDate>Thu, 04 Aug 2022 07:40:48 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/kimjyunny_dev/post/526c299d-b517-43d9-9291-92d85432c59e/image.png" alt=""></p>
<h2 id="프레임워크framework">프레임워크(Framework)</h2>
<blockquote>
</blockquote>
<p>-소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 틀이다. 
-재사용이 가능하도록 소프트웨어 구성에 필요한 기본을 제공한다. 
-정보시스템의 개발 및 운영을 지원하는 도구 및 가이드 등을 포함한다. </p>
<blockquote>
<p>Spring, React, Angular, View, Django</p>
</blockquote>
<ul>
<li>특징 </li>
</ul>
<table>
<thead>
<tr>
<th align="left"><center>특징</center></th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td align="left">모듈화 (Modularity)</td>
<td>프레임워크는 구현을 인터페이스 뒤에 감춰 모듈화를 강화하고 설계와 구현 변경에 따르는 영향을 최소화한다.</td>
</tr>
<tr>
<td align="left">재사용성 (Reusability)</td>
<td>인터페이스를 통해 여러 애플리케이션에서 반복적으로 사용하는 일반적 컴포넌트를 정의하여 재사용성을 높인다.</td>
</tr>
<tr>
<td align="left">확장성 (Extensibility)</td>
<td>다형성을 통해 애플리케이션이 프레임워크의 인터페이스를 확장한다.</td>
</tr>
<tr>
<td align="left">제어의 역행 (Inversion of Control)</td>
<td>프레임워크 코드가 전체 애플리케이션의 처리 흐름을 제어하고 외부의 이벤트에 대해 애플리케이션이 어떤 메서드를 수행해야할지 결정한다.</td>
</tr>
<tr>
<td align="left">_*다형성(Polymorphism) : 한 타입의 참조 변수로 여러 타입의 객체를 참조 할 수 있도록 하는 것이며, 여러 가지 형태를 가질 수 있는 능력을 의미한다. _</td>
<td></td>
</tr>
</tbody></table>
<ul>
<li>구성요소</li>
</ul>
<table>
<thead>
<tr>
<th align="left"><center>구성요소</center></th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td align="left">개발환경</td>
<td>설계, 구현, 테스트 등 개발에 필요한 지원 도구 모음</td>
</tr>
<tr>
<td align="left">실행환경</td>
<td>자바 기반 응용시스템 개발 시 필수적 기능을 패턴화해 미리 구현해둔 라이브러리 코드 모음</td>
</tr>
<tr>
<td align="left">운영환경</td>
<td>표준 프레임워크 기반 개발 시스템에 대한 운영 시 필요한 의사소통 및 모니터링 도구 모음</td>
</tr>
<tr>
<td align="left">관리환경</td>
<td>표준 프레임워크에 대한 기술 지원, 업그레이드 등 관리하기 위한 내부 업무 시스템</td>
</tr>
</tbody></table>
<hr>
<h2 id="라이브러리-library">라이브러리 (Library)</h2>
<blockquote>
<p>-모듈과 패키지를 총칭하며, 효율적인 프로그램 개발을 위해 필요한 프로그램을 모아 놓은 집합체를 의미한다. 
_*모듈이 개별 파일이라면 패키지는 파일들을 모아 놓은 폴더라고 볼 수 있다. _</p>
</blockquote>
<blockquote>
<p>Bootstrap, jQuery</p>
</blockquote>
<p> 라이브러리는 도움말, 설치 파일, 샘플 코드 등으로 구성된다. </p>
<ul>
<li>라이브러리 종류</li>
</ul>
<table>
<thead>
<tr>
<th align="left"><center>종류</center></th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td align="left">표준 라이브러리</td>
<td>-프로그래밍 언어가 기본적으로 가지고 있는 라이브러리를 의미</td>
</tr>
<tr>
<td align="left"></td>
<td>-각 프로그래밍 언어의 표준 라이브러리는 여러 종류의 모듈과 패키지를 가지며, 표준 라이브러리를 이용하면 별도의 파일 설치 없이 날짜와 시간 등의 기능을 이용 할 수 있음</td>
</tr>
<tr>
<td align="left"></td>
<td></td>
</tr>
<tr>
<td align="left">외부 라이브러리</td>
<td>-표준 라이브러리와 달리 별도의 파일을 설치</td>
</tr>
<tr>
<td align="left"></td>
<td>-외부 라이브러리는 누구나 개발하여 설치 할 수 있으며, 인터넷 등을 이용하여 공유할 수도 있음</td>
</tr>
</tbody></table>
<ul>
<li>표준 라이브러리 상세</li>
</ul>
<table>
<thead>
<tr>
<th>표준 라이브러리</th>
<th align="left">설명</th>
<th align="center">예시</th>
</tr>
</thead>
<tbody><tr>
<td>입출력</td>
<td align="left">핵심 입력과 출력 함수들을 정의</td>
<td align="center">C언어&lt;studio.h&gt;/JAVA:Scanner Class</td>
</tr>
<tr>
<td>문자열</td>
<td align="left">문자열 처리 함수들을 정의</td>
<td align="center">C언어&lt;string.h&gt;/JAVA:String Class</td>
</tr>
<tr>
<td>시간 처리</td>
<td align="left">데이터와 시간 처리 함수들을 정의</td>
<td align="center">C언어&lt;time.h&gt;/JAVA:Data Class</td>
</tr>
<tr>
<td>수학</td>
<td align="left">일반적인 수학 함수 정의</td>
<td align="center">C언어&lt;math.h&gt;/JAVA:Math Class</td>
</tr>
</tbody></table>
<p>*<em>1) 문자열 라이브러리 함수 *</em>
<em>문자열 함수를 사용하기 위해서는 string.h 헤더 파일을 include하여 사용한다.</em> </p>
<table>
<thead>
<tr>
<th align="left"><center>함수</center></th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td align="left">strcat</td>
<td>문자열끼리 연결하는 함수(String Concatenate) /(A,B); B를 A 문자열 뒤에 붙임 = AB</td>
</tr>
<tr>
<td align="left">strcpy</td>
<td>문자열을 복사하는 함수(String Copy) /(A,B); B문자열을 A문자열에 복사 = BB</td>
</tr>
<tr>
<td align="left">strcmp</td>
<td>문자열을 비교하는 함수(String Compare) /(A,B); A&gt;B(1), A=B(0),A&lt;B(-1)</td>
</tr>
<tr>
<td align="left">strlen</td>
<td>문자열 길이를 알려주는 함수(String Length)</td>
</tr>
</tbody></table>
<p><strong>2) 표준 라이브러리 함수</strong>
<em>표준 라이브러리 함수를 사용하기 위해서는 stdlib.h. 헤더 파일을 include 하여 사용한다.</em></p>
<table>
<thead>
<tr>
<th align="left"><center>함수</center></th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td align="left">atoi</td>
<td>문자열(str)을 정수(int)형으로 변환하는 함수</td>
</tr>
<tr>
<td align="left">atof</td>
<td>문자열(str)을 실수형(float, double)으로 변환하는 함수</td>
</tr>
<tr>
<td align="left">itoa</td>
<td>정수(int)형을 문자열(str)로 변환하는 라이브러리 함수</td>
</tr>
</tbody></table>
<p><strong>3) 수학 라이브러리 함수</strong>
_수학 라이브러리 함수를 사용하기 위해서는 math.h 헤더 파일을 include하여 사용한다. _</p>
<table>
<thead>
<tr>
<th align="left"><center>함수</center></th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td align="left">ceil</td>
<td>ceil(n); 소숫점 올림</td>
</tr>
<tr>
<td align="left">floor</td>
<td>floor(n); 소숫점 내림</td>
</tr>
</tbody></table>
<hr>
<h2 id="프레임워크-vs-라이브러리-비교">프레임워크 VS 라이브러리 비교</h2>
<blockquote>
<p>가장 큰 차이점은 개발의 주도권을 누가 가지고 있는가다!</p>
</blockquote>
<p><strong>프레임워크</strong>는 개발 주도권이 프레임워크에 있어 웹개발 시작부터 기능 구현까지 다 프레임워크를 따라야 하지만 <strong>라이브러리</strong>는 개발 주도권이 개발자에게 있어 원하는 라이브러리를 가져와 개발자가 원하는대로 기능만을 사용 할 수 있다. </p>
]]></description>
        </item>
    </channel>
</rss>