<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>데굴데굴 굴러가는</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Thu, 04 Jun 2026 12:05:07 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>데굴데굴 굴러가는</title>
            <url>https://velog.velcdn.com/images/ye0n_s3/profile/57e78912-a100-4ce1-ac3a-6f7b17456bf6/image.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. 데굴데굴 굴러가는. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/ye0n_s3" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[DBP] DB 프로젝트 - 반려동물 관리 웹]]></title>
            <link>https://velog.io/@ye0n_s3/DBP-DB-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EB%B0%98%EB%A0%A4%EB%8F%99%EB%AC%BC-%EA%B4%80%EB%A6%AC-%EC%9B%B9</link>
            <guid>https://velog.io/@ye0n_s3/DBP-DB-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EB%B0%98%EB%A0%A4%EB%8F%99%EB%AC%BC-%EA%B4%80%EB%A6%AC-%EC%9B%B9</guid>
            <pubDate>Thu, 04 Jun 2026 12:05:07 GMT</pubDate>
            <description><![CDATA[<h1 id="🐶-반려동물-일정-관리-시스템">🐶 반려동물 일정 관리 시스템</h1>
<p>학교 수업 프로젝트로 제작한 웹 기반 반려동물 관리 시스템.</p>
<p>반려동물을 키우다 보면 예방접종, 병원 방문, 산책 일정, 건강 메모 등을 따로 관리해야 하는 경우가 많음. 이러한 정보를 한 곳에서 관리할 수 있도록 반려동물 등록, 일정 관리, 메모 작성 기능을 제공하는 웹 서비스를 제작.</p>
<hr>
<h2 id="프로젝트-제작-동기">프로젝트 제작 동기</h2>
<p>반려동물을 키우는 사람들은 다양한 일정을 관리해야 함.</p>
<ul>
<li>예방접종 날짜</li>
<li>병원 방문 일정</li>
<li>미용 예약</li>
<li>건강 상태 기록</li>
<li>특이사항 메모</li>
</ul>
<p>하지만 메모장이나 캘린더에 따로 관리하는 경우가 많아 정보를 한 번에 확인하기 어려움.</p>
<p>그래서 반려동물의 정보와 일정을 한 곳에서 관리할 수 있는 시스템을 제작.</p>
<hr>
<h2 id="개발-환경">개발 환경</h2>
<h3 id="backend">Backend</h3>
<ul>
<li>Node.js</li>
<li>Express</li>
</ul>
<h3 id="database">Database</h3>
<ul>
<li>MySQL</li>
</ul>
<h3 id="frontend">Frontend</h3>
<ul>
<li>HTML</li>
<li>CSS</li>
<li>JavaScript</li>
</ul>
<h3 id="기타-라이브러리">기타 라이브러리</h3>
<ul>
<li>Multer (이미지 업로드)</li>
</ul>
<hr>
<h2 id="프로젝트-구조">프로젝트 구조</h2>
<pre><code>pet-manager
 ├─ routes
 │   ├─ pets.js
 │   ├─ schedules.js
 │   └─ memos.js
 │
 ├─ public
 │   ├─ css
 │   └─ uploads
 │
 ├─ views
 │   ├─ index.html
 │   ├─ pet.html
 │   ├─ schedule.html
 │   └─ memo.html
 │
 ├─ db.js
 └─ server.js</code></pre><hr>
<h2 id="데이터베이스-설계">데이터베이스 설계</h2>
<p><img src="https://velog.velcdn.com/images/ye0n_s3/post/852fcad8-78ec-4a09-b0c5-15343287d0a8/image.png" alt=""></p>
<h3 id="pet-테이블">pet 테이블</h3>
<p>반려동물 정보를 저장한다.</p>
<table>
<thead>
<tr>
<th>컬럼명</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td>id</td>
<td>반려동물 ID</td>
</tr>
<tr>
<td>name</td>
<td>이름</td>
</tr>
<tr>
<td>species</td>
<td>종</td>
</tr>
<tr>
<td>age</td>
<td>나이</td>
</tr>
<tr>
<td>gender</td>
<td>성별</td>
</tr>
<tr>
<td>photo</td>
<td>사진 경로</td>
</tr>
</tbody></table>
<hr>
<h3 id="schedule-테이블">schedule 테이블</h3>
<p>반려동물 일정을 저장한다.</p>
<table>
<thead>
<tr>
<th>컬럼명</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td>id</td>
<td>일정 ID</td>
</tr>
<tr>
<td>pet_id</td>
<td>반려동물 ID</td>
</tr>
<tr>
<td>title</td>
<td>일정명</td>
</tr>
<tr>
<td>date</td>
<td>일정 날짜</td>
</tr>
</tbody></table>
<hr>
<h3 id="pet_memo-테이블">pet_memo 테이블</h3>
<p>반려동물 관련 메모를 저장한다.</p>
<table>
<thead>
<tr>
<th>컬럼명</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td>id</td>
<td>메모 ID</td>
</tr>
<tr>
<td>pet_id</td>
<td>반려동물 ID</td>
</tr>
<tr>
<td>content</td>
<td>메모 내용</td>
</tr>
</tbody></table>
<hr>
<h2 id="주요-기능">주요 기능</h2>
<h3 id="1-반려동물-등록">1. 반려동물 등록</h3>
<p>사용자는 반려동물의 이름, 종, 나이, 성별을 입력하여 등록 가능.</p>
<p>또한 Multer를 사용하여 사진 업로드 기능도 구현.</p>
<h4 id="구현-내용">구현 내용</h4>
<pre><code class="language-javascript">upload.single(&quot;photo&quot;)</code></pre>
<p>업로드된 이미지는 uploads 폴더에 저장되며 데이터베이스에는 파일 경로가 저장된다.</p>
<hr>
<h3 id="2-일정-등록">2. 일정 등록</h3>
<p>반려동물별 일정을 등록 가능.
반려동물 ID, 일정명, 날짜 입력하여 등록 가능.
간단한 메모 등록 가능</p>
<p>예를 들어</p>
<ul>
<li>예방접종</li>
<li>병원 방문</li>
<li>산책</li>
<li>미용 예약</li>
</ul>
<p>등을 기록할 수 있다.</p>
<h4 id="구현-내용-1">구현 내용</h4>
<pre><code class="language-javascript">INSERT INTO schedule(pet_id, title, date)
VALUES (?, ?, ?)</code></pre>
<p>일정 데이터는 MySQL에 저장.</p>
<hr>
<h3 id="3-메모-작성">3. 메모 작성</h3>
<p>반려동물의 특이사항이나 건강 상태를 기록할 수 있도록 메모 기능을 구현.</p>
<h4 id="구현-내용-2">구현 내용</h4>
<pre><code class="language-javascript">INSERT INTO pet_memo(pet_id, content)
VALUES (?, ?)</code></pre>
<p>등록된 메모는 데이터베이스에 저장.</p>
<hr>
<h2 id="실행-화면">실행 화면</h2>
<h3 id="메인-화면">메인 화면</h3>
<p><img src="https://velog.velcdn.com/images/ye0n_s3/post/71bffd6e-7dd6-4aab-9730-173c21e75cac/image.png" alt=""></p>
<ul>
<li>반려동물 관리</li>
<li>일정 관리</li>
<li>메모 관리</li>
</ul>
<p>세 가지 메뉴를 통해 기능별 페이지로 이동 가능.</p>
<h3 id="반려동물-등록-화면">반려동물 등록 화면</h3>
<p><img src="https://velog.velcdn.com/images/ye0n_s3/post/c4f314a8-418b-42ef-9dc7-250ab46b582a/image.png" alt=""></p>
<ul>
<li>이름 입력</li>
<li>종 입력</li>
<li>나이 입력</li>
<li>성별 선택</li>
<li>사진 업로드</li>
</ul>
<h3 id="일정-등록-화면">일정 등록 화면</h3>
<p><img src="https://velog.velcdn.com/images/ye0n_s3/post/50cfcd12-5852-47cc-b28d-dd81e9702bb4/image.png" alt=""></p>
<ul>
<li>반려동물 ID 입력</li>
<li>일정명 입력</li>
<li>날짜 선택</li>
</ul>
<h3 id="일정-삭제-화면">일정 삭제 화면</h3>
<p><img src="https://velog.velcdn.com/images/ye0n_s3/post/c63ca034-7cc9-40ac-a2fe-dd4a3d28c321/image.png" alt=""></p>
<ul>
<li>일정 수정</li>
<li>일정 삭제</li>
</ul>
<h3 id="메모-작성-화면">메모 작성 화면</h3>
<p><img src="https://velog.velcdn.com/images/ye0n_s3/post/9dfb214f-960e-4bdd-b084-3915e4b2ec0d/image.png" alt=""></p>
<ul>
<li>반려동물 ID 입력</li>
<li>메모 작성</li>
</ul>
<h3 id="메모-수정-화면">메모 수정 화면</h3>
<p><img src="https://velog.velcdn.com/images/ye0n_s3/post/682a8ae6-c02e-48ec-b197-89274ee80ce3/image.png" alt=""></p>
<ul>
<li>메모 수정</li>
<li>메모 삭제</li>
</ul>
<hr>
<h2 id="개발하면서-어려웠던-점">개발하면서 어려웠던 점</h2>
<p>가장 어려웠던 부분은 데이터베이스와 서버를 연결하는 과정.</p>
<p>처음에는 HTML 화면에서 입력한 값이 데이터베이스에 저장되지 않아 원인을 찾는 데 시간이 걸렸다.</p>
<p>또한 이미지 업로드 기능을 구현하면서 Multer의 사용법을 익혀야 했고, 업로드된 파일의 경로를 데이터베이스에 저장하는 과정도 새롭게 배울 수 있었다.</p>
<hr>
<h2 id="느낀-점">느낀 점</h2>
<p>이번 프로젝트를 통해 웹 서비스가 동작하는 전체 과정을 경험할 수 있었다.</p>
<p>단순히 화면만 만드는 것이 아니라 사용자의 입력을 서버가 처리하고, 데이터베이스에 저장한 뒤 다시 조회하는 과정까지 직접 구현해볼 수 있었다.</p>
<p>특히 Express와 MySQL을 연동하여 CRUD 기능을 구현하면서 백엔드 개발에 대한 이해도를 높일 수 있었다.</p>
<hr>
<h2 id="추후-개선하고-싶은-기능">추후 개선하고 싶은 기능</h2>
<h3 id="1-반려동물-프로필-기능-강화">1. 반려동물 프로필 기능 강화</h3>
<ul>
<li>생년월일</li>
<li>체중 기록</li>
<li>예방접종 이력</li>
<li>병원 방문 기록</li>
</ul>
<p>등을 추가하여 건강 관리 기능을 강화하고 싶다.</p>
<h3 id="2-알림-기능">2. 알림 기능</h3>
<p>예방접종일이나 병원 예약일이 다가오면 알림을 보내주는 기능을 추가하고 싶다.</p>
<p>이를 통해 사용자가 중요한 일정을 놓치지 않도록 개선할 수 있을 것이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[인공지능 프라이버시] 5월 29일 실습]]></title>
            <link>https://velog.io/@ye0n_s3/%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5-%ED%94%84%EB%9D%BC%EC%9D%B4%EB%B2%84%EC%8B%9C-5%EC%9B%94-29%EC%9D%BC-%EC%8B%A4%EC%8A%B5</link>
            <guid>https://velog.io/@ye0n_s3/%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5-%ED%94%84%EB%9D%BC%EC%9D%B4%EB%B2%84%EC%8B%9C-5%EC%9B%94-29%EC%9D%BC-%EC%8B%A4%EC%8A%B5</guid>
            <pubDate>Fri, 29 May 2026 14:46:55 GMT</pubDate>
            <description><![CDATA[<h3><blockquote> ARX툴 이란? </blockquote></h3>
<h4> 데이터 익명화를 자동으로 최적화해주는 오픈소스 도구 </h4>

<h3><blockquote> 준식별자(Quasi-Identifier) 란? </blockquote></h3>
<h4> 조합하면 개인을 특정할 수 있는 속성들 </h4>
예를 들어, <br>
나이, 성별, 출생 국가. 각각만으로는 누군지 알지 어려움. <br>
하지만 세 가지를 동시에 알면 특정 개인이 누군지 좁혀질 수 있음. 이러한 속성들을 준식별자라고 부른다.

<p> 오늘 실습에서는 6개 속성을 준식별자로 다루었다.

<pre><code>- sex (성별)
- age (나이)
- race (인종)
- marital-status (결혼 상태)
- education (학력)
- native-country (출생 국가)</code></pre><p>  특히 오늘 실습한 것은 marital-status, education, native-country 부분었다. <br>
  <img src="https://velog.velcdn.com/images/ye0n_s3/post/cd88284a-0645-4110-8cb1-84ffa02e785b/image.png" alt=""></p>
<ul>
<li><p>group 3 : Married-AF-spouse, Married-civ-spouse, Married-spouse-absent</p>
</li>
<li><p>group 4 : Never-married, Divorced, Separated, Widowed <br>
결혼한 상태(3가지) 와 그 외의 상태(4가지) 로 2개 그룹으로 분류</p>
<p><img src="https://velog.velcdn.com/images/ye0n_s3/post/4f4cae36-606f-403b-b9be-ffef311e9e0e/image.png" alt=""></p>
</li>
<li><p>group 4 : Preschool, 1st-4th, 5th-6th, 7th-8th</p>
</li>
<li><p>group 5 : 9th, 10th, 11th, 12th, HS-grad </p>
</li>
<li><p>group 7 : Assoc-acdm, Assoc-voc, Bachelors, Doctorate, Masters, Some-college, Prof-school <br>
학력 수준에 따라 3개 그룹으로 분류</p>
<p><img src="https://velog.velcdn.com/images/ye0n_s3/post/e102b630-3eaf-4f36-a9e5-ed7069c22569/image.png" alt=""></p>
</li>
<li><p>group 1 : United-States</p>
</li>
<li><p>group 40 : 그 외 전체 국가 <br>
가장 비중이 큰 US(1가지) 와 그 외의 모든 국가(40가지) 로 2개 그룹으로 분류</p>
</li>
</ul>
<h3><blockquote> K-익명성(K-Anonymity) 란? </blockquote></h3>
<h4> 동일한 준식별자 조합을 가진 사람이 최소 K명 이상 되어야 한다는 조건 </h4>
예를 들어, <br>
5-anonymity 라면, 똑같은 조합의 행이 최소 5개는 있어야 함. <br>
5명 미만이면 익명화가 안 된 것으로 판단.

<h3><blockquote> 일반화(Generalization) 란? </blockquote></h3>
<h4> 구체적인 값을 더 넓은 범위로 바꾸는 것 </h4>
K-익명성을 만족시키기 위해 값을 점점 뭉개는 작업. <br>
각 속성마다 단계별 일반화 규칙(계층 구조)을 미리 정의해둠.

<pre><code>&lt; 나이 일반화 예시 &gt;
정확한 나이 → 5살 범위 → 10살 범위 → 20살 범위 → * (전체)
예) 22 → [20, 25[ → [20, 30[ → [20, 40[ → *

&lt; 성별 일반화 예시 &gt;
Female → {Female, Male}
Male   → {Female, Male}

&lt; 학력 일반화 예시 &gt;
9th, 10th, 11th, HS-grad → {중고등학교 전체}
Preschool, 1st~8th      → {초등 이하 전체}</code></pre><h3><blockquote> 실습 결과 </blockquote></h3>

<p><img src="https://velog.velcdn.com/images/ye0n_s3/post/c3ab6512-fbf6-4f6a-8642-669e4db9ca24/image.png" alt="">
변환 격자에서 [0, 5, 1, 1, 1, 1] 조합을 선택·적용
이는 native-country 속성을 가장 높은 수준(5단계)으로 일반화하고
나머지 속성은 최소 수준으로만 변환한 결과이다.</p>
<p><img src="https://velog.velcdn.com/images/ye0n_s3/post/eaad92c4-8f75-4e64-a1ef-fe0fb1dd1e5d/image.png" alt=""></p>
<p>위험도 분석 결과, 익명화 전에는 재식별 위험이 넓게 분포했지만
익명화 후에는 위험도가 20% 이하 구간으로 집중되어
전반적인 프라이버시 보호 수준이 크게 향상된 것을 확인할 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] Switch문]]></title>
            <link>https://velog.io/@ye0n_s3/Java-Switch</link>
            <guid>https://velog.io/@ye0n_s3/Java-Switch</guid>
            <pubDate>Wed, 15 Apr 2026 12:41:26 GMT</pubDate>
            <description><![CDATA[<h3 id="blockquote-java-switch문이란"><blockquote> Java Switch문이란?</h3>
<p>Switch문은 여러 조건 중 하나를 선택해서 실행할 때 사용하는 조건문.
쉽게 말해, &quot;이 값이면 이거 실행, 저 값이면 저거 실행&quot; 하는 분기 처리 도구</p>
<p>카톡으로 비유 해보자면,</p>
<ul>
<li>if문 : 상대방 상태 하나하나 확인하면서 답장</li>
<li>switch문 : 딱 정해진 상황에 맞춰 자동 답장</li>
</ul>
<p>즉, <strong>정해진 값에 따라 빠르게 선택하는 구조</strong></p>
<h3 id="blockquote-switch-기본-사용법"><blockquote> Switch 기본 사용법</h3>
<p>기본 구조 </p>
<pre><code>switch (변수) {
    case 값1:
        실행문;
        break;
    case 값2:
        실행문;
        break;
    default:
        실행문;
}</code></pre><p>하나씩 뜯어보자면,</p>
<ul>
<li>switch(변수) -&gt; 기준이 되는 값</li>
<li>case 값: -&gt; 특정 값일 때 실행</li>
<li>break -&gt; 실행 끝내고 switch 탈출</li>
<li>default -&gt; 아무 case도 해당 안 될 때 실행 (옵션)</li>
</ul>
<h3 id="blockquote-실행-흐름"><blockquote> 실행 흐름</h3>
<ol>
<li>num 값 확인</li>
<li>case랑 비교</li>
<li>맞는 case 선택</li>
<li>break 만나면 종료</li>
<li>없으면 default 실행</li>
</ol>
<h3 id="blockquote-break-안-쓰면-생기는-일"><blockquote> Break 안 쓰면 생기는 일</h3>
<pre><code>int num = 1; 
  switch (num) { 
      case 1: 
          System.out.println(&quot;1&quot;); 
      case 2: 
          System.out.println(&quot;2&quot;); 
  }</code></pre><p>출력 결과 : 
1
2</p>
<p>왜냐면? break 없으면 아래로 계속 실행됨 (fall-through)</p>
<h3 id="blockquote-switch-vs-if"><blockquote> Switch vs If</h3>
<table>
<thead>
<tr>
<th>구분</th>
<th>switch</th>
<th>if</th>
</tr>
</thead>
<tbody><tr>
<td>비교 방식</td>
<td>값 비교 (==)</td>
<td>범위, 조건 다양</td>
</tr>
<tr>
<td>가독성</td>
<td>깔끔함</td>
<td>복잡해질 수 있음</td>
</tr>
<tr>
<td>사용 추천</td>
<td>값이 딱 정해진 경우</td>
<td>조건이 복잡한 경우</td>
</tr>
</tbody></table>
<h3 id="blockquote-언제-쓰면-좋은지"><blockquote> 언제 쓰면 좋은지</h3>
<ul>
<li>메뉴 선택</li>
<li>등급 처리 (A, B, C)</li>
<li>숫자/문자 값 분기</li>
</ul>
<p><strong>경우의 수가 딱 정해져 있을 때 쓰면 편함</strong></p>
<h3 id="blockquote-핵심-요약"><blockquote> 핵심 요약</h3>
<ul>
<li>switch : 값에 따라 분기하는 조건문</li>
<li>case :  특정 값 처리</li>
<li>break : 반드시 써야 안전</li>
<li>default :  예외 처리용</li>
<li>상황 : 정해진 선택지 있을 때 최고</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] Scanner]]></title>
            <link>https://velog.io/@ye0n_s3/Java-Scanner</link>
            <guid>https://velog.io/@ye0n_s3/Java-Scanner</guid>
            <pubDate>Wed, 01 Apr 2026 06:12:03 GMT</pubDate>
            <description><![CDATA[<h3 id="blockquote-java-scanner란"><blockquote> Java Scanner란?</h3>
<p>Scanner 는 사용자의 입력을 받기 위한 도구.
쉽게 말해 &quot;컴퓨터와 대화할 수 있게 해주는 입력 창&quot;</p>
<p>카톡으로 비유를 해보면,</p>
<ul>
<li>System.out.println() -&gt; 내가 말하는 것 (출력)</li>
<li>Scanner -&gt; 상대방이 보내는 메시지 읽는 것 (입력)</li>
</ul>
<p>즉, Scanner는 사용자의 말을 듣는 역할!!</p>
<h3 id="blockquote-scanner-기본-사용법"><blockquote> Scanner 기본 사용법</h3>
<p>  Scanner를 쓰려면 먼저 준비가 필요하다.</p>
<pre><code>import java.util.Scanner; // Scanner 기능을 가져오는 필수 코드</code></pre><p>저 코드를 하나씩 쪼개서 보면</p>
<ul>
<li>import : 외부 기능 가져오기<ul>
<li>자바 기본 기능 말고 추가 기능 쓰려면 필요</li>
</ul>
</li>
<li>java : 자바가 기본으로 제공하는 큰 라이브러리<ul>
<li>이미 설치되어 따로 설치 하지 않아도 됨</li>
</ul>
</li>
<li>util : 쓸모 있는 도구 모음집<ul>
<li>java 안에 있는 &#39;도구 상자 폴더&#39;</li>
</ul>
</li>
<li>Scanner : 입력 받는 도구<ul>
<li>키보드에서 값 입력받을 때 씀</li>
</ul>
</li>
</ul>
<p>정리하면 -&gt; <strong>java 안에 있는 util 폴더에서 Scanner라는 입력 도구를 가져다 쓸게</strong></p>
<p>그 다음에 객체를 만든다.</p>
<pre><code>Scanner scan = new Scanner(System.in); // 키보드 입력을 받겠다는 의미</code></pre><h3 id="blockquote-입력-받기"><blockquote> 입력 받기</h3>
<ol>
<li><p>정수 입력</p>
<pre><code>int num = scan.nextInt();  // 숫자 입력을 받을 때 사용</code></pre></li>
<li><p>문자열 입력 (한 단어)</p>
<pre><code>String str = scan.next();  // 띄어쓰기 전까지만 입력됨</code></pre></li>
<li><p>문자열 입력 (한 줄 전체)</p>
<pre><code>String str = sc.nextLine();  // 띄어쓰기 포함해서 한 줄 전체 입력됨</code></pre></li>
</ol>
<h3 id="blockquote-next-와-nextline-의-차이"><blockquote> next() 와 nextLine() 의 차이</h3>
<ul>
<li>next() : 띄어쓰기 전까지만 입력</li>
<li>nextLine() : Enter까지 전부 입력</li>
</ul>
<h3 id="blockquote-예시-코드"><blockquote> 예시 코드</h3>
<pre><code>import java.util.Scanner;

public class ScannerExample {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        System.out.print(&quot;이름 입력: &quot;);
        String name = scan.nextLine();

        System.out.print(&quot;나이 입력: &quot;);
        int age = scan.nextInt();

        System.out.println(&quot;이름: &quot; + name);
        System.out.println(&quot;나이: &quot; + age);
    }
}</code></pre><h3 id="blockquote-핵심-요약"><blockquote> 핵심 요약</h3>
<ul>
<li>Scanner : 사용자 입력 받는 도구</li>
<li>import java.util.Scanner : Scanner 기능 가져오기</li>
<li>nextInt() : 숫자 입력</li>
<li>next() : 한 단어 입력 (띄어쓰기 전까지)</li>
<li>nextLine() : 한 줄 전체 입력 (띄어쓰기 포함)</li>
</ul>
<p><strong>Scanner 흐름 = 입력 받기 → 변수에 저장 → 출력</strong></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] 자바 프로젝트 - 기숙사 세탁기 예약 ]]></title>
            <link>https://velog.io/@ye0n_s3/Java-%EC%9E%90%EB%B0%94-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B8%B0%EC%88%99%EC%82%AC-%EC%84%B8%ED%83%81%EA%B8%B0-%EC%98%88%EC%95%BD</link>
            <guid>https://velog.io/@ye0n_s3/Java-%EC%9E%90%EB%B0%94-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B8%B0%EC%88%99%EC%82%AC-%EC%84%B8%ED%83%81%EA%B8%B0-%EC%98%88%EC%95%BD</guid>
            <pubDate>Thu, 27 Nov 2025 00:18:47 GMT</pubDate>
            <description><![CDATA[<p>학교 자바 수업 수행평가로 제작하게 된 프로젝트 입니다. </p>
<blockquote><h3> 프로젝트 제작 동기 </h3></blockquote>
1. 기숙사 생활 중 세탁기 이용 혼잡과 예약 혼잡이 잦음 <br>
2. 기숙사생들이 실시간으로 세탁기 상태를 확인, 예약, 취소가 불가능함 <br>

<p>➡️ 사용자들이 실시간으로 세탁기 상태를 확인, 예약, 취소를 가능하게 하고, GUI와 콘솔을 모두 사용하여 사용자의 편의성과 관리 효율을 높이자!</p>
<pre><code>클래스 구조 설계
상속/오버라이딩
JDBC로 SQLite 연동
Swing으로 버튼 UI 만들기</code></pre><p>4개를 사용하여 프로젝트 제작을 하기로 결정</p>
<blockquote><h3> 전체 구조 </h3></blockquote>

<pre><code>WashingMachine          - 기본 세탁기 클래스
PremiumWashingMachine   - 상속으로 기능 확장
WasherSystem            - 세탁기 전체 관리(예약/취소)
DatabaseManager         - SQLite DB 관리
WasherGUI               - Swing GUI
Main                    - 콘솔 버전 실행
</code></pre><h3> WasherMachine/PremiumWashingMachine 설계 </h3>
포인트 <br>
- WashingMachine은 예약/취소 상태를 관리 <br>
- PremiumWashingMachine은 상속받아서 getStatus()만 오버라이딩해서
‘건조 기능 포함’을 표시 <br>
- 기본 기능은 WashingMachine <br>
- PremiumWashingMachine은 건조 기능 추가 (오버라이딩으로 출력 다르게)

<pre><code>✔ reserve() — 예약 정보 저장  
✔ release() — 예약 취소  
✔ getStatus() — 상태 문자열 리턴  
➡️ PremiumWashingMachine은 getStatus()만 오버라이드 해서 &#39;건조 기능 포함&#39; 붙여줌
</code></pre><h3> WasherSystem 설계 </h3>
포인트 <br>
- 세탁기들을 한 번에 관리하는 컨트롤러 <br>
- 전체 로직 관리 <br>
- 루프 돌면서 n개의 세탁기 생성 <br>
- 프리미엄 세탁기로 만드는 if문 <br>

<p>핵심 :  <br></p>
<ul>
<li>배열 관리 <br></li>
<li>예약 가능 여부 체크 <br></li>
<li>DB 호출</li>
</ul>
<h3> DatabaseManager 설계 </h3>
포인트 <br>
- SQLite 드라이버 사용 <br>
- CREATE TABLE IF NOT EXISTS <br>
- 예약 INSERT / DELETE
- SQLite 파일(washer.db)을 사용해서 예약 정보 영구 저장 <br>
→ 프로그램 시작 시 CREATE TABLE IF NOT EXISTS로 자동 생성 <br>
→ addReservation() / deleteReservation()

<pre><code>✔ SQLite 연결 (JDBC)
✔ reservations 테이블 자동 생성
✔ addReservation() / deleteReservation()
➡️ GUI·콘솔 어디에서 접근하든 DB에 동일하게 기록됨
</code></pre><h3> GUI 설계 </h3>
포인트 <br>
- JButton 배열로 세탁기 개수만큼 UI 동적 생성 <br>
- 클릭하면 예약/취소 진행 <br>
- updateButtons()로 색상·텍스트 갱신 <br>

<blockquote><h3> 실행화면 </h3></blockquote>

<p><img src="https://velog.velcdn.com/images/ye0n_s3/post/4eaf3758-7265-43cf-ab58-c9f8f952dfef/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/ye0n_s3/post/cf423381-5c87-4188-90fe-34cf9a49cc9f/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/ye0n_s3/post/e5f5b832-adb7-4f1e-9bea-68ce491a7ae2/image.png" alt=""></p>
<blockquote><h3> 전체 느낀 점 </h3></blockquote>
- 설계의 중요성을 실제 경험으로 체감 <br>
- 콘솔과 GUI를 동시에 관리하며 객체 공유를 배움 <br>
- DB 연동을 통해 데이터 저장과 불러오기를 경험 <br>
- 기능 추가와 UI 개선 시 구조의 중요성을 깨달음 <br>
- 한 세탁기에 여러 예약 불가 → 확장 필요성 인식 <br>
- GUI 경험 부족으로 화면 구성에 아쉬움 <br>

<blockquote><h3> 추후 추가하고 싶은 것 </h3></blockquote>
1. 현재 구조는 세탁기 당 예약을 하나만 저장해서, <br>
서로 다른 시간대라도 한 사람이 예약하면 다른 사람이 예약 불가. <br>
<p>
추가하고 싶은 내용 : <br>
→ 세탁기가 여러 개의 예약을 리스트 형태로 보관하도록 확장 <br>
→ DB에서도 개별 예약을 ID 단위로 저장·취소하도록 구조를 바꿔 여러 예약을 정상적으로 처리할 수 있도록 <br>
→ 시간대가 겹치는지 검증하는 로직도 함께 추가 
<p>
2. GUI를 배운 적이 많지 않아서, 현재 화면이 기능에 비해 너무 단조롭고 정보 표시가 부족, <br>예약 목록이나 시간대별 상태 같은 걸 직관적으로 보여주기엔 화면 구성이 아쉬움. <br>
<p>
추가하고 싶은 내용 : <br>
→ GUI를 조금 더 발전 <br>
→ 세탁기별 예약 목록 확인 <br>
→ 개별 예약 취소 선택 <br>
→ 시간표 형태의 시각적 표시

]]></description>
        </item>
        <item>
            <title><![CDATA[[GitHub] Git 충돌 해결하기]]></title>
            <link>https://velog.io/@ye0n_s3/GitHub-Git-%EC%B6%A9%EB%8F%8C-%ED%95%B4%EA%B2%B0%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@ye0n_s3/GitHub-Git-%EC%B6%A9%EB%8F%8C-%ED%95%B4%EA%B2%B0%ED%95%98%EA%B8%B0</guid>
            <pubDate>Wed, 27 Aug 2025 14:52:25 GMT</pubDate>
            <description><![CDATA[<blockquote><h3> 충돌이란? </h3></blockquote>
  <h4> 동시에 같은 파일의 같은 부분을 두 명 이상이 수정하며 발생하는 것. </h4>
  Git은 자동으로 병합할 수 없으므로, 사람이 직접 해결해야함.<br>


<blockquote><h3> 충돌 해결 방법 </h3></blockquote>
<h3> 1. 충돌 파일 확인 </h3>
  Git은 충돌이 발생한 파일을 알려줌. 해당 파일을 열어보면, 충돌 부분이 표시됨.<br>

<pre><code>&lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD
내 수정 내용
=======
다른 사람 수정 내용
&gt;&gt;&gt;&gt;&gt;&gt;&gt; 원본 브랜치</code></pre><h3> 2. 수정 및 저장 </h3>
원하는 코드로 수정하고 저장. <br>

<h3> 3. 스테이징 및 커밋 </h3>
수정한 파일을 스테이징하고 커밋.

<pre><code>git add .
git commit -m &quot;충돌 해결&quot;</code></pre><h3> 4. Push </h3>
로컬에서 해결한 내용을 원격 저장소에 반영.

<pre><code>git push origin 작업브랜치명</code></pre><h4> 💡Tip! <br>
  충돌이 두렵다고 피하지 말고, 직접 경험해보는 게 중요.<br>]]></description>
        </item>
        <item>
            <title><![CDATA[[GitHub] Git&GitHub]]></title>
            <link>https://velog.io/@ye0n_s3/GitHub-GitGitHub</link>
            <guid>https://velog.io/@ye0n_s3/GitHub-GitGitHub</guid>
            <pubDate>Wed, 27 Aug 2025 12:20:55 GMT</pubDate>
            <description><![CDATA[<blockquote><h3>Git이란?</h3></blockquote>
<h4> Git이란 분산 버전 관리 시스템 </h4>
쉽게 말해 코드를 수정할 때마다 Git은 그 변화를 기록. <br>
언제든지 이전 상태로 돌아갈 수 있게 도와줌.<br>
또한 여러 명이 동시에 코드를 작업할 때 누가, 언제, 어떤 부분을 수정했는지 추적할 수 있음.<br>
<h4>💡Tip! <br>
  Git을 사용한다면 '지난번 코드로 돌아가고 싶다' 할 때 바로 이전 버전으로 돌아갈 수 있음 </h4>

<blockquote><h3>GitHub란?</h3></blockquote>
<h4> GitHub란 Git을 기반으로 한 온라인 저장소 호스팅 서비스 </h4>
GitHub를 사용하면 코드를 클라우드에 안전하게 저장할 수 있고, 다른 사람과 협업하기 쉬움. <br>

<ul>
<li><p>PR (Pull Request) : 내가 작업한 브랜치를 원본 저장소에 합치고 싶을 때 요청하는 기능     </p>
</li>
<li><p>Merge : PR을 승인하고 브랜치를 main에 합치는 과정</p>
</li>
<li><p>Issue : 버그나 기능 개선 사항을 기록하고 관리할 수 있는 공간</p>
<h4> 💡Tip! <br>
Github는 단순한 저장소가 아니라, 팀원과의 소통/협업 도구로 사용 가능. <br>
PR을 통해 코드 리뷰를 받으며 나의 코드를 더 안전하게 개선할 수 있음. </h4>

<hr>

</li>
</ul>
<blockquote><h3>VS Code에서 GitHub까지 연결하기 🛠️</h3></blockquote>
  <h3> 1. Git 설치 및 설정 </h3>
  가장 먼저 해야할 것은 Git 설치. <br>
  <a href="https://git-scm.com/" target="_blank">Git 공식 사이트</a> 에서 운영체제에 맞는 버전을 다운로드하고 설치 <br>
  설치 후, 터미널에서 사용자 정보를 설정해야함. <br>



<pre><code>git config --global user.name &quot;너의 이름&quot;
git config --global user.email &quot;너의 이메일&quot;</code></pre><p>이렇게 설정해야 커밋할 때 내 이름과 이메일이 기록돼, 협업 시 누가 수정했는지 추적 가능.</p>
  <h3> 2. GitHub 레포지토리 Fork&Clone </h3>
  GitHub에서 원하는 레포지토리를 찾아 Fork 버튼을 눌러 내 계정으로 복제. <br>
  그 후, 내 컴퓨터로 가져오기 위해 Clone 명령어를 사용하여 로컬에 복제. <br>

<pre><code>git clone https://github.com/너의아이디/레포지토리명.git</code></pre><h4> 💡Tip! <br>
  Fork는 원본 레포지토리를 내 계정으로 복사하는 것. <br>
  Clone은 내 컴퓨터로 복사하는 것. <br>
  ❗둘은 엄연히 다른 명령어 <br> </h4>







<p><img src="https://velog.velcdn.com/images/ye0n_s3/post/a83701b2-a13c-4745-b221-b9db339ac63d/image.jpg" alt=""></p>
<p><img src="https://velog.velcdn.com/images/ye0n_s3/post/694ec974-ae18-4c95-9483-ffecb59e92d3/image.png" alt=""></p>
  <h3> 3. 브랜치 생성 및 작업 </h3>
  작업을 시작하기 전에 새로운 브랜치를 만들어야함. <br>
  이렇게 하면 main 브랜치에 직접 영향을 주지 않고 안전하게 코드를 수정 가능 <br>

<pre><code>git checkout -b 작업브랜치명</code></pre><p>이제 코드를 수정하고, 변경된 파일을 스테이징하고 커밋.</p>
<pre><code>git checkout -b 작업브랜치명git add .
git commit -m &quot;작업 내용 설명&quot;</code></pre><h4> 💡Tip! <br>
  커밋 메시지는 무엇을 바꾸었는지 명확하게 작성하는 것이 좋음.<br>

  <h3> 4. 원격 저장소에 Push </h3>
  로컬에서 작업한 내용을 GitHub에 반영하려면 Push해야함 <br>

<pre><code>git push origin 작업브랜치명</code></pre><p>이제 GitHub에서 내 브랜치를 확인할 수 있음.</p>
<h3> 5. Pull Request(PR) 생성 </h3>
  GitHub에서 내 레포지토리로 가서 Pull Request를 생성. <br>
  원본 저장소의 main 브랜치와 내 브랜치를 비교하고, 변경 사항을 확인한 후 PR을 보내기. <br>
  <h4> 💡Tip! <br>
    PR을 만들 때 “무엇을 바꿨는지, 왜 바꿨는지” 간단히 설명하면 리뷰어가 이해하기 쉬움.<br></h4>




]]></description>
        </item>
        <item>
            <title><![CDATA[[HTML] 목록 태그]]></title>
            <link>https://velog.io/@ye0n_s3/HTML-%EB%AA%A9%EB%A1%9D-%ED%83%9C%EA%B7%B8</link>
            <guid>https://velog.io/@ye0n_s3/HTML-%EB%AA%A9%EB%A1%9D-%ED%83%9C%EA%B7%B8</guid>
            <pubDate>Wed, 13 Aug 2025 02:59:43 GMT</pubDate>
            <description><![CDATA[<blockquote><h3>1. 목록 태그란?</h3></blockquote>
<h4> HTML에서 여러 항목을 나열할 때 쓰는 태그.</h4>
목록도 단순히 나열하는 것이 아닌 순서가 있냐, 없냐에 따라 다른 태그를 써야함.

<pre><code>순서 없는 목록 → &lt;ul&gt; (unordered list)
순서 있는 목록 → &lt;ol&gt; (ordered list)
항목 하나하나는 &lt;li&gt; (list item)로 작성</code></pre><p>목록 태그는 문서 구조를 깔끔하게 만듦.</p>
<blockquote><h3>2. 순서 없는 목록 </h3></blockquote>

<pre><code>&lt;&lt;ul&gt;
  &lt;li&gt;사과&lt;/li&gt;
  &lt;li&gt;바나나&lt;/li&gt;
  &lt;li&gt;포도&lt;/li&gt;
&lt;/ul&gt;</code></pre><p>결과 :</p>
<ul>
  <li>사과</li>
  <li>바나나</li>
  <li>포도</li>
</ul>
- 항목 앞에 동그라미(●) 같은 기호가 붙음 <br>
- 쇼핑 목록, 메뉴, 기능 나열 등 순서가 중요하지 않은 경우에 사용 <br>
- CSS 속성으로 기호 모양 변경 가능

<blockquote><h3>3. 순서 있는 목록 </h3></blockquote>

<pre><code>&lt;ol&gt;
  &lt;li&gt;빨래하기&lt;/li&gt;
  &lt;li&gt;청소하기&lt;/li&gt;
  &lt;li&gt;요리하기&lt;/li&gt;
&lt;/ol&gt;</code></pre><p>결과 : </p>
<ol>
  <li>빨래하기</li>
  <li>청소하기</li>
  <li>요리하기</li>
</ol>
- 항목 앞에 자동으로 번호가 붙음 <br>
- 순서, 순위, 단계 등 순서가 중요한 경우에 사용 <br>
- type 속성으로 번호 스타일 변경 가능

<blockquote><h3>4. 목록 항목 태그 </h3></blockquote>

<pre><code>&lt;li&gt;고양이&lt;/li&gt;</code></pre><p>결과 :</p>
<li>고양이</li>
- ul 또는 ol 안에서 사용 <br>
- 목록의 개별 항목을 의미 <br>
- 안에 다른 태그 (이미지, 링크, 문단 등)도 넣을 수 있음

<blockquote><h3>5. 중첩 목록</h3></blockquote>

<pre><code>&lt;ul&gt;
  &lt;li&gt;Frontend
    &lt;ul&gt;
      &lt;li&gt;HTML&lt;/li&gt;
      &lt;li&gt;CSS&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Backend&lt;/li&gt;
&lt;/ul&gt;</code></pre><p>결과 :</p>
<ul>
  <li>Frontend
    <ul>
      <li>HTML</li>
      <li>CSS</li>
    </ul>
  </li>
  <li>Backend</li>
</ul>
- 목록 안에 다른 목록을 넣는 구조
- 계층 구조 표현에 유용

<blockquote><h3>6. 주의할 점 </h3></blockquote>

<pre><code>줄바꿈만 하고 싶어서 &lt;br&gt; 대신 &lt;li&gt; 쓰면 안 됨 ❌
&lt;li&gt;는 반드시 &lt;ul&gt; 또는 &lt;ol&gt; 안에서 사용해야 함
스타일링 목적으로 목록 태그 남발하지 말고, 의미에 맞게 사용</code></pre><blockquote><h3>7. 정리</h3></blockquote>

<pre><code>&lt;ul&gt; : 순서 없는 목록
&lt;ol&gt; : 순서 있는 목록
&lt;li&gt; : 목록 항목
중첩 목록 가능
CSS로 기호·번호 스타일 변경 가능</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[HTML] 텍스트 태그]]></title>
            <link>https://velog.io/@ye0n_s3/HTML-%ED%85%8D%EC%8A%A4%ED%8A%B8-%ED%83%9C%EA%B7%B8</link>
            <guid>https://velog.io/@ye0n_s3/HTML-%ED%85%8D%EC%8A%A4%ED%8A%B8-%ED%83%9C%EA%B7%B8</guid>
            <pubDate>Tue, 29 Jul 2025 07:05:20 GMT</pubDate>
            <description><![CDATA[<blockquote><h3>1. 텍스트 태그란?</h3></blockquote>
<h4> HTML 웹페이지의 내용을 구성하는 가장 기본적인 단위는 텍스트</h4>
텍스트도 단순히 쓰는 게 아니라, 의미에 따라 구분해서 태그를 써야함

<pre><code>제목은 &lt;h1&gt;
본문은 &lt;p&gt;
줄바꿈은 &lt;br&gt;
강조는 &lt;strong&gt;, &lt;em&gt;</code></pre><p>이런 식으로 구체적인 의미를 가진 태그로 나눠야 시맨틱 웹 + 접근성 + 검색 최적화에도 좋음</p>
<blockquote><h3>2. 제목 태그 </h3></blockquote>

<pre><code>  &lt;h1&gt;가장 큰 제목&lt;/h1&gt;
  &lt;h2&gt;그 다음 크기&lt;/h2&gt;
  ...
  &lt;h6&gt;가장 작은 제목&lt;/h6&gt;

  &lt;h1&gt;이 제일 크고 중요, &lt;h6&gt;은 가장 작고 부차적
  한 문서에는 보통 &lt;h1&gt;은 한 번만 사용하는 게 좋아 (주제당 하나)
  검색 엔진도 &lt;h1&gt;을 중요하게 평가함 → SEO 핵심 요소</code></pre><p>정리하면, 제목 계층 구조를 잡는 데 쓰는 태그 데 쓰는 태그</p>
<blockquote><h3>3. 문단 태그 </h3></blockquote>

<pre><code>&lt;p&gt; 하나의 문단 &lt;/p&gt;

글을 쓸 때 문단 단위로 구분할 수 있는 태그
자동으로 위아래에 공백(margin) 생김
하나의 생각, 하나의 내용을 덩어리로 표현할 때 사용</code></pre><p>p 태그는 줄 바꿈이 아닌, 의미 단위의 구분⭐</p>
<blockquote><h3>4. 줄바꿈 태그 </h3></blockquote>

<pre><code>이게 &lt;br&gt;
줄바꿈 태그

단순히 줄을 한 줄 바꿀 때 쓰는 태그
닫는 태그 없음 → &lt;br /&gt;로도 씀 (둘 다 가능)
&lt;p&gt;처럼 문단을 나누진 않음</code></pre><p>너무 남발하면 구조가 엉망이 되니까 디자인용 줄바꿈엔 CSS 사용</p>
<blockquote><h3>5. 강조 태그 </h3></blockquote>

<pre><code>&lt;strong&gt;중요한 단어&lt;/strong&gt;

강조 + 의미적 중요성
검색엔진/스크린리더도 “이건 중요한 내용이구나” 하고 인식함
굵은 글씨로 표시됨

&lt;em&gt;강조할 부분&lt;/em&gt;

강조 + 강조된 느낌 (강세, 톤 변화)
보통 기울임으로 표시됨</code></pre><p>둘 다 시각적 강조 뿐만 아니라 “이 내용이 더 중요해” 라는 의미 전달이 핵심</p>
<blockquote><h3>6. 정리 </h3></blockquote>
텍스트는 목적에 맞는 태그로 나눠 써야 한다.

<pre><code>&lt;h1&gt; ~ &lt;h6&gt;: 제목 계층 구조
&lt;p&gt;: 문단
&lt;br&gt;: 줄바꿈
&lt;strong&gt;, &lt;em&gt;: 의미 있는 강조
&lt;mark&gt;, &lt;code&gt; 등 부가 태그도 잘 써먹자!</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[HTML] HTML이란?]]></title>
            <link>https://velog.io/@ye0n_s3/HTML-HTML%EC%9D%B4%EB%9E%80</link>
            <guid>https://velog.io/@ye0n_s3/HTML-HTML%EC%9D%B4%EB%9E%80</guid>
            <pubDate>Fri, 25 Jul 2025 06:20:09 GMT</pubDate>
            <description><![CDATA[<blockquote><h3>1. HTML이란?</h3></blockquote>
<h4> HTML은 HyperText Markup Language  </h4>
말 그대로 하이퍼텍스트를 위한 마크업 언어 <br>
- 하이퍼텍스트 : 클릭하면 다른 문서로 이동할 수 있는 텍스트 (ex.링크)<br>
- 마크업 : 문서의 구조나 의미를 태그로 표시하는 것
<h4> 즉, HTML은 웹페이지에서 의미와 구조를 지정해주는 언어⭐

<blockquote><h3>2. HTML의 역할</h3></blockquote>
  <h4> HTML은 웹 페이지의 뼈대 역할 </h4>
 예를 들어 블로그 제목을 보면


<pre><code>제목은 &lt;h1&gt;
본문은 &lt;p&gt;
이미지 넣을 땐 &lt;img&gt;
버튼은 &lt;button&gt;</code></pre><p>이렇게 각 역할을 태그(tag) 로 표현.
but, HTML 혼자서는 예쁘지도 않고, 동작하지도 ❌</p>
<table>
<thead>
<tr>
<th>역할</th>
<th>기술</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td>구조</td>
<td>HTML</td>
<td>“무엇이 있는지” 정의</td>
</tr>
<tr>
<td>디자인</td>
<td>CSS</td>
<td>“어떻게 보일지” 꾸밈</td>
</tr>
<tr>
<td>동작</td>
<td>JavaScript</td>
<td>“어떻게 반응할지” 처리</td>
</tr>
</tbody></table>
<blockquote><h3>3. HTML 문서의 기본 구조 </h3></blockquote>
  <h4> HTML 파일은 .html 확장자를 사용</h4>


<pre><code>&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;사이트 제목&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;h1&gt;제목&lt;/h1&gt;
    &lt;p&gt;첫 번째 문단&lt;/p&gt;
  &lt;/body&gt;
&lt;/html&gt;


&lt;!DOCTYPE html&gt; : 이건 HTML5 문서라고 브라우저에 알려주는 선언
&lt;html&gt; : HTML 전체를 감싸는 태그
&lt;head&gt; : 문서 정보 (제목, 문자 인코딩 등)
&lt;body&gt; : 실제로 화면에 보이는 내용</code></pre><blockquote><h3>4. 태그(Tag)란?</h3></blockquote>
<h4> HTML에서 모든 요소는 태그로 구성</h4>

<pre><code>&lt;p&gt; 문단 &lt;/p&gt;
&lt;p&gt; : 여는 태그
&lt;/p&gt; : 닫는 태그</code></pre><h4> 태그는 대체로 여는 태그-문단-닫는 태그 형태로 구성

<blockquote><h3>5. 정리</h3></blockquote>

<p>HTML은 웹페이지의 구조를 담당하는 마크업 언어<br>
태그를 이용해서 문서의 의미와 구조를 표현할 수 ⭕ <br>
⭐HTML은 CSS, JS와 함께 써야 완성된 웹이 됨    </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] 버블 정렬]]></title>
            <link>https://velog.io/@ye0n_s3/Java-%EB%B2%84%EB%B8%94-%EC%A0%95%EB%A0%AC</link>
            <guid>https://velog.io/@ye0n_s3/Java-%EB%B2%84%EB%B8%94-%EC%A0%95%EB%A0%AC</guid>
            <pubDate>Wed, 16 Jul 2025 11:37:46 GMT</pubDate>
            <description><![CDATA[<blockquote><h3>1. 버블 정렬이란?</h3></blockquote>
<h4> 버블정렬은 정렬 알고리즘 중 하나 </h4>
<h5>서로 인접한 두 값을 비교해서, 큰 값을 뒤로 보내는 방식으로 정렬함. 이 과정을 반복하면 가장 큰 값이 '버블처럼' 맨 뒤로 올라감.</h5>

<pre><code>비교 대상: 인접한 두 수  
교환 조건: 앞의 수 &gt; 뒤의 수일 경우  
반복 횟수: 전체 길이 - 1번 반복  </code></pre><blockquote><h3>2. 기본 예제</h3></blockquote> 
<h3>대표 예제1: 오름차순 정렬</h3>


<pre><code>public class bubble_sort1 {
    public static void main(String[] args) {
        int[] arr = {5, 3, 4, 1, 2};

        for (int i = 0; i &lt; arr.length - 1; i++) {
            for (int j = 0; j &lt; arr.length - 1 - i; j++) {
                if (arr[j] &gt; arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];   
                    arr[j + 1] = temp;
                }
            }
        }

        for (int num : arr) {
            System.out.print(num + &quot; &quot;);
        }
    }
}</code></pre><h5>코드 설명: <br> 
- 바깥 for문: 전체를 몇 번 반복할지 결정 (총 n-1번)<br> 
- 안쪽 for문: 인접한 두 수를 비교해서 순서 바꿈<br> 
- 가장 큰 수가 오른쪽 끝으로 이동함 → 다음 반복에서는 비교 범위 하나 줄어듦<br> 
- swap(교환) 코드는 배열 값의 위치를 바꿔주는 역할 </h5>

<h3>대표 예제2: 사용자 입력을 받아 버블 정렬하기</h3>

<pre><code>import java.util.Scanner;

public class bubble_sort2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.print(&quot;몇 개의 숫자를 정렬할까요? &quot;);
        int n = sc.nextInt();
        int[] arr = new int[n];

        System.out.println(n + &quot;개의 숫자를 입력하세요:&quot;);
        for (int i = 0; i &lt; n; i++) {
            arr[i] = sc.nextInt();
        }

        for (int i = 0; i &lt; arr.length - 1; i++) {
            for (int j = 0; j &lt; arr.length - 1 - i; j++) {
                if (arr[j] &gt; arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }

        System.out.print(&quot;정렬 결과: &quot;);
        for (int num : arr) {
            System.out.print(num + &quot; &quot;);
        }
    }
}</code></pre><h5>코드 설명:<br> 
- `Scanner`를 사용해 사용자에게 입력값을 받음<br> 
- `n`개의 숫자를 입력받아서 배열에 저장<br> 
- 기존 버블 정렬 알고리즘을 그대로 적용<br> - 정렬된 결과를 출력<br> </h5>

<blockquote><h3>3. 버블 정렬의 특징과 한계</h3></blockquote> 
<h4>1. 장점</h4> 
<h5> - 구현이 매우 간단함<br> 
- 코드가 직관적이어서 처음 배우는 정렬로 적합<br> </h5> 
<h4>2. 단점</h4> 
<h5> 
- 데이터 개수가 많아질수록 급격히 느려짐<br> 
- 실무에서는 거의 사용되지 않음<br> </h5>]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] random]]></title>
            <link>https://velog.io/@ye0n_s3/Java-random</link>
            <guid>https://velog.io/@ye0n_s3/Java-random</guid>
            <pubDate>Thu, 12 Jun 2025 13:37:28 GMT</pubDate>
            <description><![CDATA[<blockquote><h3> 1. random문이란? </h3></blockquote>
<h4>프로그래밍에서 무작위 값을 생성할 때 사용하는 기능</h4>
<h5> 게임, 추첨, 데이터 샘플링, 테스트 등에서 자주 사용. <br>
  자바에서는 보통 두 방식으로 랜덤값을 만듦. <p>
1. Math.random() : 간단하지만 실수(double)만 변환<br>
2. java.util.Random 클래스 : 다양한 지원 타입 지원<p>
예시 1 : Math.random() </h5>

<pre><code> // 0.0 이상 1.0 미만의 실수
double randDouble = Math.random();
    System.out.println(&quot;실수 랜덤값: &quot; + randDouble);

// 1부터 10 사이의 정수
int randInt = (int)(Math.random() * 10) + 1;
    System.out.println(&quot;정수 랜덤값 (1~10): &quot; + randInt);</code></pre><h5> 예시 2 : Random 클래스 사용 </h5>

<pre><code>import java.util.Random;

public class Main {
    public static void main(String[] args) {
        Random rand = new Random();

        // 0.0 이상 1.0 미만의 실수
        double randDouble = rand.nextDouble();
        System.out.println(&quot;실수 랜덤값: &quot; + randDouble);

        // 1부터 10 사이의 정수
        int randInt = rand.nextInt(10) + 1;
        System.out.println(&quot;정수 랜덤값 (1~10): &quot; + randInt);
    }
}</code></pre><blockquote><h3> 2. 기본 예제 </h3></blockquote>
<h3>대표 예제1 : 1~45 사이의 랜덤 로또 번호 하나 뽑기 </h3>

<pre><code>import java.util.Random;

public class LottoExample {
    public static void main(String[] args) {
        Random rand = new Random();
        int lottoNumber = rand.nextInt(45) + 1; // 1~45
        System.out.println(&quot;로또 번호: &quot; + lottoNumber);
    }
}</code></pre><h5> 코드 설명 : <br>
  < Random rand = new Random(); > <br>
  - Random은 Java에서 무작위 값을 만들어주는 클래스  <br>
  - 객체를 한번 생성해두면 rand.nextInt() 등 다양한 랜덤값 뽑을 수 있음 <br>
  - 이 방식이 Math.random()보다 더 유연하고 객체 지향적 -> 실무 사용률 Up <p>


<h3>대표 예제2 : 메뉴 랜덤 추천 </h3>

<pre><code>import java.util.Random;

public class MenuExample {
    public static void main(String[] args) {
        String[] menus = {&quot;김치찌개&quot;, &quot;제육볶음&quot;, &quot;된장국&quot;, &quot;비빔밥&quot;, &quot;불고기&quot;};
        Random rand = new Random();
        String todayMenu = menus[rand.nextInt(menus.length)];
        System.out.println(&quot;오늘의 추천 메뉴: &quot; + todayMenu);
    }
}</code></pre>  <h5> 코드 설명 : <br>
  < String[] menus = {...}; > <br>
  - String 배열을 사용해서 여러 개의 메뉴 후보들을 준비  <br>
  - 배열 인덱스는 0부터 시작하기 때문에 김치찌개는 menus[0], 된장찌개는 menus[1] <br>
  - 이 방식이 Math.random()보다 더 유연하고 객체 지향적 -> 실무 사용률 Up <p>
  < menus[rand.nextInt(menus.length) > <br>
  - rand.nextInt(menus.length)는 0부터 menus.length - 1 사이의 정수를 랜덤으로 뽑음.  <br>

<blockquote><h3> 3. 자주 하는 실수 Top 2 </h3></blockquote>
    <h4> 1. 범위 설정 실수 — +1 안 해서 원하는 범위 안 나옴 </h4>


<pre><code>int num = (int)(Math.random() * 10); // 0~9 (❌ 1 포함 X)</code></pre><h5> 오류 설명 : <br>
  (int)(Math.random() * 10) → 결과는 0~9 <br>
  대부분은 1~10이 나오길 원하는데, +1 안 하면 0도 나와버림<p>
  해결법 : </h5>


<pre><code>int num = (int)(Math.random() * 10) + 1; // ✅ 1~10</code></pre><h4> 2. 배열 인덱스 초과 — nextInt(길이) 제대로 안 씀</h4>



<pre><code>String[] arr = {&quot;a&quot;, &quot;b&quot;, &quot;c&quot;};
Random rand = new Random();
String s = arr[rand.nextInt(3 + 1)]; // ❌ IndexOutOfBounds</code></pre><h5> 오류 설명 : <br>
  arr.length == 3일 때 인덱스는 0~2까지만 가능 <br>
  nextInt(4) 쓰면 3 나올 수 있어서 터짐<p>
  해결법 : </h5>




<pre><code>String s = arr[rand.nextInt(arr.length)]; // ✅ 안전하게 0~2</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] 올바른 길 찾기]]></title>
            <link>https://velog.io/@ye0n_s3/Java-%EC%98%AC%EB%B0%94%EB%A5%B8-%EA%B8%B8-%EC%B0%BE%EA%B8%B0</link>
            <guid>https://velog.io/@ye0n_s3/Java-%EC%98%AC%EB%B0%94%EB%A5%B8-%EA%B8%B8-%EC%B0%BE%EA%B8%B0</guid>
            <pubDate>Sun, 08 Jun 2025 14:13:07 GMT</pubDate>
            <description><![CDATA[<blockquote><h3> 탈출 게임 만들기 - 랜덤 길 찾기   </h3></blockquote>

<h4> 🧩문제 설명 </h4>
<h5> - 총 5개의 길이 있고, 각 위치에서 정답인 길의 번호는 1~5 중 랜덤으로 생성된다. <p>
  - 사용자는 순서대로 정답을 맞춰야한다. <p>
  - 정답이라면 "정답입니다!" + 입력한 값이 출력된다. <p>
  - 오답이라면 "틀렸습니다!" 만 출력되고 같은 인덱스를 다시 시도해야한다.<p>
  - 10번 이상 오답을 입력하면 "탈출에 실패하였습니다." 출력 후 종료된다. <p>
  - 정답을 모두 맞추면 "입력한 값 : " 과 함께 "탈출하였습니다!" 가 출력된다 <p></h5>

<blockquote><h3> 출력 예시 코드 </h3></blockquote>


<pre><code>import java.util.Random;
import java.util.Scanner;

public class RoomEscape {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        Random rand = new Random();

        int[] answer = new int[5];
        for (int i = 0; i &lt; 5; i++) {
            answer[i] = rand.nextInt(5) + 1;
        }

        int wrongCount = 0;
        int a = 0;

        do {
            System.out.print(&quot;올바른 길을 찾으시오 : &quot;);
            int n = scan.nextInt();
            System.out.println(&quot; &quot; + n);

            if (n == answer[a]) {
                System.out.println(&quot;정답입니다!&quot;);
                System.out.println(&quot;입력한 값: &quot; + n);
                a++;
            }
            else {
                System.out.println(&quot;틀렸습니다!&quot;);
                wrongCount++;
            }

            if (wrongCount == 10) {
                System.out.println(&quot;탈출에 실패하였습니다!&quot;);
                break;
            }

        } while (a &lt; 5);

        if (a == 5) {
            System.out.print(&quot;정답 경로 : &quot;);
            for (int i = 0; i &lt; 5; i++) {
                System.out.print(answer[i] + &quot; &quot;);
            }
            System.out.println();
            System.out.println(&quot;탈출하였습니다!&quot;);
        }
    }
}</code></pre><h4> 코드 설명 : <br></h4>
<h5> 
- do while -> 사용자 입력을 반드시 한 번은 받기에 do while이 적절<p>
- int[] answer = new int[5] -> 1~5 사이 숫자로 구성된 정답 경로 5칸을 <p>랜덤으로 생성 <p>
- int a = 0; -> 유저가 현재 맞춰야 할 위치를 추적하는 변수 <p>
- if (n==answer[a]) -> 입력한 값의 정답 배열이 a번째 값과 같다면,<p> 정답 처리 후 a++ <p>
- wrongCount == 10 -> 10번 틀리면 탈출 실패로 종료
</h5> 

]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] 배열]]></title>
            <link>https://velog.io/@ye0n_s3/Java-%EB%B0%B0%EC%97%B4</link>
            <guid>https://velog.io/@ye0n_s3/Java-%EB%B0%B0%EC%97%B4</guid>
            <pubDate>Wed, 21 May 2025 14:25:47 GMT</pubDate>
            <description><![CDATA[<blockquote><h3> 1. 배열이란? </h3></blockquote>

<h4>같은 타입의 데이터를 연속된 공간에 저장하는 자료구조</h4>

<h5>
냉장고로 비유해보자면,<p>
- 변수 : 물건 하나만 올려두는 선반<p>
- 배열 : 칸이 나눠진 냉장고 (칸마다 같은 종류 보관)<p>
즉, 같은 타입의 값 여러 개를 하나의 이름으로 묶어서 관리하는 구조
</h5>

<h5>⭐ 핵심 키워드 3개 ⭐<p>
- 순서 O<p>
- 연속된 공간에 저장 (Memory에 일렬로 저장)<p>
- 인덱스로 접근 (0부터 번호가 매겨짐)<p>
값들에 빠르게 접근하고 싶을 때 사용
</h5>

<br>

<h4>배열 선언 방법</h4>

<pre><code>자료형[] 배열이름 = new 자료형[크기];</code></pre><h5>
자료형[] : 배열에 들어갈 값의 타입<p>
배열이름 : 배열을 식별할 수 있는 이름<p>
new 자료형[크기] : 실제 메모리 공간 할당 (크기는 정수값)
</h5>

<h5>선언 방식은 2가지</h5>

<pre><code class="language-java">// 방법 1 : 선언과 동시에 값 초기화
int[] numbers = {1, 2, 3, 4, 5};

// 방법 2 : 크기만 지정 후 나중에 값 넣기
int[] numbers = new int[5];
numbers[0] = 1;
numbers[1] = 2;</code></pre>
<br>

<h4>배열 구조 이해하기</h4>

<pre><code>numbers = {1, 2, 3, 4, 5}

인덱스 : [0] [1] [2] [3] [4]
값     :  1   2   3   4   5</code></pre><h5>
- 인덱스는 0부터 시작<p>
- 마지막 인덱스는 배열 크기 - 1<p>
- numbers.length → 배열 전체 크기 반환
</h5>

<blockquote><h3> 2. 기본 예제 </h3></blockquote>

<h3>대표 예제 1 : 기본 배열 선언, 초기화, 출력하기</h3>

<pre><code class="language-java">public class ArrayExample1 {
    public static void main(String[] args) {
        // 정수형 배열 선언과 초기화
        int[] numbers = {1, 2, 3, 4, 5};

        // 배열 요소 출력
        for (int i = 0; i &lt; numbers.length; i++) {
            System.out.println(&quot;numbers[&quot; + i + &quot;] = &quot; + numbers[i]);
        }
    }
}</code></pre>
<h4> 코드 설명 : </h4>

<h5>
- int[] numbers = {1, 2, 3, 4, 5}; → 배열 선언과 동시에 값들 넣어서 초기화<p>
- numbers.length로 배열 크기 확인하며 반복문으로 순회<p>
- numbers[i]로 각 인덱스 요소 접근해 출력<p>
- 인덱스 범위 벗어나면 ArrayIndexOutOfBoundsException 발생
</h5>

<h4> 출력 결과 : </h4>

<pre><code>numbers[0] = 1
numbers[1] = 2
numbers[2] = 3
numbers[3] = 4
numbers[4] = 5</code></pre><br>

<h3>대표 예제 2 : 배열 요소 합계 구하기</h3>

<pre><code class="language-java">public class ArraySumExample {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};

        int sum = 0;
        for (int num : arr) {
            sum += num;
        }

        System.out.println(&quot;배열 요소의 합: &quot; + sum);
    }
}</code></pre>
<h4> 코드 설명 : </h4>

