<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>just my story</title>
    <link>https://jeg-dev.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Thu, 13 Aug 2026 19:39:24 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>노력은배신안함</managingEditor>
    <item>
      <title>[자료구조] Data Structure Stack</title>
      <link>https://jeg-dev.tistory.com/34</link>
      <description>&lt;head&gt;
&lt;script async custom-element=&quot;amp-auto-ads&quot;
        src=&quot;https://cdn.ampproject.org/v0/amp-auto-ads-0.1.js&quot;&gt;
&lt;/script&gt;
&lt;/head&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense responsive&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;반응형&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-4192186990749078&quot; data-ad-format=&quot;auto&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이전에&amp;nbsp; Big-O notation에 대하여 공부할 때 이것저것 영상을 찾아보던 중, 설명이 너무 깔끔한 영상이 있었는데, java로 자료구조에 대하여 코딩하는 강의가 있었다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=whVUYv0Leg0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;www.youtube.com/watch?v=whVUYv0Leg0&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=whVUYv0Leg0&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/brdmT9/hyHOnyodAz/EwdJ7pyNKObS1uBVvgfKn1/img.jpg?width=640&amp;amp;height=480&amp;amp;face=0_0_640_480&quot; data-video-width=&quot;640&quot; data-video-height=&quot;480&quot; data-video-origin-width=&quot;640&quot; data-video-origin-height=&quot;480&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-original-url=&quot;&quot; data-video-title=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/whVUYv0Leg0&quot; width=&quot;640&quot; height=&quot;480&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;youtube :&amp;nbsp;엔지니어대한민국&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;강의 속도가 너무 빨라 중간중간 멈추어 두고 안에 내용을 이해하는데 집중하였다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;우선 Stack은 LIFO구조이다, Last In First Out 가장 마지막에 들어온 것이, 가장 먼저 나간다는 뜻이다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;스택의 장점은 데이터를 추가하거나, 삭제할 시 연산속도가 상수 시간에 가능하며, 배열처럼 원소들의 이동이 필요하지 않다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;단점으로는 상수 시간에 해당하는 인덱스 항목에 접근할 수 없다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;재귀 알고리즘을 사용할 때에 스택이 유용하다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Java에서의, Stack의 Method에 대하여 알아보자.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;push(T item)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;- 해당 item을 Stack의 top에 삽입함.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;pop()&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;- Stack의 top에 있는 item을 삭제하고 해당 item을 반환.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;peek()&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;- Stack의 top에 있는 아이템의 값을 반환해준다. - 제거하지 않고 반환만&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;empty()&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;- Stack이 비어있으면 true를 반환 그렇지 않으면 false를 반환함.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;search(Object o)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;- 해당 Object의 위치를 반환함.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;- Stack의 top 위치는 1, 해당 Object가 없으면 -1을 반환함.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;git address : &lt;a href=&quot;https://github.com/egjeon/data-structure-stack-implemented&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;github.com/egjeon/data-structure-stack-implemented&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1602377390439&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;object&quot; data-og-title=&quot;egjeon/data-structure-stack-implemented&quot; data-og-description=&quot;Contribute to egjeon/data-structure-stack-implemented development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/egjeon/data-structure-stack-implemented&quot; data-og-url=&quot;https://github.com/egjeon/data-structure-stack-implemented&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ctfIE1/hyHOeOZGjb/kUgJjUAG4JKJi3v2NxWKx1/img.png?width=420&amp;amp;height=420&amp;amp;face=0_0_420_420&quot;&gt;&lt;a href=&quot;https://github.com/egjeon/data-structure-stack-implemented&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/egjeon/data-structure-stack-implemented&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ctfIE1/hyHOeOZGjb/kUgJjUAG4JKJi3v2NxWKx1/img.png?width=420&amp;amp;height=420&amp;amp;face=0_0_420_420');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;egjeon/data-structure-stack-implemented&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contribute to egjeon/data-structure-stack-implemented development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;body&gt;&lt;amp-auto-ads type=&quot;adsense&quot;
        data-ad-client=&quot;ca-pub-4192186990749078&quot;&gt;
