<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>just-codingbaby.log</title>
        <link>https://velog.io/</link>
        <description>💻</description>
        <lastBuildDate>Wed, 26 Mar 2025 14:40:13 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>just-codingbaby.log</title>
            <url>https://velog.velcdn.com/images/just-codingbaby/profile/ad682abe-8b4a-4af1-a79d-a7b6e4c57ebc/social_profile.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. just-codingbaby.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/just-codingbaby" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[Next.js] 카테고리 필터링 렌더링 이슈]]></title>
            <link>https://velog.io/@just-codingbaby/Nextjs-%EC%B9%B4%ED%85%8C%EA%B3%A0%EB%A6%AC-%EB%A0%8C%EB%8D%94%EB%A7%81-%EC%9D%B4%EC%8A%88</link>
            <guid>https://velog.io/@just-codingbaby/Nextjs-%EC%B9%B4%ED%85%8C%EA%B3%A0%EB%A6%AC-%EB%A0%8C%EB%8D%94%EB%A7%81-%EC%9D%B4%EC%8A%88</guid>
            <pubDate>Wed, 26 Mar 2025 14:40:13 GMT</pubDate>
            <description><![CDATA[<h1 id="🚨-문제-상황">🚨 문제 상황</h1>
<ul>
<li>상품 상세 페이지에서 카테고리를 눌러 목록 페이지로 이동하려는 상황</li>
<li>같은 상위 카테고리에서 다른 하위 카테고리를 누를 땐 문제 없음</li>
</ul>
<p>내가 생각했던 상황: 로딩 → 리스트 렌더링</p>
<p>문제: 로딩 → 이전 리스트 렌더링 → 최신 리스트 렌더링</p>
<h3 id="상황-순서">상황 순서</h3>
<blockquote>
<p>상세 상품의 카테고리는 음료, 청량/탄산음료 라고 가정(상위,하위)
눌린 카테고리는 스낵 카테고리(상위) </p>
</blockquote>
<ol>
<li>청량/탄산에서 특정 상품 상세 페이지에 있는 상태 </li>
<li>스낵 카테고리를 누름</li>
<li>파라미터가 <strong>parentId=스낵&amp;categoryId=청량/탄산</strong> 로 먼저 이동</li>
<li>청량/탄산 먼저 렌더링됨</li>
<li>이후에 <strong>parentId=스낵&amp;categoryId=쿠키</strong>로 변경</li>
<li>최신 파라미터 기준 렌더링</li>
</ol>
<hr>
<h1 id="🧐-분석">🧐 분석</h1>
<p><img src="https://velog.velcdn.com/images/just-codingbaby/post/8608b3f5-c68b-4410-8a3c-32d05db380fc/image.png" alt=""></p>
<h3 id="분석에-앞서">분석에 앞서</h3>
<ul>
<li>상위 = parentId, 하위 = categoryId</li>
<li>상위, 하위 카테고리에 대한 컴포넌트, api 각각 존재
  -&gt; 상위 카테고리가 정해져야 하위 카테고리 렌더링됨</li>
<li>상위 카테고리 변동시, 처음에 하위 카테고리 리스트 첫 요소를 디폴트값 초기화</li>
</ul>
<h3 id="분석-과정">분석 과정</h3>
<ul>
<li>상위 변경 시 하위 카테고리 초기화(하위 첫 번째)까지 시간이 걸림</li>
<li>그 사이 parentId 변화 replace로 기존 하위 카테고리에 따라 렌더링(상황3번)</li>
<li>카테고리 변화를 담당하는 함수(handleCategory)에서 해결하기로 생각</li>
</ul>
<hr>
<h1 id="🧩-해결">🧩 해결</h1>
<h3 id="해결해야-할-부분">해결해야 할 부분</h3>
<pre><code class="language-typescript">    // 기존 handleCategory
const handleCategory = (level: &#39;parentId&#39; | &#39;categoryId&#39;, value: string) =&gt; {

  const newParams = new URLSearchParams(searchParams.toString());
    newParams.set(level, value);

    if (pathName.includes(&#39;detail&#39;)) {        // 요놈이 문제다
      router.push(`/productList?${newParams.toString()}`);
    } else {
      router.replace(`?${newParams.toString()}`);
    }
  };</code></pre>
<blockquote>
<p>if(detail) 부분을 바꾸자 </p>
</blockquote>
<h3 id="리팩토링">리팩토링</h3>
<pre><code class="language-typescript">    // 리팩토링 코드
const handleCategory = async (
    level: &#39;parentId&#39; | &#39;categoryId&#39;,
    value: string,
  ) =&gt; {
    const newParams = new URLSearchParams(searchParams.toString());
    newParams.set(level, value);


    if (pathName.includes(&#39;detail&#39;)) {        // 상세 페이지일 때
      if (level === &#39;parentId&#39;) {        // categoryId일때는 문제가 없기에 parentId 일때만 추가
        const sub: Category[] = await fetchApi(`/categories/parents/${value}`, {
          method: &#39;GET&#39;,
        });                        // sub: 하위 카테고리 리스트
        const initCategoryuId = sub[0].id;    // 변수 네이밍 오탈자 양해 부탁드립니다
        newParams.set(&#39;categoryId&#39;, initCategoryuId);
      }
      router.push(`/productList?${newParams.toString()}`);
    } else {
      router.replace(`?${newParams.toString()}`);</code></pre>
<blockquote>
<p>replace 전에 하위 카테고리를 패칭해주고, 거기서 첫 번째를 파라미터에 넘기기.
하위 카테고리까지 newParams에 담고 replace해주기.</p>
</blockquote>
<blockquote>
<p>기존: 상위 클릭 -&gt; replace(상위만) -&gt; 하위 api 패칭 -&gt; 문제 상황 -&gt; 하위 첫 번째 카테고리 초기화 -&gt; replace(하위만) -&gt; 최신 렌더링</p>
</blockquote>
<blockquote>
<p>리팩토링: 상위 클릭 -&gt; 하위를 먼저 api 호출 -&gt; replace(상위,하위 모두) -&gt; 최신 렌더링</p>
</blockquote>
<hr>
<h1 id="➕-추가">➕ 추가</h1>
<p>더보기 버튼을 누른 상태에서 다른 상위 카테고리를 눌렀을 때도 같은 문제 발생</p>
<h3 id="why">why?</h3>
<p>정렬, 카테고리는 파라미터로 관리하면서, page는 상태로 관리했던 게 문제</p>
<h3 id="how">how</h3>
<p>page도 파라미터로 넘겨주기</p>
<p>서버 컴포넌트도 아닌데 fetch만 사용했던게 패착
그냥 react-query 사용할 걸 그랬다..
설계를 잘 합시다</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[HTML,CSS] section과 article의 차이, CSS word-break]]></title>
            <link>https://velog.io/@just-codingbaby/HTMLCSS-section%EA%B3%BC-article%EC%9D%98-%EC%B0%A8%EC%9D%B4-CSS-word-break</link>
            <guid>https://velog.io/@just-codingbaby/HTMLCSS-section%EA%B3%BC-article%EC%9D%98-%EC%B0%A8%EC%9D%B4-CSS-word-break</guid>
            <pubDate>Sun, 29 Sep 2024 06:08:03 GMT</pubDate>
            <description><![CDATA[<h2 id="section-과-article의-차이"><code>&lt;section&gt;</code> 과 <code>&lt;article&gt;</code>의 차이</h2>
<ul>
<li>section: <strong>영역들(큰 주제)를 논리적으로 그룹화</strong>해서 분리하는 역할.<br>article의 집합소가 될 수 있음<blockquote>
<p>제목이 필수값이기에 어떤 문장에 <code>&lt;h&gt;</code>를 사용해야할지 생각해 봐야겠다</p>
</blockquote>
</li>
<li>article: <strong>문서내에서 그룹화</strong>해서 분리하는 역할, 내용이 <strong>독립적임</strong><blockquote>
<p>독립적이라는 것은 특정 맥락에 국한되지 않고 다른 곳에서 참조되거나 링크될 수 있음을 의미 <br>ex) 블로그 포스트 ,뉴스 기사</p>
</blockquote>
</li>
<li>div: 논리적인 관계 없이 그룹화하거나 디자인을 위해 사용</li>
</ul>
<pre><code>&lt;section class=&quot;section1&quot;&gt;
        &lt;div class=&quot;section1_block&quot;&gt;
          &lt;div class=&quot;section1_title_layer&quot;&gt;
            &lt;div class=&quot;section1_title&quot;&gt;
              일상의 모든 물건을
              거래해 보세요
            &lt;/div&gt;
            &lt;div class=&quot;show-btn&quot;&gt;
              &lt;a href=&quot;/items.html&quot; class=&quot;btn-font&quot;&gt;구경하러 가기&lt;/a&gt;
            &lt;/div&gt;
          &lt;/div&gt;
          &lt;div&gt; 
            &lt;img src=&quot;img/panda.png&quot; alt=&quot;panda img&quot; class=&quot;section1_image&quot;&gt;
          &lt;/div&gt;
        &lt;/div&gt;  
      &lt;/section&gt;</code></pre><p>이건 마켓 랜딩 페이지를 만들고 있는 내 코드의 일부분이다
여기서 section1_title_layer를 포함하는 태그를 
div가 아닌 article로 쓰는게 더 좋을 것 같다</p>
<h2 id="목적에-맞는-네이밍">목적에 맞는 네이밍</h2>
<blockquote>
<p>추가적으로 이 파일에서 section에 사용될 클래스 이름들을 <br>단순히 section1,2 이런식으로 뒤에 숫자만 붙혀서 표기하였다.
앞으로 이런 점들을 조심히 하고, 클래스의 목적에 맞게 
이름을 설정할 수 있도록 해야겠다
클래스이름 뿐만 아니라 파일 이름들도.</p>
</blockquote>
<h2 id="css-속성-word-break">CSS 속성: word-break</h2>
<p><a href="https://developer.mozilla.org/ko/docs/Web/CSS/word-break">https://developer.mozilla.org/ko/docs/Web/CSS/word-break</a>
mdn 공식문서에 있는 word-break에 대한 설명이다.</p>
<p>html말고 CSS에서도 줄바꿈을 제어할 수 있다
단순히 html로 요소를 제어하는 것 뿐만 아니라 
css로도 원하는 대로 표현하는 것이 중요할 것 같다
위 코드에서도 나는 기존에 <code>&lt;br&gt;</code>태그로 나눴었지만,
문서를 보고 class에 속성을 추가하여 적용해보았다</p>
<pre><code>.section1_title {
  width: 70%;
  font-weight: 700;
  font-size: 40px;
  line-height: 56px;
  word-break:break-all;
}</code></pre><p>원래 width가 없었지만 내가 원하는 대로 줄바꿈이 안 되어
width도 곁들여 주었다 </p>
<p>CSS는 좀 까다롭다. 롤 끊고 그 시간에 공부해야지</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[HTML/CSS]캐스케이딩과 시맨틱 태그]]></title>
            <link>https://velog.io/@just-codingbaby/weekly1</link>
            <guid>https://velog.io/@just-codingbaby/weekly1</guid>
            <pubDate>Thu, 12 Sep 2024 09:43:03 GMT</pubDate>
            <description><![CDATA[<h2 id="q1-css의-cascading은-무엇일까">Q1. CSS의 Cascading은 무엇일까?</h2>
<blockquote>
<p>CSS: <strong>C</strong>ascading <strong>S</strong>tyle <strong>S</strong>heets
Cascading = 폭포, 계단식</p>
</blockquote>
<p>딘어의 뜻에서 유추할 수 있듯이 <strong>계층이라는 속성</strong>을 가졌다고 볼 수 있다</p>
<h3 id="스타일-적용-고려-대상">스타일 적용 고려 대상</h3>
<ul>
<li>우선 순위</li>
</ul>
<ol>
<li>CSS 중요도<blockquote>
<p>프로그래머 &gt; 사용자 &gt; 브라우저</p>
</blockquote>
</li>
<li>명시도<blockquote>
<p>인라인 &gt; id &gt; 클래스 &gt; 태그</p>
<pre><code>(적용 범위가 좁을수록 우선 순위가 높음)</code></pre></blockquote>
</li>
<li>코드 순서<blockquote>
<p>나중에 온 속성이 우선 적용</p>
</blockquote>
</li>
</ol>
<ul>
<li>상속<blockquote>
<p>부모 요소의 스타일을 자식 요소가 물려 받음</p>
</blockquote>
</li>
</ul>
<hr>
<h2 id="q2-시맨틱-태그를-사용하는-이유">Q2. 시맨틱 태그를 사용하는 이유</h2>
<blockquote>
<p>semantic = 의미론적인</p>
</blockquote>
<p>시맨틱 태그는 <strong>태그 내용에 의미를 부여하는 태그</strong></p>
<h3 id="이점">이점?</h3>
<ul>
<li>구조 파악에 용이하다 (header, main, footer 등등)<ul>
<li>가독성 향상에도 도움이 될 수 있음</li>
</ul>
</li>
<li>SEO 향상<ul>
<li>검색 엔진에서 웹사이트 순위에 영향을 줌</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[HTML/CSS] 판다마켓 웹 페이지 만들기]]></title>
            <link>https://velog.io/@just-codingbaby/HTMLCSS-%ED%8C%90%EB%8B%A4%EB%A7%88%EC%BC%93-%EC%9B%B9-%ED%8E%98%EC%9D%B4%EC%A7%80-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@just-codingbaby/HTMLCSS-%ED%8C%90%EB%8B%A4%EB%A7%88%EC%BC%93-%EC%9B%B9-%ED%8E%98%EC%9D%B4%EC%A7%80-%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Thu, 12 Sep 2024 08:54:45 GMT</pubDate>
            <description><![CDATA[<h1 id="시작은-괜찮다">시작은 괜찮다</h1>
<p>판다마켓이라는 임의의 사이트 디자인을 만들어 보게 되었다
디자인은 figma를 통해 주어졌다
기본 요구사항은 모두 충족하는 것 같고, 심화 요구사항은 아직 내가 html,css에
익숙하지 않아서 손을 대지 않았다
<del>1학기때 웹프로그래밍 수업 열심히 들을 걸...</del></p>
<p>아직 프론트 지식이 많이 부족하지만 생각보다 훨씬 재밌는 것 같다
그래도 손에 익고 있어서 금방 활용할 수 있을 것 같다</p>
<p>배포는 netlify를 통해서 배포하였다
<strong><a href="https://deluxe-caramel-ad284d.netlify.app/">미션1 제출물</a></strong></p>
<p>앞으로는 내가 부족했던 부분과 그 부분을 어떻게 해결하려고 하였는지를
벨로그에 차근차근 작성해 나갈 예정이다</p>
<hr>
<h2 id="html">HTML</h2>
<pre><code class="language-html">          &lt;div&gt; 
            &lt;img src=&quot;img/panda.png&quot; alt=&quot;panda img&quot; class=&quot;section1_image&quot;&gt;
          &lt;/div&gt;</code></pre>
<br>
일부 세션에 이미지를 넣는 부분이었다.
난 처음에 div태그를 사용하지 않고 img만 사용했었는데
img태그의 레이아웃이나 스타일을 관리할 때는 div태그로 감싸주는 게 좋다고 한다

<hr>
<h2 id="css">CSS</h2>
<p>처음에는 figma사이트에 주어진 레이아웃 양식을 그대로 사용하였다
width,height 등등의 값들을 고정값으로 사용하니 브라우저 크기가 크거나 작아질 때,
요소들의 크기도 변화가 되어야 했는데 변하지 않았었다
그래서 일부분을 제외하고는 코드를 싹 다 지우고 새로 짰다</p>
<pre><code class="language-css">.section1_image {
  max-width: 100%;
  height:auto;
  position: relative;
  top:4px;
}</code></pre>
<p>아직은 기초이기에 애를 먹는 코드는 없었지만 유용하게 사용할 것 같은 부분이다
내 코드는 원래 width:100%, height:고정값(ex: 100px)을 입력해뒀었다
그렇게 하니까 브라우저 사이즈에 변화가 생길 때, 사진의 가로 사이즈만 들쭉날쭉해져서 
보기 흉한느낌?이 들었다, 그러다가 서칭을 통해 <strong>height:auto</strong>를 적용하였고,
덕분에 <strong>이미지 사이즈의 가로 세로 비율을 자동</strong>으로 맞춰줄 수 있게 되었다
너비부분은 그냥 width:100%를 사용해도 될 것 같다</p>
<p>css 파일에 250줄 정도가 적혀있다
중복되는 부분은 자바 인터페이스 느낌으로 사용할 수 있게 하면서 코드를 줄이긴 했는데
아직 내 코드가 효율적인 코드인지는 모르겠다
계속 코딩하다 보면 알게 되겠지</p>
<blockquote>
<p>오늘의 회고록은 여기서 끝</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA] 버퍼 비우기]]></title>
            <link>https://velog.io/@just-codingbaby/JAVA-%EB%B2%84%ED%8D%BC-%EB%B9%84%EC%9A%B0%EA%B8%B0</link>
            <guid>https://velog.io/@just-codingbaby/JAVA-%EB%B2%84%ED%8D%BC-%EB%B9%84%EC%9A%B0%EA%B8%B0</guid>
            <pubDate>Tue, 21 Nov 2023 11:55:08 GMT</pubDate>
            <description><![CDATA[<h2 id="버퍼에-남는-이유">버퍼에 남는 이유</h2>
<pre><code class="language-java">System.out.print(&quot;정수 입력:&quot;);
int i = sc.nextInt();
System.out.print(&quot;문자열 입력:&quot;);
String s = sc.nextLine();

System.out.println(&quot;int = &quot;+ i);
System.out.println(&quot;String = &quot;+ s);</code></pre>
<p><img src="https://velog.velcdn.com/images/just-codingbaby/post/e1809645-eadf-4fb1-a5ba-f8120f21749f/image.png" alt=""></p>
<p>이런식으로 결과값이 나온다
이 코드는 버퍼에 개행 문자가 남아서 엔터가 nextLine에 입력된 것이다</p>
<p><strong>nextLine은 분리자(개행 문자)까지 문자열로 가져옴</strong></p>
<ul>
<li>읽어올 때 분리자까지 읽음 -&gt; 버퍼에 아무것도 남지 않음</li>
</ul>
<p>nextLine을 제외한 나머지는?</p>
<ul>
<li><strong>next나 nextInt는 분리자를 제외하고 읽어옴 -&gt; 버퍼에 분리자가 남게 됨</strong>
  -&gt; 이 메소드 다음에 nextLine이 오면, 남아있던 분리자가 nextLine에 읽어지는 것.</li>
</ul>
<h2 id="버퍼-비우는-법">버퍼 비우는 법</h2>
<ul>
<li>문자열 입력 받을 nextLine 앞에 nextLine을 또 하나 넣어주면 됨</li>
</ul>
<pre><code class="language-java">
System.out.print(&quot;정수 입력:&quot;);
int i = sc.nextInt();
sc.nextLine();            //문자열 입력 전, 개행 문자 받을 nextLine 추가

System.out.print(&quot;문자열 입력:&quot;);
String s = sc.nextLine();

System.out.println();
System.out.println(&quot;int = &quot;+ i);
System.out.println(&quot;String = &quot;+ s);</code></pre>
<p><img src="https://velog.velcdn.com/images/just-codingbaby/post/84eaf417-ab55-46a8-833a-b6566d634914/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA] 알아두면 좋은 것]]></title>
            <link>https://velog.io/@just-codingbaby/JAVA-%EA%B7%B8%EB%83%A5-%EC%9D%B4%EA%B2%83%EC%A0%80%EA%B2%83</link>
            <guid>https://velog.io/@just-codingbaby/JAVA-%EA%B7%B8%EB%83%A5-%EC%9D%B4%EA%B2%83%EC%A0%80%EA%B2%83</guid>
            <pubDate>Wed, 08 Nov 2023 18:28:45 GMT</pubDate>
            <description><![CDATA[<h2 id="추상-클래스와-인터페이스의-차이">추상 클래스와 인터페이스의 차이?</h2>
<ul>
<li>추상 클래스는 클래스들의 공통된 본질을 구현(건물 기초 설계도)</li>
<li>인터페이스는 추가하고자 하는 기능만을 구현(특수 기능)</li>
</ul>
<hr>
<h2 id="오버로딩과-오버라이딩의-차이">오버로딩과 오버라이딩의 차이?</h2>
<p>오버로딩은 한 클래스 내에서 같은 이름으로 다른 메소드를 만듦</p>
<ul>
<li>메소드의 파라미터 타입이 다르거나, 갯수가 달라야함</li>
<li><strong>상속과 관련 없음</strong></li>
</ul>
<p>일부 코드로 예시를 보자</p>
<pre><code class="language-java">public class Ex {
    public int add(int a,int b) {
        return a + b;
    }

    public double add(double a, double b) {        //파라미터 타입이 다름
        return a + b;
    }
}</code></pre>
<p>오버라이딩은 <strong>상속 받은</strong> 클래스 내에서 입맛에 맞게 변경하는 것</p>
<ul>
<li>슈퍼 클래스의 메소드와 서브 클래스의 파라미터와 반환값까지 일치해야함.
  내용만 다름</li>
</ul>
<pre><code class="language-java">public class Unit {
    int hp = 0;

    public void printUnit(int hp) {
        System.out.println(&quot;기초 유닛입니다&quot;);
                System.out.println(&quot;HP&quot; + hp);
    }
}

class Npc extends Unit {        //상속 받고, 
    int hp = 100;

    public void printNpc(int hp) {        //파라미터 타입, 갯수 모두 일치
        System.out.println(&quot;Npc 유닛입니다&quot;);
                System.out.println(&quot;HP&quot; + hp);
    }
}</code></pre>
<p><strong>오버로딩과 오버라이딩 둘 다 다형성을 구현한다는 점은 공통점임</strong></p>
<hr>
<h2 id="문자열-메소드-equals-compareto-차이">문자열 메소드 equals, compareTo 차이?</h2>
<p>얘네는 <strong>모두 단순 값</strong>을 비교함
equals(): 같다, 다르다만 비교
compareTo(): 작다, 같다, 다르다 </p>
<h2 id="문자열-변수-참조-비교">문자열 변수 참조 비교</h2>
<pre><code class="language-java">String str1 = new String(&quot;java&quot;);
String str2 = new String(&quot;java&quot;);
String str3 = &quot;java&quot;;
String str4 = &quot;java&quot;;</code></pre>
<p>str1 == str2는 false</p>
<ul>
<li>얘네는 객체 참조여서 <strong>주소 비교</strong></li>
</ul>
<p>str3 == str4는 True</p>
<ul>
<li>얘네는 리터럴이므로 값 비교. 같은 리터럴 테이블 공유</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[컴퓨터 네트워크] 1-3. 기초]]></title>
            <link>https://velog.io/@just-codingbaby/%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-1-3.-%EA%B8%B0%EC%B4%88</link>
            <guid>https://velog.io/@just-codingbaby/%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-1-3.-%EA%B8%B0%EC%B4%88</guid>
            <pubDate>Wed, 18 Oct 2023 09:09:22 GMT</pubDate>
            <description><![CDATA[<h1 id="performance-loss-delay-throughput">Performance: loss, delay, throughput</h1>
<h2 id="packet-loss와-delay의-발생">packet loss와 delay의 발생</h2>
<p><strong>input link를 통해 들어오는 속도가 output link를 통해 나가는 속도보다 빠를 때 발생</strong></p>
<ul>
<li>라우터에는 Input link 와 output link가 존재 -&gt; 이를 통해 패킷 이동</li>
</ul>
<p><img src="https://velog.velcdn.com/images/just-codingbaby/post/f896bf3e-a4ff-4788-bde8-57fbc7f00046/image.png" alt="">
사진처럼, 속도 차이로 패킷은 버퍼에서 자신의 턴을 기다리면서 <strong>queueing dela</strong>y 발생</p>
<p>그리고 버퍼가 다 쌓이면 <strong>loss</strong> 발생</p>
<h2 id="packet-delay-4요소">Packet delay 4요소</h2>
<p><img src="https://velog.velcdn.com/images/just-codingbaby/post/be996780-51b1-40fa-a5d8-0fefb3cd4cdf/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/just-codingbaby/post/82ffe2b6-2961-4f9b-adf6-cf349674f892/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/just-codingbaby/post/5dc23f6b-0c71-4a8c-b394-335ece3aca24/image.png" alt="">
processing rate의 경우, 일반적으로 매우 작아서 포함 X</p>
<p>queueing delay: 버퍼(큐)에서 기달리는 시간</p>
<p><strong>transmission delay</strong>: 비트들이 Output link에 올라가는데 걸리는 시간</p>
<ul>
<li>패킷은 또 여러 비트들로 이루어져 있음</li>
</ul>
<p><strong>propagation delay</strong>: output link를 통과하는데 걸리는 시간</p>
<p>trans와 prop은 매우 다르다는 걸 유의</p>
<p>packet delay 예시를 보자
<img src="https://velog.velcdn.com/images/just-codingbaby/post/0862aa45-24a9-4405-8dec-05e5b5c772f5/image.png" alt=""></p>
<p>간단한 예시를 살펴보자
car가 비트, caravan이 패킷을 의미
부스 통과 시간 = 10대 x 12초 = 120초(2분)
propagation 시간 = 100km / 시속 100km = 60분
2 + 60 = 62 min</p>
<p><img src="https://velog.velcdn.com/images/just-codingbaby/post/49cab174-6b0a-4b32-9f50-befbb66b1cab/image.png" alt="">
La = input link, R = output link라고 볼 수 있다</p>
<h2 id="packet-loss">Packet loss</h2>
<p><img src="https://velog.velcdn.com/images/just-codingbaby/post/a7a5b83b-53ff-4956-8c5a-9417fb37ba15/image.png" alt="">
큐의 크기는 유한함</p>
<p>큐가 꽉 차고 손실이 발생하면,
손실된 패킷은 이전 노드에서 다시 전송되어야 함</p>
<h2 id="throughput">Throughput</h2>
<p>비트 전송 속도를 의미함</p>
<p><img src="https://velog.velcdn.com/images/just-codingbaby/post/f94a5043-d91d-42d8-934e-600f7895728a/image.png" alt="">
<strong>bottleneck link</strong>: 느린 전송속도가 end-end throughput을 결정함
Rs &lt; Rc -&gt; Rs
Rs &gt; Rc -&gt; Rc</p>
<h1 id="security">Security</h1>
<h2 id="malware">Malware</h2>
<p>맬웨어는 악성 소프트웨어를 의미</p>
<p>malware can get in host from:
• <strong>virus</strong>: self-replicating infection by receiving/executing object
(e.g., e-mail attachment)
• <strong>worm</strong>: self-replicating infection by passively receiving object that gets itself executed</p>
<h2 id="denial-of-service">Denial Of Service</h2>
<p><img src="https://velog.velcdn.com/images/just-codingbaby/post/053bbb12-7e13-458d-958d-006c06b3c66f/image.png" alt=""></p>
<h2 id="packet-sniffing">Packet Sniffing</h2>
<p><img src="https://velog.velcdn.com/images/just-codingbaby/post/c2a114d0-476d-4f6b-81b5-ec994e75a4a2/image.png" alt="">
패킷 스니핑: 패킷의 정보를 빼오는 것</p>
<ul>
<li>패킷 스니퍼라고 해서 패킷의 정보를 볼 수 있는 프로그램이 있음 ( 와이어샤크)</li>
</ul>
<h2 id="ip-spoofing">IP Spoofing</h2>
<p><img src="https://velog.velcdn.com/images/just-codingbaby/post/0137d8f8-a41f-4719-9698-adacfe1fd0d0/image.png" alt=""></p>
<p>IP 스푸핑: 공격자가 허위 IP 주소를 보내는 것</p>
<h1 id="protocol-layers-service-models">Protocol layers, service models</h1>
<p><strong>네트워크는 매우 복잡하다</strong>
-&gt; 구조를 만들고 조직화할 수는 없을까?</p>
<p>이래서 등장한게 <strong>layer</strong>다
layer는 각 레이어마다 서비스를 제공한다</p>
<h2 id="why-layering">Why layering?</h2>
<p>복잡한 시스템을 다룰 수 있음</p>
<ul>
<li>명확한 구조가 식별과 복잡한 시스템들의 관계를 보여줌</li>
<li>유지와 시스템 업데이트가 쉬움</li>
</ul>
<h2 id="internet-protocol-stack">Internet protocol stack</h2>
<p><img src="https://velog.velcdn.com/images/just-codingbaby/post/aab0b42b-8528-4e76-aafa-152e14160380/image.png" alt=""></p>
<p>프로토콜들을 계층적으로 조직화한 것이 레이어임</p>
<p><img src="https://velog.velcdn.com/images/just-codingbaby/post/ef88310f-83ad-479e-873a-1935506d1bbc/image.png" alt="">
application 레이어를 세분화하여 presentation, session 레이어 추가</p>
<p><img src="https://velog.velcdn.com/images/just-codingbaby/post/05616ec4-b321-4a97-b297-b154cecacc21/image.png" alt="">
source에서는 헤더파일들을 추가해 나가고,
destination에서는 헤더파일들을 빼나감</p>
<p>application, transport 레이어는 source와 destination에만 있으면 됨</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[컴퓨터 네트워크] 1-2. 기초]]></title>
            <link>https://velog.io/@just-codingbaby/%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-1.-Computer-Network-and-Internet-2</link>
            <guid>https://velog.io/@just-codingbaby/%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-1.-Computer-Network-and-Internet-2</guid>
            <pubDate>Tue, 17 Oct 2023 17:56:38 GMT</pubDate>
            <description><![CDATA[<h1 id="network-core">Network core</h1>
<p>interconnected router들로 이루어져 있음</p>
<p>host가 메세지를 <strong>packet</strong>으로 쪼갬</p>
<h2 id="packet-switching-store-and-forward">Packet-switching: store-and-forward</h2>
<p><strong>Transmission delay</strong> = L/R</p>
<p><strong>Store and Forward</strong> 방식</p>
<ul>
<li>router로부터 경로를 할당 받고 다음 link로 이동해야 하기 때문에 저장하고 이동함</li>
</ul>
<p><strong>end-end delay</strong> = 2L/R (assuming zero propagation delay)
<img src="https://velog.velcdn.com/images/just-codingbaby/post/670ccc88-f6ff-4e72-9c00-c5c07998274b/image.png" alt=""></p>
<p>ex) L = 10 Kbits, R = 100 Mbps
one - hop transmission delay = 0.1msecs ( 1msec = 1/1000 msec)</p>
<h2 id="packet-switching-queueing-delay-loss">packet-switching: queueing delay, loss</h2>
<p><img src="https://velog.velcdn.com/images/just-codingbaby/post/7a39767a-60da-4ad3-9ea5-c154242b6cf4/image.png" alt=""></p>
<p><strong>Packet queueing and loss</strong>
버퍼에 도착하는 속도(arrival rate)가 전송 속도(transmission rate)보다 빠르면 발생</p>
<p>패킷은 output link로 전송되기를 기다림</p>
<p>라우터 속 버퍼(메모리)가 꽉 차면 패킷 손실이 발생할 수 있음</p>
<h2 id="network-core의-두-가지-기능">Network core의 두 가지 기능</h2>
<p><strong>Forwarding</strong>
local action
output link를 결정하는 기능</p>
<p><strong>Routing</strong>
global action
목적지 경로를 결정하는 기능</p>
<p><img src="https://velog.velcdn.com/images/just-codingbaby/post/7b0fbb1c-9196-4b5a-beb5-005a007fd4bf/image.png" alt=""></p>
<h2 id="circuit-switching">Circuit Switching</h2>
<p><strong>출발지와 목적지 사이에 경로가 정해져 있음(call)</strong> -&gt; delay, loss 완화
<strong>But, bandwidth도 고정되어 있음</strong></p>
<p>dedicated resources: no sharing
-&gt; 간섭이 없다</p>
<p>call이 없어도 Idle 상태를 유지 -&gt; 낭비</p>
<p>주로 전화망에서 사용</p>
<ul>
<li>누군가와 통화를 하고 있으면, 다른 사람이 그 사람에게 통화 불가</li>
</ul>
<p><img src="https://velog.velcdn.com/images/just-codingbaby/post/fd1e8e55-7cd2-4625-bb41-c1599c8af52c/image.png" alt=""></p>
<h2 id="circuit-switching-fdm-and-tdm">Circuit Switching: FDM and TDM</h2>
<h3 id="frequency-distribution-multiplexingfdm">Frequency Distribution Multiplexing(FDM)</h3>
<p>주파수를 분리하여 동시 전송
정해진 band 만을 사용</p>
<h3 id="time-division-multiplexing-tdm">Time Division Multiplexing (TDM)</h3>
<p>slot을 시간으로 분리</p>
<p><img src="https://velog.velcdn.com/images/just-codingbaby/post/7817fe99-5a38-4b80-b55c-19082d331ee9/image.png" alt=""></p>
<p>4명의 유저가 사용하고 있으므로, 5명일 때 1명은 사용 불가</p>
<h2 id="packet-switching-vs-circuit-switching">Packet Switching vs Circuit Switching</h2>
<p><img src="https://velog.velcdn.com/images/just-codingbaby/post/ce1f4ab4-d9bf-46a5-b5cd-6e1ae9afc0b9/image.png" alt=""></p>
<p><strong>패킷 스위칭이 많은 유저가 이용 가능하므로 효율성이 좋음</strong></p>
<h3 id="패킷-스위칭의-장점">패킷 스위칭의 장점</h3>
<p>난잡한 데이터(bursty data)에 유리</p>
<ul>
<li>누군가 사용 안 할때 다른 유저가 사용 가능(resource sharing)</li>
<li>간단하고, call setup이 필요 없다R</li>
</ul>
<h3 id="패킷-스위칭의-단점">패킷 스위칭의 단점</h3>
<p>queueing delay와 loss</p>
<ul>
<li>reliable data transfer, congestion control가 필요</li>
</ul>
<p>bandwidth 보장이 필요할 때 보장이 안 됨(오디오, 비디오)</p>
<h3 id="결론은">결론은?</h3>
<p>Circuit Switching </p>
<ul>
<li>real-time-traffic에 유리하다(전화 같은 것들)</li>
<li>Constant and predictable end-to-end delay</li>
</ul>
<p>Packet Switching</p>
<ul>
<li>bandwidth 공유하는 상황에서 유리하다</li>
<li>더 간단하고, 효율적이고, 비용이 덜 든다</li>
</ul>
<h2 id="internet-structure-network-of-networks">Internet Structure: network of networks</h2>
<p>호스트들은 <strong>access</strong> internet service provider(ISP)를 통해 인터넷에 연결됨</p>
<p>Access ISP 들은 서로 연결되어 있어야 함</p>
<ul>
<li>그래서 서로 다른 호스트가 서로에게 패킷 전송 가능</li>
</ul>
<p>network of networks 는 매우 복잡함</p>
<p>Q: 수 많은 access ISP들이 그들끼리 서로 연결되어 있다면?
A: 연결이 너무 많아서 불가능</p>
<p>Q: 중간에 하나의 global ISP가 존재하면?
A: 하나로 전세계를 관리하기도 힘듦</p>
<p>Q: 여러 ISP가 존재하면? ( Access ISP 와 ISP는 다름)
A: 어느 하나로 집중될 수도 있음</p>
<p>그러면 어떻게?</p>
<p><strong>IXP(Internet exchange point)</strong>를 연결해주자
IXP는 ISP끼리 연결시켜주는 라우터</p>
<p>Peering : ISP끼리 서로 연결하는 것
<img src="https://velog.velcdn.com/images/just-codingbaby/post/3c224262-8630-4273-b224-fc331a3825b1/image.png" alt=""></p>
<p>access net을 ISP와 연결시켜주는 regional ISP도 있음
regional ISP는 access net에게 비용을 받고,
regional ISP는 ISP에게 비용을 줌
<img src="https://velog.velcdn.com/images/just-codingbaby/post/21cf5c10-a9be-4ee9-8988-aa965abf6390/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/just-codingbaby/post/c3bd2737-024a-4d41-a31e-c77e19e22577/image.png" alt=""></p>
<p>Content provider network 라는 것도 있음
이건 자체적으로 그들만의 데이터 센터가 있음
network를 만들고, 직접 연결함</p>
<ul>
<li>구글, 마이크로소프트 등등 자체 서비스를 제공</li>
<li>서비스 제공할 땐, ISP와 연결</li>
</ul>
<p><img src="https://velog.velcdn.com/images/just-codingbaby/post/e5274fde-be86-4b81-acf9-60f286557c22/image.png" alt="">
이 그림을 보면 쉽게 이해할 수 있다
content provider network는 private network</p>
<p><img src="https://velog.velcdn.com/images/just-codingbaby/post/7dde2c20-5a71-47fe-b130-20bbec27c8a2/image.png" alt="">
POP은 네트워크 서비스 제공 업체가 사용자에게 서비스를 제공하기 위해 설치한 장소</p>
<ul>
<li>보통 중심부에 설치된다고 함</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[컴퓨터 네트워크]  1-1. 기초]]></title>
            <link>https://velog.io/@just-codingbaby/%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-1.-Computer-Network-and-Internet-1</link>
            <guid>https://velog.io/@just-codingbaby/%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-1.-Computer-Network-and-Internet-1</guid>
            <pubDate>Tue, 17 Oct 2023 12:51:01 GMT</pubDate>
            <description><![CDATA[<h1 id="what-is-internet">What is Internet?</h1>
<h2 id="nuts-and-bolts-view-구성요소-관점">nuts and bolts view (구성요소 관점)</h2>
<p> 수 많은 <strong>devices</strong> 로 이루어짐</p>
<ul>
<li><strong>hosts</strong> = end systems</li>
<li>running network <strong>apps</strong> at Internet’s “edge”</li>
</ul>
<p><strong>패킷 스위치(packet switch)</strong></p>
<p> <strong>Communication links</strong></p>
<p> <strong>Networks</strong></p>
<hr>
<p><strong>Internet</strong> : network of networks</p>
<ul>
<li>Interconnected ISPs</li>
</ul>
<p><strong>Protocols are everywhere</strong></p>
<ul>
<li>메시지 전송, 받음을 컨트롤</li>
<li>e.g., HTTP (Web), streaming video, Skype, TCP, IP, WiFi, 4G, Ethernet</li>
</ul>
<p><strong>Internet Standards</strong></p>
<ul>
<li>RFC: Request for Comments</li>
<li>IETF: Internet Engineering Task Force</li>
</ul>
<hr>
<h2 id="service-view-서비스-관점">Service view (서비스 관점)</h2>
<p>application을 위한 서비스를 제공하는 <strong>infrastructure</strong></p>
<ul>
<li>ex) web, email, streaming video 등등</li>
</ul>
<p>distributed application을 위한 <strong>프로그래밍 인터페이스</strong> 제공</p>
<hr>
<h1 id="what-is-protocol">What is Protocol?</h1>
<p>주고 받는 메세지의 포맷과 순서. 그에 따른 행동들을 의미</p>
<p><img src="https://velog.velcdn.com/images/just-codingbaby/post/032b3b88-dda1-4b3e-81eb-479f49a79da6/image.png" alt=""></p>
<hr>
<h1 id="network-structure">Network structure</h1>
<h2 id="network-edge">Network Edge</h2>
<p>host: clients and Servers
server는 종종 데이터 센터에 있음</p>
<blockquote>
<p>호스트는 packet을 보냄</p>
</blockquote>
<ul>
<li>파일을 <strong>packet</strong>이라는 작은 청크로 쪼개고, access network로 전송함</li>
</ul>
<p><img src="https://velog.velcdn.com/images/just-codingbaby/post/362dcc46-5786-4af7-9203-ffded8ec34e4/image.png" alt=""></p>
<p>packet transmission delay = L/R
<strong>length = L, transmission rate = R</strong></p>
<h2 id="access-network-physical-media">Access Network, physical media</h2>
<p>wired, wireless communication links
-&gt; transmission rate(전송 속도) 를 볼 수 있음</p>
<h2 id="network-core">Network Core</h2>
<p>interconnected router, network of networks</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA] 계산기 만들기 ]]></title>
            <link>https://velog.io/@just-codingbaby/JAVA-%EA%B3%84%EC%82%B0%EA%B8%B0-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@just-codingbaby/JAVA-%EA%B3%84%EC%82%B0%EA%B8%B0-%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Tue, 12 Sep 2023 07:28:16 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>오늘은 메서드에 대해 알아보고 간단히 계산기를 만들어보았다
메서드란 우리가 c언어에서 사용하는 함수와 같은 의미이다
java에서는 전부 메서드로 통일하고 사용하는 것 같다</p>
</blockquote>
<blockquote>
<p>대략적인 그림은 숫자를 입력받고 해당 숫자에 해당하는 사칙연산을 수행하는 프로그램을 만드는 것이다.
그런데 코드를 보면 showMenu() 이후 nextInt가 아니라 next().charat(0)을 받았다. 이건 혹여나 메뉴 입력받을 때 문자가 오는 것을 방지하기 위해 설정해준 코드이다. </p>
</blockquote>
<ul>
<li>*<em>자바에서 문자를 입력하는 방법은 문자열로 입력받고 char로 바꿔야한다고 한다. 그래서 next()나 nextline() 뒤에 charat()을 붙이고 매개변수에 인덱스를 입력해주면 된다.
ex) charat(0)이면 0번째 인덱스, charat(3)이면 3번째 인덱스 *</em></li>
</ul>
<pre><code class="language-java">
import java.util.Scanner;

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

        while(true) {
            showMenu();

            char myChar = sc.next().charAt(0);
            if(!checkNum(myChar)) {
                System.out.println(&quot;메뉴를 잘못 선택했습니다.&quot;);
                continue;
            }
            int num = myChar - &#39;0&#39;;

            if(num == 0)break;
            if(num &gt; 4) {
                System.out.println(&quot;메뉴를 잘못 선택했습니다. &quot;);
                continue;
            }

            System.out.print(&quot;첫 번째 숫자:&quot;);
            int num1 = sc.nextInt();

            System.out.print(&quot;두 번째 숫자:&quot;);
            int num2 = sc.nextInt();

            if(num==1)addNum(num1,num2);
            else if(num==2)minusNum(num1,num2);
            else if(num==3)multiplyNum(num1,num2);
            else if(num==4)divideNum(num1,num2);
        }

        System.out.println(&quot;계산기를 종료합니다.&quot;);
    }

    public static void showMenu() {
        System.out.println(&quot;메뉴를 선택하세요.&quot;);
        System.out.println(&quot;1. 더하기 &quot;);
        System.out.println(&quot;2. 빼기 &quot;);
        System.out.println(&quot;3. 곱하기 &quot;);
        System.out.println(&quot;4. 나누기 &quot;);
        System.out.println(&quot;0. 끝내기 &quot;);
    }

    public static void addNum(int num1, int num2) {
        int result = num1 + num2;
        System.out.println(num1 + &quot; + &quot; + num2 + &quot; = &quot; + result);
    }

    public static void minusNum(int num1, int num2) {
        int result = num1 - num2;
        System.out.println(num1 + &quot; - &quot; + num2 + &quot; = &quot; + result);
    }

    public static void multiplyNum(int num1, int num2) {
        int result = num1 * num2;
        System.out.println(num1 + &quot; * &quot; + num2 + &quot; = &quot; + result);
    }

    public static void divideNum(int num1, int num2) {
        int result1 = num1 / num2;
        System.out.println(num1 + &quot; / &quot; + num2 + &quot; = &quot; + result1);

        int result2 = num1 % num2;
        System.out.println(num1 + &quot; % &quot; + num2 + &quot; = &quot; + result2);
    }

    public static boolean checkNum(char ch) {
        if(ch &gt;= &#39;0&#39; &amp;&amp; ch &lt;= &#39;9&#39;)return true;
        else return false;
    }
}
</code></pre>
<blockquote>
<p>성공적으로 잘 수행했다
아, 그런데 C언어에서 겪어던 착오를 겪었다
c언어를 했을 때, 문자가 아닌 자료형을 입력받고, 문자나 문자열을 입력받으면
앞에서 입력받고 개행문자인 엔터(\n)가 문자 입력받을때의 배열로 들어가 버퍼가 발생하는 경우가 있어서 getchar()로 해결했던 경우가 있었다
이번에 자바 공부를 하면서도 이런 경우가 발생했었다
교안에서는, nextline().charat(0)을 입력하라했지만 
그렇게 하니까 빨간 줄이 그어졌다.
그래서 찾아보니 c언어 상황과 같은 상황이었다 
코드를 살펴보면 myChar를 next().charAt(0)으로 입력 받는다
이후, 숫자 두개를 입력받고 다시 next().charAt(0)를 수행하므로 성공적이다
근데 만약, myChar를 nextLine().charAt(0)으로 입력 받는다면?
첫 번째 사칙연산할 때 두 번째 숫자를 받을 때 문제가 발생한다
두 번째 숫자를 받고 엔터를 칠 때, 그 엔터가 nextLine()에 넘어가고,
nextLine()은 엔터로 작동하기에 엔터를 담고 버퍼가 걸린다
그래서 nextLine이 아니라 next로 입력을 받아주었다, 
아니면 두 번째 nextInt()를 입력받고 sc.nextline()를 다음 줄에 입력해줘도 된다.
그러면 바로 엔터를 받고 버퍼에서 지우기 때문이다</p>
</blockquote>
<p>이상 끝.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA] 입출력]]></title>
            <link>https://velog.io/@just-codingbaby/JAVA-%EC%9E%85%EC%B6%9C%EB%A0%A5</link>
            <guid>https://velog.io/@just-codingbaby/JAVA-%EC%9E%85%EC%B6%9C%EB%A0%A5</guid>
            <pubDate>Wed, 30 Aug 2023 14:34:20 GMT</pubDate>
            <description><![CDATA[<ul>
<li><p>자바에서는 입출력을 콘솔 입출력이라고 하는 것 같다</p>
<h2 id="출력">출력</h2>
<blockquote>
<p>system 클래스를 이용</p>
</blockquote>
</li>
<li><p>print(): 파이썬과 똑같다</p>
</li>
<li><p>printf(): C언어와 똑같다(서식지정자 %d,%c 등등), 개행문자 필요(\n)</p>
</li>
<li><p>println(): 자바를 하면서 처음 알게됐다, 서식지정자가 필요 없다</p>
</li>
</ul>
<h2 id="입력">입력</h2>
<blockquote>
<p>입력은 Scanner 클래스를 이용한다
C언어에서는 그저 Input()을 사용하면 됐지만, 다른 걸 사용하니 생소했다
우선 Scanner 클래스를 사용하기 위해 import를 하여 가져와야 한다
import 하는 것은 파이썬에서 자주 해서 익숙했다
그후 Scanner 객체를 생성하고 변수에 지정해주면 된다
<strong>객체 생성할때 System.in 를 반드시 해주어야 한다</strong>
이것도 시스템 입출력 메소드 인듯
그리고 그 변수로 함수를 사용하면 된다
예시로 익히는게 빠를 것 같다</p>
</blockquote>
<pre><code class="language-java">import java.util.Scanner;

public class Ex02_Scanner1 
{
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in); // Scanner 객체 생성

        System.out.println(&quot;숫자를 1 2 3 이렇게 입력하고 엔터를 입력하세요.&quot;); 
        int num1 = sc.nextInt();    //nextInt로 정수 입력받기, Int에서 i 대문자로 써주기
        int num2 = sc.nextInt();
        int num3 = sc.nextInt();

        System.out.println(&quot;숫자를 1 입력하고 엔터를 입력하세요.&quot;);
        int num4 = sc.nextInt();
        System.out.println(&quot;숫자를 2 입력하고 엔터를 입력하세요.&quot;);
        int num5 = sc.nextInt();
        System.out.println(&quot;숫자를 3 입력하고 엔터를 입력하세요.&quot;);
        int num6 = sc.nextInt();

        System.out.printf(&quot;%d %d %d %d %d %d&quot;, num1, num2, num3, num4, num5, num6);
    }
}</code></pre>
<blockquote>
<p>이건 두 번째 예시다
Scanner 클래스에는 nextInt 말고도, next, nextline 등이 있다</p>
</blockquote>
<ul>
<li>sc.next(): 입력 값을 버퍼에 넣고 공백(스페이스)나 탭으로 구분</li>
<li>sc.nextline(): enter가 입력될 때 한번에 줄 단위로 입력 받음</li>
</ul>
<pre><code class="language-java">import java.util.Scanner;