<h5>
- int[] arr = {1, 2, 3, 4, 5}; → 배열 선언과 동시에 값들 넣어서 초기화<p>
- int sum = 0; → 합계 저장할 변수 0으로 초기화<p>
- for (int num : arr) → 향상된 for문으로 배열 요소를 하나씩 꺼냄<p>
- sum += num; → 꺼낸 요소를 합계에 누적
</h5>

<h4> 출력 결과 : </h4>

<pre><code>배열 요소의 합: 15</code></pre><br>

<h4>for문 vs 향상된 for문</h4>

<table>
<thead>
<tr>
<th>구분</th>
<th>일반 for문</th>
<th>향상된 for문</th>
</tr>
</thead>
<tbody><tr>
<td>인덱스 접근</td>
<td>O</td>
<td>X</td>
</tr>
<tr>
<td>코드 간결함</td>
<td>보통</td>
<td>깔끔함</td>
</tr>
<tr>
<td>사용 추천</td>
<td>인덱스 필요할 때</td>
<td>전체 순회할 때</td>
</tr>
</tbody></table>
<pre><code class="language-java">// 일반 for문
for (int i = 0; i &lt; arr.length; i++) {
    System.out.println(arr[i]);
}

// 향상된 for문
for (int num : arr) {
    System.out.println(num);
}</code></pre>
<blockquote><h3> 3. 자주 나오는 오류 TOP 3 </h3></blockquote>