&lt;/amp-auto-ads&gt;
&lt;/body&gt;</description>
      <category>Data structure.</category>
      <category>java</category>
      <category>stack</category>
      <category>스택</category>
      <category>자료구조</category>
      <author>노력은배신안함</author>
      <guid isPermaLink="true">https://jeg-dev.tistory.com/34</guid>
      <comments>https://jeg-dev.tistory.com/34#entry34comment</comments>
      <pubDate>Sun, 11 Oct 2020 09:53:23 +0900</pubDate>
    </item>
    <item>
      <title>[자료구조] Doubly Linked list</title>
      <link>https://jeg-dev.tistory.com/33</link>
      <description>&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;혼자서 책으로만 공부할때보다 훨씬 수월하게 이해가 되었으며, 이번 강의 역시 나에겐 꿀 강의였다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;갓고잉 선생님 : )&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a href=&quot;https://opentutorials.org/module/1335/8821&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;opentutorials.org/module/1335/8821&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1602358858854&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;university&quot; data-og-title=&quot;Linked list - Data Structure (자료구조)&quot; data-og-description=&quot;소개 Linked List는 Array List와는 다르게 엘리먼트와 엘리먼트 간의 연결(link)을 이용해서 리스트를 구현한 것을 의미합니다. 그래서 이름도 linked list입니다. 그렇게 보면 linked list에서 가장 중요한 �&quot; data-og-host=&quot;opentutorials.org&quot; data-og-source-url=&quot;https://opentutorials.org/module/1335/8821&quot; data-og-url=&quot;https://opentutorials.org/module/1335/8821&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/e5lC0/hyHOrAA3Nz/viUKdLNj0qM6xfST1X5uK0/img.png?width=640&amp;amp;height=360&amp;amp;face=0_0_640_360,https://scrap.kakaocdn.net/dn/beWUGQ/hyHOndUf9v/aIFwCIZOMiRhi3TqJPKktk/img.png?width=640&amp;amp;height=360&amp;amp;face=0_0_640_360,https://scrap.kakaocdn.net/dn/blajNe/hyHOnEZj8a/k1pvqZgrTeWsklSHnE56f0/img.png?width=507&amp;amp;height=303&amp;amp;face=0_0_507_303&quot;&gt;&lt;a href=&quot;https://opentutorials.org/module/1335/8821&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://opentutorials.org/module/1335/8821&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/e5lC0/hyHOrAA3Nz/viUKdLNj0qM6xfST1X5uK0/img.png?width=640&amp;amp;height=360&amp;amp;face=0_0_640_360,https://scrap.kakaocdn.net/dn/beWUGQ/hyHOndUf9v/aIFwCIZOMiRhi3TqJPKktk/img.png?width=640&amp;amp;height=360&amp;amp;face=0_0_640_360,https://scrap.kakaocdn.net/dn/blajNe/hyHOnEZj8a/k1pvqZgrTeWsklSHnE56f0/img.png?width=507&amp;amp;height=303&amp;amp;face=0_0_507_303');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Linked list - Data Structure (자료구조)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;소개 Linked List는 Array List와는 다르게 엘리먼트와 엘리먼트 간의 연결(link)을 이용해서 리스트를 구현한 것을 의미합니다. 그래서 이름도 linked list입니다. 그렇게 보면 linked list에서 가장 중요한 �&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;opentutorials.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;double linked list의 핵심은 이름과 같이 이중 연결 리스트로서, 단순 연결 리스트랑은 다르게,&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;노드의 앞뒤로 연결되어있다. 현재 노드와 이전 노드, 현재 노드와 다음 노드와 연결되어있게끔 구성이 되어있다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;단순 연결 리스트에서는, 데이터 필드와 다음 노드를 나타내는 링크 필드만 존재하였다면, 이중 연결 리스트에서는&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이전 노드와, 다음 노드를 알려주는 링크 필드와 데이터 필드로 구성되어 있음을 아래에 그림을 통하여 확인할 수 있다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dsGftH/btqKy7npM7H/8Nc6PBdZGYcZRyF0HTWnoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dsGftH/btqKy7npM7H/8Nc6PBdZGYcZRyF0HTWnoK/img.png&quot; data-alt=&quot;https://opentutorials.org/module/1335/8940&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dsGftH/btqKy7npM7H/8Nc6PBdZGYcZRyF0HTWnoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdsGftH%2FbtqKy7npM7H%2F8Nc6PBdZGYcZRyF0HTWnoK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://opentutorials.org/module/1335/8940&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;장점 : 이것의 가장 큰 장점으로는, 양방향 연결이므로 노드를 탐색할 시 앞 뒤 양쪽으로 탐색이 가능하다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;위에서 언급한, 양방향 탐색의 가장 큰 장점은 특정 인덱스 위치의 엘리먼트를 가져올 시, 반복자를 이용해서 탐색할 때 드러난다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;단방향 연결 리스트는 다음 노드의 탐색만 가능했던 것에 비하여, 이중 연결 리스트의 경우 앞뒤로 탐색이 가능하다&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;상황에 따라 탐색의 방향이 변경되어야 한다면, 이중 연결 리스트를 사용한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;단점 : 우선 이전 노드를 지정하기 위한 변수를 하나 더 사용해야 한다. 이리하여, 메모리를 더 많이 사용하게 된다는 의미가 된다. 또 구현 자체도 조금 더 복잡해지는 단점이 있다. 하지만 이러한 단점에 비하여 장점이 크기 때문에, 현실에서 사용하는 연결 리스트는 대부분 이중 연결 리스트이다.&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qotqs/btqKBOAUNCu/mNNZk7HeeS2DzAHUEoFBZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qotqs/btqKBOAUNCu/mNNZk7HeeS2DzAHUEoFBZ1/img.png&quot; data-alt=&quot;https://opentutorials.org/module/1335/8940&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qotqs/btqKBOAUNCu/mNNZk7HeeS2DzAHUEoFBZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqotqs%2FbtqKBOAUNCu%2FmNNZk7HeeS2DzAHUEoFBZ1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://opentutorials.org/module/1335/8940&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;위에 그림을 참조하면,&amp;nbsp; get(4) 번을 했을 때 순차적으로 탐색하는 것보다 뒤에서부터 찾는 것이 훨씬 효율적임을 알 수가 있다. 이전 노드를 참조하여 값을 알 수 있다면 훨씬 효율적이라는 것을 보여주는 그림이다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;강의를 보며 구현을 해보았고, 사실 혼자 구현해보라고 하면, 절대로 못했을 것 같은데 설명을 해주시는 거에 대한 이해가 된 것으로 스스로 위로해보며, 이번 소스코드도 git에 올려두었다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;생활코딩에서의 해주는 자료구조 강의가 이것으로 끝이라.. 너무 아쉽고 속상하다. 이젠 책과 돌아다니는 여러 강의 등을 통해 역량을 다져야겠다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;git address : &lt;a href=&quot;https://github.com/egjeon/data-structure-doubly-linked-list&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;github.com/egjeon/data-structure-doubly-linked-list&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Data structure.</category>
      <category>Doubly Linked List</category>
      <category>java</category>
      <category>생활코딩</category>
      <category>이고잉</category>
      <category>이중 연결 리스트</category>
      <category>자료구조</category>
      <author>노력은배신안함</author>
      <guid isPermaLink="true">https://jeg-dev.tistory.com/33</guid>
      <comments>https://jeg-dev.tistory.com/33#entry33comment</comments>
      <pubDate>Sun, 11 Oct 2020 04:42:48 +0900</pubDate>
    </item>
    <item>
      <title>[자료구조] Data Structure - 자바 Linked List</title>
      <link>https://jeg-dev.tistory.com/32</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;강의가 두 개로 나뉘어있는데, 나눈 이유는 ArrayList와 LinkedList의 장단점이 확연이 다르기 때문이라고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;상황에 따라 알맞은 것을 사용하여 효율을 극대화할 수 있으므로, 장단점에 대하여 확실히 알아두면 좋을 것 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kLbgw/btqJ8e7z8Vc/m1mz2Jjf5osSWwMmtrlRs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kLbgw/btqJ8e7z8Vc/m1mz2Jjf5osSWwMmtrlRs1/img.png&quot; data-alt=&quot;출처 :&amp;amp;amp;nbsp;https://opentutorials.org/module/1335/8857&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kLbgw/btqJ8e7z8Vc/m1mz2Jjf5osSWwMmtrlRs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkLbgw%2FbtqJ8e7z8Vc%2Fm1mz2Jjf5osSWwMmtrlRs1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 :&amp;nbsp;https://opentutorials.org/module/1335/8857&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;우선 Linked List를 생성하게되면 엘리먼트 (노드) 하나당 메모리를 각각 차지하여, 분산되어있는 형태를 띄우게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그리고 영어이름 그대로, 연결 리스트이므로, 노드 객체 하나당, Data filed와 그것을 연결해주는 Link filed가 필요하다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Linked List의 장점은, Array List와 달리, 엘리먼트의 추가 / 삭제를 할 시 이전 , 이후의 참조값만 변경하면 됨으로써, 속도가 빠르다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;특정 index값을 이용하여 배열의 찾는데에 있어서는 Array List가 강하고, 요소의 추가 / 삭제가 자주 일어날 경우 Linked List가 더 효율적임을 알 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;- trade off&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;트레이드 오프란, 어떠한 특성이 좋아지면 다른 특성이 나빠지는 상황을 의미한다고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Array List&lt;/b&gt;와 &lt;b&gt;Linked List&lt;/b&gt;는 트레이드 오프의 좋은 사례라고 할 수 있다고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;우리가 자료구조를 배우는 이유 중 하나는 이러한 트레이드오프를 이해하기 위해서이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;장점과 단점의 균형을 이해할 수 있어야 올바른 선택을 할 수 있기 때문이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;아래의 그림은 이해를 돕기위하여 생활코딩 사이트의 이미지를 인용하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DvfnJ/btqJ8gsjM7L/fKiPSb7he1XMPLoAjqggvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DvfnJ/btqJ8gsjM7L/fKiPSb7he1XMPLoAjqggvK/img.png&quot; data-alt=&quot;출처 :&amp;amp;amp;nbsp;https://www.opentutorials.org/module/1335/8821&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DvfnJ/btqJ8gsjM7L/fKiPSb7he1XMPLoAjqggvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDvfnJ%2FbtqJ8gsjM7L%2FfKiPSb7he1XMPLoAjqggvK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 :&amp;nbsp;https://www.opentutorials.org/module/1335/8821&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;큰 내용들은 아래의 강의에서 참조하면 이해가 훨씬 수월하다. 위에 참조로 사용한 그림도 안에 포함되어있으며, 더욱더 이해하기 쉽게끔 그림 및 설명이 정말 잘되어있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.opentutorials.org/module/1335/8821&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;www.opentutorials.org/module/1335/8821&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1601900277354&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;university&quot; data-og-title=&quot;Linked list - Data Structure (자료구조)&quot; data-og-description=&quot;소개 Linked List는 Array List와는 다르게 엘리먼트와 엘리먼트 간의 연결(link)을 이용해서 리스트를 구현한 것을 의미합니다. 그래서 이름도 linked list입니다. 그렇게 보면 linked list에서 가장 중요한 �&quot; data-og-host=&quot;www.opentutorials.org&quot; data-og-source-url=&quot;https://www.opentutorials.org/module/1335/8821&quot; data-og-url=&quot;https://www.opentutorials.org/module/1335/8821&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cCY2aH/hyHKPnMzI3/BxKrGCfQzpQJ4G6UkgK9I1/img.png?width=640&amp;amp;height=360&amp;amp;face=0_0_640_360,https://scrap.kakaocdn.net/dn/i9xUL/hyHKNwI0wh/n5xt7d3HFVPFXU9bYITzn1/img.png?width=640&amp;amp;height=360&amp;amp;face=0_0_640_360,https://scrap.kakaocdn.net/dn/vBEhw/hyHKRTpVNG/OYbSmr2N1d5RYkXlJGKfE1/img.png?width=507&amp;amp;height=303&amp;amp;face=0_0_507_303&quot;&gt;&lt;a href=&quot;https://www.opentutorials.org/module/1335/8821&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.opentutorials.org/module/1335/8821&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cCY2aH/hyHKPnMzI3/BxKrGCfQzpQJ4G6UkgK9I1/img.png?width=640&amp;amp;height=360&amp;amp;face=0_0_640_360,https://scrap.kakaocdn.net/dn/i9xUL/hyHKNwI0wh/n5xt7d3HFVPFXU9bYITzn1/img.png?width=640&amp;amp;height=360&amp;amp;face=0_0_640_360,https://scrap.kakaocdn.net/dn/vBEhw/hyHKRTpVNG/OYbSmr2N1d5RYkXlJGKfE1/img.png?width=507&amp;amp;height=303&amp;amp;face=0_0_507_303');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Linked list - Data Structure (자료구조)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;소개 Linked List는 Array List와는 다르게 엘리먼트와 엘리먼트 간의 연결(link)을 이용해서 리스트를 구현한 것을 의미합니다. 그래서 이름도 linked list입니다. 그렇게 보면 linked list에서 가장 중요한 �&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.opentutorials.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;강의에도 나왔듯이, JCF Linked List와는 달리 단방향 연결 리스트로 되어 있으며 Java Collections framework의 Linked List 양방향으로써 앞뒤 위치를 모두 알 수 있게끔 코딩되어 있다. 소스 자체에도 여러 문제가 존재할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;하나 공부하는 데에 있어 도움이 많이 되었으며 처음 접하시는 분이면 참조하여 공부가 되었으면 좋겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이번 것도 마찬가지로, Java로 기능 구현해보며 좀 더 수월하게 이해가 되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Source 코드도 마찬가지로, 따로 코딩하여 git으로 올려두었다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;git address : &lt;a href=&quot;https://github.com/egjeon/data-structure-linked-list&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;github.com/egjeon/data-structure-linked-list&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Data structure.</category>
      <category>data structure</category>
      <category>java</category>
      <category>JCF</category>
      <category>Liked List</category>
      <category>생활코딩</category>
      <category>연결리스트</category>
      <category>자료구조</category>
      <author>노력은배신안함</author>
      <guid isPermaLink="true">https://jeg-dev.tistory.com/32</guid>
      <comments>https://jeg-dev.tistory.com/32#entry32comment</comments>
      <pubDate>Tue, 6 Oct 2020 00:19:36 +0900</pubDate>
    </item>
    <item>
      <title>[자료구조] Data Structure 자바 - Array List</title>
      <link>https://jeg-dev.tistory.com/31</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이고잉님의 생활코딩 영상을 보며, 동영상 중간중간 멈춰가며 먼저 메서드를 작성해보며, 틀린 부분이 있다면 변경해가며 코딩을 따라 옮겨보았다. 깊이 있는 공부는 아닐수도 있으나, 접근자체를 못하여 이해하지 못하는 분들에게 참 좋은 강의이다. (나포함)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;완벽한 ArrayList 구현은 아니지만, 추후 Java Colletions Framework에 대하여 깊게 공부할 때에 큰 도움을 받을 것 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;코드는, 이고잉님의 생활코딩에도 나와있지만 나도 따로 git에 업로드하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;진짜 꿀 강의다&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.opentutorials.org/module/1335&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;www.opentutorials.org/module/1335&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1601591289756&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;university&quot; data-og-title=&quot;Data Structure (자료구조)&quot; data-og-description=&quot;수업이 다루고 있는 내용 데이터 스트럭쳐 중심 본 수업은 데이터 스트럭쳐를 다루고 있습니다. 알고리즘은 데이터 스트럭쳐를 설명하기 위한 범위에서 제한적으로 다룹니다. 내장 데이터 스트&quot; data-og-host=&quot;www.opentutorials.org&quot; data-og-source-url=&quot;https://www.opentutorials.org/module/1335&quot; data-og-url=&quot;https://www.opentutorials.org/module/1335&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.opentutorials.org/module/1335&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.opentutorials.org/module/1335&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Data Structure (자료구조)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;수업이 다루고 있는 내용 데이터 스트럭쳐 중심 본 수업은 데이터 스트럭쳐를 다루고 있습니다. 알고리즘은 데이터 스트럭쳐를 설명하기 위한 범위에서 제한적으로 다룹니다. 내장 데이터 스트&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.opentutorials.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;ArrayList의 특징.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;장점 : 내부적으로 배열을 이용하기 때문에 인덱스를 이용하여 접근하는 것이 빠르다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;단점 : 데이터를 리스트의 처음이나, 중간 지점에 저장하면 또는 삭제한다면, 배열 특성상 엘리먼트들을 하나씩 뒤로 물리거나, 앞으로 당겨야 한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;이번 코딩을 하면서 느낀 점은, 자바 &lt;b&gt;API &lt;/b&gt;ArrayList에서 내부적인 요소를 안 봤던 것은 아니지만, 기억을 되돌려가며 직접 만들어보며 재미를 느꼈다. 사실 주석이 필요할 만큼 어려운 내용들이 아니라, 주석처리는 따로 안 하였고 정말 필요로 하시는 분들이 있으면 생활코딩 사이트에 접속하여 내용을 자세하게 보시는 걸 추천한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;git address : &lt;a href=&quot;https://github.com/egjeon/life-coding-data-structure&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;github.com/egjeon/life-coding-data-structure&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1601592933403&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;object&quot; data-og-title=&quot;egjeon/life-coding-data-structure&quot; data-og-description=&quot;Contribute to egjeon/life-coding-data-structure development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/egjeon/life-coding-data-structure&quot; data-og-url=&quot;https://github.com/egjeon/life-coding-data-structure&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bXblMi/hyHHLZZe8I/bc5P723nA8FtuGhGKn1LvK/img.png?width=420&amp;amp;height=420&amp;amp;face=0_0_420_420&quot;&gt;&lt;a href=&quot;https://github.com/egjeon/life-coding-data-structure&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/egjeon/life-coding-data-structure&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bXblMi/hyHHLZZe8I/bc5P723nA8FtuGhGKn1LvK/img.png?width=420&amp;amp;height=420&amp;amp;face=0_0_420_420');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;egjeon/life-coding-data-structure&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Contribute to egjeon/life-coding-data-structure development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;ps - 14년도 강의인데, 이전에 누가 나에게 추천을 해주었을 때 볼걸 시간이 흐른 뒤 후회는 아무런 소용이 없다. 지금이라도 열심히 해야지.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Data structure.</category>
      <category>arrayList</category>
      <category>data structure</category>
      <category>java</category>
      <category>생활코딩</category>
      <category>이고잉</category>
      <category>자료구조</category>
      <author>노력은배신안함</author>
      <guid isPermaLink="true">https://jeg-dev.tistory.com/31</guid>
      <comments>https://jeg-dev.tistory.com/31#entry31comment</comments>
      <pubDate>Fri, 2 Oct 2020 08:02:59 +0900</pubDate>
    </item>
    <item>
      <title>Lombok @Anotation</title>
      <link>https://jeg-dev.tistory.com/30</link>
      <description>&lt;p&gt;Lombok - @getter&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Lombok&lt;span&gt; - &lt;/span&gt;&lt;/span&gt;@setter&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Lombok&lt;span&gt; -&amp;nbsp;&lt;/span&gt;&lt;/span&gt; @ToString&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Lombok&lt;span&gt; - &lt;/span&gt;&lt;/span&gt;&lt;span&gt;@ToString.Exclude&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;개발자가, 실수할 수도 있고,자바에서 제공하는 toString 메서드를&amp;nbsp; Overriding 하여, 사용한다면,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;멤버 변수가 늘어날 때마다, 추가해주고, getter, setter 또한 추가적으로, 만들어줘야 한다.&lt;/p&gt;
