<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>make_hum.log</title>
        <link>https://velog.io/</link>
        <description>개발자준비</description>
        <lastBuildDate>Sun, 19 Feb 2023 07:17:28 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>make_hum.log</title>
            <url>https://velog.velcdn.com/images/make_hum/profile/4d498e13-c2ff-4195-8a3a-f162b875a7e8/image.JPG</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. make_hum.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/make_hum" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[프론트엔드와 백엔드 차이 - 백엔드 개발자가 되고싶은 이유]]></title>
            <link>https://velog.io/@make_hum/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%EC%99%80-%EB%B0%B1%EC%97%94%EB%93%9C-%EC%B0%A8%EC%9D%B4-%EB%B0%B1%EC%97%94%EB%93%9C-%EA%B0%9C%EB%B0%9C%EC%9E%90%EA%B0%80-%EB%90%98%EA%B3%A0%EC%8B%B6%EC%9D%80-%EC%9D%B4%EC%9C%A0</link>
            <guid>https://velog.io/@make_hum/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%EC%99%80-%EB%B0%B1%EC%97%94%EB%93%9C-%EC%B0%A8%EC%9D%B4-%EB%B0%B1%EC%97%94%EB%93%9C-%EA%B0%9C%EB%B0%9C%EC%9E%90%EA%B0%80-%EB%90%98%EA%B3%A0%EC%8B%B6%EC%9D%80-%EC%9D%B4%EC%9C%A0</guid>
            <pubDate>Sun, 19 Feb 2023 07:17:28 GMT</pubDate>
            <description><![CDATA[<ol>
<li><p>프론트엔드 정의</p>
<ul>
<li>웹페이지를 설계하는 기술</li>
<li>사용자와 바로 접촉하는 경우가 많음</li>
<li>사용자 인터페이스 구현</li>
<li>웹의 경우 HTML, CSS, java script를 활용하여 페이지를 만들어 내는 사람</li>
<li>모바일의 경우 안드로이드, IOS, 클라이언트 개발자</li>
<li>ex) 웹 개발팀, 클라이언트 개발 팀</li>
</ul>
<ol start="2">
<li>백엔드 정의</li>
</ol>
<ul>
<li>눈에 보이지 않는 서버를 담당</li>
<li>필요로 하는 데이터를 저장, 관리, 전달, 활용</li>
<li>데이터 처리시간을 줄임으로써 효율적인 데이터 처리 코드 개발</li>
</ul>
<ol start="3">
<li>백엔드 개발자가 되고싶은 이유
개발공부를 제대로 배워보자고 처음 각오했을때 맞이했던 첫번째 질문은 프론트엔드와 백엔드 공부중에 한가지를 선택하라는 것이었다. 두 분야 모두 전무한 상태에서도 선택하는데 큰 어려움은 없었다. 백엔드 개발이 명확한 답을 찾는 과정이라고 생각해 백엔드로 결정했다.</li>
</ol>
<p>학부 시절 교양과목으로서 프로그래밍언어를 들었을때 들었던 생각은 컴퓨터는 명확하다는 것이다. 내가 입력하고 작성한대로 명확한 답을 사람과 비견할 수 없을 정도로 빠르게 내놓는다는게 참 매력적이었다.
전기를 전공으로하고 관련 공기업에 재직하게 되면서 내가 이 직업에 흥미를 점점 잃어가게 된것은 명확함이 없어서가 아닐까? </p>
<p>아니 명확함은 분명 존재했다. 전기설비들의 유지보수가 내 주 업무 였는데 어떤 한 설비의 장애가 발생하게 되면 장애 원인을 찾고 해당부분만 피벗하여 수리하는것이 정상적인 메뉴얼이다. 그렇지만 직무 현장에서는 이런경우가 많지 않았다.</p>
<p>가령 A라는 설비가 장애가 발생했고 a-1 에서 a-3 까지의 부품들이 원인이라고 예상가능한 상황에서도 해당 부분만 교체하는것이 아니라 A설비 전체를 교체하는 일이 잦았다. </p>
<p>처음에는 이런 일들이 정확한 분석을 하지 못해서, 혹은 귀찮아서 라고 생각했는데 분명 회사 내에는 나보다 훨씬 전문적이고 숙달된 선임분들이 많이 계셨다. 어느 날 친해진 선임분께 물어봤고 선임분께서 해주신 답은 &quot; a-1이 장애원인인건 대부분 직원들이 알아, 그렇지만 이러한 판단으로 a-1만 교체했는데 같은 증상이 또 반복된다면 누구의 책임이 될까? 게다가 이런현상이 발생됐을때 지금까지 해왔던 조치는 A를교체하는것이었는데 이런걸 무시하면서 조치했을때 발생하는 책임은 온전히 조치자에게 갈거야&quot;
그렇다. 내 회사의 업무 프로세스상 설비의 명확한 분석을 통해 업무의 능률을 올리는 일은 나에겐 꽤나 어려운 일이라는 생각이 들었다. </p>
<p>그런생각을 갖을때 쯤 부터 접어왔던 개발자에 대한 호기심이 생기기 시작했다. 학부 졸업을 앞 둔 당시, 나는 2가지 갈림길에서 고민했었다. 
1) 기존 전기전공을 살려 자격증을 취득하고 공공기관 취업준비를 할 것인지
2) 교양과목을 시작으로 영상처리공학, 지능제어, 딥러닝과 같은 과목들을 틈틈히 수강하면서 졸업작품에까지 프로그래밍을 사용했던 개발자 준비를 할것인지 고민이었다.</p>
<p>결국 전자를 선택했고 현재 관련 기업에서 재직자로 일을 하고있지만 지금은 그때의
선택을 후회한다. 6개월 정도의 기간동안 &quot;그때 내가 개발자 준비를 시작했다면 지금은 어떻게 되었을까?&quot; 라는 생각을 자주 했었다. 후회만 남는 시간이 지속 될바엔 뭐라도 하자는 생각으로 개발자 공부를 시작했다.</p>
<p>명확함의 매력에 이끌려 개발자 공부를 시작했고,개인적으로 이 기준에 맞는 공부는 백엔드개발이라고 생각했다. 프론트엔드의 경우 사용자 인터페이스를 구현하는 과정에서 어떤 방식이 더 맞고, 사람들에게 더 편하고 매력있게 구현할 수 있는지를 중점으로 생각해야 하는데 내가 잘 할수 없는일이라고 생각했다. 각각의 이용자들에게 최적의 환경을 제공한다는게 얼마나 불명확한가. 반면 백엔드의 경우 데이터 처리하는데 10초 걸리던것을 1초로 줄이거나, 순간적인 트레픽에 대처하는등 발생하는 문제들의 답이 명확하다는 느낌을 받았다. 내가 백엔드 개발자가 되어야겠다고 생각한 이유다.</p>
<p>물론 이는 단순히 시작에 불과하다. 개발 공부를 더 하게 될수록 위에썼던 나의 생각들이 부끄러워지는 순간이 올거라고 생각한다. 그렇지만 일단 발을 내딛어야한다. 언제든 생각은 바뀔수 있지만 내가 백엔드 개발자를 선택한 이유는 현재는 이와 같다.</p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[1. 스택]]></title>
            <link>https://velog.io/@make_hum/1.-%EC%8A%A4%ED%83%9D</link>
            <guid>https://velog.io/@make_hum/1.-%EC%8A%A4%ED%83%9D</guid>
            <pubDate>Mon, 13 Feb 2023 11:20:41 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/make_hum/post/e414807f-0d70-4ae7-a4b3-a798196a4c91/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[컴퓨터 부팅과정]]></title>
            <link>https://velog.io/@make_hum/%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%B6%80%ED%8C%85%EA%B3%BC%EC%A0%95</link>
            <guid>https://velog.io/@make_hum/%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%B6%80%ED%8C%85%EA%B3%BC%EC%A0%95</guid>
            <pubDate>Tue, 20 Dec 2022 03:47:35 GMT</pubDate>
            <description><![CDATA[<h3 id="1-전원공급">1. 전원공급</h3>
<blockquote>
<p>본체의 전원 스위치를 누르면 전원이 파워 서플라이에 전달</p>
</blockquote>
<h3 id="2공급되는-전원-확인">2.공급되는 전원 확인</h3>
<blockquote>
<ul>
<li>파워서플라이 안에는 몇 개의 반도체 칩이 들어있음, 이 반도체에 전달되는 전압이 정상이고 안정적인지 진단</li>
</ul>
</blockquote>
<ul>
<li>올바른 전압이면 내장된 타이머 칩으로 &quot;Power good signal&quot; 신호 발송</li>
</ul>
<h3 id="3-cpu-on">3. CPU ON</h3>
<blockquote>
<ul>
<li>타이머 칩은 CPU에 보내던 리셋 신호를 중지</li>
</ul>
</blockquote>
<ul>
<li>CPU안에 남아있던 불필요한 내용들을 제거</li>
<li>리셋 시그널이 없어지지 않으면 전원은 들어오지만 화면은 나오지않음</li>
</ul>
<h3 id="4-bios-basic-input-output-system">4. BIOS (Basic Input Output System)</h3>
<blockquote>
<ul>
<li>CPU는 ROM의 BIOS 메모리를 불러옴</li>
</ul>
</blockquote>
<h3 id="5post-power-on-self-test">5.POST (Power On Self Test)</h3>
<blockquote>
</blockquote>
<p><img src="https://velog.velcdn.com/images/make_hum/post/e19c037c-4c02-4adb-a3b5-a61e9ef1a640/image.png" alt=""></p>
<ul>
<li>컴퓨터 본체와 하드웨어에 정상적인 작동을 하는지 검사
메인보드 연결, 그래픽카드, 메모리, 키보드, 하드디스크, 광학디스크, USB등 외부단자<ul>
<li>오류가 발생하면 비프음을 내거나 화면에 오류 내용을 출력</li>
<li>사용자가 약식검사를 하기 위해서는 Quick power on self(test)</li>
</ul>
</li>
</ul>
<h3 id="6-bootstrap">6. Bootstrap</h3>
<blockquote>
<p>POST를 통해 이상이 없으면 BIOS는 Bootstrap을 실행하여 부팅정보를 메모리로 불러온다.
부팅 정보 저장 위치 : Disk의 MBR</p>
</blockquote>
<h3 id="7-운영체제-실행">7. 운영체제 실행</h3>
]]></description>
        </item>
        <item>
            <title><![CDATA[Linux에서 Kernel이란]]></title>
            <link>https://velog.io/@make_hum/Linux%EC%97%90%EC%84%9C-Kernel%EC%9D%B4%EB%9E%80</link>
            <guid>https://velog.io/@make_hum/Linux%EC%97%90%EC%84%9C-Kernel%EC%9D%B4%EB%9E%80</guid>
            <pubDate>Tue, 20 Dec 2022 03:32:44 GMT</pubDate>
            <description><![CDATA[<h3 id="컴퓨터-분류">컴퓨터 분류</h3>
<blockquote>
<p><img src="https://velog.velcdn.com/images/make_hum/post/93a8255f-a34c-4c19-aa77-8489b3f42395/image.png" alt="">
<img src="https://velog.velcdn.com/images/make_hum/post/3115a007-4d1e-4036-aa49-22f22f7bdbd6/image.png" alt=""></p>
</blockquote>
<h3 id="kernel의-기능">Kernel의 기능</h3>
<blockquote>
<ul>
<li>메모리 관리: 메모리가 어디에서 무엇을 저장하는 데 얼마나 사용되는지를 추적합니다. (Swap)
<img src="https://velog.velcdn.com/images/make_hum/post/8462c77a-4430-446e-b211-79db1bfc3674/image.png" alt=""></li>
</ul>
</blockquote>
<ul>
<li>프로세스 관리: 어느 프로세스가 중앙 처리 장치(CPU)를 언제 얼마나 오랫동안 사용할지를 결정합니다.
<img src="https://velog.velcdn.com/images/make_hum/post/5eb92cfe-0336-4f75-9cff-8dc83bf22689/image.png" alt=""></li>
<li>장치 드라이버: 하드웨어와 프로세스 사이에서 중재자/인터프리터의 역할을 수행합니다.</li>
<li>시스템 호출 및 보안: 프로세스의 서비스 요청을 수신합니다.</li>
</ul>
<h3 id="물리적-자원과-추상화-자원의-관리">물리적 자원과 추상화 자원의 관리</h3>
<blockquote>
<p> <img src="https://velog.velcdn.com/images/make_hum/post/742d086d-d7e0-4f81-89db-37f5eaf00b91/image.png" alt="">
물리적 자원에 직접 접근하는 방법은 매우 복잡. 커널을 통해 추상화 자원으로 쉽게 활용 가능.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[페이징 vs 세그멘테이션 기법]]></title>
            <link>https://velog.io/@make_hum/%ED%8E%98%EC%9D%B4%EC%A7%95-vs-%EC%84%B8%EA%B7%B8%EB%A9%98%ED%85%8C%EC%9D%B4%EC%85%98-%EA%B8%B0%EB%B2%95</link>
            <guid>https://velog.io/@make_hum/%ED%8E%98%EC%9D%B4%EC%A7%95-vs-%EC%84%B8%EA%B7%B8%EB%A9%98%ED%85%8C%EC%9D%B4%EC%85%98-%EA%B8%B0%EB%B2%95</guid>
            <pubDate>Tue, 20 Dec 2022 02:46:09 GMT</pubDate>
            <description><![CDATA[<h3 id="페이징-기법">페이징 기법</h3>
<blockquote>
<p>프로세스를 동일한 크기의 페이지로 분할해서 메인 메모리에 적재하는 방식
<img src="https://velog.velcdn.com/images/make_hum/post/dd24ca9a-5388-4469-81d2-0bb193701520/image.png" alt="">
Page : 가상메모리 내의 프로세스 조각
Frame : 메인 메모리 내의 프로세스 조각 
둘의 크기단위는 같음</p>
</blockquote>
<blockquote>
<p><img src="https://velog.velcdn.com/images/make_hum/post/67a44bb4-d60a-4ece-b758-6ce4c5baed9b/image.png" alt="">
모든 프로세스는 하나의 페이징 테이블을 갖고 있음
ex) p1프로세스의 page0은 메인메모리 5번째 frame에 적재</p>
</blockquote>
<h3 id="논리주소와-페이지테이블">논리주소와 페이지테이블</h3>
<blockquote>
<p><img src="https://velog.velcdn.com/images/make_hum/post/9034d403-acc2-4c23-9944-ed86b14d2087/image.png" alt="">
&lt;6 bit page, 10bit offset&gt;
MMU를 이용해 가상(논리)주소를 물리주소로 변환
<img src="https://velog.velcdn.com/images/make_hum/post/e5f1a751-80f0-43a3-a24d-0117eecf5482/image.png" alt="">
가상 주소를 물리주소로 변환하는 과정
TLB(Translation Lookaside Buffer, 페이지 정보 캐쉬)</p>
</blockquote>
<ul>
<li>가상 메모리 주소를 물리적 주소로 변환하는 속도를 높이기 위해 사용하는 캐시<ul>
<li>최근에 일어난 가상 메모리와 물리 주소의 변환 테이블을 저장. CPU가 가상 주소를 가지고 메모리에 접근하려고 할 때 TLB에 우선접근하여 가상 주소에 해당되는 물리 주소를 찾음</li>
</ul>
</li>
</ul>
<h3 id="페이징-기법-장단점">페이징 기법 장단점</h3>
<blockquote>
<p>장점 : 연속저장 불필요, 외부단편화 발생하지 않음
단점 : 내부단편화</p>
</blockquote>
<h3 id="세그멘테이션segmentation-기법">세그멘테이션(segmentation) 기법</h3>
<blockquote>
<p>세그먼트는 가상 메모리를 서로 크기가 다른 논리적 단위로 분할한 것
크기가 아닌 논리적 기준으로 프로세스를 나눈 것</p>
</blockquote>
<h3 id="세그먼트-테이블">세그먼트 테이블</h3>
<blockquote>
<p>&lt;page, offset&gt; -&gt; &lt;segment, offset&gt;</p>
</blockquote>
<h3 id="세그멘테이션-기법-장단점">세그멘테이션 기법 장단점</h3>
<blockquote>
<p>장점 : 보호와 공유기능 수행 가능, 내부 단편화 문제 해결
단점 : 외부 단편화</p>
</blockquote>
<h4 id="출처">출처</h4>
<ul>
<li><a href="https://steady-coding.tistory.com/524">https://steady-coding.tistory.com/524</a></li>
<li><a href="https://ahnanne.tistory.com/15">https://ahnanne.tistory.com/15</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[가상 메모리(VIrtual Memory)]]></title>
            <link>https://velog.io/@make_hum/%EA%B0%80%EC%83%81-%EB%A9%94%EB%AA%A8%EB%A6%ACVIrtual-Memory</link>
            <guid>https://velog.io/@make_hum/%EA%B0%80%EC%83%81-%EB%A9%94%EB%AA%A8%EB%A6%ACVIrtual-Memory</guid>
            <pubDate>Tue, 20 Dec 2022 02:14:27 GMT</pubDate>
            <description><![CDATA[<h3 id="메인-메모리-main-memory-physical-memory-주기억장치">메인 메모리 (Main Memory, Physical Memory, 주기억장치)</h3>
<blockquote>
<p>CPU가 직접 접근할 수 있는 기억 장치로, 프로세스가 실행되려면 프로그램 코드를 메인 메모리에 적재해 두어야 함. 그런데, 만약 프로그램 용량이 메인 메모리보다 크면 어떤 일이 벌어질까?</p>
</blockquote>
<blockquote>
<p>초창기 컴퓨터에서는 사용 가능한 RAM의 용량이, 가장 큰 실행 애플리케이션의 주소 공간보다 커야 했음. 그렇지 않을 경우 &quot;메모리 부족&quot; 오류에 의해 해당 애플리케이션을 실행할 수 없었음.</p>
</blockquote>
<h3 id="가상-메모리virtual-memory">가상 메모리(Virtual Memory)</h3>
<blockquote>
<ul>
<li>어떤 프로세스가 실행될 때 메모리에 해당 프로세스 전체가 올라가지 않더라도 실행이 가능하다는 점에 착안</li>
</ul>
</blockquote>
<ul>
<li>프로세스를 작은 단위로 쪼개 실행하는 부분만 메인메모리에 적재시키고 그외 부분은 보조기억장치에서 대기</li>
</ul>
<h3 id="가상-메모리-구현">가상 메모리 구현</h3>
<blockquote>
<p> 운영 체제는 물리 메모리의 제약을 갖고 있는 주 기억 장치를 보조하기 위해 디스크를 보조 기억 장치 (Paging Space)로 사용한다.
 <img src="https://velog.velcdn.com/images/make_hum/post/49695a45-9f96-40b4-b080-988f3c615681/image.png" alt="">
 즉, 메인 메모리 (주 기억 장치)와 디스크의 페이징 스페이스 (보조 기억 장치)를 묶어 하나의 메모리처럼 동작하게 하며, 이를 통해 메인 메모리의 한계를 넘는 메모리 사용을 가능하게 하는 가상 메모리를 구현한다.</p>
</blockquote>
<h3 id="mmumemory-managed-unit">MMU(Memory Managed Unit)</h3>
<blockquote>
<p> 가상주소를 물리주소로 변환하고, 메모리를 보호하는 기능을 수행
<img src="https://velog.velcdn.com/images/make_hum/post/acb79362-0187-41aa-9735-aa1d6e89bb3c/image.png" alt=""></p>
</blockquote>
<h3 id="swapping">Swapping</h3>
<blockquote>
<p> <img src="https://velog.velcdn.com/images/make_hum/post/ba455e81-1807-419c-9f8d-54a89f1a20c5/image.png" alt="">
swap-out : CPU 할당 시간이 끝난 프로세스의 메모리를 보조 기억 장치를 내보냄
swap-in : 다른 프로세스의 메모리를 불러옴</p>
</blockquote>
<h3 id="내부단편화-vs-외부-단편화">내부단편화 vs 외부 단편화</h3>
<blockquote>
<p>내부단편화 
<img src="https://velog.velcdn.com/images/make_hum/post/6d793270-6698-4ad9-866d-4ae236095566/image.png" alt="">
메모리에 50MB의 빈 공간이 있고 30MB의 C작업을 적재하게 될 때, 20MB의 여유공간을 사용하지 못하는 경우
(Paging기법에서 발생)</p>
</blockquote>
<blockquote>
<p>외부단편화
<img src="https://velog.velcdn.com/images/make_hum/post/d2cfe3bb-d98c-4c75-98dd-3cce85859166/image.png" alt="">
메모리에 50+50 = 100MB의 공간이 남아있지만 70MB인 C작업을 실행시키지 못 하는 경우 
(Segmentation기법에서 발생)</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[Starvation(기아상태)]]></title>
            <link>https://velog.io/@make_hum/Starvation%EA%B8%B0%EC%95%84%EC%83%81%ED%83%9C</link>
            <guid>https://velog.io/@make_hum/Starvation%EA%B8%B0%EC%95%84%EC%83%81%ED%83%9C</guid>
            <pubDate>Tue, 06 Dec 2022 02:48:29 GMT</pubDate>
            <description><![CDATA[<h3 id="starvation이란"><strong>Starvation이란?</strong></h3>
<p> 특정 프로세스의 우선순위가 낮아서 원하는 자원을 계속 할당받지 못하는 상태</p>
<p> <img src="https://velog.velcdn.com/images/make_hum/post/bc51a167-4301-4c4d-9242-5669e8dcc235/image.png" alt=""></p>
<p><strong>Starvation 발생상황 1  - 우선순위 스케쥴링</strong></p>
<blockquote>
<p>N개의 Task가 있다.</p>
</blockquote>
<ul>
<li>N-1개의 우선순위는 1순위<ul>
<li>1개의 우선순위는 2순위
새로 요청된 Task들의 우선순위가 계속 1순위라면 2순위 Task는 무한대로 대기하게 된다.</li>
</ul>
</li>
</ul>
<p>**  Starvation 발생상황 2 - SJF(Shortest - Job - First) **</p>
<blockquote>
<p>  실행시간이 긴 Task는 짧은시간의 Task들이 계속 요청될 경우 무한대로 대기하게 된다.</p>
</blockquote>
<h3 id="starvation-해결책"><strong>Starvation 해결책</strong></h3>
<ol>
<li>aging기법 : 기다릴수록 프로세스에 aging을 통해 우선순위를 점차 높히는 기법 ( 가장 근본적인 해결책)</li>
<li>우선순위, SJF가 아닌 FIFO기법 사용</li>
<li>우선순위 수시 변경</li>
</ol>
<h3 id="-deadlock과-starvation">** DeadLock과 Starvation**</h3>
<p> :DeadLock은 여러 프로세스가 동일 자원 점유를 요청할 때 발생한다.
Starvation은 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할 때 특정 프로세스는 영원히 자원 할당이 안 되는 경우를 주로 의미한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[DeadLock(교착상태)]]></title>
            <link>https://velog.io/@make_hum/DeadLock-%EA%B3%BC-Starvation</link>
            <guid>https://velog.io/@make_hum/DeadLock-%EA%B3%BC-Starvation</guid>
            <pubDate>Tue, 06 Dec 2022 02:37:20 GMT</pubDate>
            <description><![CDATA[<h3 id="deadlock이란"><strong>DeadLock이란</strong></h3>
<p> : 두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리고 있기 때문에 다음 단계로 진행하지 못하는 상태</p>
<blockquote>
</blockquote>
<p>ThreadA에서는 X 임계 자원을 사용하고 그 내부에서 Y 임계 자원을 요청한다.
ThreadB에서는 Y 임계 자원을 사용하고 그 내부에서 X 임계 자원을 요청한다.
Thread A 에서 Y임계자원을 요청 -&gt; Thread B에서 사용중이기 때문에 대기
Thread B 에서 X임계자원을 요청 -&gt; Thread A에서 사용중이기 때문에 대기
--&gt;결국 서로 사용하지 못하고 끝나기만을 기다리는 상태이다.
<img src="https://velog.velcdn.com/images/make_hum/post/3b05775d-bc88-474f-9fc7-8f88cdd99e18/image.png" alt=""></p>
<p>프로세스, 쓰레드 둘 다 이와같은 상태가 일어날 수 있다.</p>
<h3 id="deadlock-조건"><strong>DeadLock 조건</strong></h3>
<ol>
<li><p>상호 배제(Mutual Exclusion) : 프로세스들이 필요로 하는 자원에 대해 배타적이 통제권을 요구한다. ( Process A가 X라는 임계자원을 사용중이면 다른 어떤 Process도 X에 접근하지 못한다.)</p>
</li>
<li><p>점유 대기(Hold &amp; Wait) : 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다린다. </p>
</li>
<li><p>비선점(No preemition): 프로세스가 어떤 자원의 사용을 끝낼 때까지 그 자원을 뺏을 수 없다.</p>
</li>
<li><p>순환 대기(Circular Wait) : 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다.</p>
</li>
</ol>
<h3 id="deadlock-해결방법"><strong>DeadLock 해결방법</strong></h3>
<ol>
<li><p>DeadLock 예방</p>
<p>DeadLock 조건 중 하나를 제거함으로써 해결하는 방법.</p>
<p>1-1. 상호 배제 조건 제거</p>
<ul>
<li>모든 자원의 공유를 허용함.</li>
</ul>
<p>1-2. 점유 대기 조건 제거</p>
<ul>
<li><p>필요한 모든 자원을 할당함.(자원 낭비 발생)</p>
</li>
<li><p>자원을 점유하고 있지 않을 때만 다른 자원을 요청할 수 있도록 함.(기아 상태 가능성)</p>
</li>
</ul>
<p>1-3. 비선점 조건 제거</p>
<ul>
<li>할당 받을 수 없는 자원을 요청할 때 점유하고 있는 모든 자원을 반납하고 대기하게 함.(자원 낭비 발생)</li>
</ul>
<p>1-4. 순환대기 조건 제거</p>
<ul>
<li>자원에 고유 번호를 매기고 번호 순서대로 특정 방향으로만 자원을 요구하도록 함.(자원 낭비 발생)</li>
</ul>
</li>
</ol>
<ol start="2">
<li><p>DeadLock 회피</p>
<p>교착상태가 발생하기 전 교착상태를 예측하고 회피하는 방법이다. 회피할 수 있는 조     건을 달성하기 어렵고 자원을 요청할 때마다 회피 알고리즘을 사용하면 오버헤드가 크기 때문에 현실성 없는 방법이다.</p>
</li>
</ol>
<ol start="3">
<li><p>DeadLock 탐지, 복구</p>
<p>3-1. 교착상태 탐지</p>
</li>
</ol>
<p>  교착 상태를 허용하되 탐지 알고리즘으로 교착상태를 탐지하면 복구하는 방법이다. 탐지 알고리즘을 너무 자주 호출할 경우 오버헤드가 커지기 때문에 적절한 시점과 주기에 호출할 필요가 있다.</p>
<p>  3-2. DeadLock 복구</p>
<ul>
<li>프로세스 종료 : DeadLock인 프로세스를 모두 종료 하거나 DeadLock이 제거 될때까지 한 프로세스씩 중지하는 방법<ul>
<li>DeadLock이 제거될 때까지 프로세스가 점유한 자원을 선점해 다른 프로세스에 할당하는 방법</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[시스템 소프트웨어 종류]]></title>
            <link>https://velog.io/@make_hum/%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4-%EC%A2%85%EB%A5%98</link>
            <guid>https://velog.io/@make_hum/%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4-%EC%A2%85%EB%A5%98</guid>
            <pubDate>Tue, 29 Nov 2022 03:40:20 GMT</pubDate>
            <description><![CDATA[<h3 id="1-어셈블러assembler"><strong>1. 어셈블러(Assembler)</strong></h3>
<p><img src="https://velog.velcdn.com/images/make_hum/post/fcc99150-87c9-4b58-a250-1b5b151f9abe/image.png" alt=""></p>
<blockquote>
<p>저급언어인 어셈블리어(MOV)로 작성된 원시프로그램을 기계어로 작성된 프로그램으로 번역</p>
</blockquote>
<h3 id="2-매크로-프로세서macro-processor"><strong>2. 매크로 프로세서(Macro Processor)</strong></h3>
<p><img src="https://velog.velcdn.com/images/make_hum/post/9d16ec69-ece2-4fa1-a223-ade38fa80464/image.png" alt=""></p>
<blockquote>
<ul>
<li>어려운 어셈블리어를 사용하기 쉽도록 긴 명령어들을 간단한 문자로 치환하여 확정해주는 것</li>
</ul>
</blockquote>
<ul>
<li>프로그래밍 과정 상 동일한 부분을 반복해서 작성해야하는 불편함을 덜어주기 위함</li>
</ul>
<h3 id="-3-링커linker">** 3. 링커(Linker)**</h3>
<p> <img src="https://velog.velcdn.com/images/make_hum/post/5eb81c4d-613e-4e8e-bb06-f8eccaa51162/image.png" alt=""></p>
<blockquote>
<ul>
<li>프로그램의 크기가 너무 커지면, 여러개의 원시 모듈로 나누어 작성됨</li>
</ul>
</blockquote>
<ul>
<li>링커 에디터를 사용하여 두 개 이상의 목적 프로그램(기계어로 번역된 목적파일)을 합쳐서 실행 가능한 프로그램으로 만드는 과정</li>
</ul>
<h3 id="-4-로더loader">** 4. 로더(Loader)**</h3>
<p> <img src="https://velog.velcdn.com/images/make_hum/post/7541d6f3-3c14-4455-82a2-aa021e285831/image.png" alt=""></p>
<blockquote>
<p>번역된 프로그램을 주기억장치로 옮기고 제어기능을 부여함</p>
</blockquote>
<h3 id="5-번역기translater"><strong>5. 번역기(Translater)</strong></h3>
<blockquote>
<p>고급언어를 기계어로 번역해주는 프로그램</p>
</blockquote>
<ul>
<li>컴파일러 : 원시 프로그램을 일괄적으로 번역, 번역된 프로그램인 실행 파일 생성
EX) Java, C, C++<ul>
<li>인터프리티어 : 원시 프로그램을 줄 단위로 해석하여 실행하는 프로그램
EX) Python, Basic</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[시스템 소프트웨어 제어프로그램 / 처리프로그램 ]]></title>
            <link>https://velog.io/@make_hum/%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4-%EC%A0%9C%EC%96%B4%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EC%B2%98%EB%A6%AC%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8</link>
            <guid>https://velog.io/@make_hum/%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4-%EC%A0%9C%EC%96%B4%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EC%B2%98%EB%A6%AC%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8</guid>
            <pubDate>Tue, 29 Nov 2022 03:11:05 GMT</pubDate>
            <description><![CDATA[<h3 id="1-시스템-소프트웨어와-운영체제의-관계"><strong>1. 시스템 소프트웨어와 운영체제의 관계</strong></h3>
<p><img src="https://velog.velcdn.com/images/make_hum/post/4920cae8-cf46-4283-b5fd-f759c30861f1/image.png" alt=""></p>
<blockquote>
<ul>
<li>시스템 소프트웨어는 컴퓨터의 작업을 돕는 여러가지 프로그램들로 구성되어있다.
(기계 종속적) ex) 텍스트 에디터, 컴파일러, 디버거, 어셈블러, 링커 등</li>
</ul>
</blockquote>
<ul>
<li>응용 소프트웨어와 하드웨어를 연결 시켜주는 역할</li>
<li>시스템 소프트웨어 : 운영체제 + 유틸리티</li>
</ul>
<h3 id="-2-제어프로그램--처리프로그램">** 2. 제어프로그램 / 처리프로그램**</h3>
<p><img src="https://velog.velcdn.com/images/make_hum/post/2ddd29c9-6f93-4e80-856e-44e7707d598b/image.png" alt=""></p>
<blockquote>
<p>1) 제어 프로그램 : 시스템 작동감시, 순서지정, 데이터 관리등의 역할을 수행하는 프로그램 </p>
</blockquote>
<p>1-1) 감시 프로그램 </p>
<ul>
<li>제어 프로그램 중 가장 중요한 역할을 담당하는 것으로, 각종 프로그램의 실행과 시스템 전체의 작동 상태를 감시, 감독하는 프로그램</li>
<li>운영체제의 일부로 주 기억장치에 상주하고있는 프로그램</li>
</ul>
<p> 1-2) 작업 제어 프로그램</p>
<ul>
<li>어떤 업무를 처리하고 다른 업무로의 이행을 자동으로 수행하기 위한 준비를 담당하는 프로그램</li>
<li>작업 연속 처리를 위한 스케줄 및 시스템 자원 할당 등을 담당</li>
</ul>
<p>1-3) 자료 관리 프로그램</p>
<ul>
<li>주기억장치와 보조기억 장치 사이의 데이터 전송과 보조기억장치의 자료 갱신 및 유지보수 기능을 수행하는 프로그램<ul>
<li>입출력 자료와 프로그램간의 논리적 연결 등 처리할 수 있도록 관리</li>
</ul>
</li>
</ul>
<blockquote>
<p>2) 처리 프로그램 : 제어 프로그램의 지시를 받아 사용자가 요구한 문제를 해결하기 위한 프로그램</p>
</blockquote>
<p>2-1) 언어 번역 프로그램 </p>
<ul>
<li>원시 프로그램을 기계어 형태의 목적 프로그램으로 번역하는 프로그램<ul>
<li>인터프리터, 어셈블러, 컴파일러</li>
</ul>
</li>
</ul>
<p>2-2) 서비스 프로그램</p>
<ul>
<li>컴퓨터를 효율적으로 사용할 수 있는 사용빈도가 높은 프로그램<ul>
<li>연결 편집기, 링커, 정렬/합병 프로그램, 라이브러리안</li>
</ul>
</li>
</ul>
<p>2-3) 문제 프로그램</p>
<ul>
<li>문제 프로그램특정 업무 및 문제 해결을 위해 사용자가 작성한 프로그램</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[RPC (Remote Procedure Call)]]></title>
            <link>https://velog.io/@make_hum/RPC-Remote-Procedure-Call</link>
            <guid>https://velog.io/@make_hum/RPC-Remote-Procedure-Call</guid>
            <pubDate>Mon, 21 Nov 2022 21:44:44 GMT</pubDate>
            <description><![CDATA[<h3 id="1-ipc-inter-processor-communication란"><strong>1. IPC (Inter Processor Communication)란?</strong></h3>
<blockquote>
<ul>
<li>프로세스들 사이에 서로 데이터를 주고받는 행위</li>
</ul>
</blockquote>
<ul>
<li>단일 컴퓨터 내 프로세스 통신(Shared Memory, message passing 등)
  vs
컴퓨터간 네트워크 통신 (Socket, RPC)</li>
</ul>
<h3 id="2-rpc란"><strong>2. RPC란?</strong></h3>
<blockquote>
<ul>
<li>프로세스간 네트워크 통신을 위해 사용하는 IPC방법의 한 종류</li>
</ul>
</blockquote>
<h3 id="3-socket-vs-rpc"><strong>3. Socket vs RPC</strong></h3>
<blockquote>
<p>소켓 : IP Address와 Port Number를 활용해 서버와 클라이언트 통신
<img src="https://velog.velcdn.com/images/make_hum/post/dcaf22dd-9b76-410c-b4c0-29c65bd2e49a/image.png" alt=""></p>
</blockquote>
<h4 id="출처--silberschatz-operation-system-concepts-10th-ed">출처 : Silberschatz, Operation System Concepts, 10th ED</h4>
<blockquote>
<p>RPC : 클라이언트와 서버 사이에 원격지의 프로시져를 호출하여 네트워크 통신
<img src="https://velog.velcdn.com/images/make_hum/post/c2b2f507-8d38-4e5c-9c0a-1b2246b62a7c/image.png" alt=""></p>
</blockquote>
<h4 id="출처--geeks-for-geeks">출처 : geeks for geeks</h4>
<h3 id="-4-rpc-특징">** 4. RPC 특징**</h3>
<blockquote>
<ul>
<li>일반적으로 프로세스는 자신의 주소공간 안에 존재하는 함수만 호출하여 실행,<br>RPC의 경우 원격지에서 동작하는 프로세스를 호출하여 실행할 수 있다.</li>
</ul>
</blockquote>
<ul>
<li>원격지의 각 Port마다 고유한 Function 및 Parameter들을 보유</li>
<li>주로 분산 컴퓨팅 환경에서 프로세스 간 상호 통신 및 컴퓨팅 자원의 효율적인 사용을 위해서 발전된 기술<ul>
<li>고유 프로세스 개발 집중 가능</li>
<li>프로세스간 통신을 쉽게 구현 및 정교한 제어가 가능</li>
</ul>
</li>
</ul>
<h3 id="---5-rpc의-한계">**   5. RPC의 한계**</h3>
<blockquote>
<p>호출 및 반환 시간이 사용자 및 네트워크 환경에 따라 편차 큼, 불확실성</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[운영체제 큰 틀에서 이해하기]]></title>
            <link>https://velog.io/@make_hum/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%ED%81%B0-%ED%8B%80%EC%97%90%EC%84%9C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@make_hum/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%ED%81%B0-%ED%8B%80%EC%97%90%EC%84%9C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0</guid>
            <pubDate>Mon, 21 Nov 2022 08:13:41 GMT</pubDate>
            <description><![CDATA[<h3 id="1-운영체제란"><strong>1. 운영체제란?</strong></h3>
<blockquote>
<p> 컴퓨터 시스템을 운영하는 소프트웨어
ex) window, Linux, MacOs</p>
</blockquote>
<h3 id="2-그렇다면-컴퓨터란"><strong>2. 그렇다면 컴퓨터란?</strong></h3>
<blockquote>
<p>정보를 처리하는 머신</p>
</blockquote>
<h3 id="3-컴퓨터가-정보를-처리하는-방식"><strong>3. 컴퓨터가 정보를 처리하는 방식</strong></h3>
<blockquote>
<ul>
<li>정보의 최소 단위 : bit (binary digit)</li>
</ul>
</blockquote>
<ul>
<li>무어의 법칙 : 반도체에 집적하는 트랜지스터 수는 1 ~ 2년마다 2배로 증가<ul>
<li>정보의 저장과 전송 : Flip - Flop, 데이터 버스, RF( Radio Frequency)</li>
<li>컴퓨터의 특성 : 범용성(universality) - NOT, AND, OR, NAND게이트 만으로 모든 계산을 할 수 있다. + 계산가능성(computability)</li>
</ul>
</li>
</ul>
<h3 id="--4-프로그램이란">**  4. 프로그램이란?**</h3>
<blockquote>
<p>컴퓨터 하드웨어가 일을 수행할수있게 하는 명령어의 집합
고급 언어 -&gt; 어쎔블리어 -&gt; 기계어</p>
</blockquote>
<h3 id="5-그렇다면-운영체제도-프로그램인가"><strong>5. 그렇다면 운영체제도 프로그램인가?</strong></h3>
<blockquote>
<p> (O) -&gt; 컴퓨터에서 항상 실행되는 프로그램 / 
어플리케이션 프로그램 서비스를 제공하는 시스템 / 
Processes, resource, User Interface 등을 관리함 / 
컴퓨터 사용자와 컴퓨터 하드웨어 사이에서 중간 매개체 역할</p>
</blockquote>
<h3 id="6-컴퓨터-시스템의-4가지-구성요소"><strong>6. 컴퓨터 시스템의 4가지 구성요소</strong></h3>
<blockquote>
<ul>
<li>하드웨어</li>
</ul>
</blockquote>
<ul>
<li>운영체제<ul>
<li>응용 프로그램</li>
<li>사용자</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/make_hum/post/05b50ffe-c749-498f-8bb8-663170c71871/image.png" alt=""></p>
<h4 id="출처--silberschatz-operation-system-concepts-10th-ed">*출처 : Silberschatz, Operation System Concepts, 10th Ed</h4>
<h3 id="7-저장장치-위계"><strong>7. 저장장치 위계</strong></h3>
<blockquote>
<p> 용량, 접근시간에 따라</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/make_hum/post/fea33524-114c-449a-8b1a-2f73ab7bb8a7/image.png" alt=""></p>
<h4 id="출처--silberschatz-operation-system-concepts-10th-ed-1">*출처 : Silberschatz, Operation System Concepts, 10th Ed</h4>
<p>.................. ~ </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[내가 보려고 만든 자바 기본 문법 정리 -(3)]]></title>
            <link>https://velog.io/@make_hum/%EB%82%B4%EA%B0%80-%EB%B3%B4%EB%A0%A4%EA%B3%A0-%EB%A7%8C%EB%93%A0-%EC%9E%90%EB%B0%94-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95-%EC%A0%95%EB%A6%AC-3</link>
            <guid>https://velog.io/@make_hum/%EB%82%B4%EA%B0%80-%EB%B3%B4%EB%A0%A4%EA%B3%A0-%EB%A7%8C%EB%93%A0-%EC%9E%90%EB%B0%94-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95-%EC%A0%95%EB%A6%AC-3</guid>
            <pubDate>Fri, 18 Nov 2022 09:41:33 GMT</pubDate>
            <description><![CDATA[<h3 id="1-type-확인"><strong>1. Type 확인</strong></h3>
<pre><code class="language-java">String a = &quot;Hello&quot;;
a.getClass().getName(); // String</code></pre>
<h3 id="2-int형-string으로-변환"><strong>2. int형 String으로 변환</strong></h3>
<pre><code class="language-java">int a = 100;
String b = a +&quot;&quot; ; //b = &quot;100&quot;;</code></pre>
<h3 id="3string형-int형으로-변환-">*<em>3.String형 int형으로 변환 *</em></h3>
<pre><code class="language-java">String a = &quot;100&quot;;
int b = Integer.parseInt(a); // b = 100;</code></pre>
<h3 id="4-string-단어별-char형-변환"><strong>4. String 단어별 Char형 변환</strong></h3>
<pre><code class="language-java">String a = &quot;Hello&quot;;
a.charAt[0] // &#39;H&#39; (char)</code></pre>
<h3 id="5-배열-섞기"><strong>5. 배열 섞기</strong></h3>
<pre><code class="language-java">int[] a = {0,1,2,3};
        int j;
        int temp;

        for (int i = 3; i &gt;=0 ; i--) {
            j = rd.nextInt(i+1);
            temp = a[i];
            a[i] = a[j];
            a[j] = temp;

        }</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[내가 보려고 만든 자바 기본 문법 정리 -(2)]]></title>
            <link>https://velog.io/@make_hum/%EB%82%B4%EA%B0%80-%EB%B3%B4%EB%A0%A4%EA%B3%A0-%EB%A7%8C%EB%93%A0-%EC%9E%90%EB%B0%94-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95-%EC%A0%95%EB%A6%AC-2</link>
            <guid>https://velog.io/@make_hum/%EB%82%B4%EA%B0%80-%EB%B3%B4%EB%A0%A4%EA%B3%A0-%EB%A7%8C%EB%93%A0-%EC%9E%90%EB%B0%94-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95-%EC%A0%95%EB%A6%AC-2</guid>
            <pubDate>Thu, 17 Nov 2022 03:57:29 GMT</pubDate>
            <description><![CDATA[<h3 id="1-x진수-출력"><strong>1. x진수 출력</strong></h3>
<pre><code class="language-java">         int numBase2 = 0b1100; //2진수는 0b~~
        System.out.println(&quot;numBase2 = &quot; + numBase2);
        int numBase8 = 014;   // 8진수는 0~~~
        System.out.println(&quot;numBase8 = &quot; + numBase8);
        int numBase16 = 0xc;  // 16진수는 0x~~
        System.out.println(&quot;numBase16 = &quot; + numBase16);


        System.out.println(&quot;0b&quot;+ Integer.toBinaryString(numBase2)); //2진수출력
        System.out.println(&quot;0&quot;+Integer.toOctalString(numBase8)); //8진수 출력
        System.out.println(&quot;0x&quot;+Integer.toHexString(numBase16)); //16진수 출력
</code></pre>
<h3 id="2-char형-int형으로-출력시-ascii코드-값으로-출력"><strong>2. Char형 Int형으로 출력시 Ascii코드 값으로 출력</strong></h3>
<pre><code class="language-java">        char keyFirst = &#39;a&#39;;
        System.out.println(&quot;keyFirst = &quot; + keyFirst);
        char keyLast = &#39;z&#39;;
        System.out.println(&quot;keyLast = &quot; + keyLast);
        System.out.println((int)keyFirst); // 자료형 int로 출력시 ascii 코드값으로 출력
        System.out.println((int)keyLast); // ascii</code></pre>
<h3 id="3-string---한단어-씩-string-배열로-변환"><strong>3. String -&gt; 한단어 씩 String[] 배열로 변환</strong></h3>
<pre><code class="language-java">
        String str = &quot;ABCDE&quot;;
        String[] str_array = str.split(&quot;&quot;);
        //str = {&quot;A&quot;, &quot;B&quot;, &quot;C&quot;, &quot;D&quot;, &quot;E&quot;}</code></pre>
<h3 id="4-replace"><strong>4. replace</strong></h3>
<pre><code class="language-java">        String a = &quot;Hello myunghoon!!&quot;;
        a.replace(&quot;myunghoon&quot;, &quot;World&quot;);
        // a = &quot; Hello World!!&quot;</code></pre>
<h3 id="5-substring"><strong>5. substring</strong></h3>
<pre><code class="language-java">        String b = a.substring(0,2); 
        //b = &quot;He&quot;</code></pre>
<h3 id="6-touppercase"><strong>6. toUpperCase</strong></h3>
<pre><code class="language-java">        string c = b.toUpperCase;
        // c = &quot;HEL&quot;</code></pre>
<h3 id="7-string-누적표현"><strong>7. String 누적표현</strong></h3>
<pre><code class="language-java">        String a = &quot;01234&quot;;
        String b = &quot;56789&quot;
        a +=b;
        // a = &quot;0123456789&quot;;</code></pre>
<h3 id="8-arraylist"><strong>8. ArrayList</strong></h3>
<pre><code class="language-java">        ArrayList l1 = new ArrayList();
        l1.add(1);
        l1.add(&quot;HI&quot;);
        l1.add(2);
        l1.add(&quot;World!&quot;);
        // l1 =[1, HI, 2, World!]

        ArrayList&lt;Integer&gt; l1 = new ArrayList&lt;&gt;();
        //int형만 삽입 가능

        l1.add(0, 3); // 0번쨰 위치에 3 삽입 *index는 위치 의미
        l1.get(1); // 1번째 요소 출력
        l1.size(); // l1 요소 개수
        l1.remove(0); // 0번째 요소 제거
        l1.remove(Integer.valueOf(1)); //데이터 값 1 제거
        l1.clear(); // 모든 값 제거
        l1.sort(Comparator.naturalOrder()); // 오름차순 배열
        l1.sort(Comparator.reverseOrder()); // 내림차순 배열
        l1.contains(0); 0데이터 있으면 true     </code></pre>
<h3 id="9-삼항-연산자"><strong>9. 삼항 연산자</strong></h3>
<pre><code class="language-java">        int a = 1;
        int b = ((a==1) ? 1 : 0); // a == 1 이면 b=1, 아니면 b =0;</code></pre>
<h3 id="10-bit-논리-연산자"><strong>10. bit 논리 연산자</strong></h3>
<pre><code class="language-java">        int a = 5;
        int b= 3; 
        int c = 0;
        c = a&amp;b ; // and 연산자 c = 101 &amp; 011 = 001
        c = a|b ; // or 연산자 c = 111
        c = a^b ; // xor연산자 c = 110
        // ~ = 보수 연산자
        c = c&lt;&lt;1 //왼쪽 으로 1칸씩 이동 c = 110 &gt; 1100 2배됨
        c = c&gt;&gt;1 // 오른쪽으로 한칸이동, 101 -&gt; 10  : 1의자리버리고 1/2</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[내가 보려고 만든 자바 기본 문법 정리 -(1)]]></title>
            <link>https://velog.io/@make_hum/%EB%AF%B8%EB%8B%88-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%98%A4%EB%8B%B5%EC%A0%95%EB%A6%AC1</link>
            <guid>https://velog.io/@make_hum/%EB%AF%B8%EB%8B%88-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%98%A4%EB%8B%B5%EC%A0%95%EB%A6%AC1</guid>
            <pubDate>Tue, 15 Nov 2022 10:29:04 GMT</pubDate>
            <description><![CDATA[<p>//자바 미니테스트 본 후</p>
<h3 id="1-문자열-비교를-위한-equals-함수"><strong>1. 문자열 비교를 위한 equals 함수</strong></h3>
<h4 id="내가-쓴-풀이">내가 쓴 풀이</h4>
<pre><code class="language-java">String gender = &quot;f&quot; ;
    if ( Gender.equals(&quot;f&quot;)) </code></pre>
<p>조건 비교 할 때는 변수.equals(&quot;문자열&quot;) 보다는 
&quot;문자열&quot;.equals(변수)로 처리하는것이 낫다.</p>
<h4 id="더-나은-풀이">더 나은 풀이</h4>
<pre><code class="language-java">String gender = &quot;f&quot;;
if(&quot;f&quot;.equals(gender))</code></pre>
<h3 id="2-n-자리-난수-생성"><strong>2. n 자리 난수 생성</strong></h3>
<p>ex) 6자리 난수 생성</p>
<h4 id="내가-쓴-풀이-1">내가 쓴 풀이</h4>
<pre><code class="language-java">int [] random6 = new int[6]; 
for (int i = 0; i &lt; 6; i++) {
             System.out.printf(&quot;%d&quot;,random6[i]);
             }</code></pre>
<p>nextInt(1000000)를 실행 후 format함수로 자릿수에 맞게 나타내는것이 낫다.</p>
<h4 id="더-나은-풀이-1">더 나은 풀이</h4>
<pre><code class="language-java">Random random = new Random();
        int random6 = random.nextInt(1000000);
        System.out.println(&quot;random6 = &quot; + random6);
        String s1 = String.format(&quot;%06d&quot;,random6);
        System.out.println(s1);</code></pre>
<h3 id="3-코드상-반복되는-부분은-될-수-있으면-반복문-처리"><strong>3. 코드상 반복되는 부분은 될 수 있으면 반복문 처리</strong></h3>
<h4 id="내가-쓴-풀이-2">내가 쓴 풀이</h4>
<pre><code class="language-java">System.out.printf(&quot;[1] a: %05.2f%%, (투표수: %d)\n&quot;, leeRate, lee);
         System.out.printf(&quot;[2] b: %05.2f%%, (투표수: %d)\n&quot;, yoonRate, yoon);
         System.out.printf(&quot;[3] c: %05.2f%%, (투표수: %d)\n&quot;, simRate, sim);
         System.out.printf(&quot;[4] d: %05.2f%%, (투표수: %d)\n&quot;, anRate, an);

#### 더 나은 풀이
&gt; char[] list1 = {&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;}
        for (int i = 0; i &lt; 4; i++) {
            System.out.printf(&quot;[%d] %c: %05.2f%%, (투표수: %d)\n&quot;,i,list1[i], leerate, lee);

        }</code></pre>
]]></description>
        </item>
    </channel>
</rss>