<h4> 1. ArrayIndexOutOfBoundsException </h4>

<h5>배열 인덱스를 범위 밖으로 접근할 때 발생</h5>

<pre><code class="language-java">int[] arr = {1, 2, 3};
System.out.println(arr[3]);</code></pre>
<h5>
오류 설명 :<p>
배열의 유효 인덱스는 0부터 arr.length - 1까지.<p>
위 코드는 3칸짜리 배열에서 arr[3]을 접근하려 해서 오류
</h5>

<h5>해결법 :</h5>

<pre><code class="language-java">System.out.println(arr[arr.length - 1]);</code></pre>
<h5>❗반복문 쓸 때는 i &lt; arr.length 조건 꼭 확인</h5>

<br>

<h4> 2. NullPointerException </h4>

<h5>배열이 null인데 접근하거나 조작할 때 발생</h5>

<pre><code class="language-java">int[] arr = null;
System.out.println(arr.length);</code></pre>
<h5>
오류 설명 :<p>
배열이 실제로 생성되지 않았는데 .length나 [0] 등을 쓰면 오류 발생
</h5>

<h5>해결법 :</h5>

<pre><code class="language-java">int[] arr = new int[3];
System.out.println(arr.length);</code></pre>
<h5>❗배열 선언만 해놓고 new로 생성하지 않으면 null 상태</h5>