&lt;p&gt;그렇다고 한다면 쓸데없이 자바 코드수가 늘어나게 되고, 실수할 경우, 원하는 로그를 보지 못할 수&amp;nbsp; 있다.&lt;/p&gt;
&lt;p&gt;그리하여, 클래스 내부에 위와 같은 어노테이션을 이용하여 선언해주면, 멤버 변수가 늘든 말든, 자연적으로 getter,setter뿐 아니라, ToString을 개발자가 신경쓰지 않아도 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;또한 제외하고 싶은 toString값이 있다면 해당 멤버변수 위&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@ToString.Exclude&lt;/p&gt;
&lt;p&gt;ex)&amp;nbsp; &amp;nbsp; private String name;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;사용하여 준다면 , 이 변수는 toString에서 제외된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Lombok - @Constructor&lt;/p&gt;
&lt;p&gt;Lombok - @EqualsAndHashCode&lt;/p&gt;
&lt;p&gt;Lombok - @Data&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Just do it.</category>
      <author>노력은배신안함</author>
      <guid isPermaLink="true">https://jeg-dev.tistory.com/30</guid>
      <comments>https://jeg-dev.tistory.com/30#entry30comment</comments>
      <pubDate>Mon, 21 Sep 2020 01:32:13 +0900</pubDate>
    </item>
    <item>
      <title>[Springboot] 스프링 부트란?</title>
      <link>https://jeg-dev.tistory.com/29</link>
      <description>&lt;p&gt;- Spring Framework의 설정이 복잡하고 어렵기 때문에 이와 같은 문제점으로 인하여, 만들어짐.&lt;/p&gt;
