<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>seno-b.log</title>
        <link>https://velog.io/</link>
        <description>감성코더</description>
        <lastBuildDate>Sun, 26 Sep 2021 07:50:06 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>seno-b.log</title>
            <url>https://images.velog.io/images/seno-b/profile/3c633446-867a-47f3-90ba-634d014bad17/KakaoTalk_Photo_2020-11-13-01-33-12.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. seno-b.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/seno-b" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[#3 연산자 파훼법]]></title>
            <link>https://velog.io/@seno-b/3-%EC%97%B0%EC%82%B0%EC%9E%90-%ED%8C%8C%ED%9B%BC%EB%B2%95-sw6g1bd0</link>
            <guid>https://velog.io/@seno-b/3-%EC%97%B0%EC%82%B0%EC%9E%90-%ED%8C%8C%ED%9B%BC%EB%B2%95-sw6g1bd0</guid>
            <pubDate>Sun, 26 Sep 2021 07:50:06 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/seno-b/post/32412e4b-14f6-4243-939d-01fb68248e1b/c867bcf5-3d9d-4e29-bb6b-faa6b7e0aca8.png" alt=""></p>
<h1 id="🙆♂️-목표">🙆‍♂️ 목표</h1>
<p>자바가 제공하는 다양한 <strong>연산자</strong> 학습</p>
<hr>
<h1 id="🤔-학습내용">🤔 학습내용</h1>
<ul>
<li><code>산술</code> 연산자</li>
<li><code>비트</code> 연산자</li>
<li><code>관계</code> 연산자</li>
<li><code>논리</code> 연산자</li>
<li><code>instanceof</code></li>
<li>assignment(<code>=</code>) operator</li>
<li>화살표(<code>-&gt;</code>) 연산자</li>
<li><code>3항</code> 연산자</li>
<li>연산자 우선 순위</li>
<li>Java 13. <code>switch</code> 연산자</li>
</ul>
<hr>
<h2 id="산술-연산자">산술 연산자</h2>
<blockquote>
<p>👀 산술 연산자(Arithmetic Operators)는 수학적인 계산에 사용되는 연산자다.</p>
</blockquote>
<p>java에서 산술연산자는 어떻게 사용할까? 아래 <strong>java code</strong>로 살펴보자.</p>
<pre><code class="language-java">int a = 13;
int b = 4;

System.out.println(a + b); // 17
System.out.println(a - b); // 9
System.out.println(a * b); // 52
System.out.println(a / b); // 3
System.out.println(a % b); // 1</code></pre>
<p>정수형 <code>byte</code> <code>short</code> <code>long</code> 모두 동일하게 적용된다.</p>
<blockquote>
<p>😲 실수형은?</p>
<pre><code class="language-java">double a = 13;
double b = 4;

System.out.println(a + b); // 17.0
System.out.println(a - b); // 9.0
System.out.println(a * b); // 52.0
System.out.println(a / b); // 3.25
System.out.println(a % b); // 1.0
</code></pre>
</blockquote>
<p>🚫 주의사항</p>
<ul>
<li>ArithmeticException<pre><code class="language-java">5 / 0 or 5 % 0 // 정수형</code></pre>
<ul>
<li>Infinity (∞)<pre><code class="language-java">5 / 0.0 // 실수형</code></pre>
</li>
<li>NaN (Not of Number)<pre><code class="language-java">5 % 0.0 // 실수형</code></pre>
연산 결과가 Infinity 또는 NaN 인지 확인하려면 아래와 같은 메서드를 사용하여 확인이 가능하다.<pre><code class="language-java">FLoat.isInfinite(inf);
FLoat.isNaN(nan);
Double.isInfinite(inf);
Double.isNaN(nan);</code></pre>
</li>
</ul>
</li>
</ul>
<hr>
<h2 id="비트-연산자">비트 연산자</h2>
<blockquote>
<p>👀 비트연산은 2진수 형태의 숫자 0과 1로 할 수 있는 연산이다.
비트연산자를 사용하여  시간복잡도를 줄일 수 있는 효과를 볼 수 있고 다양한 알고리즘에서 활용할 수 있다.</p>
</blockquote>
<p>java 비트 연산자는 비트 논리 연산자와 비트 쉬프트 연산자로 구분된다.</p>
<h3 id="비트-논리-연산자">비트 논리 연산자</h3>
<table>
<thead>
<tr>
<th align="center">연산자</th>
<th>의미</th>
</tr>
</thead>
<tbody><tr>
<td align="center">&amp; (AND)</td>
<td>피연산자 중 양쪽이 모두 1일 때만 1이 되며, 그 외에는 0이 된다</td>
</tr>
<tr>
<td align="center">l (OR)</td>
<td>피연산자 중 한쪽이 1이면 1이도 되며, 그 외에는 0이 된다</td>
</tr>
<tr>
<td align="center">^ (XOR)</td>
<td>피연산자의 값이 서로 다른 경우에만 1이 되며, 그 외에는 0이 된다</td>
</tr>
<tr>
<td align="center">~ (NOT)</td>
<td>모든 비트를 반대로 뒤집는다</td>
</tr>
</tbody></table>
<p>Code :</p>
<pre><code class="language-java">int x = 10; // 1010
int y = 12; // 1100