public class MyMain
{

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

        System.out.println(&quot;홍길동 전우치 손오공 이렇게 입력하고 엔터를 입력하세요.&quot;);
        String name1 = sc.nextLine();

        System.out.println(&quot;홍길동 전우치 손오공 이렇게 입력하고 엔터를 입력하세요.&quot;);
        String name2 = sc.next();
        String name3 = sc.next();
        String name4 = sc.next();

        System.out.printf(&quot;[%s] [%s] [%s] [%s]&quot;, name1, name2, name3, name4);
    }

}
</code></pre>
<p>오늘은 이걸로 끝
아직까진 C언어와 크게 다르지 않아서 쉽다
2학년때부터 할 걸 그랬다...☠️
개강하면 열심히 살아야지</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA] 네이밍 권장 규칙]]></title>
            <link>https://velog.io/@just-codingbaby/JAVA-%EB%84%A4%EC%9D%B4%EB%B0%8D-%EA%B6%8C%EC%9E%A5-%EA%B7%9C%EC%B9%99</link>
            <guid>https://velog.io/@just-codingbaby/JAVA-%EB%84%A4%EC%9D%B4%EB%B0%8D-%EA%B6%8C%EC%9E%A5-%EA%B7%9C%EC%B9%99</guid>
            <pubDate>Wed, 23 Aug 2023 15:56:40 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><strong>1. 클래스 이름의 첫 글자는 항상 대문자로 한다.