&lt;p&gt;- SpringBoot가 나오면서 초기 생산성이 획기적으로 상승함.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;스프링은 다양한 식재료이고, 스프링 부트는 완성된 음식이라고 볼 수 있다.(커스터마이징)&lt;/p&gt;
&lt;p&gt;식재료를 다양하게 섞어서 자신만의 요리를 만들고 싶어하는 사람도 있고,&lt;/p&gt;
&lt;p&gt;다 만들어진 식품을 데워먹기만 하고 싶은 사람도 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;스프링 부트의 특징&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- Starter를 통한 애플리케이션의 간편하고 자동화된 빌드 및 설정을 제공함.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- Embed 서버를 제공함, 복잡한 배포 설정들을 간편하게 제공&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- Production에서 사용할 수 있는 추가적인 기능을 제공 (actuator)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Xml Configuration 설정 및 Xml + Java Configuration&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Only Java Configuration 설정 등이 있는데,&lt;/p&gt;
&lt;p&gt;properties 파일만을 사용하여 설정도 가능하다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;심지어 이설정을 default값으로 설정한다면 생략 가능하다.&lt;/p&gt;
&lt;p&gt;Springboot의 장점이라고 볼 수 있다고 한다, 이 말을 Convention Over Configuration COC라고 한다.&lt;/p&gt;
&lt;p&gt;개발자가 설정해야 하는 것은 애플리케이션의 관례를 따르지 않는 점뿐이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Spring과 Springboot는 다른 것이다.&lt;/p&gt;
&lt;p&gt;Springboot는 Java의 생산성 향상을 가져왔다.&lt;/p&gt;
&lt;p&gt;개발자가 설정해야 하는 것은 관례를 따르지 않는 점뿐이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Just do it.</category>
      <category>springboot</category>
      <category>기본내용</category>
      <category>스프링부트</category>
      <author>노력은배신안함</author>
      <guid isPermaLink="true">https://jeg-dev.tistory.com/29</guid>
      <comments>https://jeg-dev.tistory.com/29#entry29comment</comments>
      <pubDate>Sat, 19 Sep 2020 19:53:07 +0900</pubDate>
    </item>
    <item>
      <title>[Java] 자바 입출력  - 직렬화(Serialization)</title>
      <link>https://jeg-dev.tistory.com/28</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;인스턴스의 상태를 그대로 저장하거나, 네트워크로 전송하고 이를 다시 복원(DeSerialization)하는 방식&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;ObjectInputStream ObjectOutputStream&lt;/b&gt; 이란 보조스트림을 이용하여 구현 할 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Java뿐만 아니라 다른 언어에서도 지원하는 기술.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Java에서의 Serialization 인터페이스&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;직렬화는 인스턴스의 내용이 외부 (파일,네트워크)로 유출 되는 것이므로 프로그래머가 객체의 직렬화 가능 여부를 명시한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;구현 코드가 없는 mark interface&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;아래에 코드로 Animal이라는 class는 직렬화가 가능하다. 라고 명시하여줌.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;명시하지 않으면, 직렬화가 되지 않음.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Animal 이라는 Class안에 멤버변수 앞에 &lt;b&gt;transiant&lt;/b&gt; 라는 키워드를 작성하여 주면 이변수는 직렬화 하지 말아라 &lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;라고 명시해줄 수 있음.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;아래는 간단한 테스트 코드 예제입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1599546274557&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Animal implements Serializable {