<br>

<h4> 3. 배열 초기화 실수 </h4>

<h5>선언만 하고 배열을 바로 쓰는 실수</h5>

<pre><code class="language-java">int[] arr;
arr[0] = 10;</code></pre>
<h5>
오류 설명 :<p>
arr은 참조만 되어 있고 실제 배열 공간은 없음.<p>
메모리 공간이 없는데 값을 넣으려고 하니 오류 발생
</h5>

<h5>해결법 :</h5>

<pre><code class="language-java">int[] arr = new int[3];
arr[0] = 10;</code></pre>
<h5>❗배열 선언 후 반드시 new로 메모리를 할당해야 함</h5>

<blockquote><h3> 4. 핵심 요약 </h3></blockquote>

<h5>
- 배열 : 같은 타입 데이터를 연속 공간에 저장하는 자료구조<p>
- 인덱스는 0부터 시작<p>
- 마지막 인덱스는 length - 1<p>
- .length로 배열 크기 확인<p>
- 인덱스 필요하면 일반 for문 사용<p>
- 전체 순회만 하면 향상된 for문 사용<p>
- 같은 타입 데이터를 여러 개 다룰 때 매우 유용
</h5>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] Review 2]]></title>
            <link>https://velog.io/@ye0n_s3/Java-Review-2</link>
            <guid>https://velog.io/@ye0n_s3/Java-Review-2</guid>
            <pubDate>Wed, 14 May 2025 13:56:29 GMT</pubDate>
            <description><![CDATA[<h1>수행평가 전 Review⭐ </h1><p>

<blockquote><h4> 3. n 값을 입력 받고, 내각의 크기 구하기 </h4></blockquote>

<pre><code>import java.util.Scanner;

public class Angle {
    public static void main(String[] args) {
        Scanner scan = new Scanner (System.in);

        System.out.print(&quot;n : &quot;);
        int n = scan.nextInt();

        double angle = ((n-2)*180.0) / n;

        System.out.println(&quot;정&quot; + n + &quot;각형의 한 내각의 크기 = &quot; + angle);
    }
}</code></pre><h5> 핵심 코드 설명 : <br>
  - Scanner scan = new Scanner(System.in); <br>
  -> 사용자에게 입력 값을 받기 위한 문장. <br>
  => 자바에서 사용자 입력을 처리하려면 Scanner을 사용해야함. <br><p>

<ul>
<li>int n = scan.nextInt(); <br></li>
<li><blockquote>
<p>사용자가 입력한 값을 정수(int) 형태로 읽은 후 변수 n에 저장. <br>
❓왜 int 형태로 저장? =&gt; 변의 개수 즉, 정수를 입력 받기 때문에 정수형 int 에 저장 <br><p></p>
</blockquote>
</li>
<li>double angle = ((n-2)*180.0) / n; <br></li>
<li><blockquote>
<p>(n - 2) * 180 라는 다각형의 내각의 합을 구하는 공식을 사용<br>
❓왜 double 형태로 저장? =&gt; 계산된 값에 소수점이 있을 경우 정수형 int 보단 실수형 float 또는 double을 사용해서 받아줘야함. <br><p></p>
</blockquote>
</li>
</ul>
<blockquote><h4> 4. 숫자 3개를 입력 받고 작은 순서대로 나열하기</h4></blockquote>


<pre><code>import java.util.Scanner;

public class Updown {
    public static void main(String[] args) {
        Scanner scan = new Scanner (System.in);

        System.out.print(&quot;첫번째 정수를 입력하시오 : &quot;);
        int a = scan.nextInt();

        System.out.print(&quot;두번째 정수를 입력하시오 : &quot;);
        int b = scan.nextInt();

        System.out.print(&quot;세번째 정수를 입력하시오 : &quot;);
        int c = scan.nextInt();

        if (a &gt; b) { int tmp = a; a = b; b = tmp; }
            if (a &gt; c) { int tmp = a; a = c; c = tmp; }
            if (b &gt; c) { int tmp = b; b = c; c = tmp; }

        System.out.println(a + &quot;&lt;=&quot; + b + &quot;&lt;=&quot; + c);
        }
}</code></pre><h5> 핵심 코드 설명 : <br>
  - Scanner scan = new Scanner(System.in); <br>
  -> 사용자에게 입력 값을 받기 위한 문장. <br>
  => 자바에서 사용자 입력을 처리하려면 Scanner을 사용해야함. <br><p>

<ul>
<li><p>int a,b,c = scan.nextInt(); <br></p>
</li>
<li><blockquote>
<p>사용자가 입력한 값을 정수(int) 형태로 읽은 후 각각 변수 a,b,c 에 저장. <br>
❓왜 int 형태로 저장? =&gt; 정수를 입력 받기 때문에 정수형 int 에 저장 <br><p></p>
</blockquote>
</li>
<li><p>if (a &gt; b) { int tmp = a; a = b; b = tmp; } <br>
if (a &gt; c) { int tmp = a; a = c; c = tmp; } <br>
if (b &gt; c) { int tmp = b; b = c; c = tmp; } <br> <p></p>
</li>
<li><blockquote>
<p>이 부분이 정렬을 담당하는 코드. <br> <br></p>
</blockquote>
<p>❗자세하게 뜯어보기 ❗<br></p>
</li>
</ul>
<ol>
<li>if (a &gt; b) { int tmp = a; a = b; b = tmp; } <br></li>
</ol>
<p>  -&gt; 만약 a가 b보다 크다면, a와 b의 값을 서로 교환. <br>
  즉, 작은 값이 a에, 큰 값이 b에 들어가게 됨) <br>
  2. if (a &gt; c) { int tmp = a; a = c; c = tmp; } <br>
  -&gt; 만약 a가 c보다 크다면, a와 c를 교환. <br>
  3. &lt;if (b &gt; c) { int tmp = b; b = c; c = tmp; } <br>
  -&gt; 만약 b가 c보다 크다면, b와 c를 교환. <br><p></p>
<p>  위에 코드로 실행해보면 a &lt;= b &lt;= c 순으로 나열됨.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] Review 1]]></title>
            <link>https://velog.io/@ye0n_s3/Java-Review-1</link>
            <guid>https://velog.io/@ye0n_s3/Java-Review-1</guid>
            <pubDate>Wed, 14 May 2025 13:29:39 GMT</pubDate>
            <description><![CDATA[<h1>수행평가 전 Review⭐ </h1><p>

<blockquote><h4> 1. 지구에서의 무게를 입력 받고, 입력 값을 달에서의 무게로 바꾸기 </h4></blockquote>

<pre><code>import java.util.Scanner;

public class moon {
    public static void main(String[] args) {
        Scanner scan = new Scanner (System.in);

        System.out.print(&quot;지구에서의 무게를 입력하시오. : &quot;);
        double earthWeight = scan.nextDouble();

        double moonWeight = earthWeight / 6;

        System.out.println(moonWeight);
    }
}
</code></pre><h5> 핵심 코드 설명 : <br>
  - Scanner scan = new Scanner(System.in); <br>
  -> 사용자에게 입력 값을 받기 위한 문장. <br>
  => 자바에서 사용자 입력을 처리하려면 Scanner을 사용해야함. <br><p>

<ul>
<li><p>double earthWeight = scan.nextDouble(); <br></p>
</li>
<li><blockquote>
<p>사용자가 입력한 값을 실수(double) 형태로 읽은 후 변수 earthWeight에 저장. <br>
❓왜 double 형태로 저장? =&gt; 무게에 소수점이 있을 경우 정수형 int 보단 실수형 float 또는 double을 써야함. <br><p></p>
</blockquote>
</li>
<li><p>double moonWeight = earthWeight / 6; <br></p>
</li>
<li><blockquote>
<p>달에서의 무게는 지구에서의 무게의 1/6배. <br>고로 달에서의 무게를 계산하기 위한 새로운 변수를 선언해줘야함. <p></p>
</blockquote>
<blockquote><h4> 2. 이름, 학년, 반 입력 받기 </h4></blockquote>

</li>
</ul>
<pre><code>import java.util.Scanner;

public class GCN {
    public static void main(String[] args) {
        Scanner scan = new Scanner (System.in);

        System.out.print(&quot;이름을 입력하세요: &quot;);
            String name = scan.nextLine();

            System.out.print(&quot;학년을 입력하세요: &quot;);
            int grade = scan.nextInt();

            System.out.print(&quot;반을 입력하세요: &quot;);
            int classNum = scan.nextInt();
            scan.nextLine();

        System.out.println(grade + &quot;학년&quot; + classNum + &quot;반&quot; + name + &quot;입니다.&quot;);
    }
}
</code></pre>  <h5> 핵심 코드 설명 : <br>
  - Scanner scan = new Scanner(System.in); <br>
  -> 사용자에게 입력 값을 받기 위한 문장. <br>
  자바에서 사용자 입력을 처리하려면 Scanner을 사용해야함. <br><p>

<ul>
<li>String name = scan.nextLine(); <br>
-&gt; 사용자가 입력한 값을 문자열(string) 형태로 읽은 후 변수 name에 저장. <br>
❓왜 String 형태로 저장? =&gt; 입력 받을 값이 &#39;이름&#39; 즉, 숫자가 아닌 문자열이기 때문. <br>
❓왜 scan.nextLine 으로 받는가&gt; =&gt; nextLine() 이 한 줄 전체 (띄어쓰기 포함) 로 받아줌.<br><p></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] while문]]></title>
            <link>https://velog.io/@ye0n_s3/CPU</link>
            <guid>https://velog.io/@ye0n_s3/CPU</guid>
            <pubDate>Wed, 07 May 2025 13:45:07 GMT</pubDate>
            <description><![CDATA[<blockquote><h3> 1. while문 이란? </h3></blockquote>

<h4>while문은 조건문의 한 종류.</h4>

<h5>조건이 참(true)인 동안 반복하고, 조건이 거짓(false)이 되면 반복을 멈추는 문법.</h5>

<pre><code>while (조건식) {
    // 조건이 참일 때 반복할 코드
}</code></pre><h5>조건식이 true인 동안 {} 안에 있는 코드가 반복 실행 <br>
조건식이 처음부터 false라면, 아예 한 번도 실행되지 않고 바로 끝</h5>

<blockquote><h3> 2. 기본 예제 </h3></blockquote>

<h3>대표 예제1 : 1부터 5까지 출력하기 </h3>

<pre><code>public class Main {
    public static void main(String[] args) {
        int i = 1;

        while (i &lt;= 5) {
            System.out.println(i);
            i++; // i 값을 1씩 증가시킴
        }
    }
}</code></pre><h5> 코드 설명 : <br>
  - i가 5 이하일 때만 {} 안의 코드를 반복 <br>
  - 만약 i++가 없다면, i는 계속 1이기 때문에 조건이 계속 true가 되어 무한 루프에 빠지게 됨. 고로 값을 변경하는 코드 필수

<blockquote><h3> 3. For문과 While문의 차이점 </h3></blockquote>

  <h4> 1. 사용 목적에 따른 차이 </h4>
  <h5> - while문 <br> 
  반복 횟수 : 정해지지 않는 반복에 적합 <br>
  사용 예시 : 사용자가 exit을 입력할 때까지 반복 <br> 
  주로 쓰는 상황 : 조건이 계속 바뀌거나, 언제 끝날지 모를 때 <br><br>

<pre><code>  - for문 &lt;br&gt;</code></pre><p>  반복 횟수 : 정해진 횟수만큼 반복에 적합 <br>
  사용 예시 : 1부터 10까지 출력하기 <br> 
  주로 쓰는 상황 : 반복 횟수가 명확할 때 <br>
  </h5> <br></p>
  <h4> 2. 문법 구조의 차이 </h4>
  <h5> - while문 <br> 
  조건을 먼저 검사한 후 반복 <br>
  반복 제어 변수(i)는 외부에서 선언, 내부에서 직접 조작 <br><br>

<pre><code>  - for문 &lt;br&gt;</code></pre><p> 반복 시작, 조건 검사, 증감이 한 줄에 깔끔하게 정리<br>
 반복 횟수가 명확한 경우 코드가 간결
  </h5> <br></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] 이중 for문]]></title>
            <link>https://velog.io/@ye0n_s3/Java-%EC%9D%B4%EC%A4%91-for%EB%AC%B8</link>
            <guid>https://velog.io/@ye0n_s3/Java-%EC%9D%B4%EC%A4%91-for%EB%AC%B8</guid>
            <pubDate>Wed, 30 Apr 2025 12:44:04 GMT</pubDate>
            <description><![CDATA[<blockquote><h3> 1. 이중 for문 이란? </h3></blockquote>

<h4>이중 for문은 for문 안에 또 다른 for문이 들어간 구조</h4>

<h5>하나의 반복마다 또 다른 반복을 수행할 때 사용됨. <br>
    바깥 for문이 한 번 반복할 때마다, 안쪽 for문은 전체 반복을 수행.</h5>

<pre><code>for (int i=0; i&lt;열; i++) {
    for (int j=0; j&lt;행; j++) {
        \\ 반복할 코드
    }
}</code></pre><h5> 바깥 for문 : 기준 1 (보통 '행') <br>
  안쪽 for문 : 기준 2 (보통 '열') </h5>

<blockquote><h3> 2. 기본 예제 </h3></blockquote>

<h3>대표 예제1 : 직각 삼각형 별 찍기</h3>

<pre><code>for (int i=1; i&lt;=5; i++) {
    for (int j=1; j&lt;=i; j++) {
        System.out.print(&quot;*&quot;);
    }
    System.out.println();  // 줄 바꿈
}</code></pre><p><img src="https://velog.velcdn.com/images/ye0n_s3/post/387e6db6-f1f4-4e63-8a6e-e19b65070625/image.png" alt=""></p>
<h5> 코드 설명 : <br>
  - 바깥쪽 for문은 1부터 5까지 반복 => 5를 출력 <br>
  - 안쪽 for문은 매번 i번 반복 => 첫 번째 줄은 1개, 두 번째 줄은 2개 <br>
  - System.out.print("*") 는 별 한 줄 출력, System.out.println(); 은 줄 바꿈 </h5>


<h3>대표 예제2 : 구구단 </h3>

<pre><code>for (int i=2; i&lt;=9; i++) {
    System.out.println(&quot;[&quot; + i + &quot;단]&quot;);

    for (int j=1; j&lt;=9; j++) {
        System.out.println(i + &quot;x&quot; + j + &quot;=&quot; + (i*j));
    }
}</code></pre><p><img src="https://velog.velcdn.com/images/ye0n_s3/post/e5d06b5b-457b-4edb-ab6e-749e1fa4049b/image.png" alt=""></p>
<h5> 코드 설명 : <br>
  - i는 현재 단을 나타내는 변수, 2부터 9까지 증가 => 바깥쪽 for문 <br>
  - j는 곱해지는 수를 의미, 1부터 9까지 증가 => 안쪽 for문 <br>
  - 각 반복에서 i * j를 계산해서 결과 출력 <br>
  - 단이 끝날 때마다 System.out.println(); 으로 한 줄 띄어줌 </h5>



<blockquote><h3> 3. 자주 하는 실수 Top3 </h3></blockquote>

<h4> 1. 조건 잘못 써서 무한 루프 발생 </h4>

<pre><code>for (int i=1; i&lt;=5; i--) {
    for (int j=1; j&lt;=5; j++) {
        System.out.print(&quot;*&quot;);
    }
    System.out.println();
}</code></pre><h5> 코드 설명 : <br>
  - 바깥쪽 for문에서 i--로 증감식을 잘못 설정 => 계속 감소 => 조건 탈출 불가</h5>


<h4> 2. print와 println의 사용을 혼돈</h4>

<pre><code>for (int i=1; i&lt;=5; i++) {
    for (int j=1; j&lt;=i; j++) {
        System.out.print(&quot;*&quot;);
    }
    System.out.print();
}</code></pre><h5> 코드 설명 : <br>
  - 바깥쪽 for문에서 System.out.print(); 을 사용 => 별들이 한 줄로 출력</h5>]]></description>
        </item>
    </channel>
</rss>