-변수와 메서드의 이름의 첫 글자는 항상 소문자로 한다.
2. 여러 단어로 이루어진 이름은 단어의 첫 글자를 대문자로 한다.
-lastIndexOf, StringBuffer
3. 상수의 이름은 모두 대문자로 한다. 여러 단어로 이루어진 경우 &#39;_&#39;로 구분한다.
-PI, MAX_NUMBER</strong></p>
</blockquote>
<ul>
<li>자바에서 문자열을 다룰땐 String을 사용하는데, 이것은 타입이 아니라 클래스다</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA] Obejct-Oriented Programming]]></title>
            <link>https://velog.io/@just-codingbaby/Obejct-Oriented-Programming</link>
            <guid>https://velog.io/@just-codingbaby/Obejct-Oriented-Programming</guid>
            <pubDate>Wed, 23 Aug 2023 15:38:26 GMT</pubDate>
            <description><![CDATA[<p><strong><a href="https://velog.io/@zzangzzong/%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8DObject-Oriented-Programming">OOP</a></strong>
위 링크를 통해 OOP에 대해 이해해 보자</p>
<p>아, 참고로 난 데이터의 길을 접고 백엔드로 갈거다.
이제 시작이지만, 남은 1년동안 열심히 해보자
방학동안 안 한게 후회된다
미련은 없다
사실 있다 미련
<img src="https://velog.velcdn.com/images/just-codingbaby/post/d3352efd-2598-4913-909c-1ad830dddee4/image.png" alt=""></p>
]]></description>
        </item>
    </channel>
</rss>