...

String name;

String gender;

String kinds;



}

&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1599548070035&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public static void main(String[] args) {
		Animal ani1 = new Animal(&quot;호돌이&quot;, &quot;수컷&quot;, &quot;포유류&quot;);
		Animal ani2 = new Animal(&quot;심바&quot;, &quot;수컷&quot;, &quot;포유류&quot;);
		Animal ani3 = new Animal(&quot;따식이&quot;, &quot;수컷&quot;, &quot;포유류&quot;);

		try (FileOutputStream fos = new FileOutputStream(&quot;test.txt&quot;);
				ObjectOutputStream oos = new ObjectOutputStream(fos)) {
			oos.writeObject(ani1);
			oos.writeObject(ani2);
			oos.writeObject(ani3);

		} catch (IOException e) {
			System.out.println(e);
		}

		try (FileInputStream fis = new FileInputStream(&quot;test.txt&quot;);
				ObjectInputStream ois = new ObjectInputStream(fis)) {

			Animal a1 = (Animal) ois.readObject();
			Animal a2 = (Animal) ois.readObject();

			System.out.println(a1);
			System.out.println(a2);
		} catch (IOException e) {
			System.out.println(e);
		} catch (ClassNotFoundException e) {
			System.out.println(e);
		}
	}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Just do it.</category>
      <category>java</category>
      <category>Serialization</category>
      <category>자바</category>
      <category>직렬화</category>
      <author>노력은배신안함</author>
      <guid isPermaLink="true">https://jeg-dev.tistory.com/28</guid>
      <comments>https://jeg-dev.tistory.com/28#entry28comment</comments>
      <pubDate>Tue, 8 Sep 2020 15:56:02 +0900</pubDate>
    </item>
    <item>
      <title>[Java] 데코레이터 패턴 (Decorator Pattern)</title>
      <link>https://jeg-dev.tistory.com/27</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데코레이터 패턴이란 무엇일까.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;생성자의 매개 변수로 또 다른 스트림을 가짐&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;ex) protected FileInputStream(InputStream in)&amp;nbsp; &amp;nbsp;생성자의 매개 변수로 InputStream을 받는다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; public FilterOutputStream(OutputStream out) 생성자의 매개 변수로 OutputStream을 받음.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;- 바이트 단위 파일 입력 스트림 (기반이 되는 스트림)&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;- 문자로 변환 기능 추가 (보조 스트림)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;- 버퍼링 기능 추가 (보조 스트림)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;작성 중 원래 기반이 되는 스트림에, 보조적으로 받는 스트림을 사용 시, 이것을 데코 한다 하여, 데코레이터 패턴이라 불린다. 자바 용어는 아니고, 디자인 패턴에서 부르는 용어이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;자바의 입출력 스트림은 데코레이터 패턴을 사용한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;실제로 입출력 기능을 가진 객체(컴포넌트)와 그 외 다양한 기능을 제공하는 데코레이터(보조스트림)을 사용하여 다양한 입출력 기능을 구현 할 수 있다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;상속보다 유연한 확장성을 가지며, 지속적인 서비스의 증가와 제거가 용이하다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Just do it.</category>
      <category>java</category>
      <category>디자인패턴</category>
      <category>입출력</category>
      <author>노력은배신안함</author>
      <guid isPermaLink="true">https://jeg-dev.tistory.com/27</guid>
      <comments>https://jeg-dev.tistory.com/27#entry27comment</comments>
      <pubDate>Tue, 8 Sep 2020 13:20:16 +0900</pubDate>
    </item>
    <item>
      <title>[Java]Singleton Pattern에 대하여</title>
      <link>https://jeg-dev.tistory.com/26</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;span&gt;&lt;b&gt;git blog address : &lt;a href=&quot;https://egjeon.github.io/&quot;&gt;https://egjeon.github.io/&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;figure id=&quot;og_1593346318480&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;just my story&quot; data-og-description=&quot;No effort betrayed.&quot; data-og-host=&quot;egjeon.github.io&quot; data-og-source-url=&quot;https://egjeon.github.io/&quot; data-og-url=&quot;https://egjeon.github.io/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://egjeon.github.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://egjeon.github.io/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;just my story&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;No effort betrayed.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;egjeon.github.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사실 tistory에 글을 올리기 전에 git에 내용 정리를 먼저 하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;내가 리스펙 하시는 분께서, git은 개발과 별개로 필수적으로 알아야 할 내용이기 때문에 찐 강의를 추천해주셨다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;정말 좋은 강의였다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그리고 사실 내용 전부는 이해하지 못했지만 이전에, 현재도 생각 없이 하던 행위? 들이 비로소 조금이나마 정리가 되었고,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 나는 프로젝트 repository용으로만 사용해야만 하는 줄 알았고, 정말 바보였다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;git을 블로그처럼 사용하는 것은 그분을 통하여 알게 되었다. 준우 님 짱. 다른 분들도 이 강의를 통하여 조금이나마 도움이 되면 좋겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a href=&quot;https://opentutorials.org/course/2708&quot;&gt;https://opentutorials.org/course/2708&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1593346406438&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;university&quot; data-og-title=&quot;지옥에서 온 Git (새 수업으로 대체) - 생활코딩&quot; data-og-description=&quot;이 수업은 GITn 시리즈로 완전히 대체 되었습니다. GITn은 보다 많은 내용을 작은 단위로 쪼개서 선택적으로 공부하실 수 있도록 제작된 수업입니다. 아래 주소를 통해서 GITn 을 접할 수 있습니다.�&quot; data-og-host=&quot;opentutorials.org&quot; data-og-source-url=&quot;https://opentutorials.org/course/2708&quot; data-og-url=&quot;https://opentutorials.org/course/2708&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://opentutorials.org/course/2708&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://opentutorials.org/course/2708&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;지옥에서 온 Git (새 수업으로 대체) - 생활코딩&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;이 수업은 GITn 시리즈로 완전히 대체 되었습니다. GITn은 보다 많은 내용을 작은 단위로 쪼개서 선택적으로 공부하실 수 있도록 제작된 수업입니다. 아래 주소를 통해서 GITn 을 접할 수 있습니다.�&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;opentutorials.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h1&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h1&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Singleton Pattern에 대하여&lt;/span&gt;&lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a id=&quot;user-content-현업에서-협업-유틸등을-만들거나-할때에-유용하게-쓰인다&quot; href=&quot;https://github.com/egjeon/egjeon.github.io/blob/master/_posts/2020-06-28-java-singletonpattern-post.md#%ED%98%84%EC%97%85%EC%97%90%EC%84%9C-%ED%98%91%EC%97%85-%EC%9C%A0%ED%8B%B8%EB%93%B1%EC%9D%84-%EB%A7%8C%EB%93%A4%EA%B1%B0%EB%82%98-%ED%95%A0%EB%95%8C%EC%97%90-%EC%9C%A0%EC%9A%A9%ED%95%98%EA%B2%8C-%EC%93%B0%EC%9D%B8%EB%8B%A4&quot; aria-hidden=&quot;true&quot;&gt;&lt;/a&gt;현업에서, 협업 유틸 등을 만들거나, 할 때에 유용하게 쓰인다. 단 하나만 존재하는 인스턴스를 사용하는 패턴을 우리는&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Singleton pattern이라고 부른다. &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;생성자는 private으로, static으로 유일한 객체를 생성해준다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;외부에서 유일한 객체를 참조할 수 있는 public static get() 메서드를 구현해준다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;new 연산자를 이용하여 여러 객체가 생성될 때에 문제가 될 수 있는 객체를 Singleton Pattern으로 방지해 줄 수 있다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;100번 불러도 똑같은 주소를 참조한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;싱글톤 패턴 유틸로는, 날짜는 하나의 값을 참조하여야 하기 때문에, Calendar클래스를 생각할 수 있다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Calendar호출 시 , new 하여 메모리에 직접적으로 인스턴스를 생성하지 않고&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Calendar calendar Calendar.getInstance();&amp;nbsp; &lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;new로 메모리에 올리지 않고, &lt;/span&gt;&lt;/b&gt;이와 같은 문법으로,&amp;nbsp; 사용하듯이&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;우리도 필요한 유틸을 만들 때에, 이러한 패턴으로 만듦으로써, 몇 번을 호출하여도, 변하지 않는 값을 확인할 수 있다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;우선 예제로 만들어 둔 클래스를 main class에서 호출할 시에, 같은 주소 값이 할당되는 것을 알 수가 있다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;a id=&quot;user-content-싱글톤-패턴-예제&quot; href=&quot;https://github.com/egjeon/egjeon.github.io/blob/master/_posts/2020-06-28-java-singletonpattern-post.md#%EC%8B%B1%EA%B8%80%ED%86%A4-%ED%8C%A8%ED%84%B4-%EC%98%88%EC%A0%9C&quot; aria-hidden=&quot;true&quot;&gt;&lt;/a&gt;싱글톤 패턴 예제&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1593346187180&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//Class Company를 만든다고 가정하자

