<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>유쾌하게 긍정적으로</title>
    <link>https://itandhumanities.tistory.com/</link>
    <description>배움에 대한 즐거움을 간직하고, 어제보다 더 잘하기 위해 도전하는 개발자입니다</description>
    <language>ko</language>
    <pubDate>Fri, 10 Apr 2026 22:53:29 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Changik</managingEditor>
    <image>
      <title>유쾌하게 긍정적으로</title>
      <url>https://tistory1.daumcdn.net/tistory/3488524/attach/b504f61ddf374b50a0c5d38286932a3f</url>
      <link>https://itandhumanities.tistory.com</link>
    </image>
    <item>
      <title>Const val과 val의 차이</title>
      <link>https://itandhumanities.tistory.com/75</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1680&quot; data-origin-height=&quot;762&quot; width=&quot;600&quot; height=&quot;272&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lHp9Y/btrdZXieC79/KBsWLaTTd9Zv3rwucKRyQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lHp9Y/btrdZXieC79/KBsWLaTTd9Zv3rwucKRyQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lHp9Y/btrdZXieC79/KBsWLaTTd9Zv3rwucKRyQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlHp9Y%2FbtrdZXieC79%2FKBsWLaTTd9Zv3rwucKRyQk%2Fimg.png&quot; data-origin-width=&quot;1680&quot; data-origin-height=&quot;762&quot; width=&quot;600&quot; height=&quot;272&quot; data-ke-mobilestyle=&quot;widthOrigin&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 data-ke-size=&quot;size16&quot;&gt;토이 프로젝트에서 라이브러리 버전을 따로 Versions라 불리는 싱글톤 파일(Kotlin Object)에 저장하는데요, 이렇게 되면 버전을 한 곳에서 관리할 수 있어서 이해하기 편하고, 각 라이브러리에 대해 세부적으로 구분할 수 있습니다.&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;그런데 위에서 보다시피, IDE에서는 val로 값을 할당하는 것보다 const val 사용을 권장하고 있는데요. 이에 대해 궁금증이 생겨 Stack Overflow에 검색해봤습니다. val도 immutable한 값, const val도 immutable한 값인데 어떤 차이가 있는지 궁금했거든요.&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://stackoverflow.com/questions/37595936/what-is-the-difference-between-const-and-val&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/37595936/what-is-the-difference-between-const-and-val&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1630645615086&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;What is the difference between &amp;quot;const&amp;quot; and &amp;quot;val&amp;quot;?&quot; data-og-description=&quot;I have recently read about the const keyword, and I'm so confused! I can't find any difference between const and the val keyword, I mean we can use both of them to make an immutable variable, is th...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/37595936/what-is-the-difference-between-const-and-val&quot; data-og-url=&quot;https://stackoverflow.com/questions/37595936/what-is-the-difference-between-const-and-val&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/JRp2T/hyLt1MfiFv/jhQV0gIQGsK0SBkvU6QBak/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/37595936/what-is-the-difference-between-const-and-val&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/37595936/what-is-the-difference-between-const-and-val&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/JRp2T/hyLt1MfiFv/jhQV0gIQGsK0SBkvU6QBak/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&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;What is the difference between &quot;const&quot; and &quot;val&quot;?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I have recently read about the const keyword, and I'm so confused! I can't find any difference between const and the val keyword, I mean we can use both of them to make an immutable variable, is th...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.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;결론적으로 const는 compile Time에 결정되는 상수 값이고, val은 Runtime에서 결정되는 값이라고 합니다. 값을 할당하는 방법에서 약간의 차이가 있다고 위에서 설명해주는데요. compile time과 runtime에서 값을 할당하는 것이 어떤 차이인지 조금 더 고민해보고 조사할 필요가 있을 것 같습니다.&lt;/p&gt;</description>
      <category>Kotlin</category>
      <author>Changik</author>
      <guid isPermaLink="true">https://itandhumanities.tistory.com/75</guid>
      <comments>https://itandhumanities.tistory.com/75#entry75comment</comments>
      <pubDate>Fri, 3 Sep 2021 14:08:03 +0900</pubDate>
    </item>
    <item>
      <title>근황 및 기록</title>
      <link>https://itandhumanities.tistory.com/74</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://jyami.tistory.com/126&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;'공채없이 카카오 개발자 취준기'&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;솔직히 걱정이 앞서기도 한다. 우리나라 최강의 개발자들이 모여있는 곳 중 하나에 내가 들어간다니..잘 적응할 수 있을까라는 걱정.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 면접 중에 질문을 통해 배운 신입 개발자로써 준비해볼만한 것들을 차근차근 공부해보고있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전에 클린 코드나 클린 아키텍처와 같은 책들을 주로 읽었는데, 면접관님 중 한분이 이런 책들은 전략 / 전술에 가깝다고 생각한다고 하셨다. 오히려 기본기는 이펙티브 자바, 리팩토링, GoF 디자인 패턴이라고 말씀하셨는데, 누구나 기준이 다르겠지만, 지극히 공감하고 당장 이 세 책들을 정독하고 있다. 입사 전에 최대한 많이 읽어가는 것이 목표다.&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;정확히, 정말 정확히 6개월 전에 네이버 웹툰 인턴 전환에 실패했다. 웹툰에 들어갈 때까지만 해도 자신감이 하늘을 찔렀던 것 같다. 개발을 고작 1년하고 네이버 웹툰이라는 아주 훌륭한 회사에 인턴으로 합격했으니.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, 인턴 과제를 진행하면서, 전환 면접 기회도 못 얻으면서 자존감, 자신감 모두 극도로 떨어졌었다. 중간중간 공부하다가 들어간 블로그가 같이 인턴을 진행한 동기분 블로그인 것을 알고, 동기분은 최종 전환된 것을 보면서 더 불안해지고 우울해졌었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블로그를 통해 찾다보면 거의 전환된, 성공적인 글들이 대부분이다. &lt;b&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;그리고 상반기동안 많은 기업들에 지원했다. 하지만, 번번이 코딩 테스트에 막혀 면접도 못봤었다. 안드로이드 개발만 하다보니 Problem Solving을 제대로 할 수 있을리가 없었다. 그래서, 최근까지도 거의 대부분을 코딩 테스트를 준비했었다. 진짜 아직까지도 코딩 테스트라면 자신이 없지만, 프로그래머라면, &lt;b&gt;훌륭한 프로그래머라면 Problem Solving은 기본 소양이라고 생각한다.&lt;/b&gt; 틈틈이 Leetcode의 Contest를 응시하면서 Problem Solving을 연습하고자 한다.&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;/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;/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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이런 과정 속에 지금의 좋은 결과를 얻으니 비현실적이지 않을 수 없다!&lt;/b&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;/b&gt; 지금까지 그랬으니깐.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;면접 직전 그 떨림과 긴장을 기억하고, 지금 주어진 기회에 아주아주아주 감사하면서 살아가야겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발자로서 아주 좋은 스타트임이 분명하다. 정규직 전환이라는 좋은 결과가 주어진다면, 내가 그랬듯이 개발자 취준기 류의 글을 쓰면서 다른 개발자들에게 도움을 주고 싶다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>일상, 생활 기록</category>
      <author>Changik</author>
      <guid isPermaLink="true">https://itandhumanities.tistory.com/74</guid>
      <comments>https://itandhumanities.tistory.com/74#entry74comment</comments>
      <pubDate>Sat, 28 Aug 2021 01:44:29 +0900</pubDate>
    </item>
    <item>
      <title>Difference between thread and coroutine in Kotlin</title>
      <link>https://itandhumanities.tistory.com/73</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;코루틴에 대해서 학습하던 중 좋은 토론(?)글이 있어 남겨둡니다. 질문도 무엇을 얘기하고 싶은지, 무엇을 질문하고 싶은지 명확하게 전달해야하는데 아래 링크의 질문자의 질문이 아주 훌륭하다고 생각합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1628783359206&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Difference between thread and coroutine in Kotlin&quot; data-og-description=&quot;Is there any specific language implementation in Kotlin, which differs it from another languages implementation of coroutines? What means that coroutine is like light-weight thread? What is the&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/43021816/difference-between-thread-and-coroutine-in-kotlin&quot; data-og-url=&quot;https://stackoverflow.com/questions/43021816/difference-between-thread-and-coroutine-in-kotlin&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/RRPhN/hyLdsKfLQN/nhVUwzibLHQHopJcMKfm10/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/43021816/difference-between-thread-and-coroutine-in-kotlin&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/43021816/difference-between-thread-and-coroutine-in-kotlin&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/RRPhN/hyLdsKfLQN/nhVUwzibLHQHopJcMKfm10/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&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;Difference between thread and coroutine in Kotlin&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Is there any specific language implementation in Kotlin, which differs it from another languages implementation of coroutines? What means that coroutine is like light-weight thread? What is the&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <author>Changik</author>
      <guid isPermaLink="true">https://itandhumanities.tistory.com/73</guid>
      <comments>https://itandhumanities.tistory.com/73#entry73comment</comments>
      <pubDate>Fri, 13 Aug 2021 00:50:57 +0900</pubDate>
    </item>
    <item>
      <title>ArrayList 자료 구조 분석</title>
      <link>https://itandhumanities.tistory.com/72</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;개요&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C에 Vector가 있다면 Java에 ArrayList가 있습니다. 물론 Java에도 멀티 스레딩 환경에서 최적화된 ArrayList인 Vector가 있긴하지만, 오늘은 기본적으로 ArrayList에 대해서만 정리하도록 하겠습니다.&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;일반적인 Array는 그 크기가 정적(Static)입니다. Array를 생성하면서 크기를 설정하면 할당된 해당 Array는 크기 변경이 불가능합니다. 메모리에 Random-Access하기 위해서는 메모리 위에 한번에 그 영역을 설정해야하므로 이렇게 만들어졌다고 생각됩니다.&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;실제로 프로그래밍을 하다보면, Array를 사용하다가 그 크기를 변경해야할 때가 있습니다. 혹은 Array의 특성 때문에 초기에 너무 큰 공간을 할당해서 공간을 낭비하는 경우도 있습니다. 이런 경우 적합한 크기를 가진 새로운 Array를 만들어야하는 불편한 상황이 생깁니다.&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;우리는 이러한 문제를 해결하기 위해, 동적인 Array를 만들게 되는데, 이것이 바로 ArrayList입니다.&lt;b&gt; ArrayList는 List Interface를 구현한 클래스로, 크기가 동적으로 변하는 Array&lt;/b&gt;라고 볼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;동작 원리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ArrayList는 List Interface를 구현했기 때문에 List가 가진 메서드를 사용할 수 있습니다. 대표적으로 get, set, contains, Iterate와 같은 것들이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 &lt;b&gt;배열의 특성을 지니기 때문에 Random-Access가 가능합니다.&lt;/b&gt; Random-Access는 하단에 링크로 추가해놓겠습니다. 연결 리스트처럼 Sequential하게 접근하는 것이 아닌, 원하는 Index로 상수시간에 접근 가능한 것을 말합니다. Array의 가장 큰 장점이자 특징이죠. 왜 ArrayList는 배열의 특성을 지닐까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1880&quot; data-origin-height=&quot;1224&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p2Noy/btrbpO9aYMZ/pAH9ouzKg05ieaLLkwv2h0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p2Noy/btrbpO9aYMZ/pAH9ouzKg05ieaLLkwv2h0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p2Noy/btrbpO9aYMZ/pAH9ouzKg05ieaLLkwv2h0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp2Noy%2FbtrbpO9aYMZ%2FpAH9ouzKg05ieaLLkwv2h0%2Fimg.png&quot; data-origin-width=&quot;1880&quot; data-origin-height=&quot;1224&quot; data-ke-mobilestyle=&quot;widthOrigin&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 data-ke-size=&quot;size16&quot;&gt;ArrayList 명세를 들어가면 다음과 같이 내부적으로 elementData라는 Object타입의 Array를 가지고 있습니다. 이를 통해서 Random Access가 가능한 것이죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명세에 보면 Default Size가 10이라는 것도 알 수 있네요. 이는 ArrayList에 initial size를 따로 명시하지 않았을 때 가지는 사이즈 입니다.&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;가장 중요한 ArrayList의 크기 확장은 어떻게 일어나는 걸까요? 다음과 같은 순서로 진행됩니다.&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;1. 힙 메모리에 현재 가진 배열 크기의 두배가 되는 배열을 새로 생성합니다. (ArrayList 내부적으로 정의된 상수인 MAX_ARRAY_SIZE보다는 반드시 작은 크기로 할당되므로 이 경우는 두배보다 작은 크기로 할당됩니다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 현재 배열의 element들을 새로 생성한 배열로 복사합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 기존 배열을 메모리에서 제거합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1716&quot; data-origin-height=&quot;868&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTcq94/btrbkhqXTa2/0HWNPVfJK6Rxuoo2R97Yk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTcq94/btrbkhqXTa2/0HWNPVfJK6Rxuoo2R97Yk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTcq94/btrbkhqXTa2/0HWNPVfJK6Rxuoo2R97Yk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTcq94%2FbtrbkhqXTa2%2F0HWNPVfJK6Rxuoo2R97Yk1%2Fimg.png&quot; data-origin-width=&quot;1716&quot; data-origin-height=&quot;868&quot; data-ke-mobilestyle=&quot;widthOrigin&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 data-ke-size=&quot;size16&quot;&gt;다음과 같이 기존 힙에 크기 확장이 필요한 ArrayList가 존재한다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1766&quot; data-origin-height=&quot;858&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IF7zu/btra8nyWwz8/223ttx0PmeF1s3Q7oeRTm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IF7zu/btra8nyWwz8/223ttx0PmeF1s3Q7oeRTm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IF7zu/btra8nyWwz8/223ttx0PmeF1s3Q7oeRTm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIF7zu%2Fbtra8nyWwz8%2F223ttx0PmeF1s3Q7oeRTm1%2Fimg.png&quot; data-origin-width=&quot;1766&quot; data-origin-height=&quot;858&quot; data-ke-mobilestyle=&quot;widthOrigin&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 data-ke-size=&quot;size16&quot;&gt;다음과 같이 현재 크기의 두배의 크기를 가진 배열을 내부적으로 생성합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1766&quot; data-origin-height=&quot;826&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bW8ppZ/btrbq35WoQj/CNLtdBXKAdm98uQLHpT55K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bW8ppZ/btrbq35WoQj/CNLtdBXKAdm98uQLHpT55K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bW8ppZ/btrbq35WoQj/CNLtdBXKAdm98uQLHpT55K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbW8ppZ%2Fbtrbq35WoQj%2FCNLtdBXKAdm98uQLHpT55K%2Fimg.png&quot; data-origin-width=&quot;1766&quot; data-origin-height=&quot;826&quot; data-ke-mobilestyle=&quot;widthOrigin&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 data-ke-size=&quot;size16&quot;&gt;그리고 이전 배열은 힙에서 삭제됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마찬 가지로 구현 명세서에 이를 확인할 수 있는 부분이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 add나 addAll이라는 ArrayList의 api를 호출하면 내부적으로 호출되는 메서드들이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1468&quot; data-origin-height=&quot;976&quot; width=&quot;600&quot; height=&quot;399&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b47gY0/btrbkglkFcg/yikzWjKjgfxigHqh2o2iHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b47gY0/btrbkglkFcg/yikzWjKjgfxigHqh2o2iHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b47gY0/btrbkglkFcg/yikzWjKjgfxigHqh2o2iHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb47gY0%2FbtrbkglkFcg%2FyikzWjKjgfxigHqh2o2iHk%2Fimg.png&quot; data-origin-width=&quot;1468&quot; data-origin-height=&quot;976&quot; width=&quot;600&quot; height=&quot;399&quot; data-ke-mobilestyle=&quot;widthOrigin&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 data-ke-size=&quot;size16&quot;&gt;우리가 일반적으로 호출하는 add는 하단의 add이고 상단의 add를 Wrapping한 형태인데요, 상단의 private으로 구현된 add는 내부적으로 grow라는 메서드를 호출하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1320&quot; data-origin-height=&quot;440&quot; width=&quot;600&quot; height=&quot;200&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/APfks/btrblj3aFKA/YkMIVBinuS4F3p2rAl5FR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/APfks/btrblj3aFKA/YkMIVBinuS4F3p2rAl5FR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/APfks/btrblj3aFKA/YkMIVBinuS4F3p2rAl5FR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAPfks%2Fbtrblj3aFKA%2FYkMIVBinuS4F3p2rAl5FR1%2Fimg.png&quot; data-origin-width=&quot;1320&quot; data-origin-height=&quot;440&quot; width=&quot;600&quot; height=&quot;200&quot; data-ke-mobilestyle=&quot;widthOrigin&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 data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;grow는 newCapacity를 통해 계산된 새로운 배열크기만큼 배열을 복사하는 기능&lt;/b&gt;을 수행하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;ArrayList는 Array와 LinkedList와 비교가 자주 되므로 이 자료구조들과의 차이점을 생각해보면 더 좋을 것 같습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;참고 문헌&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Random_access&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://en.wikipedia.org/wiki/Random_access&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1628166501807&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Random access - Wikipedia&quot; data-og-description=&quot;Random access (more precisely and more generally called direct access) is the ability to access an arbitrary element of a sequence in equal time or any datum from a population of addressable elements roughly as easily and efficiently as any other, no matte&quot; data-og-host=&quot;en.wikipedia.org&quot; data-og-source-url=&quot;https://en.wikipedia.org/wiki/Random_access&quot; data-og-url=&quot;https://en.wikipedia.org/wiki/Random_access&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Z6pdO/hyK7q7r5NQ/bVJamolyVxmqAaqBF4Lx9k/img.png?width=1200&amp;amp;height=720&amp;amp;face=0_0_1200_720&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Random_access&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://en.wikipedia.org/wiki/Random_access&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Z6pdO/hyK7q7r5NQ/bVJamolyVxmqAaqBF4Lx9k/img.png?width=1200&amp;amp;height=720&amp;amp;face=0_0_1200_720');&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;Random access - Wikipedia&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Random access (more precisely and more generally called direct access) is the ability to access an arbitrary element of a sequence in equal time or any datum from a population of addressable elements roughly as easily and efficiently as any other, no matte&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;en.wikipedia.org&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;&lt;a href=&quot;https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1628165204540&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;ArrayList (Java Platform SE 8 )&quot; data-og-description=&quot;Resizable-array implementation of the List interface. Implements all optional list operations, and permits all elements, including null. In addition to implementing the List interface, this class provides methods to manipulate the size of the array that is&quot; data-og-host=&quot;docs.oracle.com&quot; data-og-source-url=&quot;https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html&quot; data-og-url=&quot;https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html&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; data-ke-size=&quot;size16&quot;&gt;ArrayList (Java Platform SE 8 )&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Resizable-array implementation of the List interface. Implements all optional list operations, and permits all elements, including null. In addition to implementing the List interface, this class provides methods to manipulate the size of the array that is&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.oracle.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.geeksforgeeks.org/arraylist-in-java/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.geeksforgeeks.org/arraylist-in-java/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1628165189932&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;ArrayList in Java - GeeksforGeeks&quot; data-og-description=&quot;A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.&quot; data-og-host=&quot;www.geeksforgeeks.org&quot; data-og-source-url=&quot;https://www.geeksforgeeks.org/arraylist-in-java/&quot; data-og-url=&quot;https://www.geeksforgeeks.org/arraylist-in-java/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/coF2cT/hyK8wLJeAA/oerzk4hPirgNvTc8xOo450/img.png?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200,https://scrap.kakaocdn.net/dn/dHzW1E/hyK7kzo9co/lDBenD1HlpZg1jGavp7L4k/img.png?width=1417&amp;amp;height=276&amp;amp;face=0_0_1417_276,https://scrap.kakaocdn.net/dn/b65mCU/hyK7ohtZLD/8R0bCjx5BhhjDqkDXjItKk/img.png?width=1071&amp;amp;height=581&amp;amp;face=0_0_1071_581&quot;&gt;&lt;a href=&quot;https://www.geeksforgeeks.org/arraylist-in-java/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.geeksforgeeks.org/arraylist-in-java/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/coF2cT/hyK8wLJeAA/oerzk4hPirgNvTc8xOo450/img.png?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200,https://scrap.kakaocdn.net/dn/dHzW1E/hyK7kzo9co/lDBenD1HlpZg1jGavp7L4k/img.png?width=1417&amp;amp;height=276&amp;amp;face=0_0_1417_276,https://scrap.kakaocdn.net/dn/b65mCU/hyK7ohtZLD/8R0bCjx5BhhjDqkDXjItKk/img.png?width=1071&amp;amp;height=581&amp;amp;face=0_0_1071_581');&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;ArrayList in Java - GeeksforGeeks&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.geeksforgeeks.org&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;</description>
      <category>자료구조, 알고리즘</category>
      <author>Changik</author>
      <guid isPermaLink="true">https://itandhumanities.tistory.com/72</guid>
      <comments>https://itandhumanities.tistory.com/72#entry72comment</comments>
      <pubDate>Thu, 5 Aug 2021 21:47:31 +0900</pubDate>
    </item>
    <item>
      <title>The mind behind Linux | Linus Torvalds</title>
      <link>https://itandhumanities.tistory.com/71</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=o8NPllzkFhE&amp;amp;t=1019s&quot;&gt;https://www.youtube.com/watch?v=o8NPllzkFhE&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=o8NPllzkFhE&amp;amp;t=1019s&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/z6UfZ/hyK3Hto1aF/YuPD6wszPWlUWwAiSC6dz1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=590_126_746_296&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/o8NPllzkFhE?start=1019&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>일상, 생활 기록</category>
      <author>Changik</author>
      <guid isPermaLink="true">https://itandhumanities.tistory.com/71</guid>
      <comments>https://itandhumanities.tistory.com/71#entry71comment</comments>
      <pubDate>Fri, 30 Jul 2021 14:23:46 +0900</pubDate>
    </item>
    <item>
      <title>An Overview Of Computer Science Concepts For Engineers</title>
      <link>https://itandhumanities.tistory.com/70</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://blog.robertelder.org/computer-science-for-engineers/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://blog.robertelder.org/computer-science-for-engineers/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1627273496285&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;An Overview Of Computer Science Concepts For Engineers&quot; data-og-description=&quot;2017-03-05 - By Robert Elder Who Should Read This? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;This article is targeted at engineering majors from disciplines other than software engineering (such as electrical or mechanical) who are interested in learning more about what topics exist in t&quot; data-og-host=&quot;blog.robertelder.org&quot; data-og-source-url=&quot;https://blog.robertelder.org/computer-science-for-engineers/&quot; data-og-url=&quot;https://blog.robertelder.org/computer-science-for-engineers/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://blog.robertelder.org/computer-science-for-engineers/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://blog.robertelder.org/computer-science-for-engineers/&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; data-ke-size=&quot;size16&quot;&gt;An Overview Of Computer Science Concepts For Engineers&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;2017-03-05 - By Robert Elder Who Should Read This? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;This article is targeted at engineering majors from disciplines other than software engineering (such as electrical or mechanical) who are interested in learning more about what topics exist in t&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.robertelder.org&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;</description>
      <category>일상, 생활 기록</category>
      <author>Changik</author>
      <guid isPermaLink="true">https://itandhumanities.tistory.com/70</guid>
      <comments>https://itandhumanities.tistory.com/70#entry70comment</comments>
      <pubDate>Mon, 26 Jul 2021 13:25:08 +0900</pubDate>
    </item>
    <item>
      <title>5 Things Better than a Computer Science Degree</title>
      <link>https://itandhumanities.tistory.com/69</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://betterprogramming.pub/5-things-better-than-computer-science-degree-f8acb8061c09&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://betterprogramming.pub/5-things-better-than-computer-science-degree-f8acb8061c09&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1627128442843&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;5 Things Better than a Computer Science Degree&quot; data-og-description=&quot;A tertiary education is important but some things look even better on a resume&quot; data-og-host=&quot;betterprogramming.pub&quot; data-og-source-url=&quot;https://betterprogramming.pub/5-things-better-than-computer-science-degree-f8acb8061c09&quot; data-og-url=&quot;https://betterprogramming.pub/5-things-better-than-computer-science-degree-f8acb8061c09&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bhTBAO/hyKZ9JQa9s/KAWun0WFP1kRZyu5izyYjk/img.png?width=1200&amp;amp;height=796&amp;amp;face=0_0_1200_796,https://scrap.kakaocdn.net/dn/haE52/hyKZ4IwrYC/NZKyAeMTgB1H1rrpRZDah0/img.png?width=2000&amp;amp;height=1328&amp;amp;face=0_0_2000_1328,https://scrap.kakaocdn.net/dn/bt45yq/hyKZiawPsA/rCZfTXSKRSysSWOwkfSeT0/img.png?width=60&amp;amp;height=39&amp;amp;face=0_0_60_39&quot;&gt;&lt;a href=&quot;https://betterprogramming.pub/5-things-better-than-computer-science-degree-f8acb8061c09&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://betterprogramming.pub/5-things-better-than-computer-science-degree-f8acb8061c09&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bhTBAO/hyKZ9JQa9s/KAWun0WFP1kRZyu5izyYjk/img.png?width=1200&amp;amp;height=796&amp;amp;face=0_0_1200_796,https://scrap.kakaocdn.net/dn/haE52/hyKZ4IwrYC/NZKyAeMTgB1H1rrpRZDah0/img.png?width=2000&amp;amp;height=1328&amp;amp;face=0_0_2000_1328,https://scrap.kakaocdn.net/dn/bt45yq/hyKZiawPsA/rCZfTXSKRSysSWOwkfSeT0/img.png?width=60&amp;amp;height=39&amp;amp;face=0_0_60_39');&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;5 Things Better than a Computer Science Degree&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;A tertiary education is important but some things look even better on a resume&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;betterprogramming.pub&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;</description>
      <category>일상, 생활 기록</category>
      <author>Changik</author>
      <guid isPermaLink="true">https://itandhumanities.tistory.com/69</guid>
      <comments>https://itandhumanities.tistory.com/69#entry69comment</comments>
      <pubDate>Sat, 24 Jul 2021 21:07:26 +0900</pubDate>
    </item>
    <item>
      <title>백준 2143번 두 배열의 합 (Java)</title>
      <link>https://itandhumanities.tistory.com/68</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;2340&quot; data-origin-height=&quot;1166&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v3mBs/btrac8gUDpu/bWBUEAsUoTny3MMXbs2if0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v3mBs/btrac8gUDpu/bWBUEAsUoTny3MMXbs2if0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v3mBs/btrac8gUDpu/bWBUEAsUoTny3MMXbs2if0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv3mBs%2Fbtrac8gUDpu%2FbWBUEAsUoTny3MMXbs2if0%2Fimg.png&quot; data-origin-width=&quot;2340&quot; data-origin-height=&quot;1166&quot; data-ke-mobilestyle=&quot;widthOrigin&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;h3 data-ke-size=&quot;size23&quot;&gt;해결 과정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 배열이 주어지면 각 배열마다 부 배열의 합이 있을 것이고, 특정 부 배열의 합들을 더해서 T를 만족하는 경우의 수를 구하는 문제다. 문제에서 주어졌듯이 부 배열은 각 배열에서 매우 많다. (단, 입력의 조건에 의해 최대 배열의 길이는 1000이므로 배열 당 최대 1000000개까지 나올 것이다) 부 배열은 연속된 배열이라는 특징이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 먼저 눈에 띄는 것은 T의 범위인데 범위가 매우 커서 int로 담을 수 없다는 것을 바로 알 수 있다. 따라서 문제 해결 과정에서 &lt;b&gt;필요한 곳에 long 타입&lt;/b&gt;을 사용해야한다. 또한 단순히 모든 부 배열의 쌍을 구한다면 1000000 * 1000000 번의 연산이 필요하기 때문에 시간초과가 발생할 것이다. 따라서 다른 방법으로 접근해야한다.&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;/b&gt;를 구하는 것이다. 따라서, 모든 쌍에 대해서 알아야할 필요는 없다. 따라서, &lt;b&gt;각 배열의 부 배열이 만들 수 있는 합을 모두 구하고 그 합끼리 계산을 통해 경우의 수를 도출해 낼 수 있을 것이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 배열마다 부 배열이 만들 수 있는 합을 구하는 것은 연산량에서 문제가 되지 않는다. 어차피 배열의 길이는 1000으로 제한되있고, O(n^2)의 연산으로 돌렸을 때, 1000000번의 연산안에 해결할 수 있다.&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;하지만 구한 부 배열의 합에서 다시 단순히 반복문을 통해 모든 리스트를 순회하면 앞서 말한 것과 크게 다르지 않다. 따라서 다른 방법이 필요하다. A 배열의 특정 부 배열의 합의 값을 선택하고, B 배열의 부 배열의 합을 찾는 것은 특정 Value를 찾는 것과 같다. 따라서, Binary Search를 통해 값을 찾을 수 있는데, 문제는 동일한 값이 여러번 나올 수 있다는 것. 이 부분에서 얼마전 풀었던 Leetcode의 Combination Sum 문제가 생각이 났다. &lt;b&gt;Binary Search를 조금만 변형하면 Upper Bound와 Lower Bound를 찾을 수 있다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 이러한 알고리즘들을 구현하면 문제를 해결할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+ Binary Search말고 투 포인터로 해결하는 방법도 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1626877748609&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

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

        long t = scanner.nextInt();
        int n = scanner.nextInt();
        int[] a = new int[n];

        for (int i=0; i&amp;lt;n; i++) {
            a[i] = scanner.nextInt();
        }

        int m = scanner.nextInt();
        int[] b = new int[m];

        for (int i=0; i&amp;lt;m; i++) {
            b[i] = scanner.nextInt();
        }

        ArrayList&amp;lt;Long&amp;gt; aList = new ArrayList&amp;lt;&amp;gt;();
        ArrayList&amp;lt;Long&amp;gt; bList = new ArrayList&amp;lt;&amp;gt;();

        calculateSumOfSequence(aList, a);
        calculateSumOfSequence(bList, b);

        Collections.sort(bList);

        long count = 0;
        for (long num : aList) {
            count += calculateRangeOfValidValue(t-num, bList);
        }

        System.out.println(count);
    }

    static void calculateSumOfSequence(ArrayList&amp;lt;Long&amp;gt; list, int[] numList) {
        for (int i=0; i&amp;lt;numList.length; i++) {
            long sum = 0;
            for (int j=i; j&amp;lt;numList.length; j++) {
                sum += numList[j];
                list.add(sum);
            }
        }
    }

    static int calculateRangeOfValidValue(long target, ArrayList&amp;lt;Long&amp;gt; b) {
        int left = 0;
        int right = 0;

        int start = 0;
        int end = b.size()-1;
        while (start &amp;lt;= end) {
            int mid = (start + end) / 2;

            if (b.get(mid) &amp;gt;= target) {
                end = mid-1;
            } else {
                start = mid+1;
            }
        }

        left = end;
        start = 0;
        end = b.size()-1;
        while (start &amp;lt;= end) {
            int mid = (start + end) / 2;

            if (b.get(mid) &amp;lt;= target) {
                start = mid+1;
            } else {
                end = mid-1;
            }
        }
        right = end;

        return right - left;
    }
}&lt;/code&gt;&lt;/pre&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://leetcode.com/problems/combination-sum/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://leetcode.com/problems/combination-sum/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1626877823821&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Combination Sum - LeetCode&quot; data-og-description=&quot;Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.&quot; data-og-host=&quot;leetcode.com&quot; data-og-source-url=&quot;https://leetcode.com/problems/combination-sum/&quot; data-og-url=&quot;https://leetcode.com/problems/combination-sum/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bx42JK/hyKXVZSZgn/Z2av9Bbe2ooKkDtykLsK4K/img.png?width=500&amp;amp;height=260&amp;amp;face=0_0_500_260&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/combination-sum/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://leetcode.com/problems/combination-sum/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bx42JK/hyKXVZSZgn/Z2av9Bbe2ooKkDtykLsK4K/img.png?width=500&amp;amp;height=260&amp;amp;face=0_0_500_260');&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;Combination Sum - LeetCode&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;leetcode.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;</description>
      <category>Problem Solving</category>
      <author>Changik</author>
      <guid isPermaLink="true">https://itandhumanities.tistory.com/68</guid>
      <comments>https://itandhumanities.tistory.com/68#entry68comment</comments>
      <pubDate>Wed, 21 Jul 2021 23:29:16 +0900</pubDate>
    </item>
    <item>
      <title>백준 1931번 회의실 배정 (Java)</title>
      <link>https://itandhumanities.tistory.com/67</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;2356&quot; data-origin-height=&quot;1348&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bI86bX/btq9OwQ6tRn/XvtXvl4TRRAfTKglop3HC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bI86bX/btq9OwQ6tRn/XvtXvl4TRRAfTKglop3HC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bI86bX/btq9OwQ6tRn/XvtXvl4TRRAfTKglop3HC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbI86bX%2Fbtq9OwQ6tRn%2FXvtXvl4TRRAfTKglop3HC0%2Fimg.png&quot; data-origin-width=&quot;2356&quot; data-origin-height=&quot;1348&quot; data-ke-mobilestyle=&quot;widthOrigin&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;해결 과정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회의실 배정을 적절히 해서 가장 많은 스케줄을 할당하게 하는 문제다. 처음에는 솔루션이 떠오르지 않아, 모든 케이스에 대해서 다음에 올 가장 적절한 스케줄을 찾아나가는 식의 Brute Force를 생각해봤으나, 회의의 수가 최대 100000개이기 때문에 모든 케이스에 대해서 접근하면 O(n^2), 즉, 100000^2의 연산이 필요하다. 따라서, 시간초과가 발생할 여지가 충분했다.&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;따라서 적어도 O(n*lgN)이나 O(n)의 시간복잡도를 가지는 알고리즘이 필요했는데, 시작 시간이나 종료 시간을 기준으로 해당 타임에 가장 적합한 스케줄을 앞에서부터 찾아나가면 되겠다고 접근했다.&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;문제를 자세히 보면, 종료 시간이 가장 짧은 스케줄들을 차례대로 이어나가다보면 회의의 최대 개수를 구할 수 있음을 알 수 있다. 하지만 단순히 종료 시간이 가장 짧은 스케줄을 찾고 다음 시작 시간을 설정하는 식으로 반복하다보면, 종료 시간이 가장 짧은 스케줄을 찾기 위해 모든 스케줄을 다시 loop해야함을 알 수 있다. 따라서, 이러한 문제를 해결하기 위해 정렬을 이용했다.&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;가장 빠른 종료 시간을 기준으로 정렬한다면 정렬한 List를 순회하면서 회의의 개수를 추적해나갈 수 있다. 정렬은 여러 방법으로 구현이 가능하지만, 문제 해결 과정에서 시작 시간과 종료 시간을 담은 객체를 생성했기 때문에 이를 정렬할 수 있는 Comparable 인터페이스를 구현하도록 했고, Collection.sort() API를 사용했다.&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, [4 8]과 [8 8]이 있으면 문제의 조건에 의해, 4 8과 8 8 두번의 스케줄을 할당할 수 있지만, [8 8]이 리스트에 먼저 들어온다면[8 8]하나만 선택하고 8 이후의 스케줄을 찾게 될 것이다. 따라서 한번만 스케줄을 할당하는 오류를 만든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1626611591086&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Main {
    static class Schedule implements Comparable&amp;lt;Schedule&amp;gt;{
        int start;
        int end;

        public Schedule(int start, int end) {
            this.start = start;
            this.end = end;
        }

        @Override
        public int compareTo(Schedule o) {
            if (this.end &amp;gt; o.end) {
                return 1;
            }
            else if (this.end == o.end) {
                if (this.start &amp;gt; o.start) {
                    return 1;
                }
            }

            return -1;
        }
    }

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

        int n = scanner.nextInt();

        ArrayList&amp;lt;Schedule&amp;gt; scheduleArrayList = new ArrayList&amp;lt;&amp;gt;();

        for (int i=0; i&amp;lt;n; i++) {
            int start = scanner.nextInt();
            int end = scanner.nextInt();

            scheduleArrayList.add(new Schedule(start, end));
        }

        Collections.sort(scheduleArrayList);

        int time = 0;
        int count = 0;

        for (Schedule schedule: scheduleArrayList) {
            if (schedule.start &amp;gt;= time) {
                count++;
                time = schedule.end;
            }
        }

        System.out.println(count);
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Problem Solving</category>
      <author>Changik</author>
      <guid isPermaLink="true">https://itandhumanities.tistory.com/67</guid>
      <comments>https://itandhumanities.tistory.com/67#entry67comment</comments>
      <pubDate>Sun, 18 Jul 2021 21:33:15 +0900</pubDate>
    </item>
    <item>
      <title>Deadlock과 Starvation의 차이</title>
      <link>https://itandhumanities.tistory.com/66</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;Deadlock이란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Deadlock(이하 데드락)이란 여러 프로세스나 스레드가 절대 일어나지 않는 이벤트나 자원 할당을 위해 무한정 대기하는 것을 말한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로세스의 상태는 running, ready, blocked 상태가 있는데 특히 blocked 상태는 프로세스가 어떤 특정 이벤트나 필요한 자원을 기다리는 상태다. 데드락이 발생하면 프로세스는 blocked 상태에서 무한히 대기한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EA%B5%90%EC%B0%A9_%EC%83%81%ED%83%9C&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://ko.wikipedia.org/wiki/%EA%B5%90%EC%B0%A9_%EC%83%81%ED%83%9C&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1625644423260&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;교착 상태 - 위키백과, 우리 모두의 백과사전&quot; data-og-description=&quot;데드락은 여기로 연결됩니다. 다른 뜻에 대해서는 데드락 (동음이의) 문서를 참조하십시오. 교착 상태(膠着狀態, 영어: deadlock)란 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리&quot; data-og-host=&quot;ko.wikipedia.org&quot; data-og-source-url=&quot;https://ko.wikipedia.org/wiki/%EA%B5%90%EC%B0%A9_%EC%83%81%ED%83%9C&quot; data-og-url=&quot;https://ko.wikipedia.org/wiki/%EA%B5%90%EC%B0%A9_%EC%83%81%ED%83%9C&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EA%B5%90%EC%B0%A9_%EC%83%81%ED%83%9C&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ko.wikipedia.org/wiki/%EA%B5%90%EC%B0%A9_%EC%83%81%ED%83%9C&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; data-ke-size=&quot;size16&quot;&gt;교착 상태 - 위키백과, 우리 모두의 백과사전&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;데드락은 여기로 연결됩니다. 다른 뜻에 대해서는 데드락 (동음이의) 문서를 참조하십시오. 교착 상태(膠着狀態, 영어: deadlock)란 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;ko.wikipedia.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Starvation이란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Starvation(이하 기아 상태)는 프로세스가 CPU 자원의 할당을 무한히 대기하는 것을 말한다. 특히 기아 상태는 CPU 스케줄링과 밀접한 관련이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EA%B8%B0%EC%95%84_%EC%83%81%ED%83%9C&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://ko.wikipedia.org/wiki/%EA%B8%B0%EC%95%84_%EC%83%81%ED%83%9C&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1625644634501&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;기아 상태 - 위키백과, 우리 모두의 백과사전&quot; data-og-description=&quot;기아 상태(starvation 스타베이션[*])는 컴퓨터 과학 용어의 하나로, 프로세스가 끊임없이 필요한 컴퓨터 자원을 가져오지 못하는 상황으로, 이러한 자원 없이는 처리를 끝낼 수 없는 병행 컴퓨팅에&quot; data-og-host=&quot;ko.wikipedia.org&quot; data-og-source-url=&quot;https://ko.wikipedia.org/wiki/%EA%B8%B0%EC%95%84_%EC%83%81%ED%83%9C&quot; data-og-url=&quot;https://ko.wikipedia.org/wiki/%EA%B8%B0%EC%95%84_%EC%83%81%ED%83%9C&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EA%B8%B0%EC%95%84_%EC%83%81%ED%83%9C&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ko.wikipedia.org/wiki/%EA%B8%B0%EC%95%84_%EC%83%81%ED%83%9C&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; data-ke-size=&quot;size16&quot;&gt;기아 상태 - 위키백과, 우리 모두의 백과사전&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;기아 상태(starvation 스타베이션[*])는 컴퓨터 과학 용어의 하나로, 프로세스가 끊임없이 필요한 컴퓨터 자원을 가져오지 못하는 상황으로, 이러한 자원 없이는 처리를 끝낼 수 없는 병행 컴퓨팅에&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;ko.wikipedia.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;둘의 차이는?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;둘 다 자원의 할당을 계속해서 대기한다는 점에서 비슷한 부분이 있으나 데드락은 프로세스의 상태 중 blocked 상태에서 발생하며, 기아 상태는 ready 상태에서 발생한다. 데드락은 절대 발생하지 않는 이벤트를 대기하고 있지만, 기아 상태는 CPU의 할당을 대기하기 때문에 일어나지 않는 상황을 대기하는 것과는 다르다. 특히 기아 상태는 CPU의 스케줄링과 밀접한 관련이 있다는 점에서 데드락과 구분된다.&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=xvoEsy2zJnc&quot;&gt;https://www.youtube.com/watch?v=xvoEsy2zJnc&lt;/a&gt;&amp;nbsp;&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=xvoEsy2zJnc&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/mf4P5/hyKN1s0m3W/Z2ykH0QMFwScBK32D0GE6k/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;600&quot; data-video-height=&quot;338&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/xvoEsy2zJnc&quot; width=&quot;600&quot; height=&quot;338&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;</description>
      <category>운영체제</category>
      <author>Changik</author>
      <guid isPermaLink="true">https://itandhumanities.tistory.com/66</guid>
      <comments>https://itandhumanities.tistory.com/66#entry66comment</comments>
      <pubDate>Wed, 7 Jul 2021 17:04:02 +0900</pubDate>
    </item>
  </channel>
</rss>