<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>j0_0s.log</title>
        <link>https://velog.io/</link>
        <description>프론트엔드 개발자입니다</description>
        <lastBuildDate>Sun, 20 Aug 2023 03:17:59 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>j0_0s.log</title>
            <url>https://velog.velcdn.com/images/ji0_0s/profile/0a786946-2910-4eae-8a96-081443b7a688/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. j0_0s.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/ji0_0s" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[혼공SQL] 6주차]]></title>
            <link>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5SQL-6%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5SQL-6%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 20 Aug 2023 03:17:59 GMT</pubDate>
            <description><![CDATA[<h3 id="🐤기본미션">🐤기본미션</h3>
<p>p.363 market_db의 고객 테이블(member)에 입력된 회원의 정보가 변경될 때 변경한 사용자, 시간, 변경 전의 데이터 등을 기록하는 트리거 작성하고 인증하기</p>
<blockquote>
<h4 id="singer-테이블-생성하기">singer 테이블 생성하기</h4>
</blockquote>
<pre><code class="language-sql">USE market_db;
CREATE TABLE singer (SELECT mem_id, mem_name, mem_number, addr FROM member);</code></pre>
<h4 id="백업-테이블-생성하기">백업 테이블 생성하기</h4>
<pre><code class="language-sql">CREATE TABLE backup_singer 
(    mem_id        CHAR(8) NOT NULL,
    mem_name    VARCHAR(10) NOT NULL,
    mem_number    INT NOT NULL,
    addr        CHAR(2) NOT NULL,
    modType        CHAR(2),     -- 변경된 타입. &#39;수정&#39; 또는 &#39;삭제&#39;
    modDate        DATE,    -- 변경된 날짜
    modUser        VARCHAR(30)    -- 변경한 사용자
);</code></pre>
<h4 id="singer_updatetrg-트리거-만들기">singer_updateTrg 트리거 만들기</h4>
<pre><code class="language-sql">DROP TRIGGER IF EXISTS singer_updateTrg;
DELIMITER $$
CREATE TRIGGER singer_updateTrg -- 트리거 이름
    AFTER UPDATE    -- 변경 후에 작동하도록 지정
    ON singer -- 트리거를 부착할 테이블
    FOR EACH ROW
BEGIN
    INSERT INTO backup_singer VALUES( OLD.mem_id, OLD.mem_name, OLD.mem_number, OLD.addr, &#39;수정&#39;, curdate(), current_user() );
END $$
DELIMITER ;</code></pre>
<h4 id="singer_deletetrg-트리거-만들기">singer_deleteTrg 트리거 만들기</h4>
<pre><code class="language-sql">DROP TRIGGER IF EXISTS singer_deleteTrg;
DELIMITER $$
CREATE TRIGGER singer_deleteTrg -- 트리거 이름
    AFTER DELETE    -- 삭제 후에 작동하도록 지정
    ON singer -- 트리거를 부착할 테이블
    FOR EACH ROW
BEGIN
    INSERT INTO backup_singer VALUES( OLD.mem_id, OLD.mem_name, OLD.mem_number, OLD.addr, &#39;삭제&#39;, curdate(), current_user() );
END $$
DELIMITER ;</code></pre>
<p>이제 데이터를 수정하고 삭제해보며 backup_singer 테이블에 잘 기록이 되는지 확인해보겠습니다.</p>
<h4 id="데이터-수정-및-삭제">데이터 수정 및 삭제</h4>
<pre><code class="language-sql">UPDATE singer SET addr = &#39;영국&#39; WHERE mem_id = &#39;BLK&#39;;
DELETE FROM singer WHERE mem_number&gt;= 7;</code></pre>
<h4 id="backup_singer-테이블-확인하기">backup_singer 테이블 확인하기</h4>
<pre><code class="language-sql">SELECT * FROM backup_singer;</code></pre>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/4e9b7c22-5cf3-4cb8-a418-76de4e9f3a81/image.png" alt=""></p>
<h4 id="-truncate-table은-delete-트리거가-작동되지-않기-때문에-백업-테이블에-기록되지-않는다">! TRUNCATE TABLE은 DELETE 트리거가 작동되지 않기 때문에 백업 테이블에 기록되지 않는다.</h4>
<hr>

<h3 id="🎊🥳혼공단-완주🥳🎊">🎊🥳혼공단 완주🥳🎊</h3>
<p>혼공학습단 10기를 완주했다. 혼공단을 하며 하나의 목표를 가지고 많은 사람들과 같이 공부할 수 있어서 좋았다. 과제를 업로드하면 항상 혼공족장님이 정성스럽게 댓글을 달아주셔서 힘이 났다😘 이제 혼공단 11기를 기다리며 부족했던 부분을 다시 공부해봐야겠다!!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공SQL] 5주차]]></title>
            <link>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5SQL-5%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5SQL-5%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 13 Aug 2023 13:16:27 GMT</pubDate>
            <description><![CDATA[<h3 id="🐤기본미션">🐤기본미션</h3>
<p>p.310 인덱스 생성하고 key_name이 PRIMARY로 출력된 결과 화면 캡쳐하기</p>
<blockquote>
</blockquote>
<h4 id="인덱스-생성">인덱스 생성</h4>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/74872223-83a1-4e47-9145-f295376eb3f9/image.png" alt=""></p>
<h4 id="결과-화면">결과 화면</h4>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/f102f59d-bfb2-4595-98c3-4839730b5f6a/image.png" alt=""></p>
<hr>

<h3 id="😎선택미션">😎선택미션</h3>
<p>인덱스 생성, 제거하는 기본 형식 작성하기</p>
<blockquote>
</blockquote>
<h4 id="인덱스-생성-1">인덱스 생성</h4>
<ul>
<li>CREATE INDEX 문을 사용<pre><code class="language-sql">CREATE [UNIQUE] INDEX 인덱스_이름
  ON 테이블_이름 (열_이름) [ASC | DESC]</code></pre>
📍예시<pre><code class="language-sql">CREATE INDEX idx_member_addr
  ON member(addr);</code></pre>
</li>
</ul>
<blockquote>
</blockquote>
<h4 id="인덱스-제거">인덱스 제거</h4>
<ul>
<li>DROP INDEX 문을 사용<pre><code class="language-sql">DROP INDEX 인덱스_이름 ON 테이블_이름</code></pre>
📍예시<pre><code class="language-sql">DROP INDEX idx_member_addr ON member;</code></pre>
</li>
</ul>
<hr>

<p>5주차도 끝이 났다. 이제 6주차만을 남겨두고 있다!! 이번 주차는 나에게 조금 어려웠던 것 같다. 아직 완벽하게 이해하지는 못했지만 한 번 더 공부해서 내 것으로 만들어야겠다😊 </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공SQL] 4주차]]></title>
            <link>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5SQL-4%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5SQL-4%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 30 Jul 2023 06:54:09 GMT</pubDate>
            <description><![CDATA[<h2 id="05-1-테이블-만들기">05-1 테이블 만들기</h2>
<blockquote>
</blockquote>
<p>테이블은 MySQL Workbench에서도 만들 수 있고, SQL로도 만들 수 있다. 그럼 SQL로 member 테이블을 만들어보자.</p>
<pre><code class="language-sql">DROP TABLE IF EXISTS member;    -- 기존에 member 테이블이 있다면 삭제
CREATE TABLE member
(    mem_id        CHAR(8) NOT NULL, -- not null-&gt; 빈 값 허용하지 않음
    mem_name    VARCHAR(10) NOT NULL PRIMARY KEY,    -- primary key-&gt; 기본키 설정
    mem_number    TINYINT NOT NULL,
    addr        CHAR(2) NOT NULL,
    phone1        CHAR(3) NULL,
    phone2        CHAR(8) NULL,
    height         TINYINT UNSIGNED NULL, -- unsigned-&gt; 0부터 시작, 음수 사용 X
    debut_date    DATE NULL
);</code></pre>
<blockquote>
</blockquote>
<p>이제 회원 테이블과 연결되는 구매 테이블을 만들어보자.</p>
<pre><code class="language-sql">DROP TABLE IF EXISTS buy;    -- 기존에 buy 테이블이 있다면 삭제
CREATE TABLE buy
(    num            INT AUTO_INCREMENT NOT NULL PRIMARY KEY, 
-- auto_increment-&gt; 숫자 자동 증가, primary key 또는 unique와 함께 사용
    mem_id        CHAR(8) NOT NULL,
    prod_name    CHAR(6) NOT NULL,
    group_name    CHAR(4) NULL,
    price        INT UNSIGNED NOT NULL,
    amount         SMALLINT UNSIGNED NOT NULL,
    FOREIGN KEY(mem_id) REFERENCES member(mem_id)
    -- buy 테이블의 mem_id 열을 member 테이블의 mem_id 열과 외래 키 관계로 연결
);</code></pre>
<h2 id="05-2-제약조건으로-테이블을-견고하게">05-2 제약조건으로 테이블을 견고하게</h2>
<blockquote>
</blockquote>
<h3 id="1-기본키와-외래키">1. 기본키와 외래키</h3>
<ul>
<li>기본키 - 외래키 관계에서 기본키가 있는 테이블을 &#39;기준 테이블&#39;이라 부르고, 외래키가 있는 테이블을 &#39;참조 테이블&#39;이라 한다.</li>
<li>기준 테이블의 기본키 열을 변경하면 참조 테이블 데이터에 문제가 발생하기 때문에 에러가 나며 변경되지 않는다. 이러한 문제를 해결하기 위해 기준 테이블의 열 이름이 변경될 때 참조 테이블의 열도 같이 변경하게 하는 기능이 있다.<pre><code class="language-sql">ALTER TABLE buy
  ADD CONSTRAINT
  FOREIGN KEY(mem_id) REFERENCES member(mem_id)
  ON UPDATE CASCADE -- 기준 테이블의 열 이름이 변경될 때 참조 테이블 열 이름도 변경됨
  ON DELETE CASCADE; -- 기준 테이블의 데이터가 삭제될 때 참조 테이블의 데이터도 삭제됨</code></pre>
<h3 id="2-고유키unique">2. 고유키(UNIQUE)</h3>
기본키(PRIMARY KEY)와 비슷하지만 고유키(UINQUE)는 NULL값을 허용한다. 또, 기본키는 하나만 설정해야 하지만 고유키는 여러개를 설정할 수 있다.<pre><code class="language-sql">create table memer
(    mem_id        CHAR(8) NOT NULL PRIMARY KEY,
  mem_name    VARCHAR(10) NULL UNIQUE,
  email        CHAR(30) NULL UNIQUE
);</code></pre>
<h3 id="3-체크check">3. 체크(CHECK)</h3>
입력되는 데이터를 점검하는 기능. 예를 들어 평균 키에 마이너스 값이 입력되지 않도록 하거나, 연락처의 국번에 02,031,041,055 중 하나만 입력되도록 할 수 있다.<pre><code class="language-sql">create table member
(    mem_id        CHAR(8) NOT NULL PRIMARY KEY,
  mem_name    VARCHAR(10) NOT NULL,
  height        TINYINT UNSIGNED NULL CHECK (height &gt;= 100)
);</code></pre>
<h3 id="4-기본값default">4. 기본값(DEFAULT)</h3>
값을 입력하지 않았을 때 자동으로 입력될 값을 미리 지정해 놓는 기능. 키의 기본값을 160으로 지정해보자.<pre><code class="language-sql">create table member
(    mem_id        CHAR(8) NOT NULL PRIMARY KEY,
  mem_name    VARCHAR(10) NOT NULL,
  height        TINYINT UNSIGNED NULL DEFAULT 160
);</code></pre>
</li>
</ul>
<h2 id="05-3-가상의-테이블--뷰">05-3 가상의 테이블 : 뷰</h2>
<p>뷰(view)는 <strong>데이터베이스 개체</strong> 중에 하나이다. 사용자들의 입장에서는 테입르과 거의 동일한 개체로 취급된다. 뷰는 SELECT  문으로 만들어져 있기 때문에 뷰에 접하는 순간 SELECT가 실행되고 그 결과가 화면에 출력된다. &#39;바로 가기 아이콘&#39;과 비슷하다고 생각하면 쉽다. 뷰는 <strong>단순 뷰</strong>와 <strong>복합 뷰</strong>로 나뉘며 단순 뷰는 하나의 테이블과 연관된 뷰를 말하고 복합 뷰는 2개 이상의 테이블과 연관된 뷰를 말한다.</p>
<blockquote>
</blockquote>
<h3 id="뷰-만들기">뷰 만들기</h3>
<pre><code class="language-sql">CREATE VIEW v_member
AS
    SELECT mem_id, mem_name, addr FROM member; 
SELECT * FROM v_member; -- 뷰 사용</code></pre>
<h3 id="뷰를-사용하는-이유">뷰를 사용하는 이유</h3>
<ul>
<li>보안에 도움이 된다 - 공개할 수 있는 데이터만 뷰에 넣고 뷰에만 접근할 수 있도록 권한을 주면 보안에 도움이 된다.</li>
<li>복잡한 SQL을 단순하게 만들 수 있다 - 복잡한 쿼리를 뷰로 만들어놓고 사용하면 편리하게 사용할 수 있다.<h4 id="create-or-replace-view-v_member">CREATE OR REPLACE VIEW v_member</h4>
drop view와 create view를 연속으로 실행하여 기존에 v_member라는 뷰가 있어도 오류가 발생하지 않는다.<h4 id="show-create-view-v_member">SHOW CREATE VIEW v_member;</h4>
뷰의 소스코드를 확인할 수 있다.<h4 id="with-check-option">WITH CHECK OPTION</h4>
뷰에 설정된 값의 범위가 벗어나는 값은 입력할 수 없도록 함.</li>
</ul>
<hr>

<h3 id="🐤기본미션">🐤기본미션</h3>
<p>p.226의 market_db의 회원 테이블(member) 생성하고, p.229 데이터 입력한 후 인증하기
<img src="https://velog.velcdn.com/images/ji0_0s/post/7e169679-4089-433a-bcb0-3a029d9a7224/image.png" alt="">
<img src="https://velog.velcdn.com/images/ji0_0s/post/6701b1de-d4e4-4c84-b97c-ef8c4c42104f/image.png" alt="">
<img src="https://velog.velcdn.com/images/ji0_0s/post/c92a6c8a-2844-4fd1-8233-9605be88d3d5/image.png" alt=""></p>
<hr>

<h3 id="😎선택미션">😎선택미션</h3>
<p>p.271 확인 문제 4번 풀고 인증하기</p>
<blockquote>
<ol start="4">
<li>다음은 기존에 뷰가 있으면 덮어쓰고, 없으면 새로 생성하는 SQL입니다. 빈칸에 들어갈 내용을 고르세요.</li>
</ol>
</blockquote>
<pre><code class="language-sql">[            빈칸            ] 뷰_이름
AS
    SELECT 문;</code></pre>
<p>① CREATE AND REPLACE VIEW
② CREATE OR REPLACE VIEW
③ CREATE AND OVERWRITE VEIW
④ CREATE OR OVERWRITE VIEW</p>
<h4 id="정답--2">정답 : 2</h4>
<p>CREATE OR REPLACE VIEW는 <strong>DROP VIEW</strong>와 <strong>CREATE VIEW</strong>를 연속으로 실행한다.</p>
<hr>

<p>이번 주차에서는 앞에 잠깐 나왔던 view에 대해서 자세히 배울 수 있어 좋았다. 다음 주차는 여름방학이다!! 비록 학교 방학은 끝났지만 혼공단 여름방학 동안 잘 쉬다 와야겠다😊</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공SQL] 3주차]]></title>
            <link>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5SQL-3%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5SQL-3%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sat, 22 Jul 2023 13:30:31 GMT</pubDate>
            <description><![CDATA[<h3 id="🐤기본미션">🐤기본미션</h3>
<p>p.195의 확인 문제 4번 풀고 인증하기</p>
<blockquote>
<ol start="4">
<li>다음 SQL은 회원으로 가입만 하고, 한 번도 구매한 적이 없는 회원의 목록입니다. 빈칸에 들어갈 가장 적합한 것을 고르세요.</li>
</ol>
</blockquote>
<pre><code class="language-sql">SELECT DISTINCT M.mem_id, B.prod_name, M.mem_name, M.addr
    FROM member M
        LEFT OUTER JOIN buy B
        ON M.mem_id = B.mem_id
    [         빈칸         ]
    ORDER BY M.mem_id;</code></pre>
<p> 1 - JOIN B.prod_name IS NULL
 2 - LIMIT B.prod_name IS NULL
 3 - HAVING B.prod_name IS NULL
 4 - WHERE B.prod_name IS NULL</p>
<h4 id="정답--4">정답 : 4</h4>
<p> 한 줄씩 살펴보자면 
 <code>SELECT DISTINCT M.mem_id, B.prod_name, M.mem_name, M.addr</code>
 중복된 값 없이 M.mem_id, B.prod_name, M.mem_name, M.addr를 출력
 <code>FROM member M</code>
 LEFT 테이블을 member로 설정
 <code>LEFT OUTER JOIN buy B</code>
 LEFT 테이블의 내용은 모두 출력되어야 하며 오른쪽 테이블은 buy로 설정
 <code>ON M.mem_id = B.mem_id</code>
 M테이블의 mem_id와 B테이블의 mem_id가 같은 것을 출력
 <code>WHERE B.prod_name IS NULL</code>
 위의 조건을 만족하는 것 중에서 B테이블의 prod_name이 null인 것을 출력
 <code>ORDER BY M.mem_id</code>
 M테이블의 mem_id 오름차순으로 정렬</p>
<hr>

<h3 id="😎선택미션">😎선택미션</h3>
<p>p.183 &#39;좀 더 알아보기&#39; 손코딩 실행하고 결과화면 인증하기</p>
<pre><code class="language-sql">SELECT DISTINCT M.mem_id, M.mem_name, M.addr
    FROM buy B
        INNER JOIN member M
        ON B.mem_id = M.mem_id
    ORDER BY M.mem_id;</code></pre>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/0a34e830-3a97-484f-bb99-ce2106b115b4/image.png" alt=""> 이 코드는 사이트에서 한 번이라도 구매한 기록이 있는 회원의 정보를 출력하는 코드이다.</p>
<hr>
이번 주차에는 '조인'이라는 개념이 나왔다. 어려웠고 아직도 조금은 헷갈리지만 이번 주차를 공부하며 많은 개념을 알게되어 좋았다. 또 Chapter4를 학습하며 MySQL 데이터 형식을 정리해보았는데 이전 포스트에서 확인할 수 있다!

<p><a href="https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5SQL-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%98%95%EC%8B%9D">MySQL 데이터 형식 정리</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공SQL] 데이터 형식]]></title>
            <link>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5SQL-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%98%95%EC%8B%9D</link>
            <guid>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5SQL-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%98%95%EC%8B%9D</guid>
            <pubDate>Sat, 22 Jul 2023 12:58:19 GMT</pubDate>
            <description><![CDATA[<h3 id="mysql-데이터-형식">MySQL 데이터 형식</h3>
<blockquote>
<h4 id="1-정수형">1. 정수형</h4>
<p>소수점이 없는 숫자, 즉 인원 수, 가격, 수량 등에 많이 사용됨</p>
</blockquote>
<ul>
<li><strong>TINYINT</strong> - 1바이트</li>
<li><strong>SMALLINT</strong> - 2바이트</li>
<li><strong>INT</strong> - 4바이트</li>
<li><strong>BIGINT</strong> - 8바이트<h4 id="unsigned">unsigned</h4>
예약어로 음수는 사용하지 않고 0부터 사용함</li>
</ul>
<blockquote>
<h4 id="2-문자형">2. 문자형</h4>
<p>글자를 저장하기 위해 사용하며, 입력할 최대 글자의 개수를 지정</p>
</blockquote>
<ul>
<li><p><strong>CHAR(개수)</strong>
고정길이 문자형이라 부르며 길이를 10으로 주고 3글자만 저장할 경우 7자리가 낭비되는 구조이다.</p>
</li>
<li><p><strong>VARCHAR(개수)</strong>
가변길이 문자형이라고 하며 길이를 10으로 주고 3글자만 저장할 경우 3자리만 사용한다. 하지만 내부 성능면에서는 CHAR로 설정하는 것이 조금 더 좋다.</p>
<blockquote>
<h4 id="3-대량의-데이터-형식">3. 대량의 데이터 형식</h4>
</blockquote>
<ul>
<li>TEXT 형식 : 소설이나 영화 대본과 같은 내용을 저장할 때 사용<ul>
<li><strong>TEXT</strong><ul>
<li><strong>LONGTEXT</strong></li>
</ul>
</li>
</ul>
</li>
<li>BLOB 형식 : 글자가 아닌 이미지, 동영상 등의 데이터를 저장할 때 사용<ul>
<li><strong>BLOB</strong><ul>
<li><strong>LONGBLOB</strong></li>
</ul>
</li>
</ul>
</li>
</ul>
<blockquote>
<h4 id="4-실수형">4. 실수형</h4>
</blockquote>
<ul>
<li><strong>FLOAT</strong> - 4바이트 - 소수점 아래 7자리까지 표현</li>
<li><strong>DOUBLE</strong> - 8바이트 - 소수점 아래 15자리까지 표현</li>
</ul>
<blockquote>
<h4 id="5-날짜형">5. 날짜형</h4>
</blockquote>
<ul>
<li><strong>DATE</strong> - 3바이트 - 날짜만 저장. YYYY-MM-DD 형식으로 사용</li>
<li><strong>TIME</strong> - 3바이트 - 시간만 저장. HH:MM:SS 형식으로 사용</li>
<li><strong>DATETIME</strong> - 8바이트 - 날짜 및 시간 저장. YYYY-MM-DD HH:MM:SS 형식으로 사용</li>
</ul>
<blockquote>
<h4 id="여러가지-데이터-사용하여-테이블-생성">여러가지 데이터 사용하여 테이블 생성</h4>
</blockquote>
<pre><code class="language-sql">CREATE TABLE emp(
 member_number INT NOT NULL,
 height SMALLINT,
 age TINYINT UNSIGNED
 movie_script LONGTEXT
 movie_film LONGBLOB
 data1 VARCHAR(35));</code></pre>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공SQL] 2주차]]></title>
            <link>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5SQL-2%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5SQL-2%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 16 Jul 2023 13:06:40 GMT</pubDate>
            <description><![CDATA[<h3 id="🐤기본미션">🐤기본미션</h3>
<p>p.138의 확인문제 2번 풀고 인증하기</p>
<blockquote>
<h4 id="2-다음-보기-중에서-각-문항의-빈칸에-들어갈-것을-고르세요">2. 다음 보기 중에서 각 문항의 빈칸에 들어갈 것을 고르세요.</h4>
<pre><code>1 SELECT * FROM member ______ height;
2 SELECT * FROM member ______ 5,2;
3 SELECT ______ phone1 FROM member;</code></pre><p>  정답
  <code>ORDER BY</code> - height를 오름차순으로 정렬
  <code>LIMIT</code> - member의 데이터를 5번째부터 2개만 출력함
  <code>DISTINCT</code> - member의 phone1열에서 중복되는 값이 있다면 중복되는 값을 하나로 표현</p>
</blockquote>
<hr>

<h3 id="😎선택미션">😎선택미션</h3>
<p>데이터 입력, 삭제하는 기본 형식 작성하기</p>
<blockquote>
<h4 id="데이터-입력--insert">데이터 입력 : INSERT</h4>
</blockquote>
<ul>
<li>기본 형식 - <code>INSERT INTO 테이블[(열1, 열2, ...)] VALUES (값1, 값2, ...)</code><h4 id="데이터-삭제--delete">데이터 삭제 : DELETE</h4>
</li>
<li>기본형식 - <code>DELETE FROM 테이블이름 WHERE 조건;</code></li>
</ul>
<hr>
이번 주차에 SQL을 공부하면서 배운 것은 앞으로 계속 활용될 기본 문법인 것 같다. 여기에 쓰지 않은 많은 기능들과 데이터 변경을 위한 SQL문들이 있다. 이것들을 따로 정리해봐야겠다!


]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공SQL] 1주차]]></title>
            <link>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5SQL-1%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5SQL-1%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 09 Jul 2023 13:22:48 GMT</pubDate>
            <description><![CDATA[<h3 id="🐤기본미션">🐤기본미션</h3>
<p>p.80의 shop_db의 회원 테이블(member)에서 아이유 회원에 대한 정보만 추출한 후 결과 화면 인증하기</p>
<blockquote>
<p>코드
<img src="https://velog.velcdn.com/images/ji0_0s/post/697027d0-19be-4cda-b2b6-e83f81589ffb/image.png" alt="">
결과
<img src="https://velog.velcdn.com/images/ji0_0s/post/2286969f-b5d7-49ec-946c-cbedcb8996fb/image.png" alt=""></p>
</blockquote>
<hr>

<h3 id="😎선택미션">😎선택미션</h3>
<p>데이터베이스 개체 3가지 설명하기</p>
<blockquote>
<h4 id="1-인덱스">1. 인덱스</h4>
</blockquote>
<ul>
<li>인덱스란 책의 제일 뒤에 수록되는 &#39;찾아보기&#39;와 비슷한 개념이다.<pre><code class="language-sql">SELECT * FROM member WHERE member_name = &#39;아이유&#39;;</code></pre>
위의 코드로 실행하면 전체 테이블을 검색해서 해당 열을 가져온다. Execution Plan을 확인해보면 Full Table Scan이라고 나오는데 이건 전체 테이블을 검색했다는 의미이다.
<img src="https://velog.velcdn.com/images/ji0_0s/post/1f826aef-dc7b-4fc7-afe7-86420eea0e82/image.png" alt="">
그럼 이제 인덱스를 만들어서 실행을 해보자<pre><code class="language-sql">CREATE INDEX idx_member_name ON member(member_name);    //인덱스 생성
SELECT * FROM member WHERE member_name = &#39;아이유&#39;; //인덱스 검색</code></pre>
위의 코드로 실행한 후 Execution Plan을 확인해보면<img src="https://velog.velcdn.com/images/ji0_0s/post/5531c545-f84f-47ab-b154-1451cb65e1ca/image.png" alt="">
이러한 결과가 나오는데, 이건 인덱스에 해당하는 열만 검색했다는 의미이다. 이렇게 하면 검색 시간을 단축할 수 있다.</li>
</ul>
<blockquote>
<h4 id="2-뷰">2. 뷰</h4>
</blockquote>
<ul>
<li>뷰란 &#39;가상의 테이블&#39;로 실제 데이터를 가지고 있지 않고 진짜 테이블에  링크된 개념이다. 윈도우즈 운영 체제의 &#39;바로 가기 아이콘&#39;과 비슷한 개념이라고 이해하면 쉽다.<pre><code class="language-sql">CREATE VIEW member_view
AS
 SELECT * FROM member;    //뷰 생성 코드
SELECT * FROM member_view;    //뷰로 테이블 접근</code></pre>
뷰로 테이블에 접근하면 보안에 도움이 되고, 긴 SQL문을 간략하게 만들 수 있다는 장점이 있다.</li>
</ul>
<blockquote>
<h4 id="3-스토어드-프로시저">3. 스토어드 프로시저</h4>
</blockquote>
<ul>
<li>스토어드 프로시저란 MySQL에서 제공하는 프로그래밍 기능으로, 여러 개의 SQL문을 하나로 묶어서 편리하게 사용할 수 있는 기능이다.<pre><code class="language-sql">SELECT * FROM member WHERE member_name = &#39;나훈아&#39;;
SELECT * FROM product WHERE product_name = &#39;삼각김밥&#39;;</code></pre>
위의 코드로 실행하면 두 개의 결과가 나온다. 만약 코드가 두 줄이 아니라 여러 줄이라면 매번 이 코드들을 작성하기 불편할 것이다. 그럼 이것을 하나의 스토어드 프로시저로 만들어보자.<pre><code class="language-sql">DELIMITER //
CREATE PROCEDURE myProc()
BEGIN
 SELECT * FROM member WHERE member_name = &#39;나훈아&#39;;
 SELECT * FROM product WHERE product_name = &#39;삼각김밥&#39;;
END //
DELIMITER ;</code></pre>
이렇게 코드를 작성한 후 <pre><code class="language-sql">CALL myProc();</code></pre>
CALL문을 통해 스토어드 프로시저를 호출하면 SELECT문 2개를 호출한 것과 같은 결과가 나온다.</li>
</ul>
<hr>

<p>이번이 3번째 혼공단 활동이다!! 이번에는 SQL이라는 언어로 참여를 했는데 혼공단 활동이 끝나고 SQL에 대해 얼마나 알게 될지 기대된다☺️</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[혼공JS [6주차]]]></title>
            <link>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5JS-6%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5JS-6%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 19 Feb 2023 14:32:49 GMT</pubDate>
            <description><![CDATA[<h3 id="🐤기본미션">🐤기본미션</h3>
<p>p. 315의 &lt;직접 해보는 손코딩&gt;을 실행한 후 출력되는 고양이 이미지 캡처하기</p>
<blockquote>
<h3 id="코드">코드</h3>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/92bfffcb-02ce-4f77-881c-07abb4028ea6/image.png" alt=""></p>
</blockquote>
<h3 id="결과">결과</h3>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/f7ee71a3-1ca4-4e7a-8a5c-25ca3b68f101/image.png" alt=""></p>
<hr>

<h3 id="😎-선택미션">😎 선택미션</h3>
<p>p. 352 누적 예제를 활용하여 본인의 할 일 목록을 만들어 캡처하기
<img src="https://velog.velcdn.com/images/ji0_0s/post/d6a1d556-7e75-48b5-a93b-f52d1e9239c0/image.png" alt=""><img src="https://velog.velcdn.com/images/ji0_0s/post/fdca3a0c-cf13-4111-8b22-378a1587a3e3/image.png" alt=""></p>
<hr>
길었지만 짧았던 혼공단 9기 활동이 끝났다🥳🥳🥳 내가 잘 할 수 있을까 걱정이 되었지만 차근차근 공부하니 어느새 마지막 미션을 완료했다!! 활동을 공유하면 항상 정성스럽게 댓글 달아주시는 혼공족장님 덕분에 더 힘내서 할 수 있었다_감사합니다❤️

]]></description>
        </item>
        <item>
            <title><![CDATA[혼공JS [5주차]]]></title>
            <link>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5JS-5%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5JS-5%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Fri, 03 Feb 2023 02:48:59 GMT</pubDate>
            <description><![CDATA[<h3 id="🐤기본미션">🐤기본미션</h3>
<p>객체, 속성, 메소드가 무엇인지 설명하기</p>
<blockquote>
</blockquote>
<h3 id="객체">객체</h3>
<p>실제로 존재하는 사물, 키(key)와 값(value)으로 이루어져 있다</p>
<pre><code class="language-javascript">const product = {
  제품명 : &#39;7D 건조 망고&#39;,    //키와 값 뒤에 쉼표(,)를 넣어 구분한다
  유형 : &#39;당절임&#39;,
  성분 : &#39;망고, 설탕, 메타중아황산나트륨, 치자황색소&#39;,
  원산지 : &#39;필리핀&#39;
}</code></pre>
<p>여기서 <code>제품명</code> , <code>유형</code> , <code>성분</code> , <code>원산지</code> 가 key이고, <code>7D 건조 망고</code> , <code>당절임</code> , <code>망고, 설탕, 메타중아황산나트륨, 치자황색소</code> , <code>필리핀</code> 이 값이다.</p>
<h3 id="속성">속성</h3>
<p>이름(key)과 값으로 구성된 것으로 객체 내부에 존재한다.</p>
<pre><code class="language-javascript">const product = {
  제품명 : &#39;7D 건조 망고&#39;,    //키와 값 뒤에 쉼표(,)를 넣어 구분한다
  유형 : &#39;당절임&#39;,
  성분 : &#39;망고, 설탕, 메타중아황산나트륨, 치자황색소&#39;,
  원산지 : &#39;필리핀&#39;
}</code></pre>
<p>product 안에 존재하는 이름과 값의 관계가 모두 속성입니다.</p>
<h3 id="메소드">메소드</h3>
<p>객체의 속성 중 함수 자료형인 속성을 특별히 메소드라고 부릅니다.</p>
<pre><code class="language-javascript">const product = {
  product_name : &#39;7D 건조 망고&#39;,    //키와 값 뒤에 쉼표(,)를 넣어 구분한다
  type : &#39;당절임&#39;,
  eat : function (food) {  }    //값이 함수이다, 메소드
}</code></pre>
<hr>

<h3 id="😎-선택미션">😎 선택미션</h3>
<p>p. 288 확인 문제 3번 풀고, 풀이 과정 설명하기</p>
<blockquote>
<ol start="3">
<li>모질라 문서에서 Math 객체와 관련된 내용을 읽고 사인 90도의 값을 구해보세요. 참고로 사인 90도는 1입니다. 아주 단순하게 생각해서 구현하면 0.8939966636005579라는 결과가 나옵니다. 0.8939966636005579가 나왔다면 왜 그런지, 그리고 이를 어떻게 해야 제대로 사용할 수 있는지 구글 검색 등을 활용해서 알아보고 코드를 수정하세요</li>
</ol>
</blockquote>
<h4 id="정답">정답</h4>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/fab95063-f5ea-44a2-a4d7-375160548e49/image.png" alt=""> </p>
<h4 id="결과">결과<img src="https://velog.velcdn.com/images/ji0_0s/post/e206395d-89f7-453e-95de-6d08553f7f11/image.png" alt=""></h4>
<p><code>console.log(Math.sin(degree))</code>의 결과는 <code>0.8939966636005579</code>이다. <code>Math.sin</code>은 라디안값으로 계산되기 때문이다. 라디안값이란 반지름과 호의 길이가 같을 때의 중심각의 크기를 말하며, 라디안값을 평소 우리가 아는 값으로 바꿔주려면 <code>각도 * Math.PI / 180</code>을 해주어야 한다.</p>
<hr>

<p>6단원도 끝이났다!! 어렵기도 하고 처음 들어보는 공식들도 있어서 시간이 오래걸렸지만 모르는 것들을 알아가는게 재미있었다❤️</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[혼공JS [4주차]]]></title>
            <link>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5JS-4%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5JS-4%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Wed, 01 Feb 2023 15:07:55 GMT</pubDate>
            <description><![CDATA[<h3 id="🐤기본미션">🐤기본미션</h3>
<p>p. 202 &lt;윤년을 확인하는 함수 만들기&gt; 예제를 실행하여 2022년이 윤년인지 확인하는 결과 인증하기</p>
<blockquote>
</blockquote>
<p>윤년은 4와 400으로는 나누어 떨어지며 100으로는 나누어 떨어지지 않는 년도이다.</p>
<pre><code class="language-javascript">function isLeapYear(year) {
  return (year % 4 === 0) &amp;&amp; (year % 100 !== 0) || (year % 400 === 0)
}
//출력
console.log(`2020년은 윤년일까? === ${isLeapYear(2020)}`)
console.log(`2010년은 윤년일까? === ${isLeapYear(2010)}`)
console.log(`2000년은 윤년일까? === ${isLeapYear(2000)}`)
console.log(`1900년은 윤년일까? === ${isLeapYear(1900)}`)</code></pre>
<p>정답 👉🏼<img src="https://velog.velcdn.com/images/ji0_0s/post/f050b740-9aa4-4698-9648-35932945229e/image.png" alt=""></p>
<h4 id="매개변수로-숫자를-넣어준-뒤-그-숫자가-윤년이면-true를-윤년이-아니면-false를-반환해주었다">매개변수로 숫자를 넣어준 뒤 그 숫자가 윤년이면 true를 윤년이 아니면 false를 반환해주었다.</h4>
<hr>

<h3 id="😎-선택미션">😎 선택미션</h3>
<p>p. 240 확인 문제 1번 풀고, 풀이 과정 설명하기</p>
<blockquote>
<ol>
<li>filter함수의 콜백 함수 부분을 채워서 ① 홀수만 추출, ② 100 이하의 수만 추출, ③ 5로 나눈 나머지가 0인 수만 추출해주세요. 그리고 코드의 실행 결과를 적어보세요.</li>
</ol>
</blockquote>
<pre><code class="language-javascript">// 변수를 선언합니다
 let numbers = [273, 25, 75, 52, 103, 32, 57, 24, 76]
//처리합니다
&lt;                            빈칸                                &gt;
//출력합니다
console.log(numbers)</code></pre>
<h4 id="①-홀수만-추출">① 홀수만 추출</h4>
<pre><code class="language-javascript">numbers = numbers.filter(function(value){
  return value % 2 === 1})
}</code></pre>
<h4 id="②-100-이하의-수만-추출">② 100 이하의 수만 추출</h4>
<pre><code class="language-javascript">numbers = numbers.filter((x) =&gt; x&lt;=100)</code></pre>
<h4 id="③-5로-나눈-나머지가-0인-수만-추출">③ 5로 나눈 나머지가 0인 수만 추출</h4>
<pre><code class="language-javascript">numbers = numbers.filter((x) =&gt; x % 5 === 0)</code></pre>
<p>정답 👉🏼 <img src="https://velog.velcdn.com/images/ji0_0s/post/6b9275de-832a-4d7f-9567-15e2a72836ef/image.png" alt=""></p>
<h4 id="홀수이며-5의-배수이고-100-이하인-수는-25와-75이다">홀수이며 5의 배수이고, 100 이하인 수는 25와 75이다.</h4>
<hr>
갈수록 어려워지지만 곧 혼공단 완주라는 생각에 열심히 하게 되는 것 같다! 다음 Chapter가 객체라 어려울 것 같지만 차근차근하면 할 수 있을 것 같다😊


]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공JS] 3주차]]></title>
            <link>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5JS-3%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5JS-3%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Wed, 18 Jan 2023 06:40:07 GMT</pubDate>
            <description><![CDATA[<h3 id="🐤기본미션">🐤기본미션</h3>
<p>비파괴적 처리와 파괴적 처리의 의미와 장단점 설명하기</p>
<blockquote>
</blockquote>
<h3 id="비파괴적-처리와-파괴적-처리">비파괴적 처리와 파괴적 처리</h3>
<p>비파괴적 처리와 파괴적 처리는 처리 후 원본 상태 변화에 따라 구분된다.
<strong>비파괴적 처리</strong>는 처리 후에 원본 내용이 변경되지 않는 방식이고, <strong>파괴적 처리</strong>는 처리 후에 원본 내용이 변경되는 방식이다.</p>
<h4 id="비파괴적-처리">비파괴적 처리</h4>
<pre><code class="language-javascript">// 변수 선언
&gt; const a = &#39;안녕&#39;
&gt; const b = &#39;하세요&#39;
// 문자열 연결 변수 c
&gt; const c = a + b
// 결과
&gt; c
&quot;안녕하세요&quot;
&gt; a
&quot;안녕&quot;
&gt; b
&quot;하세요&quot;
// a와 b의 내용이 변경되지 않았다</code></pre>
<h4 id="파괴적-처리">파괴적 처리</h4>
<pre><code class="language-javascript">// 변수 선언
&gt; const array = [&quot;사과&quot;, &quot;배&quot;, &quot;바나나&quot;]
// array배열에 &quot;귤&quot; 추가
&gt; array.push(&quot;귤&quot;)
// 결과
&gt; array
(4) [&quot;사과&quot;, &quot;배&quot;, &quot;바나나&quot;, &quot;귤&quot;]
// array의 내용이 변경되었다</code></pre>
<blockquote>
</blockquote>
<h3 id="비파괴적-처리와-파괴적-처리의-장단점">비파괴적 처리와 파괴적 처리의 장단점</h3>
<p><strong>파괴적 처리</strong>는 메모리를 절약할 수 있다는 장점이 있지만 원본이 사라지기 때문에 위험할 수 있다.
과거에는 컴퓨터 메모리가 많이 부족했기 때문에 대부분 메모리를 절약할 수 있는 파괴적 처리를 사용했다.
<strong>비파괴적 처리</strong>는 메모리를 많이 사용하지만 자료를 보호할 수 있다는 장점이 있다. 따라서 메모리가 여유로운 현대의 프로그래밍 언어와 라이브러리는 대부분 비파과적  처리를 한다.</p>
<hr>

<h3 id="😎-선택미션">😎 선택미션</h3>
<p>p. 173 확인 문제 3번 문제 풀고, 풀이 과정 설명하기</p>
<blockquote>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/98a83eff-1c96-434c-a386-355e400e2790/image.png" alt=""></p>
</blockquote>
<ol>
<li>strA라는 변수의 내용이 변경되지 않았기 때문에 비파괴적 처리이다.</li>
<li>arrayB라는 변수에 &quot;감&quot; 데이터가 추가되며 원본이 사라졌기 때문에  파괴적 처리이다.</li>
<li>arrayC의 값이 변경되지 않았기 때문에 비파괴적 처리이다.</li>
<li>strD의 값이 변경되지 않았기 때문에 비파괴적 처리이다.</li>
</ol>
<hr>

<p>시간이 빨리 지나 벌써 커리큘럼 중 절반이나 왔다🥳 이번 단원을 공부하며 <strong>for in 반복문</strong>과 <strong>for of 반복문</strong>이 헷갈렸는데 191p. 확인문제 1번 문제를 풀며 헷갈렸던 것을 이해했다. 다음 단원도 열심히 해야겠다!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공JS] 2주차]]></title>
            <link>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5JS-2%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5JS-2%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Thu, 12 Jan 2023 02:23:51 GMT</pubDate>
            <description><![CDATA[<h3 id="🐤기본미션">🐤기본미션</h3>
<p>p. 139 의 확인 문제 3번 문제 풀고 완전한 코드 만들어 비쥬얼 스튜디오 코드에서 실행 결과 인증하기</p>
<blockquote>
<ol start="3">
<li>빈칸에 어떤 논리 연산자가 들어가야 할까요?</li>
</ol>
</blockquote>
<pre><code class="language-javascript">if(x &gt; 10){
  if(x &lt; 20){
    console.log(&#39;조건에 맞습니다.&#39;)
  }
}</code></pre>
<pre><code class="language-javascript">if(x &gt; 10 ❔ x &lt; 20){
  console.log(&#39;조건에 맞습니다.&#39;)
}</code></pre>
<h4 id="정답-">정답 : &amp;&amp;</h4>
<p>중첩 조건문으로 두 개의 조건이 만족되어야지 
<code>console.log(&#39;조건에 맞습니다&#39;)</code> 라는 문장이 출력되기 때문에 논리곱 연산자를 넣어주어야 한다.</p>
<hr>

<h3 id="😎-선택미션">😎 선택미션</h3>
<p>p. 152의 &lt;태어난 연도를 입력받아 띠 출력하기&gt; 예제 실행하여 본인의 띠 출력한 화면 캡처하기</p>
<blockquote>
</blockquote>
<h3 id="코드">코드 &gt;</h3>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/0d8ec12f-fa3e-4aa0-a014-c0e1ba5ee61f/image.png" alt=""></p>
<h3 id="결과">결과 &gt;</h3>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/5bc3e556-beb0-4f71-9a00-08482e928fd2/image.png" alt=""><img src="https://velog.velcdn.com/images/ji0_0s/post/fbc4b8b4-7004-44a1-bec1-3abc7ebd0f9b/image.png" alt=""></p>
<h4 id="이-문제는-if문-뿐만-아니라-switch문으로도-해결할-수-있다">이 문제는 if문 뿐만 아니라 switch문으로도 해결할 수 있다.</h4>
<blockquote>
</blockquote>
<h3 id="코드-1">코드 &gt;</h3>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/ee93c697-1808-45c4-a96b-b8b29ad03a24/image.png" alt=""></p>
<h3 id="결과-1">결과 &gt;</h3>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/5bc3e556-beb0-4f71-9a00-08482e928fd2/image.png" alt=""><img src="https://velog.velcdn.com/images/ji0_0s/post/fbc4b8b4-7004-44a1-bec1-3abc7ebd0f9b/image.png" alt=""></p>
<h4 id="if문과-결과가-동일한-것을-확인할-수-있다">if문과 결과가 동일한 것을 확인할 수 있다.</h4>
<hr>
나는 자바를 배우고 있기 때문에 자바스크립트의 문법은 잘 이해가 가지만 상수(const)와 변수(let) 선언과 같은 조금 다른 부분이 아직 헷갈린다. 열심히 해서 자바스크립트를 손에 익혀야 할 것 같다😄


]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공JS] 1주차]]></title>
            <link>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5JS-1%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5JS-1%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 08 Jan 2023 13:02:03 GMT</pubDate>
            <description><![CDATA[<h3 id="🐤기본미션">🐤기본미션</h3>
<p>p. 54의 &lt;파일 만들고 저장해 실행하기&gt;에서 &#39;Hello World&#39; 출력하기
<img src="https://velog.velcdn.com/images/ji0_0s/post/c589fa5c-58bc-470b-9f77-a79db738ba92/image.png" alt="">
<strong>visual studio code에서 코드를 작성한 후, chrome에서 결과를 확인한다</strong>
<img src="https://velog.velcdn.com/images/ji0_0s/post/720f470d-1dff-4e16-9a68-742013c658d0/image.png" alt=""></p>
<hr>

<h3 id="😎-선택미션">😎 선택미션</h3>
<p>Ch.01(01-1) 확인 문제 1번 상세하게 적고 인증하기</p>
<p><strong>1. &quot;안녕하세요&quot;</strong>
<img src="https://velog.velcdn.com/images/ji0_0s/post/e9f5feb3-ca78-440c-ae30-b1cd0c2337dd/image.png" alt="">정상적으로 문자열이 출력된다</p>
<p><strong>2. console.log(&quot;안녕하세요&quot;)</strong>
<img src="https://velog.velcdn.com/images/ji0_0s/post/81ceac9d-fabf-4bc7-ab93-705c4513eb84/image.png" alt="">이것도 정상적으로 출력된다 undefined는 선언되지 않았다는 의미이다</p>
<p><strong>3. &quot;안녕하세요</strong>
<img src="https://velog.velcdn.com/images/ji0_0s/post/0066ae7e-82f0-428a-9bda-2ca27225320d/image.png" alt="">
&quot; 따옴표를 닫아주지 않았기 때문에 에러가 발생했다</p>
<hr>

<h4 id="저번-혼공단-8기를-경험해보고-좋았던-기억으로-혼공단-9기를-참여하게-되었다-저번에-했던-c와-다르게-js는-혼자-공부하는-자바-스크립트로-처음-배우기-때문에-더-꼼꼼하게-공부해야-할-것-같다☺️">저번 혼공단 8기를 경험해보고 좋았던 기억으로 혼공단 9기를 참여하게 되었다. 저번에 했던 C와 다르게 JS는 &#39;혼자 공부하는 자바 스크립트&#39;로 처음 배우기 때문에 더 꼼꼼하게 공부해야 할 것 같다☺️</h4>
]]></description>
        </item>
        <item>
            <title><![CDATA[자바 배열 예제]]></title>
            <link>https://velog.io/@ji0_0s/%EC%9E%90%EB%B0%94-%EB%B0%B0%EC%97%B4-%EC%98%88%EC%A0%9C</link>
            <guid>https://velog.io/@ji0_0s/%EC%9E%90%EB%B0%94-%EB%B0%B0%EC%97%B4-%EC%98%88%EC%A0%9C</guid>
            <pubDate>Tue, 13 Sep 2022 13:18:42 GMT</pubDate>
            <description><![CDATA[<h3 id="0100-사이의-점수를-10개-입력받고-그-중-최댓값을-구하세요">0~100 사이의 점수를 10개 입력받고 그 중 최댓값을 구하세요.</h3>
<blockquote>
<h4 id="전체코드">전체코드</h4>
</blockquote>
<pre><code class="language-java">import java.util.Scanner;
public class Array_max2 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int[] score = new int[10];
        //점수 입력 for문
        for(int i=0; i&lt;score.length; i++) {
            score[i] = scan.nextInt();            // score를 입력받는다
            while((score[i]&lt;0) || (score[i]&gt;100)){        // score의 범위가 잘못되었을 때
                System.out.println(&quot;숫자의 범위가 초과되었습니다.&quot;);        // 경고 메세지
                System.out.print(&quot;0~100까지의 숫자를 다시 입력해주세요 : &quot;);
                score[i] = scan.nextInt();        // 다시 입력함
            }
        }
        int max = score[0];
        //최대값을 구하는 for문
        for(int i=1; i&lt;score.length; i++) {
            if(max&lt;score[i]) {
                max=score[i];
            }
        }
        System.out.println(&quot;max = &quot; + max); 
    }
}</code></pre>
<h3 id="점수-입력-배열-선언-생성">점수 입력 배열 선언, 생성</h3>
<pre><code class="language-java">int[] score = new int[10];</code></pre>
<h3 id="점수-입력">점수 입력</h3>
<pre><code class="language-java">for(int i=0; i&lt;score.length; i++){
    score[i] = scan.nextInt();
    //여기까지는 점수의 범위를 고려하지 않고 짠 코드이다.
    //잘못된 범위를 입력했을 때 그 점수를 다시 입력하게 하는 코드를 짜보자
    while(score[i]&lt;0 || score[i]&gt;100){
           System.out.println(&quot;잘못된 점수를 입력하셨습니다.&quot;);
        System.out.print(&quot;0~100 사이의 점수를 입력해주세요&quot;);
        score[i] = scan.nextInt();
   }
}</code></pre>
<p><code>while (score[i] &lt; 0 || score[i] &gt; 100)</code> 
while문은 참일 때 문장들이 수행된다. 만약 0~100 밖의 숫자들이 입력되면 while문의 문장들을 수행한다.</p>
<p><code>System.out.println(&quot;잘못된 점수를 입력하셨습니다.&quot;);
 System.out.print(&quot;0~100 사이의 점수를 입력해주세요&quot;);</code>
<code>score[i] = scan.nextInt();</code>
경고 메세지를 출력한 뒤 잘못된 입력된 점수를 다시 입력받는다.</p>
<h3 id="max-초기화">max 초기화</h3>
<pre><code class="language-java">int max = score[0];</code></pre>
<p>max는 첫 번째 배열의 값으로 초기화 해준다.</p>
<h3 id="최댓값-구하기">최댓값 구하기</h3>
<pre><code class="language-java">for(int i=1; i&lt;score.length; i++) {
    if(max&lt;score[i]) {
        max=score[i];
    }
}
</code></pre>
<p>max, 즉 배열의 첫 번째 값부터 10번째 값을 비교하면서 max보다 큰 값이 있으면 그 값을 max에 넣어준다.</p>
<p>예를 들어 max의 값이 10이고 두 번재 배열의 값이 20이라면 두 번째 배열의 값이 max가 된다. 
max가 20이 된 상태에서 세 번째 배열의 값과 max를 비교한다. 만약 세 번째 배열의 값이 3이라면 max의 값은 20으로 유지된다. 
이러한 방법으로 마지막에 max에 가장 큰 값이 저장된다.</p>
<h3 id="최댓값-출력">최댓값 출력</h3>
<pre><code class="language-java">System.out.println(&quot;max = &quot; + max);</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공C] 6주차]]></title>
            <link>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5C-6%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5C-6%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 21 Aug 2022 07:44:20 GMT</pubDate>
            <description><![CDATA[<h2 id="혼공c-6주차🥳">혼공C 6주차🥳</h2>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/1513fb9b-da00-42fb-b848-141d1345c8f3/image.png" alt=""></p>
<hr>

<h3 id="😀기본미션">😀기본미션</h3>
<p>포인터의 핵심 내용을 정리하고 공유하기</p>
<blockquote>
<h4 id="메모리의-주소">메모리의 주소</h4>
</blockquote>
<ul>
<li>메모리는 우리가 데이터를 넣고 꺼내 ㅆ는 공간으로, 그 위치를 식별할 수 있어야 한다. 프로그램은 메모리의 위치를 주소 값으로 식별할 수 있다. 메모리의 값은 바이트 단위로 구분되며, 0부터 시작된다. 
예를 들어 int형 변수 a가 메모리 100번지부터 할당되었다면 100번지부터 103번지까지 4바이트에 걸쳐 할당된다.</li>
</ul>
<blockquote>
<h4 id="주소-연산자-">주소 연산자 : &amp;</h4>
</blockquote>
<ul>
<li>변수가 할당된 메모리 공간의 시작주소는 주소 연산자 &amp;로 알아볼 수 있다.
<img src="https://velog.velcdn.com/images/ji0_0s/post/4bebf82c-ce22-4963-b133-9b0ee3ef40fa/image.png" alt="">
위의 사진처럼 주소를 나타내는 %u와 주소 연산자 &amp;를 사용하여 변수의 주소값을 구할 수 있다.</li>
</ul>
<blockquote>
<h4 id="포인터와-간접-참조-연산자--">포인터와 간접 참조 연산자 : *</h4>
</blockquote>
<ul>
<li>메모리의 주소는 필요할 때마다 계속 주소 연산을 수행하는 것보다 한 번 구한 주소를 저장해서 사용하면 편리한데, 포인터가 변수의 메모리 주소를 저장하는 변수이다. 변수 앞에 *를 붙여주면 포인터를 사용할 수 있다.
<img src="https://velog.velcdn.com/images/ji0_0s/post/c853bec0-3cfa-40b9-8b26-576c8dff3f7e/image.png" alt="">
_변수 a와 포인터 *pa를 선언하였다.
pa에 a의 주소값을 넣고, 포인터로 변수 a에 10을 대입하였다. 
pa = &amp;a에서 pa는 a의 주소값을 갖게 되었고, *pa = 10;에서 pa가 a의 주소값을 가리키며 10을 대입했다. 따라서 *pa와 a는 10의 값을 갖게 되었다.</li>
</ul>
<h4 id="const를-사용한-포인터">const를 사용한 포인터</h4>
<ul>
<li>const는 예약어를 포인터에 사용하면 이는 가리키는 변수의 값을 바꿀 수 없다는 의미로, 변수에 사용하는 것과는 다른 의미를 가진다. 
즉, <code>*pa = 20;</code>과 같이 pa가 가리키는 변수는 pa를 간접참조하여 바꿀 수 없다는 것이다.</li>
</ul>
<blockquote>
<h4 id="포인터의-대입-규칙">포인터의 대입 규칙</h4>
</blockquote>
<ul>
<li>포인터는 가리키는 변수의 형태가 같을 때만 대입해야 한다.</li>
<li>형 변환을 사용한 포인터의 대입은 언제나 가능하다.</li>
</ul>
<blockquote>
<h4 id="포인터를-사용하는-이유">포인터를 사용하는 이유</h4>
</blockquote>
<ul>
<li>포인터를 사용하려면 추가적인 변수 선언이 필요하며 여러가지 연산을 수행해야 하므로 포인터를 일부러 즐겨 사용할 필요는 없다. 하지만 임베디드 프로그래밍을 할 때 메모리에 직접 겁근하는 경우나 동적 할당한 메모리를 사용하는 경우엔ㄴ 포인터가 반드시 필요하다.<ul>
<li>임베디드 프로그래밍 : 임베디드 시스템을 제어하기 위한 프로그램</li>
</ul>
</li>
</ul>
<hr>

<h3 id="😎추가-미션">😎추가 미션</h3>
<p>나만의 언어로 포인터 정리하기</p>
<h4 id="주소-연산자--변수의-주소를-알-수-있는-연산자">&amp;주소 연산자 : 변수의 주소를 알 수 있는 연산자</h4>
<h4 id="-포인터--변수의-위치를-가리키며-포인터가-주소를-가지고-있어-포인터로-값을-바꿀-수-있다-포인터의-크기는-컴파일러에-따라-다를-수-있으며-sizeof연산자로-확인한다-포인터는-가리키는-자료형이-일치할-때만-대입할-수-있다">* 포인터 : 변수의 위치를 가리키며 포인터가 주소를 가지고 있어 포인터로 값을 바꿀 수 있다. 포인터의 크기는 컴파일러에 따라 다를 수 있으며, sizeof연산자로 확인한다. 포인터는 가리키는 자료형이 일치할 때만 대입할 수 있다.</h4>
<hr>

<p>벌써 혼공학습단이 마지막주라니 아쉽기도 하고 후련하기도 하다.
포인터는 아직 어렵기 때문에 조금 더 공부를 할 것이다.
6주동안 열심히 혼공단 활동을 하면서 공부도 하고, 다른 사람들이 정리한 것들도 보면서 많이 배운 것 같다.🐣</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공C] 5주차]]></title>
            <link>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5C-5%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5C-5%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Fri, 12 Aug 2022 18:15:48 GMT</pubDate>
            <description><![CDATA[<h2 id="혼공c-5주차-미션">혼공C 5주차 미션!</h2>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/76e5d209-a0bd-4902-88d3-7712c1280ce3/image.png" alt=""></p>
<hr>

<h3 id="😀기본미션">😀기본미션</h3>
<h4 id="직접-정리한-키워드-공유하기">직접 정리한 키워드 공유하기</h4>
<blockquote>
<h3 id="배열이란">배열이란?</h3>
</blockquote>
<ul>
<li>같은 형태의 많은 데이터를 반복문으로 처리하기 위해서 메모리에 연속적으로 저장해놓고 쪼개서 사용하는 방법을 배열이라고 합니다.
예를 들어 과목을 변수로 선언한다면 kor, eng, math, science, social 등으로 변수를 선언해야 하는데 배열을 사용하면 위의 것들을 연속적으로 저장하여 편리하게 사용할 수 있다.</li>
</ul>
<blockquote>
<h3 id="배열의-선언">배열의 선언</h3>
</blockquote>
<ul>
<li>배열은 <code>자료형 배열명[요소 개수];</code> 로 선언한다.
int ary[5]는 int형 변수 5개를 선언한 것이므로 20바이트의 연속된 메모리가 할당된다.</li>
</ul>
<blockquote>
<h3 id="배열의-사용">배열의 사용</h3>
</blockquote>
<ul>
<li>배열을 선언할 때와 배열 요소를 사용할 때 [ ]안의 숫자는 의미가 다르다. 선언할 때는 배열 요소의 전체 개수를 표시하고, 사용할 때는 각 요소가 배열에서 몇 번째에 있는지를 의미한다. 배열에 값을 저장하지 않으면 쓰레기 값이 출력된다. 배열의 첨자가 사용 범위를 벗어나서도 안된다.</li>
</ul>
<blockquote>
<h3 id="배열-초기화">배열 초기화</h3>
</blockquote>
<ol>
<li>기본적인 초기화 방법
 int ary1[5] = {1,2,3,4,5};</li>
<li>초깃값이 배열 요소의 개수보다 적은 경우
 int ary2[5] = {1,2,3};
 이 경우, 남은 배열 요소는 0으로 채운다.</li>
<li>자동 초기화 기능
 int ary2[1000] = {0};</li>
<li>배열 요소가 생략된 형태
 int ary3[] = {1,2,3};
 이 경우, 컴파일러가 초깃값 개수만큼 배열 요소 개수를 정하고 저장 공간을 할당하고 초기화한다.</li>
<li>다른 타입
 double ary4[3] = {1.2, 2.3, 3.4};
 char ary5[3] = {&#39;f&#39;, &#39;l&#39;, &#39;y&#39;};</li>
</ol>
<blockquote>
<h3 id="배열과-반복문">배열과 반복문</h3>
</blockquote>
<ul>
<li>배열을 효과적으로 쓰기 위해 반복문을 쓴다. 
int score[5];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i = 0; i &lt; 5; i++)
scanf(&quot;%d&quot;, &amp;score[0]);                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
scanf(&quot;%d&quot;, &amp;score[1]);    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(&quot;%d&quot;, score[i]);
scanf(&quot;%d&quot;, &amp;score[2]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=====&gt;    &nbsp;&nbsp;&nbsp;&nbsp;}
scanf(&quot;%d&quot;, &amp;score[3]);
scanf(&quot;%d&quot;, &amp;score[4]);</li>
</ul>
<blockquote>
<h3 id="sizeof-연산자">sizeof 연산자</h3>
</blockquote>
<ul>
<li>int score[5]
sizeof(score)은 20byte이다.
sizeof(score) / sizeof(score[0])은 20 / 4로 5이다. 
이렇게 sizeof는 배열 요소의 개수를 계산할 때 쓰인다.</li>
</ul>
<blockquote>
<h3 id="char형-배열의-선언과-초기화">char형 배열의 선언과 초기화</h3>
</blockquote>
<ul>
<li>char형 배열을 선언할 때는 반드시 저장할 문자열의 길이보다 최소한 하나 이상 크게 배열을 선언해야 한다.
이렇게 여분의 공간이 필요한 이유는 널 문자(\0)를 저장하기 위해서이다.</li>
</ul>
<blockquote>
<h3 id="문자열-대입">문자열 대입</h3>
</blockquote>
<ul>
<li>char형 배열이 문자열을 저장하는 변수의 역할을 하므로 초기화된 이후에도 얼마든지 새로운 문자열을 저장할 수 있다. 단, 문자열의 길이가 다를 수 있으므로 일반 변수처럼 대입 연산자를 사용하는 것은 불가하다. 이때 strcpy 함수를 사용한다. strcpy 함수는 char형 배열에 새로운 문장려을 저장하는 함수로, 저장할 문자열의 길이를 파악하여 딱 그 길이만큼만 char형 배열에 복사한다. 문자열 끝에 널 문자도 자동으로 붙여준다.
char str1[100];
strcpy(str1, &quot;hello&quot;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// str1에 hello가 복사됨</li>
</ul>
<blockquote>
<h3 id="문자열-전용-입출력-함수--gets-puts">문자열 전용 입출력 함수 : gets, puts</h3>
<p>char str[80];
gets(str);
puts(str);
위의 코드가 출력이 될 때 gets는 scanf, puts는 printf와 비슷한 역할을 한다.</p>
</blockquote>
<hr>

<h3 id="😎추가-미션">😎추가 미션</h3>
<h4 id="널-문자의-정의-용도와-표기법-공유하기">널 문자의 정의, 용도와 표기법 공유하기</h4>
<ul>
<li>널 문자 : 0인 문자를 널 문자라고 한다. <code>\0</code>
만약 배열 요소의 개수보다 실제 값의 개수가 적다면 나머지 배열 요소는 쓰레기 값으로 출력이 된다. 이 때 마지막 값에 널 문자를 넣는다면 쓰레기 값은 출력되지 않는다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/f0e3d12d-1331-4fa3-992f-80c9c8d3791b/image.png" alt="">
널 문자를 넣지 않았을 때 쓰레기 값이 출력된다.
<img src="https://velog.velcdn.com/images/ji0_0s/post/0ae03ab7-208f-425c-8fa2-be873c8d39f4/image.png" alt="">
널 문자를 넣었을 때는 의도한대로 문자가 출력된다.</p>
<p>널 문자의 표기법은 <code>\0</code>이며 \0으로도 표기된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공C] 4주차]]></title>
            <link>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5C-4%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5C-4%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Wed, 27 Jul 2022 14:38:49 GMT</pubDate>
            <description><![CDATA[<h2 id="혼공c-4주차-미션">혼공C 4주차 미션</h2>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/75bbaded-a4be-44d1-af65-6be43f601391/image.png" alt=""></p>
<hr>

<h3 id="함수란">함수란?</h3>
<p>함수란 기능을 수행하는 코드 단위를 말한다. 지금까지 사용해왔던 main함수가 대표적인 함수이다.
printf와 scanf처럼 특정 기능을 미리 약속하고 프로그램에서 바로 사용할 수 있게 구현되어 있는 함수를 <strong>표준 라이브러리 함수</strong>라고 한다.</p>
<h3 id="함수는-어떻게-만들까">함수는 어떻게 만들까?</h3>
<p><strong>1. 함수 정의</strong> 
함수를 사용하기 위해서는 먼저 함수를 정의해주어야 한다. 함수를 정의할 때에는 함수명, 매개변수, 반환형으로 이루어진 함수원형을 가지고 선언한다. 함수명은 함수기능에 적합한 이름(sum, odd...)으로 정한다. 매개변수는 함수가 기능을 수행하는 데 필요한 데이터(int, double...)로 넣어준다. 반환형은 함수가 수행된 후의 결과를 바탕으로 정해준다</p>
<pre><code class="language-c">반환형 함수명(매개변수1, 매개변수2)
{
    //함수가 수행하는 명령, 결괏값을 돌려보냄
}</code></pre>
<p><strong>2. 함수 호출</strong>
함수를 만들었으면 그 함수를 호출해서 써야한다. 함수를 호출 할 때는 함수의 이름(인수) 형태로 호출한다. [sum(a,b)  , sum(30,40)........]
입력된 인수는 호출된 함수의 매개변수에 복사되어 사용된다.
호출된 함수가 실행을 끝내면 return문을 사용해서 반환을 한다.(return 반환값;)</p>
<pre><code class="language-c">int sum(int x, int y)
{
    int temp;
    temp = x+y;

    return temp;
}</code></pre>
<p><strong>3. 함수 선언</strong>
함수 선언은 컴파일러가 새로 만든 함수를 인식할 수 있도록 알리는 역할을 한다. 함수 원형에 세미콜론을 붙이면 함수 선언을 한 것이다.
<code>int sum(int x, int y)</code> -&gt; <code>int sum(int x, int y);</code>
함수 원형 -------------------&gt; 함수 선언</p>
<hr>

<h3 id="😀기본미션">😀기본미션</h3>
<h4 id="함수의-유형을-정리하여-공유하기">함수의 유형을 정리하여 공유하기</h4>
<blockquote>
<h4 id="매개변수가-없는-함수">매개변수가 없는 함수</h4>
</blockquote>
<ul>
<li>키보드로 수를 입력하는 함수는 호출한 함수로부터 값을 받을 필요가 없으므로 매개변수도 필요하지않다.
<code>int num(void)</code>  &lt;-  함수원형이다</li>
</ul>
<blockquote>
<h4 id="반환값이-없는-함수">반환값이 없는 함수</h4>
</blockquote>
<ul>
<li>데이터를 받아서 단지 화면에 출력하는 함수라면 특별히 반환값이 필요하지 않다. 그럴 때는 반환형에 void를 넣어준다.
<code>void print(char ch, int count);</code> &lt;- 함수 선언</li>
</ul>
<blockquote>
<h4 id="매개변수와-반환값-모두-없는-함수">매개변수와 반환값 모두 없는 함수</h4>
</blockquote>
<ul>
<li>매개변수와 반환값이 모두 없는 함수도 있다. 예를 들어 일정한 문자열을 여러 번 출력하는 함수라면 매개변수와 반환값이 모두 필요 없다. 이때, 매개변수와 반환형에 모두 void를 쓴다.
<code>void print(void);</code> &lt;- 함수 선언</li>
</ul>
<blockquote>
<h4 id="재귀호출-함수">재귀호출 함수</h4>
</blockquote>
<ul>
<li>재귀호출 함수란 자기 자신을 호출하는 함수이다.<pre><code class="language-c">void fruit(void)
{
  printf(&quot;apple\n&quot;);
  fruit();
}</code></pre>
fruit함수를 호출해 실행하면서 계속해서 자기 자신을 호출한다.
재귀호출 함수는 최초 호출한 곳이 아닌 전에 호출했던 곳으로 돌아간다.</li>
</ul>
<hr>

<h3 id="😎추가-미션">😎추가 미션</h3>
<h4 id="p-198-7-5-직접-해보는-손코딩-예제-테스트-후-apple-출력하고-종료한-화면-캡쳐하기-왜-무한대로-출력되지-않는지-이유에-대해-생각하고-정리해보기">p. 198 7-5. 직접 해보는 손코딩 예제 테스트 후 apple 출력하고 종료한 화면 캡쳐하기 왜 무한대로 출력되지 않는지 이유에 대해 생각하고 정리해보기</h4>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/380866d4-e35f-4db5-89c5-ff356bd3c643/image.png" alt="">
<img src="https://velog.velcdn.com/images/ji0_0s/post/a1e80b64-40ea-4a51-83a7-8a3b1c6cc1b6/image.png" alt="">
재귀호출 함수를 써서 자기 자신을 계속 호출하기 때문에 무한으로 출력될 것이라고 예상을 했겠지만 프로그램은 종료된다.
그 이유는 함수가 호출만으로도 일정 크기의 메모리를 사용하기 때문이다.
함수를 계속 출력하면 프로그램 하나가 쓸 수 있는 메모리를 모두 사용하게 된다. 그 때, 프로그램이 강제 종료된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공C] 3주차]]></title>
            <link>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5C-3%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5C-3%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Thu, 21 Jul 2022 14:30:49 GMT</pubDate>
            <description><![CDATA[<h2 id="혼공c-3주차-미션">혼공C 3주차 미션</h2>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/e9e847a4-44b6-4ea1-97d2-0efe4e8f0517/image.png" alt=""></p>
<hr>

<h3 id="😀기본미션">😀기본미션</h3>
<h4 id="혼공-용어-노트에-용어-추가-등-노트-활용하고-공유하기">혼공 용어 노트에 용어 추가 등 노트 활용하고 공유하기</h4>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/2e9068eb-683b-488a-8286-aa6a6bd38c2e/image.png" alt="">
<img src="https://velog.velcdn.com/images/ji0_0s/post/282dcaa9-096b-4f84-a274-f36180f67221/image.png" alt="">
<img src="https://velog.velcdn.com/images/ji0_0s/post/c8c7f74f-8fd4-4eb8-8d21-0362900b71eb/image.png" alt="">
<img src="https://velog.velcdn.com/images/ji0_0s/post/ea89d56b-484f-420b-94ea-5ae6795be954/image.png" alt=""></p>
<hr>

<h3 id="😎추가-미션">😎추가 미션</h3>
<h4 id="p-123-크리스마스-소개팅-예문-if-문-손코딩-인증샷-또는-실행-화면-캡쳐하기">p. 123 크리스마스 소개팅 예문 if 문 손코딩 인증샷 또는 실행 화면 캡쳐하기</h4>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/442b6660-a3f0-4ef1-a8f7-a4ec0f021190/image.png" alt="">
<img src="https://velog.velcdn.com/images/ji0_0s/post/7f7655ba-be84-455c-b5a3-8e5c68d6dd83/image.png" alt="">
<img src="https://velog.velcdn.com/images/ji0_0s/post/6753cff2-e2c2-4333-9871-541e48c353fa/image.png" alt=""></p>
<p>int형 변수를 하나 선언하여 여자친구 여부를 묻는다.
if 조건문에 여자친구가 없으면 소개팅을 주선하고, 그게 아니라면 소개팅을 주선하지 않는다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] 369게임 짜보기]]></title>
            <link>https://velog.io/@ji0_0s/Java-369%EA%B2%8C%EC%9E%84-%EC%A7%9C%EB%B3%B4%EA%B8%B0</link>
            <guid>https://velog.io/@ji0_0s/Java-369%EA%B2%8C%EC%9E%84-%EC%A7%9C%EB%B3%B4%EA%B8%B0</guid>
            <pubDate>Wed, 20 Jul 2022 02:15:13 GMT</pubDate>
            <description><![CDATA[<h4 id="1부터-100까지의-숫자-중에-1의-자리-숫자가-369인-경우에-x로-표시하고-10단위로-줄바꿈을-하는-프로그램을-만들어보자">1부터 100까지의 숫자 중에 1의 자리 숫자가 3,6,9인 경우에 &#39;X&#39;로 표시하고 10단위로 줄바꿈을 하는 프로그램을 만들어보자.</h4>
<hr>

<p><img src="https://velog.velcdn.com/images/ji0_0s/post/57e49aac-5a23-4cb3-b969-3e2727889250/image.png" alt="">
<img src="https://velog.velcdn.com/images/ji0_0s/post/44eec95f-503b-44d6-8226-c3944d15800a/image.png" alt=""></p>
<p>먼저 1부터 100까지 순서대로 출력하는 코드를 짠다.</p>
<hr>

<p><img src="https://velog.velcdn.com/images/ji0_0s/post/5f28dbc9-08a9-452b-b4e3-be56ea5e0b07/image.png" alt="">
그 후 만약 일의 자리가 3의 배수이면 X를, 3의 배수가 아니면 그냥 숫자를 출력하는 조건문을 만들어준다.
하지만 이 문장을 실행해보면 10,20,30... 10의 배수까지도 X로 출력되는 것을 볼 수 있다. 이것은 <code>(i%10)%3==0</code> 즉, i를 10으로 나눈 나머지를 3으로 나누었을 때 나누어 떨어지는 수가 있을 때 X를 출력하라는 것인데,
10의 배수는 10으로 나누었을 때 나머지가 0이 되고, 0%3은 당연히 0이 되므로 10의 배수들도 X로 출력되는 것이다.
이 문제를 해결하기 위해서는 i가 10의 배수일 때 출력할 것을 조건문으로 만들어 주어야 한다.</p>
<hr>

<p><img src="https://velog.velcdn.com/images/ji0_0s/post/69e414af-b638-4b4d-b35d-0423bd871812/image.png" alt="">
기존의 코드 앞쪽에 i가 10의 배수이면 그냥 i를 출력하라는 코드를 추가했다. 하지만 이렇게 코드를 짠다면 
<img src="https://velog.velcdn.com/images/ji0_0s/post/2b5d760e-168b-4603-b1a8-0a75a9c1f408/image.png" alt="">
이런식으로 10의 배수에는 X와 숫자가 모두 출력되게 된다.
이럴 때는, 두 번째 if문을 else if로 고쳐주면 된다.
<img src="https://velog.velcdn.com/images/ji0_0s/post/dc4abbf5-06da-4f6c-abc3-6427828aab85/image.png" alt="">
이제 정상적으로 나오는 것을 확인할 수 있다.</p>
<hr>

<p><img src="https://velog.velcdn.com/images/ji0_0s/post/a80a518e-5b07-4798-bf24-3d90f04a961c/image.png" alt="">
10단위로 줄바꿈을 한다는 조건을 만족시키기 위해 첫 번째 if문에 줄바꿈을 하라는 출력문을 추가해준다.</p>
<hr>

<p><img src="https://velog.velcdn.com/images/ji0_0s/post/ec0eb2ed-697c-417b-9e76-dea95afb12e6/image.png" alt="">
<img src="https://velog.velcdn.com/images/ji0_0s/post/47aa935f-8400-4c38-94ff-20f3bea5b3f4/image.png" alt="">
프로그램 완성이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공C] 2주차]]></title>
            <link>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5C-2%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@ji0_0s/%ED%98%BC%EA%B3%B5C-2%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 17 Jul 2022 00:33:31 GMT</pubDate>
            <description><![CDATA[<h2 id="혼공c-2주차-미션">혼공C 2주차 미션</h2>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/0bad12a7-17ed-4387-88b1-c11192c4e515/image.png" alt=""></p>
<hr>

<h3 id="기본미션😀">기본미션😀</h3>
<h3 id="03-1-변수-확인문제">03-1 변수 확인문제</h3>
<blockquote>
<h4 id="1-다음-자료형-중에서-실수형에-o표시를-하세요">1. 다음 자료형 중에서 실수형에 O표시를 하세요.</h4>
<p><code>float</code> <code>long</code> <code>char</code> <code>double</code> <code>int</code> <code>unsigned</code> <code>short</code>
        답 : <code>float</code> <code>double</code></p>
</blockquote>
<blockquote>
<h4 id="2-다음-프로그램의-실행결과를-예상해보세요">2. 다음 프로그램의 실행결과를 예상해보세요.</h4>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/a99d1b65-cf9a-496d-b627-12141dcb48a3/image.png" alt="">
처음에 a는 0에서 시작한다.
그 후 7번째 줄에서 a는 0+1로 1이 된다.
8번째 줄에서 a는 1+2로 3이 된다.
9번째 줄에서 a는 3+3으로 6이 된다.
따라서 결과는 a : 6이다.</p>
</blockquote>
<blockquote>
<h4 id="3-국어-영어-수학-점수를-저장할-변수를-선언하여-세-과목의-합을-구하고-세-과목의-점수와-총점을-출력하는-프로그램을-작성하세요">3. 국어, 영어, 수학 점수를 저장할 변수를 선언하여 세 과목의 합을 구하고 세 과목의 점수와 총점을 출력하는 프로그램을 작성하세요.</h4>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/8a333747-1e16-4749-a448-23336d513db9/image.png" alt="">
각 과목의 점수를 70, 80, 90으로 초기화 한 후 tot에는 세 과목의 점수를 합한다. 각 과목의 점수와 tot을 출력하면 세 과목의 점수와 총점을 출력할 수 있다.</p>
</blockquote>
<h3 id="03-2-데이터-입력-확인문제">03-2 데이터 입력 확인문제</h3>
<blockquote>
<h4 id="1-다음과-같이-변수가-선언되어-있을-때-scanf-함수의-사용법이-옳은-것을-고르세요">1. 다음과 같이 변수가 선언되어 있을 때, scanf 함수의 사용법이 옳은 것을 고르세요.</h4>
<p><code>char ch;</code><br><code>short sh;</code>
<code>int in;</code>
<code>float ft;</code>
<code>double db;</code>
    1. scanf(&quot;<del>%d</del>&quot;, &amp;ch);    -- char형은 %c로 출력한다.
    2. scanf(&quot;<del>%d</del>&quot;, &amp;sh); -- short형은 %hd로 출력한다.
    3.scanf(&quot;%d%f&quot;, &amp;in, &amp;ft); -- 답
    4.scanf(&quot;<del>%f</del>&quot;, &amp;db); -- double형은 %lf로 출력한다.</p>
</blockquote>
<blockquote>
<h4 id="2-다음-프로그램의-빈칸에-알맞은-내용을-채워보세요">2. 다음 프로그램의 빈칸에 알맞은 내용을 채워보세요.</h4>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/17ad5024-0907-4a49-a407-3d5c4ed709db/image.png" alt="">
빈칸1에는 문자열의 fruit를 입력받을 것이기 때문에 &amp;를 생략하고 fruit를 써준다.
빈칸2에는 int 타입의 cnt를 입력받을 것이기 때문에 &amp;cnt로 입력을 받는다.</p>
</blockquote>
<blockquote>
<h4 id="3-키보드로-문자를-입력하여-아스키-코드-값을-출력하는-프로그램을-작성하세요-어떤-문자가-입력될지는-실행할-때-결정합니다">3. 키보드로 문자를 입력하여 아스키 코드 값을 출력하는 프로그램을 작성하세요. 어떤 문자가 입력될지는 실행할 때 결정합니다.</h4>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/11d61432-17d8-4d06-bbd8-ca8d3540d6f5/image.png" alt="">
먼저 scanf(&quot;%c&quot;, &amp;ch);로 문자를 입력받는다.
그 후 printf(&quot;%c문자의 아스키 코드 값은 %d입니다.&quot;, ch,ch);로 문자열을 정수로 출력하여 아스키 코드값을 출력해준다.</p>
</blockquote>
<h3 id="04-1-산술-연산자-관계-연산자-논리-연산자-확인문제">04-1 산술 연산자, 관계 연산자, 논리 연산자 확인문제</h3>
<blockquote>
<h4 id="1--40과-12의-덧셈-곱셈-나눗셈을-한-값을-소수점-이하-첫째-자리까지-출력하세요">1.  4.0과 1.2의 덧셈, 곱셈, 나눗셈을 한 값을 소수점 이하 첫째 자리까지 출력하세요.</h4>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/9930b8da-96b3-4ec9-96df-b0f293cf73ec/image.png" alt="">
double형은 %lf로 출력한다. 소수점 이하 첫째 자리까지 출력하고 싶으면 %.1을 사용하면 된다.</p>
</blockquote>
<blockquote>
<h4 id="2-두-과목의-점수를-입력하여-평균을-출력하는-프로그램을-작성하세요-평균은-소수점-이하-첫째-자리까지-출력하세요">2. 두 과목의 점수를 입력하여 평균을 출력하는 프로그램을 작성하세요. 평균은 소수점 이하 첫째 자리까지 출력하세요.</h4>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/3071fb6a-7b40-4ea2-bbfb-fc58c0d21747/image.png" alt="">
scanf를 통해 두 과목의 점수를 입력받는다.
평균은 %.1lf로 출력하여 결과값을 얻는다.</p>
</blockquote>
<blockquote>
<h4 id="3-태희가-신청한-전체-학점과-평점을-계산하여-신청-학점이-10학점-이상이고-평점-평균이-40을-넘는-경우-1을-출력하고-그렇지-않으면-0을-출ㄹ겨하는-프로그램을-작성하세요-태희가-이전-학기에-신청한-과목당-학점과-얻은-점수는-아래와-같습니다">3. 태희가 신청한 전체 학점과 평점을 계산하여 신청 학점이 10학점 이상이고 평점 평균이 4.0을 넘는 경우 1을 출력하고, 그렇지 않으면 0을 출ㄹ겨하는 프로그램을 작성하세요. 태희가 이전 학기에 신청한 과목당 학점과 얻은 점수는 아래와 같습니다.</h4>
</blockquote>
<ul>
<li>국어-3학점-3.8</li>
<li>영어-5학점-4.4</li>
<li>수학-4학점-3.9
<img src="https://velog.velcdn.com/images/ji0_0s/post/81a93862-7e49-43ba-a86f-4082699d4ded/image.png" alt="">
학점과 평점을 초기화한다. 학점과 평점을 곱하고 credits으로 나눠서 평균을 구한다.  res에 연산결과가 참이면 1을, 거짓이면 0을 저장하여 출력한다.</li>
</ul>
<h3 id="04-2-그-외-유용한-연산자-확인문제">04-2 그 외 유용한 연산자 확인문제</h3>
<blockquote>
<h4 id="1-short형과-long형의-자료형의-크기를-비교하여-크기가-큰-자료형이-무엇인지-출력하세요">1. short형과 long형의 자료형의 크기를 비교하여 크기가 큰 자료형이 무엇인지 출력하세요.</h4>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/a75f411d-7a8d-45f0-b54a-42cdd8a0dba6/image.png" alt="">
먼저 sizeof연산자를 활용하여 short형과 long형의 크기를 비교한다. 
7번째 줄에서의 결과가 1이기 때문에 출력할 때에 삼항연산자를 활용하여 res가 1이면 long을 , 0이면 short를 출력하라는 출력문을 써준다.</p>
</blockquote>
<blockquote>
<h4 id="2-야구경기장의-좌석-수가-70개고-입장객-수가-65명일-때-입장률을-출력하세요">2. 야구경기장의 좌석 수가 70개고 입장객 수가 65명일 때 입장률을 출력하세요.</h4>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/4cd2312e-e1e4-41f8-a420-4e5ce0978f32/image.png" alt="">
출석률을 구할 때는 audience / seats * 100을 사용하면 된다. 
출력을 할 때는 %.1lf%%를 사용하는데 여기서 %%는 출력할 때 %로 출력된다.</p>
</blockquote>
<blockquote>
<h4 id="3-376시간은-몇-시간-몇-분-몇-초인지-출력하세요">3. 3.76시간은 몇 시간, 몇 분, 몇 초인지 출력하세요.</h4>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/531fdc94-9f81-4379-ab39-2508c7118478/image.png" alt="">
먼저 3.76시간에서 시간부분을 걸러내서 hour에 저장한다.
그 후 3.76에서 시간부분인 3을 빼내서 time에 0.76이 저장된다.
0.76에는 60.0을 곱하여 분으로 만들어준다.
이와 같은 방법을 반복하여 minute을 구해준다.
time에서 minute을 빼면 sec가 남는다. 
구해준 hour, minute, sec를 출력한다.</p>
</blockquote>
<hr>

<h3 id="😎추가-미션">😎추가 미션</h3>
<h4 id="ch04-도전-실전-문제-풀고-인증샷">Ch.04 도전 실전 문제 풀고 인증샷</h4>
<p><img src="https://velog.velcdn.com/images/ji0_0s/post/762bc349-c0c6-4166-aafc-bcbb803ba49b/image.png" alt="">
<img src="https://velog.velcdn.com/images/ji0_0s/post/cc09dc33-e83a-406d-8e45-987d57e11e70/image.png" alt="">
<img src="https://velog.velcdn.com/images/ji0_0s/post/9c7e52cf-9d13-4f2c-bc17-4e75cc18ed3a/image.png" alt=""></p>
]]></description>
        </item>
    </channel>
</rss>