public Class Company{

    private static Company instance = new Company(); // 인스턴스를 static으로 생성 해줌.

    private Company(){} // default 생성자가 불리지 않게 은닉시켜주어 선언해준다.

    public static Company getInstance(){ // getInstance의 이름을 가진 메서드를 정의 해준다.
        if(instance == null)
            instance = new Company(); // NULL일 경우가 없지만 체크하여 생성자가 new로 메모리에 올라가지 않은상태로 호출 당할 시에 ,  한번 더 메모리에 올리는 작업을 한다.
        return instance; //반환.
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1593346974577&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Main {
	public static void main(String[] args) {
		//Company company1 = new Company();//The constructor Company() is not visible Error!
		Company company1 = Company.getInstance();
		Company company2 = Company.getInstance();
		
		System.out.println(company1);
		System.out.println(company2);
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blcndc/btqFbV0bVNB/AmjjB4P87pK2fc9geKbzrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blcndc/btqFbV0bVNB/AmjjB4P87pK2fc9geKbzrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blcndc/btqFbV0bVNB/AmjjB4P87pK2fc9geKbzrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fblcndc%2FbtqFbV0bVNB%2FAmjjB4P87pK2fc9geKbzrK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;위의 예제만 보아도 확실히 알 수 있듯이, private 생성자를 만들어 둠으로써, 외부에서 인스턴스 생성이 불가능하게 함을 알 수 있다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;하나의 객체만 존재함으로써, 위의 첨부한 이미지처럼 같은 주소 값을 참조한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Just do it.</category>
      <category>java</category>
      <category>singleton</category>
      <category>디자인패턴</category>
      <category>자바</category>
      <author>노력은배신안함</author>
      <guid isPermaLink="true">https://jeg-dev.tistory.com/26</guid>
      <comments>https://jeg-dev.tistory.com/26#entry26comment</comments>
      <pubDate>Sun, 28 Jun 2020 21:11:16 +0900</pubDate>
    </item>
    <item>
      <title>[운영 체제] 운영 체제의 자원 관리 기능</title>
      <link>https://jeg-dev.tistory.com/25</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;운영 체제의 자원 관리 기능&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-ke-size=&quot;size23&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;운영체제의 가장 핵심적 기능은, 자원을 효율적으로 관리하는 것.&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 data-ke-size=&quot;size23&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;자원은 소프트웨어 자원, 하드웨어 자원으로 나뉜다.&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;하드웨어 자원&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;CPU , 메모리를 비롯한 주변 장치 및 입출력 장치.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;CPU는 통상적으로 컴퓨터 한 대에 하나가 장착되기 때문에 여러 프로세스들이 CPU를 효율적으로 나누어 사용할 수 있도록 관리되어야 함.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;메모리 또한 시스템 내에 한정된 공간이 존재하기 때문에 서로 다른 다수의 프로세스들이 나누어 쓸 수 있도록 해야 함.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;주변 장치도 마찬가지로, 운영 체제의 관리가 필요하다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;CPU와 메모리는 전원이 꺼지면 처리 중이던 정보가 모두 사라지기 때문에 전원이 꺼지더라 기억해야 하는 부분은 주변 장치 중 한 종류인 보조 기억 장치에 파일 형태로 저장됨.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;이러한 파일들이 저장되는 방식 및 접근 권한 등에 대해서도 운영 체제가 관리를 해주어야 함.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;입출력 장치인 키보드, 모니터, 하드디스크 등도 운영체제가 관리해줘야 할 대상으로 포함된다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;CPU를 관리하는 방법&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;일반적인 컴퓨터에는 CPU가 하나밖에 없지만 프로세스는 여러 개가 동시에 실행됨.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;그러므로 매 시점 어떠한 프로세스에게 CPU를 할당해 작업을 처리할 것인지를 결정하는 일이 필요함.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;이러한 일을 CPU 스케줄링이라고 부른다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;CPU 스케줄링의 목표는 CPU를 가장 효율적으로 사용하면서도, 특정 프로세스가 불이익을 당하지 않도록 하는 것을 의미한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;대표적인 CPU 스케줄링 기법으로 선입선출(FCFS : First Come First Served), 라운드 로빈(Round Robin), 우선순위(priority) 기법이 있다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot; style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/h4&gt;&lt;h4 data-ke-size=&quot;size20&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;- 선입 선출 기법&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;CPU를 사용하기 위해 도착한 프로세스를 먼저 처리해 주는 방식을 말함.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;CPU를 필요로 하는 프로세스가 여럿 존재할 때에 먼저 CPU를 요청한 프로세스가 원하는 작업을 완료할 때까지 다른 프로세스들이 CPU를 사용하지 못하게 됨.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;이 방식을 사용할 경우, CPU 자체의 효율적인 사용 측면에서는 문제가 없겠지만, 전체 시스템 입장에서는 비효율 적인 결과를 초래할 가능성이 있다. 장시간 CPU를 사용해야 하는 프로세스가 먼저 도착하고, 짧은 시간 동안 CPU를 사용하면 작업을 완료할 수 있는 프로세스들이 나중에 도착한 경우를 생각하였을 때, 짧은 수행 시간을 가진 프로세스들은 선행 프로세스가 작업을 마칠 때까지 자이간 기다려야 하는 경우가 발생한다.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;이러한 선입선출 기법의 단점을 보완시킨 기법이 라운드 로빈 기법이다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;- 라운드 로빈 기법&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;라운드 로빈 기법에서는 CPU를 한 번 할당받아 사용할 수 있는 시간을 일정한 고정된 시간으로 제한을 둔다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;이로써, 긴 작업을 요구하는 프로세스가 CPU를 먼저 할당받더라도, 정해진 시간이 지나고 나면, CPU를 내어놓고 CPU의 서비스를 기다리는 줄의 제일 뒤에 가서 기다려야 한다. 그러므로 라운드 로빈 스케줄링에서는 적어도 긴 작업을 수행하는 프로세스 때문에, 짧은 작업을 가진 프로세스들이 무작정 오래 기다려야 하는 상황을 면할 수 있다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;그렇다면 1회 사용할 수 있는 할당 시간을 얼마로 할 것인가? 일반적인 할당 시간 설정은 수 밀리 세컨드(ms) 정도의 단위를 사용한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;그러면 100명의 사용자가 동시에 접속할 때에도 1초 이하의 응답 시간을 보장받을 수 있게 된다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;- 우선순위 스케줄링&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;우선순위 스케줄링에서는 수행 대기 중인 프로세들을 에게 우선순위를 부여하고, 우선순위가 높은 프로세스에게 CPU를 먼저 할당하게 된다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;시스템 내의 프로세스 중에는 상대적으로 더 중요한 프로세스가 있을 수 있음.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;그런 프로세스에게 우선순위를 높게 하여 CPU를 먼저 획들 할 수 있게 하는 것이 우선순위 스케줄링의 철학이라 할 수 있다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;운영 체제의 관리 대상 메모리.&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;메모리는 CPU가 직접 접근할 수 있는 컴퓨터 내부의 기억 장치.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;프로그램이 CPU에서 수행되려면 해당 부분이 메모리에 올라가 있어야 함.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;한정된 메모리 공간에 여러 프로그램을 수용시키려면, 메모리에 대한 효율적인 관리 메커니즘이 필요함.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot; style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/h4&gt;&lt;h4 data-ke-size=&quot;size20&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;메모리 관리&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;메모리 관리를 위해 운영 체제는 메모리의 어느 부분이 어떤 프로그램에 의해 사용되고 있는지를 유지하게 됨, 이러한 정보는 주소를 통하여 관리됨.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;운영 체제는 프로그램에게 메모리가 필요할 때 할당하고, 필요하지 않게 될 때 회수함.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;어떠한 경우에는 메모리를 조금만 더 할 당해주면 굉장히 빨리 수행할 수도 있고, 때로는 불필요하게 메모리를 요청해 자원을 낭비하는 경우가 발생하기도 함.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;따라서 운영 체제는 이를 잘 판단하여, 전체 메모리 공간이 효율적으로 사용될 수 있도록 해야 함.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;다수의 사용자 프로그램이 동시에 메모리에 올라간 경우 서로 다른 프로세스의 영역을 침범하지 않도록 보안을 유지하는 역할도 운영 체제의 몫.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;즉, 운영 체제는 각 프로세스가 자신의 메모리 영역만을 접근할 수 있도록 관리해야 한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;물리적 메모리 관리 방식&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;고정 분할 방식, 가변 분할 방식, 가상 메모리 방식이 있음.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;&amp;nbsp;o 고정 분할 방식&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;물리적 메모리를 몇 개의 영구적인 분할로 나눔.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;나뉜 가각의 분할에는 하나의 프로그램이 적대됨.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;고정 분할 방식은 융통성이 없는 단점이 있음. 이는 동시에 메모리에 적대되는 최대 프로그램의 수가 분할 개수로 한정되기 때문이다. 분할의 크기보다 큰 프로그램은 적재가 불가능함.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;메모리의 효율적인 사용 측면으로 보았을 때 적절치 않음.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;분할이 고정적이기 때문에 분할의 크기보다 작은 프로그램이 적재되는 경우 남는 영역이 발생하게 됨.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;이것을 내부 조각이라고 한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;내부 조각은 분할 영역에 올라온 프로그램에 의해서도 사용되지 않고, 다른 프로세스에게도 할당될 수 없으므로 비효율적으로 낭비되는 공간을 의미한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;&amp;nbsp;가변 분할 방식&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;매시점 프로그램의 크기에 맞게 메모리를 분할하여 사용하는 방식을 말함.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;분할의 크기 때문에 큰 프로그램의 실행이 제한되는 문제는 발생하지 않음.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;그러나 물리적 메모리 크기보다 더 큰 프로그램의 실행은 여전히 불가능함.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;분할의 크기, 개수가 동적으로 변하므로 기술적 관리 기법이 필요함.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;고정 분할 방식에서 발생하는 내부 조각은 발생하지 않지만 외부족이 발생할 수 있다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;외부 조각은 프로그램에 할당되지 않은 메모리 영역이지만 그 크기가 작아 프로그램을 올리지 못하는 메모리 영역을 뜻함.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;외부 조각 역시 내부 조각처럼 낭비된 메모리 자원.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot; style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/h4&gt;&lt;h4 data-ke-size=&quot;size20&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;가상 메모리 기법&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;최근 모둠 컴퓨터 시스템에서 사용하는 메모리 관리기법.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;물리적 메모리보다 더 큰 프로그램이 실행되는 것을 지원.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;실행될 수 있는 프로그램의 크기는 가상 메모리 크기에 의해 결정됨.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;ex) 물리적 메모리가 10 Mbyte라 하더라도, 20 Mbyte의 프로그램을 실행할 수 있음&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;2배의 해당하는 이경우를, 어떠한 원리로 실행시키는가 하면, 프로그램의 크기가 20 Mbyte라 하더라도 전체가 항상 동시에 사용되는 것이 아니다. 예를 들어 현재 사용되고 있는 부분만 메모리에 10 Mbyte를 올려두고 나머지는 하드 디스크와 같은 보조 기억장치에 저장해 두었다가 필요할 때 적재하는 방식을 취하는 것이다. 이때 사용되는 보조 기억 장치의 영역을 우리는 스왑 영역이라고 부른다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;프로그램을 구성하는 주소 공간은 페이지라는 동일한 크기의 작은 단위로 나뉘어 물리적 메모리와 스왑 영역에 일부분씩 저장되는 것이다. 이렇게 동일한 단위로 메모리를 나누는 기법을 페이징 기법이라고 부른다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;주변 장치 및 입출력 장치 관리와 인터럽트(Interrupt) 서비스&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;CPU나 메모리와 달리 인터럽트(Inter-rupt)라는 메커니즘을 통하여 관리됨.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;주변 장치들은 CPU의 서비스가 필요한 경우에 신호를 발생시켜 서비스를 요청하게 되는데, 이때 발생시키는 신호를&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;인터럽트라고 한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;CPU는 평소에 스케줄링에 따라 자신에게 주어진 작업을 수행 중, 인터럽트가 발생되면 잠시 일을 멈추고 인터럽트에 의한 요청 서비스를 수행하게 되는 것이다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;인터럽트 발생 ex) 어떠한 사람이 키보드를 입력함, 키보드는 CPU에게 인터럽트를 발생시킴으로써 알려줌. 그러면 CPU는 하던 작업을 멈추고 인터럽트로 인하여 처리해야 할 작업을 수행.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;인터럽트 서비스를 완료한 후 원래 하던 일을 계속 수행.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;운영 체제는 인터럽트 서비스를 완료한 후에 이전에 수행하던 작업으로 돌아오기 위하여, 인터럽트 처리 직전에 수행하던 작업의 상태를 저장해 둔다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;인터럽트는 요청하는 장치와 발생 상황에 따라 다양한 종류가 있음으로, 운영 체제는 인터럽트 종류마다 서로 다른 인터럽트 처리 루틴을 가지고 있음.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;인터럽트 처리 루틴이란 인터럽트가 발생했을 때 해주어야 할 작업을 정의한 프로그램 코드를 말함.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;운영 체제 커널 내에 존재하는 코드로 CPU 스케줄링, 메모리 관리 루틴 등 다양한 기능을 위한 커널 코드 중 일부분이라 할 수 있다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Noto Sans Demilight, Noto Sans KR;&quot;&gt;&lt;b&gt;주변 장치들은 각 장치마다 그 장치에서 일어나는 업무에 대한 관리를 위하여 일종의 작은 CPU를 가지고 있다. 이것을 우리는 컨트롤러(Controller)라고 부른다. 컨트롤러는&amp;nbsp;해당 장치에 대한 업무를 처리하고, 이를 메인 CPU에 인터럽트를 발생시켜 보고하는 역할을 함.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Operating System.</category>
      <category>interrupt</category>
      <category>OS</category>
      <category>운영체제</category>
      <category>인터럽트</category>
      <category>자원관리</category>
      <category>자원관리 기능</category>
      <author>노력은배신안함</author>
      <guid isPermaLink="true">https://jeg-dev.tistory.com/25</guid>
      <comments>https://jeg-dev.tistory.com/25#entry25comment</comments>
      <pubDate>Mon, 15 Jun 2020 00:25:29 +0900</pubDate>
    </item>
  </channel>
</rss>