System.out.println(&quot;x.toBianry = &quot; + Integer.toBinaryString(x));
System.out.println(&quot;y.toBianry = &quot; + Integer.toBinaryString(y));
System.out.println(&quot;x &amp; y = &quot; + Integer.toBinaryString(x&amp;y));
System.out.println(&quot;x | y = &quot; + Integer.toBinaryString(x|y));
System.out.println(&quot;x ^ y = &quot; + Integer.toBinaryString(x^y));
System.out.println(&quot;~x = &quot; + Integer.toBinaryString(~x));</code></pre>
<p>Output :</p>
<pre><code>x.toBianry = 1010
y.toBianry = 1100
x &amp; y = 1000
x | y = 1110
x ^ y = 110
~x = 11111111111111111111111111110101</code></pre><blockquote>
<p><code>x ^ y</code> 연산 같은 경우 실제 bit는 <code>00000000000000000000000000110</code> 이 된다.
<code>~x</code> 1의 보수의 형태로 모든 bit가 반대로 뒤집히는걸 볼 수 있다.</p>
<p>🧐 왜 반대로 뒤집혔는데 숫자가 저렇게 길죠?!
int = 4byte, 1byte당 8bit, 총 32bit를 표현한다.</p>
</blockquote>
<h3 id="비트-쉬프트-연산자">비트 쉬프트 연산자</h3>
<p>쉬프트 연산자는 피연산자의 각 비트들을 &#39;오른쪽(&gt;&gt;)&#39; 또는 &#39;왼쪽(&lt;&lt;)&#39;으로 이동시킨다.</p>
<table>
<thead>
<tr>
<th align="center">연산자자</th>
<th>의미</th>
</tr>
</thead>
<tbody><tr>
<td align="center">&gt;&gt;</td>
<td>bit값을 오른쪽으로 이동, 빈 자리는 부호값으로 대입한다</td>
</tr>
<tr>
<td align="center">&lt;&lt;</td>
<td>bit값을 왼쪽으로 이동, 빈 자리는 0으로 대입한다</td>
</tr>
<tr>
<td align="center">&gt;&gt;&gt;</td>
<td>bit값을 오른쪽으로 이동, 빈자리는 0으로 대입한다</td>
</tr>
</tbody></table>
<hr>
<h2 id="관계-연산자">관계 연산자</h2>
<hr>
<h2 id="논리-연산자">논리 연산자</h2>
<hr>
<h2 id="instanceof">instanceof</h2>
<hr>
<h2 id="assignment-operator">assignment(=) operator</h2>
<hr>
<h2 id="화살표--연산자">화살표(-&gt;) 연산자</h2>
<hr>
<h2 id="3항-연산자">3항 연산자</h2>
<hr>
<h2 id="연산자-우선-순위">연산자 우선 순위</h2>
<hr>
<h2 id="optional-java-13-switch-연산자">(optional) Java 13. switch 연산자</h2>
<hr>
<h1 id="🙇♂️-ref">🙇‍♂️ Ref.</h1>
<blockquote>
<p><a href="https://reference-m1.tistory.com/105">부동 소수점 산술 연산 주의사항</a></p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[#2 자바 데이터 타입 변수 그리고 배열]]></title>
            <link>https://velog.io/@seno-b/2.-%EC%9E%90%EB%B0%94-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%83%80%EC%9E%85-%EB%B3%80%EC%88%98-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EB%B0%B0%EC%97%B4</link>
            <guid>https://velog.io/@seno-b/2.-%EC%9E%90%EB%B0%94-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%83%80%EC%9E%85-%EB%B3%80%EC%88%98-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EB%B0%B0%EC%97%B4</guid>
            <pubDate>Thu, 03 Dec 2020 17:43:26 GMT</pubDate>
            <description><![CDATA[<h2 id=""><img src="https://images.velog.io/images/seno-b/post/0f210d3c-091a-47f3-9fd6-cfed284543ff/unnamed.gif" alt=""></h2>
<h1 id="🙆♂️-목표">🙆‍♂️ 목표</h1>
<p>자바가 제공하는 다양한 <strong>데이터 타입 변수</strong> &amp; <strong>배열</strong> 학습</p>
<hr>
<h1 id="🤔-학습내용">🤔 학습내용</h1>
<ul>
<li>프리미티브 타입 종류와 값의 범위 그리고 기본 값</li>
<li>프리미티브 타입과 레퍼런스 타입</li>
<li>리터럴</li>
<li>변수 선언 및 초기화하는 방법</li>
<li>변수의 스코프와 라이프타임</li>
<li>타입 변환, 캐스팅 그리고 타입 프로모션</li>
<li>1차 및 2차 배열 선언하기</li>
<li>타입 추론, var</li>
</ul>
<hr>
<h2 id="프리미티브-타입-종류와-값의-범위-그리고-기본-값">프리미티브 타입 종류와 값의 범위 그리고 기본 값</h2>
<p>자바의 <code>Primitive Type</code> (기본형)은 모두 <strong>8</strong>개로 크게 <code>정수형</code> <code>실수형</code> <code>문자형</code> <code>논리형</code> 4가지로 구분된다.</p>
<table>
  <thead>
    <th></th>
    <th>타입</th>
    <th>메모리</th>
    <th>기본값</th>
    <th>표현범위</th>
  </thead>
  <tbody>
    <tr>
      <td rowspan="4">정수형</td>
      <td>byte</td>
      <td>1 byte</td>
      <td>0</td>
      <td>-128 ~ 127</td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td>short</td>
      <td>2 byte</td>
      <td>0</td>
      <td>-32,768 ~ 32,767</td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td>int</td>
      <td>4 byte</td>
      <td>0</td>
      <td> -2,147,483,648 ~ 2,147,483,647</td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td>long</td>
      <td>8 byte</td>
      <td>0L</td>
      <td> -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807</td>
    </tr>
    <tr>
      <td rowspan="2">실수형</td>
      <td>float</td>
      <td>4 byte</td>
      <td>0.0f</td>
      <td>(3.4 X 10-38) ~ (3.4 X 1038) 의 근사값</td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td>double</td>
      <td>8 byte</td>
      <td>0.0</td>
      <td>(1.7 X 10-308) ~ (1.7 X 10308) 의 근사값</td>
    </tr>
    <tr>
      <td>문자형</td>
      <td>char</td>
      <td>2 byte (unicode)</td>
      <td>'\u0000'</td>
      <td> 0 ~ 65,535</td>
    </tr>
    <tr>
      <td>논리형</td>
      <td>boolean</td>
      <td>1 byte</td>
      <td>false</td>
      <td>true, false</td>
    </tr>
  </tbody>
</table>

<hr>
<h2 id="프리미티브-타입과-레퍼런스-타입">프리미티브 타입과 레퍼런스 타입</h2>
<h3 id="프리미티브-타입-기본형">프리미티브 타입 (기본형)</h3>
<ul>
<li><p>총 8개의 기본형 타입을 미리 정의하여 제공한다.</p>
</li>
<li><p>기본값이 있기 때문에 <code>Null</code>이 존재하지 않는다. 만약 기본형 타입에 <code>Null</code>을 넣고 싶다면 <code>래퍼 클래스</code>를 활용한다.</p>
</li>
<li><p>실제 값을 저장하는 공간으로 <code>스택(Stack)</code> 메모리에 저장된다.</p>
</li>
<li><p>만약 컴파일 시점에 담을 수 있는 크기를 벗어나면 에러를 발생시키는 컴파일 에러가 발생한다.</p>
</li>
</ul>
<h3 id="레퍼런스-타입-참조형">레퍼런스 타입 (참조형)</h3>
<ul>
<li><p>기본형 타입을 제외한 타입들이 모두 참조형 타입이다.</p>
</li>
<li><p>빈 객체를 의미하는 <code>Null</code>이 존재한다.</p>
</li>
<li><p>값이 저장되어 있는 곳의 주소값을 저장하는 공간으로 <code>힙(Heap)</code> 메모리에 저장된다.</p>
</li>
<li><p>문법상으로는 에러가 없지만 실행시켰을 때 에러가 나는 런타임 에러가 발생한다.</p>
</li>
</ul>
<table>
  <thead>
    <th>타입</th>
    <th>예시</th>
    <th>기본값</th>
    <th>메모리</th>
  </thead>
  <tbody>
    <tr>
      <td>배열(Array)</td>
      <td> int[] arr = new int[5];</td>
      <td>null</td>
      <td rowspan="4">4 byte (객체의 주소값)</td>
    </tr>
    <tr>
      <td>열거(Enumeration)</td>
      <td></td>
      <td>null</td>
      <td>4 byte (객체의 주소값)</td>
    </tr>
    <tr>
      <td>클래스(Class)</td>
      <td>String str = "test"; <br>Student sujin = new Student();</td>
      <td>null</td>
      <td>4 byte (객체의 주소값)</td>
    </tr>
    <tr>
      <td>인터페이스(Interface)</td>
      <td></td>
      <td>null</td>
      <td>4 byte (객체의 주소값)</td>
    </tr>
  </tbody>
</table>

<hr>
<h2 id="리터럴">리터럴</h2>
<blockquote>
<p>💡 컴퓨터 과학 분야에서 <code>리터럴(literal)</code>이란 소스 코드의 고정된 값을 대표하는 용어다.</p>
</blockquote>
<p>자바에서의 리터럴은 보통 기본형의 데이터를 의미한다.</p>
<pre><code class="language-java">int a = 24</code></pre>
<p>여기서 <code>a</code> 변수에 할당된 <code>24</code>가 리터럴이 된다.</p>
<h3 id="특수문자-리터럴">특수문자 리터럴</h3>
<h2 id="-1"><img src="https://images.velog.io/images/seno-b/post/24bdcc18-574f-4536-9cfc-c0a2870df7a4/image.png" alt=""></h2>
<h2 id="변수-선언-및-초기화하는-방법">변수 선언 및 초기화하는 방법</h2>
<hr>
<h2 id="변수의-스코프와-라이프타임">변수의 스코프와 라이프타임</h2>
<hr>
<h2 id="타입-변환-캐스팅-그리고-타입-프로모션">타입 변환, 캐스팅 그리고 타입 프로모션</h2>
<hr>
<h2 id="1차-및-2차-배열-선언하기">1차 및 2차 배열 선언하기</h2>
<hr>
<h2 id="타입-추론-var">타입 추론, var</h2>
<hr>
<h1 id="🙇♂️-ref">🙇‍♂️ Ref.</h1>
]]></description>
        </item>
        <item>
            <title><![CDATA[#1 JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가]]></title>
            <link>https://velog.io/@seno-b/1-JVM%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EC%9E%90%EB%B0%94-%EC%BD%94%EB%93%9C%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94-%EA%B2%83%EC%9D%B8%EA%B0%80</link>
            <guid>https://velog.io/@seno-b/1-JVM%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EC%9E%90%EB%B0%94-%EC%BD%94%EB%93%9C%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94-%EA%B2%83%EC%9D%B8%EA%B0%80</guid>
            <pubDate>Thu, 12 Nov 2020 17:42:10 GMT</pubDate>
            <description><![CDATA[<hr>
<h1 id="🙆♂️-목표">🙆‍♂️ 목표</h1>
<p>자바 소스 파일<code>(.java)</code>을 <code>JVM</code>으로 실행하는 과정 이해하기.</p>
<hr>
<h1 id="🤔-학습내용">🤔 학습내용</h1>
<ul>
<li><code>JVM</code>이란 무엇인가</li>
<li><code>바이트코드</code>란 무엇인가</li>
<li><code>컴파일</code> 하는 방법</li>
<li><code>JIT</code> 컴파일러란 무엇이며 어떻게 동작하는가</li>
<li><code>(.java)</code> 실행하는 방법</li>
<li><code>JVM</code> 구성 요소</li>
<li><code>JDK</code>와 <code>JRE</code>의 차이</li>
</ul>
<hr>
<h2 id="jvm-이란-무엇인가">JVM 이란 무엇인가</h2>
<p>위키백과에 나온 내용을 보니 <code>JVM</code>은 어떤 방식을 통하여 자바 <code>자바 바이트코드</code>를 실행하게 만들어주는 무엇인것 같다.</p>
<blockquote>
<p>😲 <strong>자바 가상 머신(Java Virtual Machine, JVM)은 자바 바이트코드를 실행할 수 있는 주체이다.</strong>
📖 <a href="https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_%EA%B0%80%EC%83%81_%EB%A8%B8%EC%8B%A0">위키백과</a></p>
</blockquote>
<p>일반적으로 <code>JVM</code> 은 인터프리터나 <code>JIT</code> 컴파일 방식으로 다른 컴퓨터 위에서 자바 바이트코드를 실행할 수 있도록 구현된다. 
자바 바이트코드는 플랫폼에 독립적이며, 모든 <code>JVM</code> 은 규격에 정의된 대로 자바 바이트코드를 실행한다. 따라서 <strong>표준 자바 API까지 동일한 동작을 하도록 구현한 상태</strong>에서는 이론적으로 모든 자바 프로그램은 CPU나 운영체제의 종류와 무관하게 동일하게 동작할 것을 보장한다.</p>
<p>쉽게 말해 <code>JVM</code>은 일련의 어떤 방식을 통해 <code>자바 바이트코드</code>로 변환된 <code>.java</code>를 실행하고 메모리를 관리해주는 역할을 하는 것이다.</p>
<hr>
<h2 id="jvm-구성-요소">JVM 구성 요소</h2>
<p>다음은 <code>JVM</code>의 동작방식 그림이다.
<img src="https://images.velog.io/images/seno-b/post/506c116b-25ad-4c46-8c16-d5e6f486d579/image.png" alt="">
[JVM 동작 방식 이미지 출처] : <a href="https://asfirstalways.tistory.com/158">https://asfirstalways.tistory.com/158</a></p>
<p><code>jvm</code>은 크게 3가지의 영역으로 나뉜다.</p>
<ul>
<li><strong>Class Loader</strong></li>
<li><strong>Excution</strong></li>
<li><strong>Runtime Data Area</strong></li>
</ul>
<h3 id="class-loader">Class Loader</h3>
<p>Class Loader는 컴파일된 <code>.class</code> 파일들을 엮어서 OS에게 할당받은 메모리 영역, <strong>Runtime Data Area</strong>에 적재한다.</p>
<h3 id="excution">Excution</h3>
<p><strong>Runtime Data Area</strong>에 적재된 <code>.class</code>파일들을 컴퓨터가 이해할 수 있는 기계어(네이티브 코드)로 변경해 명령어 단위로 실행하는 역할을 한다.
이때 명령어를 하나씩 실행하는 interpreter 방식과 <code>자바 바이트코드</code>를 네이티브 코드로 변환하는 <code>JIT</code>방식이 있다.</p>
<blockquote>
<p>🤓 Interpreter &amp; JIT?
Interpreter : 자바 컴파일러에 의해 변환된 <code>자바 바이트코드</code>를 한 줄씩 읽고 해석하는 역할을 한다. 
JIT (Just - In - Time) : 적절한 시점에 바이트코드 전체를 읽어 네이티브 코드로 캐싱해놓고 읽어오는 방식이다.</p>
</blockquote>
<h3 id="runtime-data-area">Runtime Data Area</h3>
<p><code>.class</code>파일들이 적재되어있는 장소인 <strong>Runtime Data Area</strong>는 다룰 내용이 많으므로 <code>jvm</code>이 OS로부터 할당 받은 메모리 공간이라고만 알고 넘어가자.</p>
<p><code>jvm</code>은 아래와 같은 순서로 동작한다.</p>
<ol>
<li>사용자가 작성한<code>.java</code>파일(Java Source code)이 자바 컴파일러에(<code>javac</code>) 의해 <code>.class</code>(<code>자바 바이트코드</code>)로 변환된다.</li>
<li><strong>Class Loader</strong>가 컴파일된 <code>.class</code> 파일들을 <strong>Runtime Data Area</strong>에 적재 시킨다.</li>
<li><strong>Excution</strong>이 메모리에 적재된 바이트코드를 해석(interpreter)하여 명령어 단위로 실행한다.</li>
</ol>
<hr>
<h2 id="그렇다면-자바-바이트코드란-무엇인가">그렇다면 자바 바이트코드란 무엇인가</h2>
<p><code>자바 바이트코드</code>란 쉽게 말해 <code>JVM</code>이 이해할 수 있는 언어로 변환된 자바 소스 코드를 의미한다.
변환된 <code>자바 바이트코드</code>의 확장자는 <code>.class</code>이다.</p>
<blockquote>
<p>🤔 <strong>그래서 왜 자바 바이트 코드라고 부르는건데??</strong></p>
<p>자바 컴파일러에 의해 변환되는 코드의 명령어 크기가 1Byte라서 <code>자바 바이트코드</code>라고 한다.</p>
</blockquote>
<hr>
<h2 id="컴파일-하는-방법">컴파일 하는 방법</h2>
<p><code>자바 바이트코드</code>는 자바 컴파일러에 의해 변환된다고 되어있는데, 컴파일은 어떻게 하는걸까?
컴파일은 <code>jdk</code> 혹은 <code>jre</code>이 설치되어 있다면 <code>javac</code> 명령어로 직접 컴파일할 수 있다.</p>
<p><img src="https://images.velog.io/images/seno-b/post/f93fad97-0436-4d2d-81e5-b841e92c1b84/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202020-12-04%2000.38.26.png" alt=""></p>
<p><img src="https://images.velog.io/images/seno-b/post/6f97c5f6-9b04-4bd5-b154-cf30498ad49d/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202020-12-04%2000.44.28.png" alt=""></p>
<p><img src="https://images.velog.io/images/seno-b/post/6225d78c-aefa-4372-80dc-092eeab0eb4d/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202020-12-04%2000.45.13.png" alt=""></p>
<blockquote>
<p><strong><code>자바 바이트코드</code>로 컴파일 되는 과정</strong>
자바 소스 코드 파일 <code>(.java)</code> -&gt; 자바 컴파일러 <code>(javac)</code> -&gt; 자바 바이트코드 <code>(.class)</code>
<img src="https://images.velog.io/images/seno-b/post/2ef05776-c559-4b83-8ef9-9806684f6d60/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202020-12-04%2002.18.36.png" alt=""></p>
</blockquote>
<hr>
<h2 id="java-실행하는-방법">(.java) 실행하는 방법</h2>
<p><img src="https://images.velog.io/images/seno-b/post/f2171249-b626-4a1d-88c2-3a96069aade4/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202020-12-04%2000.45.26.png" alt=""></p>
<hr>
<h2 id="jit-컴파일러란-무엇이며-어떻게-동작하는가">JIT 컴파일러란 무엇이며 어떻게 동작하는가</h2>
<blockquote>
<p>😲 <strong>JIT 컴파일(just-in-time compilation) 또는 동적 번역(dynamic translation)은 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법이다.</strong>
📖 <a href="https://ko.wikipedia.org/wiki/JIT_%EC%BB%B4%ED%8C%8C%EC%9D%BC">위키백과</a></p>
</blockquote>
<p>interpreter의 단점을 보완하기 위해 도입되었으며, 한 번 컴파일된 코드는 계속 빠르게 수행된다.
<code>JIT</code>는 내부적으로 해당 메서드가 얼마나 자주 수행되는지 체크하고, 일정 정도를 넘을때에만 컴파일을 수행한다.</p>
<hr>
<h2 id="jdk와-jre의-차이">JDK와 JRE의 차이</h2>
<p><img src="https://images.velog.io/images/seno-b/post/a1869924-ae2a-43a9-bc9b-971162e3a152/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202020-12-04%2002.38.29.png" alt="">
[JDK와 JRE] : <a href="https://c10106.tistory.com/3135">https://c10106.tistory.com/3135</a></p>
<hr>
<h1 id="🙇♂️-ref">🙇‍♂️ Ref.</h1>
<ul>
<li><a href="https://c10106.tistory.com/3135">https://c10106.tistory.com/3135</a></li>
<li><a href="https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_%EA%B0%80%EC%83%81_%EB%A8%B8%EC%8B%A0">https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_%EA%B0%80%EC%83%81_%EB%A8%B8%EC%8B%A0</a></li>
<li><a href="https://asfirstalways.tistory.com/158">https://asfirstalways.tistory.com/158</a></li>
<li><a href="https://ko.wikipedia.org/wiki/JIT_%EC%BB%B4%ED%8C%8C%EC%9D%BC">https://ko.wikipedia.org/wiki/JIT_%EC%BB%B4%ED%8C%8C%EC%9D%BC</a></li>
</ul>
]]></description>
        </item>
    </channel>
</rss>