<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>haze_ju.log</title>
        <link>https://velog.io/</link>
        <description>노력하는 중</description>
        <lastBuildDate>Sun, 25 Sep 2022 09:17:12 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>haze_ju.log</title>
            <url>https://images.velog.io/images/yeriel_ju23/profile/556aed80-b86a-4879-8163-36d19f654ad1/또또프렌즈_배경화면(PC)_들판의또야.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. haze_ju.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/yeriel_ju23" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Tomcat cmd 실행 시 한글 깨짐 현상 해결]]></title>
            <link>https://velog.io/@yeriel_ju23/Tomcat-cmd-%EC%8B%A4%ED%96%89-%EC%8B%9C-%ED%95%9C%EA%B8%80-%EA%B9%A8%EC%A7%90-%ED%98%84%EC%83%81-%ED%95%B4%EA%B2%B0</link>
            <guid>https://velog.io/@yeriel_ju23/Tomcat-cmd-%EC%8B%A4%ED%96%89-%EC%8B%9C-%ED%95%9C%EA%B8%80-%EA%B9%A8%EC%A7%90-%ED%98%84%EC%83%81-%ED%95%B4%EA%B2%B0</guid>
            <pubDate>Sun, 25 Sep 2022 09:17:12 GMT</pubDate>
            <description><![CDATA[<ul>
<li>한글이 깨지는 이유
윈도우 환경에서 Tomcat을 bin 폴더에 있는 startup.bat 으로 실행 시 한글이 깨지는 현상이 발생했다.</li>
</ul>
<p>구글링을 해보니 한글이 깨지는 이유는 cmd의 코드 페이지가 949 — ANSI/OEM 으로 설정되어 있기 때문이라고 한다.
이를 Tomcat이 실행될 때 UTF-8 로 실행되게 해주면 한글이 깨지지 않는다고 한다</p>
<p>해결 방법</p>
<ol>
<li>레지스트리 실행
<img src="https://velog.velcdn.com/images/yeriel_ju23/post/a935e5b7-efb4-4306-8321-0479213518e9/image.png" alt=""></li>
</ol>
<p><img src="https://velog.velcdn.com/images/yeriel_ju23/post/b6cfe993-9747-4b60-af1d-bf0eb9f75677/image.png" alt=""></p>
<p>만들어진 키 폴더명을 Tomcat으로 변경
<img src="https://velog.velcdn.com/images/yeriel_ju23/post/f68a9d39-b930-47d9-bdb1-3c5de7ea2735/image.png" alt=""></p>
<ol start="2">
<li>cmd 실행
Win + R -&gt; cmd</li>
</ol>
<pre><code>REG ADD HKCU\Console\Tomcat /v CodePage /t REG_DWORD /d 65001</code></pre><p>다음과 같은 코드를 입력해준 후 다시한번 startup.bat을 실행해준다.</p>
<p><img src="https://velog.velcdn.com/images/yeriel_ju23/post/946d5e10-e83a-4a8d-939f-f17b37694c2d/image.png" alt=""></p>
<p>아주 쉽게 해결했다.</p>
<p>항상 내가 무언가를 할 때마다 한글 깨짐 현상이 발생하는 것 같다.</p>
<p>참고사이트
<a href="https://zagoodstory.medium.com/%ED%86%B0%EC%BA%A3-tomcat-cmd-%EC%8B%A4%ED%96%89%EC%8B%9C-%ED%95%9C%EA%B8%80-%EA%B9%A8%EC%A7%90-%ED%98%84%EC%83%81-%ED%95%B4%EA%B2%B0-1ee8340f2b2d">https://zagoodstory.medium.com/%ED%86%B0%EC%BA%A3-tomcat-cmd-%EC%8B%A4%ED%96%89%EC%8B%9C-%ED%95%9C%EA%B8%80-%EA%B9%A8%EC%A7%90-%ED%98%84%EC%83%81-%ED%95%B4%EA%B2%B0-1ee8340f2b2d</a> </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA] 연산자(Operator)]]></title>
            <link>https://velog.io/@yeriel_ju23/JAVA-%EC%97%B0%EC%82%B0%EC%9E%90Operator</link>
            <guid>https://velog.io/@yeriel_ju23/JAVA-%EC%97%B0%EC%82%B0%EC%9E%90Operator</guid>
            <pubDate>Fri, 12 Aug 2022 11:49:07 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/yeriel_ju23/post/bf3653e5-2912-4d5a-b528-3381bacec0a5/image.png" alt=""></p>
<hr>
<h1 id="연산자operator">연산자(operator)</h1>
<blockquote>
<p>연산자(operator) : 연산을 수행하는 기호
피연산자(operand) : 연산자의 작업 대상 (변수,상수,리터럴,수식)</p>
</blockquote>
<ul>
<li>연산자는 피연산자로 연산을 수행하고 나면 항상 결과값을 반환한다. </li>
<li>작성한 식을 프로그램에 포함시키려면, 식의 끝에 &#39;;&#39;을 붙여서 문장으로 만들어야 한다.</li>
<li>대입 연산자 &#39;=&#39;를 사용해 변수와 같이 값을 저장할 수 있는 공간에 결과를 저장해야 다른 곳에 사용하거나 화면에 출력함과 같은 의미 있는 결과를 얻을 수 있다. </li>
<li>값을 다른 곳에 사용하지 않을 것이라면 변수에 저장하기 않고 println메서드의 괄호( ) 안에 직접 식을 써 바로 출력해도 된다. </li>
</ul>
<h2 id="연산자의-종류">연산자의 종류</h2>
<table>
<thead>
<tr>
<th align="center">종류</th>
<th align="center">연산자</th>
<th align="center">설명</th>
</tr>
</thead>
<tbody><tr>
<td align="center"><strong>산술 연산자</strong></td>
<td align="center">*<em>+ - * / % *</em></td>
<td align="center">사칙 연산과 나머지 연산</td>
</tr>
<tr>
<td align="center"><strong>비교 연산자</strong></td>
<td align="center"><strong>&gt; &lt; &gt;= &lt;= == !=</strong></td>
<td align="center">크로 작음과 같고 다름을 비교</td>
</tr>
<tr>
<td align="center"><strong>논리 연산자</strong></td>
<td align="center">&amp;&amp; ｜∥ ! &amp;  ^ ~</td>
<td align="center">&#39;AND&#39;와 &#39;OR&#39; 조건 연결</td>
</tr>
<tr>
<td align="center"><strong>대입 연산자</strong></td>
<td align="center">=</td>
<td align="center">우변의 값을 좌변에 저장</td>
</tr>
<tr>
<td align="center"><strong>기타</strong></td>
<td align="center">(type)  ?:  instanceof</td>
<td align="center">형변환 연산자, 삼항 연산자, instanceof 연산자**</td>
</tr>
<tr>
<td align="center">---</td>
<td align="center"></td>
<td align="center"></td>
</tr>
</tbody></table>
<h3 id="피연산자의-개수에-의한-분류">피연산자의 개수에 의한 분류</h3>
<p>&lt;피연산자 개수&gt;</p>
<ul>
<li>한 개 : 단항 연산자</li>
<li>두 개 : 이항 연산자 (대부분의 연산자는 이항 연산자)</li>
<li>세 개 : 삼항 연산자 (?:)</li>
</ul>
<h3 id="연산자의-결합규칙">연산자의 결합규칙</h3>
<p>하나의 식에 같은 우선순위의 연산자들이 여러 개 있는 경우, 대부분 <strong>왼쪽에서 오른쪽( -&gt;)</strong>의 순서로 연산을 수행하고, <strong>단항 연산자와 대입 연산자</strong>만 반대로 *<em>오른쪽에서 왼쪽(&lt;- ) *</em>의 순서로 연산을 수행한다. </p>
<blockquote>
<ol>
<li><strong>산술 &gt; 비교 &gt; 논리 &gt; 대입.</strong><ul>
<li>대입은 제일 마지막에 수행된다.</li>
</ul>
</li>
<li><strong>단항 &gt; 이항 &gt; 삼항</strong><ul>
<li>단항 연산자의 우선순위가 이항 연산자보다 높다.</li>
</ul>
</li>
<li>단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 <strong>왼쪽에서 오른쪽 ( --&gt;)</strong></li>
</ol>
</blockquote>
<h3 id="산술-변환">산술 변환</h3>
<p>두 피연산자의 타입이 일치해야 연산이 가능하므로, 피연산자의 타입이 서로 다르면 연산 전에 형변환 연산자로 타입을 일치시켜야한다. </p>
<p><strong>&#39;산술 변환&#39;의 규칙</strong></p>
<blockquote>
<ol>
<li>두 피연산자의 타입을 같게 일치시킨다.(보다 큰 타입으로 일치)</li>
<li>피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.</li>
</ol>
</blockquote>
<ul>
<li><p>첫 번째 규칙은 피연산자의 값손실을 최소화하기 위함</p>
</li>
<li><p>두 번째 규칙은 정수형의 기본 타입인 int가 가장 효율적으로 처리할 수 있는 타입이기 때문</p>
<ul>
<li>int보다 작은 char나 short의 표현범위가 좁아서 연산 중에 overflow가 발생할 가능성이 높다.</li>
</ul>
</li>
<li><p>연산결과의 타입은 피연산자의 타입과 일치한다. </p>
</li>
</ul>
<hr>
<h2 id="단항-연산자">단항 연산자</h2>
<blockquote>
<p>*<em>증감 연산자(++) : 피연산자의 값을 1 증가시킨다
감소 연산자(--) : 피연산자의 값을 1 감소시킨다 *</em></p>
</blockquote>
<p>증감 연산자의 피연산자로 정수와 실수가 모두 가능하지만, 상수(재할당이 금지된 변수)는 값을 변경할 수 없으므로 불가능하다.</p>
<table>
<thead>
<tr>
<th align="center">타입</th>
<th align="center">설명</th>
<th align="center">예</th>
</tr>
</thead>
<tbody><tr>
<td align="center">전위형</td>
<td align="center">값 증가 후 참조</td>
<td align="center">j=++i;</td>
</tr>
<tr>
<td align="center">후위형</td>
<td align="center">값 참조 후 증가</td>
<td align="center">j=i++;</td>
</tr>
</tbody></table>
<p>※ 증감연산자가 수식이나 메서드 호출에 포함되지 않고 독립적인 하나의 문장으로 쓰인 경우에는 전위형과 후위형의 차이가 없다. 반대로 다른 수식에 포함되거나 메서드의 매개변수로 사용된 경우, 즉 단독으로 사용되지 않은 경우 전위형(++i)과 후위형(i++)의 결과는 같다.</p>
<p>증감연산자를 사용하면 코드가 간결해지지만, 지나치면 코드가 복잡해서 이해하기 어려워지기도 한다.</p>
<pre><code>x = x++ - ++x;</code></pre><p>이렇게 작성하는 것은 바람직하지 않다. 하나의 식에서 증감연산자의 사용을 최소화하고, 식에 두 번 이상 포함된 변수에 증감연산자를 사용하는 것은 피해야 한다. </p>
<hr>
<h2 id="부호-연산자">부호 연산자</h2>
<p>: 피연산자의 부호를 반대로 변경한 결과를 반환</p>
<ul>
<li>boolean형과 char형을 제외한 기본형에만 사용할 수 있다.</li>
<li>부호연산자 &#39;+&#39;는 하는 일이 없음</li>
<li>부호연산자 &#39;-&#39;가 있어 형식적으로 추가해 놓은 것</li>
</ul>
<hr>
<h2 id="산술-연산자">산술 연산자</h2>
<h3 id="사칙-연산자-------">사칙 연산자 ( + - * / )</h3>
<blockquote>
<p>덧셈, 뺄셈, 곱셈, 나눗셈 </p>
</blockquote>
<h3 id="나머지-연산자---">나머지 연산자 ( % )</h3>
<p>: 왼쪽의 피연산자를 오른쪽 피연산자로 나누고 난 나머지 값을 결과로 반환</p>
<ul>
<li>짝수, 홀수 또는 배수 검사 등에 주로 사용</li>
<li>나누는 수로 음수도 허용 (부호는 무시)</li>
</ul>
<hr>
<h2 id="비교-연산자">비교 연산자</h2>
<p>: 두 피연산자를 비교하는데 사용</p>
<h3 id="대소비교-연산자------">대소비교 연산자 ( &lt; &gt; &lt;= &gt;= )</h3>
<ul>
<li>주로 조건문과 반복문의 조건식에 사용</li>
<li>결과는 True or False</li>
</ul>
<table>
<thead>
<tr>
<th>비교연산자</th>
<th>연산 결과</th>
</tr>
</thead>
<tbody><tr>
<td>&gt;</td>
<td>좌변 값이 크면 true, 아니면 fasle</td>
</tr>
<tr>
<td>&lt;</td>
<td>우변 값이 크면 true, 아니면 fasle</td>
</tr>
<tr>
<td>&gt;=</td>
<td>좌변 값이 크거나 같으면 true, 아니면 fasle</td>
</tr>
<tr>
<td>&lt;=</td>
<td>좌변 값이 작거나 같으면  true, 아니면 fasle</td>
</tr>
</tbody></table>
<h3 id="등가비교-연산자----">등가비교 연산자 ( == != )</h3>
<p>: 두 피연산자의 값이 같은지 또는 다른지를 비교</p>
<ul>
<li>모든 자료형에 사용 가능</li>
<li>변수에 저장되어 있는지, 같은 객체를 가리키고 있는지 알 수 있음</li>
<li><strong>기본형과 참조형은 서로 형변환 불가능</strong>하기에 등가비교 연산자로 <strong>비교 불가능</strong> </li>
</ul>
<table>
<thead>
<tr>
<th>비교연산자</th>
<th>연산 결과</th>
</tr>
</thead>
<tbody><tr>
<td>==</td>
<td>두 값이 같으면 true, 아니면 fasle</td>
</tr>
<tr>
<td>!=</td>
<td>두 값이 다르면  true, 아니면 fasle</td>
</tr>
</tbody></table>
<h3 id="문자열의-비교">문자열의 비교</h3>
<p>두 문자열을 비교할 때</p>
<ul>
<li><strong>비교연산자 &#39;==&#39; 대신 equals( )라는 메서드 사용</strong></li>
<li>두 문자열이 완전히 같은지 비교 (같으면 true, 다르면 false)</li>
<li><strong>대소문자를 구별하지 않고 비교하고 싶으면 equalsIgnoreCase( ) 사용</strong></li>
</ul>
<hr>
<h2 id="논리-연산자">논리 연산자</h2>
<p>: 피연산자로 boolean형 또는 boolean형 값을 결과로 하는 조건식만 허용</p>
<blockquote>
<p><strong>|| (OR결합) : 한 쪽만 true -&gt;결과 true
&amp;&amp; (AND결합) : 양쪽 모두 true -&gt; 결과 true</strong></p>
</blockquote>
<ul>
<li>피연산자의 위치에 따라 연산속도가 달라질 수 있다.</li>
</ul>
<h3 id="논리-부정-연산자-">논리 부정 연산자 !</h3>
<p>토글 버튼을 논리적으로 구현할 수 있다. </p>
<blockquote>
<p>true -&gt; false , false -&gt; true</p>
</blockquote>
<hr>
<h2 id="비트-연산자--------">비트 연산자 ( &amp; | ^ ~ &lt;&lt; &gt;&gt; )</h2>
<blockquote>
<p>※  논리연산자와 헷갈리지 않기 (논리연산자 &amp;&amp;, 비트연산자 &amp;)</p>
</blockquote>
<ul>
<li>피연산자를 비트단위로 논리연산</li>
<li>피연산자로 실수는 허용하지 않으며 정수(문자 포함)만 허용</li>
</ul>
<blockquote>
<p>** | (OR 연산자) : 하나만 1이어도 결과로 1을 얻는다.**
--&gt; 주로 특정 비트의 값을 변경할 때 사용
<strong>&amp; (AND 연산자) : 모두 1이어야 결과로 1을 얻는다.</strong>
--&gt; 특정 비트의 값을 뽑아낼 때 사용
*<em>^ (XOR 연산자) : 값이 서로 다를때만 1을 결과로 얻는다. 같을 때는 0 *</em>
--&gt; 간단한 암호화에 사용</p>
</blockquote>
<blockquote>
<p><strong>~ (비트 전환 연산자) : 피연산자를 2진수로 표현했을 때 0 -&gt; 1 , 1 -&gt; 0 으로 변경</strong>
--&gt; 논리부정 연산자 &#39;!&#39; 와 비슷
--&gt; <strong>&#39;1의 보수&#39;연산자</strong> 라고도 함</p>
</blockquote>
<blockquote>
<p>*<em>쉬프트 연산자 ( &lt;&lt; &gt;&gt; ) : 피연산자의 각 자리(2진수로 표현했을 때)를 이동 *</em>
--&gt; 자리이동으로 저장범위를 벗어난 값들은 버려지고 빈자리른 0으로 채워짐
--&gt; 음수인 경우 빈자리를 1로 채움</p>
</blockquote>
<pre><code>x &lt;&lt; n // x * 2ⁿ의 결과와 같음
x &gt;&gt; n // x / 2ⁿ의 결과와 같음 
</code></pre><p>Q. 곱셈이나 나눗셈 연산자를 사용하면 같은 결과를 얻을 수 있음에도 왜 쉬프트 연산자를 사용하는가?
A. 연산시간이 더 적게 걸림 (더 빠름) + 코드의 가독성</p>
<hr>
<h2 id="조건-연산자---">조건 연산자 ( ?: )</h2>
<blockquote>
<p><strong>조건식 ? 식1: 식2 ;</strong></p>
</blockquote>
<ul>
<li>첫 번째 피연산자인 조건식의 평가결과에 따라 다른 결과 반환</li>
<li><em>조건식의 평가결과가 true: 식1, false: 식2*</em>가 연산 결과됨</li>
<li>조건문인 if문으로 바꿔 쓸 수 있으며, 더 간단한 코드</li>
<li>조건 연산자의 식1과 식2 (두 피연산자의 타입이 다른 경우), 산술 변환 발생</li>
</ul>
<hr>
<h2 id="대입-연산자--op">대입 연산자 (= op=)</h2>
<ul>
<li>대입 연산자는 변수와 같은 저장공간에 값 또는 수식의 연산결과를 저장하는데 사용</li>
<li>연산자 중 가장 낮은 우선순위</li>
<li>연산 진행 방향: 오른쪽에서 왼쪽 (&lt;-- )<h3 id="lvalue와-rvalue">lvalue와 rvalue</h3>
대입 연산자의 <strong>왼쪽 피연산자 &#39;lvalue (left value)&#39;, 오른쪽 피연산자 &#39;rvalue (right value)&#39;</strong></li>
<li><strong>lvalue는 반드시 변수처럼 값을 변경할 수 있는 것</strong>이어야 함</li>
<li>리터럴이나 상수는 lvalue가 될 수 없음 (값을 저장할 수 없기때문)</li>
</ul>
<h3 id="복합-대입-연산자">복합 대입 연산자</h3>
<ul>
<li><strong>다른 연산자(op)와 결합</strong>하여 사용 가능</li>
<li>결합된 두 연산자는 반드시 <strong>공백 없이 붙여 써야함</strong></li>
</ul>
<blockquote>
<p>i = i + 3 
<strong>i += 3 ( O )</strong>
i + = 3 ( X )</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA] Intellij 설치하기]]></title>
            <link>https://velog.io/@yeriel_ju23/JAVA-Intellij-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@yeriel_ju23/JAVA-Intellij-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0</guid>
            <pubDate>Sun, 24 Jul 2022 08:12:56 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/yeriel_ju23/post/b10bf69e-6eb9-40d3-9f17-eba311b725e8/image.png" alt=""></p>
<h2 id="intellij-ide">Intellij IDE</h2>
<p>다음 URL에서 Intellij를 다운로드 받자</p>
<p><a href="https://www.jetbrains.com/ko-kr/idea/download/">https://www.jetbrains.com/ko-kr/idea/download/</a></p>
<p>Ultimate와 Commnunity 두 가지 버전이 있는데 무료인 <strong>Community 버전</strong>을 다운로드 하여 설치하자. </p>
<p>인텔리제이를 처음 실행하면 다음과 같은 창이 나올 것이다.</p>
<p><img src="https://velog.velcdn.com/images/yeriel_ju23/post/9ea3e2de-079b-4f6e-b9b3-78f0b5cd8f2a/image.png" alt=""></p>
<p>여기서 **&quot;New Project&quot; **버튼을 누르면 다음 창이 나타난다. 
<img src="https://velog.velcdn.com/images/yeriel_ju23/post/919c4bbc-e26a-4891-8df4-b29491ea92f5/image.png" alt=""></p>
<p><strong>&quot;Java&quot;</strong>를 선택하고 &quot;Next&quot; 두 번!</p>
<p><img src="https://velog.velcdn.com/images/yeriel_ju23/post/f1044789-dab6-4d33-9959-c4f08bbd1846/image.png" alt="">
위와 같은 화면이 나오면 Project Name에 jump2java라고 입력한 후 Finish 버튼을 누르자.</p>
<p><img src="https://velog.velcdn.com/images/yeriel_ju23/post/2e208d78-3071-44fa-b68c-a37bef1ad541/image.png" alt="">
그러면 다음과 같이 &quot;jump2java&quot; 라는 이름의 자바 프로젝트가 시작된다.</p>
<p>좌측에 src 폴더가 보일 것이다. <strong>src 폴더는 .java 파일들이 저장되는 경로</strong>이다.</p>
<p>jump2java.iml 파일은 <strong>현재 프로젝트의 환경값을 저장</strong>하는 인텔리제이의 설정파일이다.</p>
<blockquote>
<p>File --&gt; New --&gt; Java Class
<img src="https://velog.velcdn.com/images/yeriel_ju23/post/7b232ddd-bf00-4a9c-9fe4-77addabf5906/image.png" alt=""></p>
</blockquote>
<p>Name 입력창에 &quot;HelloWorld&quot; 라고 입력해보자.
<img src="https://velog.velcdn.com/images/yeriel_ju23/post/830edee2-fbbb-41f0-aeb6-15d7350c9de1/image.png" alt=""></p>
<p>그러면 다음과 같은 내용의 HelloWorld.java 파일이 생성되는 것을 확인 할 수 있을 것이다.
<img src="https://velog.velcdn.com/images/yeriel_ju23/post/4484811d-aa1a-4d31-9822-d2f4b4a6a474/image.png" alt=""></p>
<p>class 앞에 사용된 &quot;public&quot; 키워드는 자바 프로그래밍 시 매우 중요하게 사용되는 접근제어자이지만 class 명 앞에 사용될 경우에는 조금 다른 의미로 사용된다. </p>
<p><strong>HelloWorld.java 라는 이름으로 자바 파일을 작성</strong>하게 되면 <strong>파일은 하나</strong>이지만 <strong>그 파일 내에 여러개의 클래스를 작성</strong>할 수 있다. 다만 <strong>클래스명과 파일명이 동일할 경우 해당 클래스에 public을 붙여주어야 한다.</strong></p>
<blockquote>
<p>HelloWorld.java의 <strong>파일명</strong>과 HelloWorld <strong>클래스의 이름이 동일</strong>하다.</p>
</blockquote>
<hr>
<h3 id="main-method">Main Method</h3>
<p>HelloWorld 클래스를 실행하려면 main 메소드를 작성해야 한다. 
어떤 프로그램이던지 시작과 그 끝이 있다. 
이 시작과 끝을 관리하는 것이 바로 <strong>main 메소드</strong>이다.</p>
<p><strong>메소드(method)는 함수(function)와 동일한 개념</strong>이다. 
다만 클래스 내의 함수는 보통 함수라고 말하지 않고 메소드라고 한다. 
자바는 모든것이 클래스기반이므로 <strong>자바에서 사용되는 함수는 모두 메소드</strong>이다.</p>
<p>HelloWorld.java 파일에 다음과 같이 main 메소드를 추가 해 보자.</p>
<p>HelloWorld.java</p>
<pre><code>public class HelloWorld {
    public static void main(String[] args) {
        System.out.println(&quot;Hello World&quot;);
    }
}</code></pre><blockquote>
</blockquote>
<p><strong>public</strong> : 메소드의 접근제어자, public은 누구나 이 메소드에 접근할 수 있다는 의미
<strong>static</strong> : 메소드에 static 이 지정되어 있는 경우 이 메소드는 인스턴스 생성없이 실행 할 수 있음을 의미
<strong>void</strong> : 메소드의 리턴값이 없음(void: 사전적으로 &quot;텅 빈&quot; 이라는 뜻)을 의미
<strong>String[] *<em>: 문자열을 나타내는 자바의 자료형 ([]가 있으므로 한 개가 아닌 여러개의 값으로 이루어진 배열임을 의미)
*</em>args *<em>: String[] 자료형에 대한 변수명
*</em>System.out.println</strong> : 표준 출력으로 데이터를 보내는 자바의 내장 메소드로 문자열을 화면에 출력</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] 변수]]></title>
            <link>https://velog.io/@yeriel_ju23/Java-%EB%B3%80%EC%88%98</link>
            <guid>https://velog.io/@yeriel_ju23/Java-%EB%B3%80%EC%88%98</guid>
            <pubDate>Fri, 22 Jul 2022 08:48:19 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/yeriel_ju23/post/0b06b7d1-8762-49ad-94f9-efd111283c0e/image.png" alt=""></p>
<h2 id="변수의-명명규칙">변수의 명명규칙</h2>
<blockquote>
<ol>
<li>대소문자가 구분되며 길이에 제한이 없다. </li>
<li>예약어를 사용해서는 안 된다. 
예약어는 &#39;keyword&#39; 또는 &#39;reserved word&#39;라고 하는데, 프로그래밍언어의 구문에 사용되는 언어를 뜻한다. 따라서 예약어는 클래스나 변수, 메서드의 이름으로 상ㅇ할 수 없다. </li>
<li>숫자로 시작해서는 안 된다. </li>
<li>특수문자는 &#39;_&#39;와 &#39;$&#39;만을 허용한다. </li>
</ol>
</blockquote>
<ul>
<li>JAVA에서 사용되는 예약어
<img src="https://velog.velcdn.com/images/yeriel_ju23/post/5c7961a3-0f6c-4bc5-9e2b-00fb0dc5d9b8/image.png" alt=""></li>
</ul>
<hr>
<h2 id="java-프로그래머들에게-권장하는-규칙">JAVA 프로그래머들에게 권장하는 규칙</h2>
<blockquote>
<ol>
<li><em>클래스</em> 이름의 첫 글자는 항상 <strong>대문자</strong>로 한다. </li>
</ol>
<p>-<strong>변수와 메서드</strong>의 이름의 첫 글자는 항상 <strong>소문자</strong>로 한다.
2. 여러 단어로 이루어진 이름은 단어의 첫 글자를 대문자로 한다. 
3. 상수의 이름은 모두 대문자로 한다. 여러 단어로 이루어진 경우 &#39;_&#39;로 구분한다.
-PI, MAX_NUMBER</p>
</blockquote>
<p>위의 규칙들은 반드시 지켜야 하는 것은 아니지만, 코드를 보다 이해하기 쉽게 하기 위한 자바 개발자들 사이의 암묵적인 약속이다. </p>
<p>만일 특별한 방식으로 식별자를 작성해야 한다면 <strong>미리 규칙(coding convention)</strong>을 정해놓고 프로그램 전체에 일관되게 적용하는 것이 필요하다. </p>
<ul>
<li><p>java에서는 모든 이름에 유니코드에 포함된 문자들을 사용할 수 있지만, 적어도 클래스이름은** ASCII코드(영문자)**로 하는 것이 좋다. 유니코드를 인식하지 못하는 OS도 있기 때문이다. </p>
</li>
<li><p>변수의 이름은 짧을수록 좋지만, 약간 길더라도 용도를 알기 쉽게 &#39;의미있는 이름&#39;으로 하는 것이 바람직하다. 변수의 선언문에 주석으로 변수에 대한 정보를 주는 것도 좋은 생각이다.</p>
<pre><code>int curPos = 0; //현재 위치(current position)
int lastPos = -1; //마지막 위치(last position)</code></pre></li>
</ul>
<hr>
<h2 id="변수의-타입">변수의 타입</h2>
<p>변수를 선언할 때는 저장하려는 값의 특성을 고려하여 가장 알맞은 자료형을 변수의 타입으로 선택하면 된다. </p>
<h3 id="기본형과-참조형">기본형과 참조형</h3>
<p>자료형은 크게 기본형과 참조형 두 가지로 나눌 수 있는데, <strong>기본형 변수</strong>는 <strong>실제 값(data)</strong>을 저장하는 반면, <strong>참조형 변수</strong>는 어떤 값이 저장되어 있는 <strong>주소(address)</strong>를 값으로 받는다. </p>
<ul>
<li>JAVA는 C언어와 달리 참조형 변수 간의 연산을 할 수 없으므로 실제 연산에 사용되는 것은 모두 기본형 변수이다. </li>
<li>메모리에는 1byte 단위로 일련번호가 붙어있는데, 이 번호를 &#39;메모리 주소(memory address)&#39;라 한다. 객체의 주소는 객체가 저장된 메모리 주소를 뜻한다. </li>
</ul>
<p><strong>기본형(primitive type)</strong></p>
<ul>
<li>논리형(boolean), 문자형(char), 정수형(byte,short, int, long), 실수형(float, double) 계산을 위한 실제 값을 저장한다. 모두 8개</li>
</ul>
<p><strong>참조형(reference type)</strong></p>
<ul>
<li>객체의 주소를 저장한다. 8개의 기본형을 제외한 나머지 타입</li>
</ul>
<p>참조형 변수(또는 참조변수)를 선언할 때는 변수의 타입으로 클래스의 이름을 사용하므로 클래스의 이름이 참조변수의 타입이 된다. 그래서 새로운 클래스를 작성한다는 것은 새로운 참조형을 추가하는 셈이다. </p>
<blockquote>
<ul>
<li>변수의 타입이 기본형이 아닌 것들은 모두 참조변수이다. </li>
</ul>
</blockquote>
<p>다음은 Date클래스 타입의 참조변수 today를 선언한 것이다. 
참조변수는 null 또는 객체의 주소를 값으로 갖으며 참조변수의 초기화는 다음과 같다. </p>
<pre><code>Date today = new Date(); //Date객체를 생성해서, 그 주소를 today에 저장</code></pre><p>객체를 생성하는 연산자 new의 결과는 생성된 객체의 주소이다. 이 주소가 대입연산자 &#39;=&#39;에 의해서 참조변수 today에 저장되는 것이다. 이제 참조변수 today를 통해서 생성된 객체를 사용할 수 있게 된다. </p>
<p>|참고| 참조형 변수는 null 또는 객체의 주소(4byte, 0x0~0xFFFFFF)를 값으로 갖는다. null은 어떤 객체의 주소도 저장되어 있지 않음을 뜻한다. 
단, JVM이 32bit가 아니라 64bit라면 참조형 변수의 크기는 8byte가 된다.</p>
<p><strong>Q. 자료형(data type)과 타입(type)의 차이</strong></p>
<p>A. 기본형은 저장할 값(data)의 종류에 따라 구분되므로 기본형의 종류를 얘기할 때는 &#39;자료형&#39;이라는 용어를 사용한다. 참조형은 항상 &#39;객체의 주소&#39;를 저장하므로, 객체의 종류에 의해 구분되므로 참조형 변수의 종류를 구분할 때는 &#39;타입&#39;이라는 용어를 사용한다. 
&#39;타입(type)&#39;이 &#39;자료형(data type)&#39;을 포함하는 보다 넓은 의미의 용어이므로 굳이 구분하지 않아도 된다. </p>
<h4 id="기본형primitive-type">기본형(primitive type)</h4>
<p>기본형에는 모두 8개의 타입(자료형)이 있으며, 크게 논리형, 문자형, 정수형, 실수형으로 구분된다. </p>
<table>
<thead>
<tr>
<th align="center">분류</th>
<th align="center">타입</th>
</tr>
</thead>
<tbody><tr>
<td align="center"><strong>논리형</strong></td>
<td align="center">boolean</td>
</tr>
<tr>
<td align="center"></td>
<td align="center">true와 false중 하나를 값으로 갖으며, 조건식과 논리적 계산에 사용, 다른 기본형과의 연산 불가능</td>
</tr>
<tr>
<td align="center"><strong>문자형</strong></td>
<td align="center">char</td>
</tr>
<tr>
<td align="center"></td>
<td align="center">문자를 저장하는데 사용되며, 변수에 하나의 문자만 저장할 수 있음</td>
</tr>
<tr>
<td align="center"><strong>정수형</strong></td>
<td align="center">byte, int, short, long</td>
</tr>
<tr>
<td align="center"></td>
<td align="center">정수를 저장하는데 사용되며, 주로 int가 사용. byte는 이진 데이터를 다룰 때 사용되며,</td>
</tr>
<tr>
<td align="center"></td>
<td align="center">short는 C언어와의 호환을 위해서 추가</td>
</tr>
<tr>
<td align="center"><strong>실수형</strong></td>
<td align="center">float, double</td>
</tr>
<tr>
<td align="center"></td>
<td align="center">실수를 저장하는데 사용되며, 주로 double이 사용</td>
</tr>
<tr>
<td align="center">* boolean을 제외한 나머지 7개의 기본형은 서로 연산과 변환이 가능</td>
<td align="center"></td>
</tr>
<tr>
<td align="center">* 정수는 일반적으로 int를 많이 사용한다.</td>
<td align="center"></td>
</tr>
<tr>
<td align="center">(CPU가 가장 효율적으로 처리할 수 있는 타입이기 때문)</td>
<td align="center"></td>
</tr>
<tr>
<td align="center">* 효율적인 실행보다 메모리를 절약하려면 byte나 short를 선택하자.</td>
<td align="center"></td>
</tr>
<tr>
<td align="center">- 실수형은 정수형과 저장형식이 달라서 같은 크기라고 훨씬 큰 값을 표현할 수 있는데 오차가 발생할 수 있다는 단점이 있다. 정밀도가 높을수록 발생할 수 있는 오차의 범위가 줄어든다.</td>
<td align="center"></td>
</tr>
<tr>
<td align="center">- float의 정밀도는 7자리인데, 이는 10진수로 7자리의 수를 오차없이 저장할 수 있다.</td>
<td align="center"></td>
</tr>
<tr>
<td align="center">- 높은 정밀도가 필요한 경우에는 변수의 타입으로 double을 선택하자.</td>
<td align="center"></td>
</tr>
</tbody></table>
<h4 id="기본형의-종류와-크기">기본형의 종류와 크기</h4>
<table>
<thead>
<tr>
<th align="center">분류</th>
<th align="center">1 byte</th>
<th align="center">2 byte</th>
<th align="center">4 byte</th>
<th align="center">8 byte</th>
</tr>
</thead>
<tbody><tr>
<td align="center"><strong>논리형</strong></td>
<td align="center">boolean</td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
</tr>
<tr>
<td align="center"><strong>문자형</strong></td>
<td align="center"></td>
<td align="center">char</td>
<td align="center"></td>
<td align="center"></td>
</tr>
<tr>
<td align="center"><strong>정수형</strong></td>
<td align="center">byte</td>
<td align="center">short</td>
<td align="center">int</td>
<td align="center">long</td>
</tr>
<tr>
<td align="center"><strong>실수형</strong></td>
<td align="center"></td>
<td align="center"></td>
<td align="center">float</td>
<td align="center">double</td>
</tr>
</tbody></table>
<hr>
<h3 id="상수와-리터럴constant--literal">상수와 리터럴(constant &amp; literal)</h3>
<h4 id="상수constant">상수(constant)</h4>
<blockquote>
<p><strong>&#39;상수&#39;</strong>는 한 번 값을 저장하면 <strong>다른 값으로 변경할 수 없다.</strong> 
반드시 <strong>선언와 동시에 초기화</strong>해야하며, 그 후부터는 상수의 값을 변경하는 것이 허용되지 않는다. </p>
</blockquote>
<p>상수를 선언하는 방법은 변수와 동일하며, 단지 변수의 타입 앞에 키워드 <strong>&#39;final&#39;</strong>을 붙여주기만 하면 된다. </p>
<pre><code>final int MAX_SPEED = 10; //상수 MAX_SPEED를 선언 &amp; 초기화

final int MAX_SPEED; // 에러. 상수는 선언과 동시에 초기화해야 함. 
final int MAX_SPEED = 10; // ok. 상수 MAX_SPEED를 선언 &amp; 초기화
MAX_SPEED = 20; // 에러. 상수의 값은 변경할 수 없음.</code></pre><p>상수의 이름은 모두 대문자로 하는 것이 암묵적인 관례이며, 여러 단어로 이루어져있는 경우 &#39;_&#39;로 구분한다.</p>
<p>|참고| JDK 1.6 부터 상수를 선언과 동시에 초기화되지 않아도 되며, 사용하기 전에만 초기화하면 되도록 바뀌었다. 그래도 상수는 선언과 동시에 초기화하는 습관을 들이는 것이 좋다. </p>
<h4 id="리터럴literal">리터럴(literal)</h4>
<blockquote>
<p>우리가 기존에 알고 있던 &#39;상수&#39;의 다른 이름</p>
</blockquote>
<p>원래 12, 123, 3.14, &#39;A&#39; 와 같은 값들이 &#39;상수&#39;인데, 프로그래밍에서는 상수를 &#39;값을 한 번 저장하면 변경할 수 없는 저장공간&#39;으로 정의하였기 때문에 <strong>&#39;상수&#39; 대신 &#39;리터럴&#39;</strong>이라는 용어를 사용한다.  </p>
<blockquote>
<p>변수(variable): 하나의 값을 저장하기 위한 공간
상수(constant): 값을 한 번만 저장할 수 있는 공간
리터럴(literal): 그 자체로 값을 의미</p>
</blockquote>
<pre><code>int year(변수) = 2014(리터럴);
final int MAX_VALUE(상수) = 100;</code></pre><p><strong>Q. 상수가 필요한 이유</strong>
A. 상수는 리터럴에 &#39;의미있는 이름&#39;을 붙여서 <strong>코드의 이해와 수정을 쉽게 만든다.</strong> 다른 값으로 계산할 때 여러 곳을 수정할 필요없이 상수의 초기화만 다른 값으로 해주면 된다. </p>
<h4 id="리터럴의-타입과-접미사">리터럴의 타입과 접미사</h4>
<blockquote>
<ul>
<li>리터럴의 접미사가 붙는 타입은 long, float, double뿐인데, double은 생략 가능하므로 long과 float의 리터럴에 접미사를 붙이는 것만 신경쓰면 된다.</li>
</ul>
</blockquote>
<ul>
<li>리터럴의 접두사와 섭미사는 대소문자를 구별하지 않는다. </li>
</ul>
<p>정수형과 실수형에는 여러 타입이 존재하므로, 리터럴에 접미사를 붙여서 타입을 구분한다. </p>
<ol>
<li>정수형의 경우 long 타입의 리터럴에 접미사 &#39;l&#39; 또는 &#39;L&#39;을 붙이고, 접미사가 없으면 int타입의 리터럴이다. </li>
<li>10진수 외에도 2, 8, 16 진수로 표현된 리터럴을 변수에 저장할 수 있으며, 16진수라는 것을 표시하기 위해 리터럴 앞에 접두사 &#39;0x&#39;또는 &#39;0X&#39;를, 8진수의 경우에는 &#39;0&#39;을 붙인다. (&#39;0&#39;은 문자가 아닌 숫자)</li>
<li>JDK 1.7부터 정수형 리터럴의 중간에 구분자&#39;_&#39;를 넣을 수 있게 되어서 큰 숫자를 편하게 읽을 수 있다. </li>
<li>실수형에서는 float 타입의 리터럴에 접미사 &#39;f&#39; 또는 &#39;F&#39; 를 붙이고, double 타입의 리터럴에는 접미사 &#39;d&#39; 또는 &#39;D&#39;를 붙인다. (실수형에서는 double이 기본 자료형이라서 접미사 &#39;d&#39;는 생략 가능)</li>
</ol>
<pre><code>2.
int octNum = 010; // 8진수 10, 10진수로 8
int hexNum = 0x10; // 16진수 10, 10진수로 16
int binNum = 0b10; // 2진수 10, 10진수로 2

3.
long big = 100_000_000_000L; // long big = 100000000000L;
long hex = 0xFFFF_FFFF_FFFF_FFFFL; // long hex = 0xFFFFFFFFFFFFFFFFL;

4.
float pi = 3.14f; // 접미사 f 대신 F 사용 가능
double rate = 1.618d; // 접미사 d 대신 D 사용 가능

float pi = 3.14; // 에러. float 타입 변수에 double 타입 리터럴 저장 불가
double rate = 1.618; // OK. 접미사 d 생략 가능</code></pre><p>리터럴에 소수점이나 10의 제곱을 나타내는 기호 E 또는 e, 그리고 접미사 f, F, d, D를 포함하고 있으면 실수형 리터럴로 간주된다. </p>
<table>
<thead>
<tr>
<th>자료형</th>
<th>실수형 리터럴</th>
<th>다른 형태의 동등한 표현</th>
</tr>
</thead>
<tbody><tr>
<td>double</td>
<td>10.</td>
<td>10.0</td>
</tr>
<tr>
<td>double</td>
<td>.10</td>
<td>0.10</td>
</tr>
<tr>
<td>float</td>
<td>10f</td>
<td>10.0f</td>
</tr>
<tr>
<td>float</td>
<td>3.14e3f</td>
<td>3140.0f</td>
</tr>
<tr>
<td>double</td>
<td>1e1</td>
<td>10.0</td>
</tr>
<tr>
<td>double</td>
<td>1e-3</td>
<td>0.001</td>
</tr>
</tbody></table>
<p>잘 쓰이지는 않지만 기호 p를 이용해서 실수 리터럴을 16진수 지수형태로 표현할 수 있다. 
p는 2의 제곱을 의미하며, p의 왼쪽에는 16진수를 적고 오른쪽에는 지수를 10진수 정수로 적는다. (실수형)</p>
<p>0x1p1 = (1 × 16^0 ) × 2¹ = 1.0 × 2 = 2.0
0x0.2p-1 = (2 × 16^-1 ) × 2^-1 = 0.125 × 0.5 = 0.0625
0x12p3 = (1 × 16¹ + 2 × 16^0 ) × 2³ = (16 + 2) × 8 = 114.0</p>
<h4 id="타입의-불일치">타입의 불일치</h4>
<p>리터럴의 타입은 저장될 변수의 타입과 일치하는 것이 보통이지만, 타입이 달라도 저장범위가 넓은 타입에 좁은 타입의 값을 저장하는 것은 허용된다.</p>
<p>그러나 리터럴의 값이 변수의 타입의 범위를 넘어서거나, 리터럴의 타입이 변수의 타입보다 저장범위 넓으면 컴파일 에러가 발생한다. </p>
<pre><code>int i = &#39;A&#39;; // OK. 문자 &#39;A&#39;의 유니코드인 65가 변수 i에 저장된다. 
long l = 123; // OK. int보다 long 타입이 더 범위가 넓다. 
double d = 3.14f; // OK. float보다 double 타입이 더 범위가 넓다. 

int i = 0x123456789; // 에러. int 타입의 범위를 넘는 값을 저장
float f = 3.14; // 에러. float 타입보다 double 타입의 범위가 넓다.</code></pre><h4 id="문자-리터럴과-문자열-리터럴">문자 리터럴과 문자열 리터럴</h4>
<blockquote>
<p>문자열은 &#39;문자의 연속된 나열&#39;이라는 뜻이며, 영어로 &#39;string&#39;</p>
</blockquote>
<p>&#39;A&#39;와 같이 작은따옴표로 문자 하나를 감싼 것을 &#39;문자 리터럴&#39;이라고 한다.
두 문자 이상은 큰 따옴표로 감싸야 하며 &#39;문자열 리터럴&#39;이라고 한다. </p>
<p>char 타입의 변수는 &#39;단 하나의 문자&#39;만 저장할 수 있으므로, 여러 문자(문자열)을 저장하기 위해서는 String 타입을 사용해야 한다. 
문자열 리터럴은 빈 문자열을 허용하지만 문자 리터럴은 반드시 &#39;&#39;안에 하나의 문자가 있어야 한다. </p>
<pre><code>String str = &quot;&quot;; // OK. 내용이 없는 빈 문자열
char ch = &#39;&#39;; // 에러. &#39;&#39;안에 반드시 하나의 문자가 필요
char ch = &#39; &#39;; // OK. 공백 문자(blank)로 변수 ch를 초기화</code></pre><p>원래 String은 클래스이므로 아래와 같이 객체를 생성하는 연산자 new를 사ㅏ용해야 하지만 특별히 위와 같은 표현도 허용한다. </p>
<pre><code>String name = new String(&quot;JAVA&quot;); //String 객체를 생성</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[R Studio 사용하기 - 변수]]></title>
            <link>https://velog.io/@yeriel_ju23/R-Studio-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-%EB%B3%80%EC%88%98</link>
            <guid>https://velog.io/@yeriel_ju23/R-Studio-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-%EB%B3%80%EC%88%98</guid>
            <pubDate>Mon, 04 Jul 2022 12:12:03 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/yeriel_ju23/post/189a1ad7-26fa-43b7-8029-5fdc10efce5a/image.png" alt=""></p>
<h3 id="r-기본-사용법">R 기본 사용법</h3>
<blockquote>
<p> 변수 할당</p>
</blockquote>
<pre><code>a &lt;- 4
b &lt;- 1
c = a+b</code></pre><p>factor( )는 범주형 변수를 표현하기 위해 사용</p>
<pre><code>gender &lt;- factor(&quot;f&quot;,c(&quot;m&quot;,&quot;f&quot;))</code></pre><p>factor( )에 할당된 인자인 &#39;f&#39;는 &#39;gender&#39;라는 변수에 저장되는 값
변수형 변수는 c(&quot;m&quot;,&quot;f&quot;)와 같이 &#39;m&#39;,&#39;f&#39; 2개 사용 가능하며, &#39;c( )&#39; 표현은 벡터</p>
<p>데이터는 크게 2개로 구분된다.
(1) 명목형 또는 순서형의 범주형 데이터
(2) 연속형 데이터</p>
<p>R에서는 범주형 데이터를 요인(factor)형 데이터 구조라고 부르고 있으며,
순서(order)가 있는 경우는 순서형 요인(ordered factor)라고 해서 구분</p>
<p>통계기법 중 도수분포표, 교차분할표, 카이제곱 검정, 로지스틱회귀분석, 그래프 중 막대그림, 원 그림, 점 그림 등의 경우 범주형 변수로 변환을 해야만 함</p>
<p>데이터 탐색시 범주형 변수로 변환하여 분포 형태나 집단 간 비교를 해야 함</p>
<p>연속형 변수를 범주형 변수로 변환하기: cut( ), ifelse( ), within( )</p>
<p><img src="https://velog.velcdn.com/images/yeriel_ju23/post/736c358f-139f-4996-b547-89b96467b2ac/image.png" alt=""></p>
<ul>
<li>값이 순서가 있는 경우라면 순서형 변수로 만들기 위해서는 &quot;ordered( )&quot;라는 명령어를 사용</li>
<li>&quot;factor( )&quot;를 호출할 때에는 반드시 &quot;ordered = TRUE&quot;라고 지정해줘야 함</li>
</ul>
<p>R에서는 가장 기본적인 데이터셋의 형태를 벡터라고 하며, 벡터는 하나 이상의 문자, 숫자 등의 집합</p>
<p>일반적으로  R에서는 모든 것이 벡터라고 간주</p>
<p>character(문자), numeric(실수), inerger(정수), logical(논리) 등의 타입을 가지며 한 벡터 내의 타입은 항상 같아야 함
벡터를 만드는 가장 간단한 방법은 함수 c( )를 사용</p>
<p><img src="https://velog.velcdn.com/images/yeriel_ju23/post/ad3f66ee-1f01-4959-8462-acbe8d5aabc4/image.png" alt=""></p>
<p><strong>벡터는 중첩되어 사용할 수 없다</strong></p>
<p>벡터 안에 벡터를 사용하게 되면, 단일 차원의 벡터로 변경
중첩된 구조가 필요하다면 리스트(list)를 사용</p>
<p><img src="https://velog.velcdn.com/images/yeriel_ju23/post/21985091-5a43-4b8e-bdab-d5850f77f55c/image.png" alt=""></p>
<p>seq_along()은 인자로 주어진 데이터의 길이만틈 1,2,3,...,N까지 벡터를 반환할 때 사용</p>
<p>seq_len()은 N값이 인자로 주어지면 1,2,3,...,N까지 구성된 벡터를 반환할 때 사용
<img src="https://velog.velcdn.com/images/yeriel_ju23/post/1869ffea-b2f1-4c65-b0bf-460319ec572e/image.png" alt=""></p>
<p>벡터를 만들기 위해서는 c( ) 또는 vector( ) 등의 함수를 사용하면 됨</p>
<ul>
<li>c( )는 &#39;concatenate&#39;함수로서 여러 가지 벡터를 붙여줄 때 사용</li>
<li>vertor( )는 명시적으로 벡터 오브젝트를 만들게 되며, type의 지정이 가능
또한 &#39;[ ]&#39; 안에 인덱스를 적고 필요한 각 요소를 가져옴
<img src="https://velog.velcdn.com/images/yeriel_ju23/post/56c2854d-141f-4b9a-a515-ec537cb90a8b/image.png" alt=""></li>
</ul>
<p>시작값:끝 값 (start:end) 형태를 사용</p>
<p>벡터의 길이를 알고자 한다면 &#39;length( )&#39; 함수, &#39;NROW( )&#39;함수를 사용</p>
<p><img src="https://velog.velcdn.com/images/yeriel_ju23/post/f4f71c27-42fb-405f-bad2-c0a1e8d00bdf/image.png" alt="">
벡터는 한 가지의 타입만을 가질 수 있으며, <strong>만약 다른 타입의 &#39;element&#39;를 c( ) 벡터로 만들려고 한다면, 자동변환이 발생</strong> (하나의 타입으로모두 바뀜)</p>
<p>R에 의해 강제적으로 변환되는 것이므로 강제 변환</p>
<p>&#39;<strong>%in%</strong>&#39; 연산자는 <strong>벡터에 포함되어 값이 무엇인지</strong>를 알려줌
<strong>두 집합을 비교할 경우 setequal( ) 함수</strong>를 사용</p>
<p><img src="https://velog.velcdn.com/images/yeriel_ju23/post/04b5888d-0c03-451c-b079-1efc7e5ee4c7/image.png" alt=""></p>
<p>함수 c( ) 이외에도 </p>
<ul>
<li>연속된 값을 생성하는 함수인 seq( )</li>
<li>일정한 패턴들을 반복 사용하여 벡터를 생성하는 함수 rep( )
<img src="https://velog.velcdn.com/images/yeriel_ju23/post/c6b3ded0-b986-454f-ac05-fcf260bed96c/image.png" alt=""></li>
</ul>
<hr>
<h3 id="모드">모드</h3>
<p>R의 모든 객체에는 어떻게 메모리에 저장되어있는지를 가리키는 모드(mode)가 있으며, 모드의 종류에는 숫자형, 문자형, 리스트, 함수 등이 있음</p>
<blockquote>
<p>(1) 숫자형(Numeric) : 수치 값을 나타냄, integer와 double 포함
-&gt; c( ), numeric( ), factor( ),  ordered( ) 
(2) 논리형(logical): TRUE와 FALSE이 논리 값을 나타냄
-&gt; logical( )
(3) 문자형(character): 문자와 문자열을 나타냄
-&gt; character( )
(4) 복소수형(complex): 실수와 허수로 구성된 복소수를 나타냄
-&gt; a + bi</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[통계의 이해 2]]></title>
            <link>https://velog.io/@yeriel_ju23/%ED%86%B5%EA%B3%84%EC%9D%98-%EC%9D%B4%ED%95%B4-2</link>
            <guid>https://velog.io/@yeriel_ju23/%ED%86%B5%EA%B3%84%EC%9D%98-%EC%9D%B4%ED%95%B4-2</guid>
            <pubDate>Sun, 03 Jul 2022 12:21:08 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/yeriel_ju23/post/d6ceecf2-b851-4238-8a53-5d57ff98d822/image.png" alt=""></p>
<h3 id="추정">추정</h3>
<p><strong>통계적 추론</strong> : 표본으로 부터 얻은 결과를 이용하여 모집단의 특성을 예측하는 과정</p>
<p>의문점들에 대해 알고 싶은 것은 모집단의 모수(모집단 평균, 표준편차)이나, 전수조사는 조사시간과 비용 등의 여러 문제로 인해 많은 어려움이 있고, 어떤 경우에는 조사 자체가 불가능한 경우도 발생하므로 모집단으로부터 선택한 일부분의 구성단위인 표본을 선택하고, 표본의 결과(표본평균, 표본분산 등)를 토대로 모집단의 성격과 특성을 파악하고자 함</p>
<p><strong>통계적 추론</strong>은 <strong>추정(estimation)</strong>과 <strong>가설검정(hypothesis testing)</strong>으로 분류</p>
<p><strong>추정(estimation)</strong>은 모집단에서 추출한 표본의 결과를 이용하여 모집단의 모수를 추측하는 과정을 말하며 추정방법에는 <strong>점추정(point estimation)</strong>과 <strong>구간추정(interval estimation)</strong>이 있음</p>
<ul>
<li><strong>점추정</strong>: <strong>오직 하나의 값</strong>으로 모수를 추정하는 것</li>
<li><strong>구간추정</strong>: 모수가 포함될 것이라고 기대하는 범위(모수의 신뢰구간)를 추정하는 것</li>
</ul>
<p><strong>추정량(estimator)</strong>: 모집단의 모수를 추정하기 위해 사용하는 공식이나 함수식
<strong>추정치(estimate)</strong>: 추정량이라는 공식에 실제 표본의 데이터를 대입하여 계산된 결과 값
<strong>표본 통계량</strong>: 표본으로부터 얻어진 표본평균( ), 표본분산(S2)을 의미</p>
<h3 id="점추정">점추정</h3>
<blockquote>
<p>오직 하나의 값으로 모집단의 특성을 추정</p>
</blockquote>
<p>오직 하나의 값으로 모수를 추정하기 때문에, 따라서 모집단의 평균(μ)을 추정하기 위한 추정량으로 표본평균, 표본 중앙값, 표본 최빈값을 생각할 수 있는데 이러한 추정량 중에서 선택을 하기 위한 기준이 있어야 함</p>
<p>모집단의 크기가 비교적 작을 경우에는 모집단 전체를 조사하는 전수조사(census)를 통하여 정확
한 모집단 평균을 알아 낼 수 있지만, 대부분의 경우 모집단 전체를 조사한다는 것은 불가능한 일
이므로 정확한 모평균은 알 수 없음</p>
<h3 id="구간추정">구간추정</h3>
<blockquote>
<p>모집단의 평균이 있을 만한 구간을 추정</p>
</blockquote>
<p>점추정과는 달리 모수가 포함될 것이라고 기대하는 범위를 설정하여 모수를 추정하는 방법.
따라서 모집단 평균 μ에 대한 구간추정은 다음과 같이 μ를 중심으로 일정한 간격으로 추정하는 것</p>
<hr>
<h3 id="가설-검증">가설 검증</h3>
<p>표본으로 부터 얻은 결과를 이용하여 모집단의 특성을 예측하는 과정을 <strong>통계적 추론</strong>이라 하며 통계적 추론은 <strong>추정과 가설검정(hypothesis testing)을 포함</strong>함</p>
<p><strong>통계적 가설검정</strong>은 표본분포를 이용하여 모집단 특성에 대한 가설의 진위를 가리는 것으로 실제 재판과정과 흡사한 면이 있음</p>
<ul>
<li><p>가설은 증명(검정)되지 않은 주장</p>
</li>
<li><p>통계적 가설의 검정은 증명된 바 없는 주장을 귀무가설(nullhypothesis)이라는 틀 속에 집어넣고, 표본을 추출한 뒤 표본통계량을 이용하여 귀무가설을 테스트하는 과정이다.</p>
</li>
<li><p>귀무가설은 많은 경우 주로 부정적인 생각을 반영한다. 통계적 가설검정에서는 귀무가설만을 테스트, 즉 통계적 분석을 시도한다. ‘효과가 없다’, ‘기대에 미치지 못한다’ 등의 부정적 시각을 반영하는 귀무가설을 기각함으로써 긍정적 결론을 유도</p>
</li>
<li><p>즉, 연구자는 부정적 내용을 담고 있는 귀무가설을 통계적으로 검정하고 가능한 한 기각한 뒤, 긍정적인 내용을 담고 있는 또 하나의 가설인 대립가설(alternative hypothesis)을 받아들이기를 원한다.</p>
</li>
<li><p>대립가설의 내용을 직접 테스트하여 본인이 원하는 긍정적인 결과를 이끌어내는 방법은 사용할 수 없다.</p>
</li>
</ul>
<hr>
<h3 id="재판과정과-판결의-의미">재판과정과 판결의 의미</h3>
<blockquote>
<p>재판은 법원에서 법적 판단을 내리는 절차</p>
</blockquote>
<p>재판은 용의자에 대해 죄를 입증할 충분한 증거가 나타나지 않을 때까지 무죄임을 가정한 상태에서 이루어지며, 용의자는 자신의 이익을변론할 변호사를 선임할 권리를 갖는다.</p>
<p>재판과정에서 <strong>검사</strong>는 <strong>“용의자는 무죄”가 아님을 밝히는 자료를 제시</strong>하고,
<strong>변호사</strong>는 <strong>검사의 공격으로부터 용의자의 이익을 옹호</strong>하고,** “용의자는 무죄”임을 변론**한다.</p>
<p><img src="https://velog.velcdn.com/images/yeriel_ju23/post/a3e880a5-1f71-46f4-9a2c-03605ce67697/image.png" alt=""></p>
<p>용의자에 대한 법원의 <strong>“무죄 판결”</strong>은 용의자가 무죄임을 증명한 것이 아니라, 판사가 여러 판단 기준(검사의 증거, 변호사의 변론, 정황, 법조문과 판례 등)으로 볼 때 <strong>“용의자가 무죄가 아니라는 것을 밝히기에 충분한 타당성이 없다”</strong>는 것이다.</p>
<p>반대로 용의자에 대한 법원의 <strong>“유죄 판결”</strong>은 용의자가 유죄임을 증명한 것이 아니라, 판사가 여러 판단 기준(검사의 증거, 변호사의 변론, 정황,법조문과 판례 등)으로 볼 때 <strong>“용의자가 무죄가 아니라는 것을 밝히기에 충분한 타당성이 있다”</strong>는 것이다.</p>
<p>만약 판사의 무죄 또는 유죄 판결이 무죄 또는 유죄을 증명한 것이라면 재판의 결과에 불복하여 행해지는 항소나 상소와 같은 추가적인 절차는 존재하지도, 필요하지도 않을 것이다.</p>
<p>결국 판사는 용의자가 무죄라고 가정한 상태에서 재판을 하지만, 판결은 “무죄가 아님”을 밝히려는 모든 자료에 대해서 충분히 타당한 근거가 있는가에 따라 죄의 유무를 가린다고 볼 수 있다. </p>
<hr>
<h3 id="재판과-통계적-가설검증의-비교">재판과 통계적 가설검증의 비교</h3>
<p>어느 기업에서 생산한 충전 밧데리의 예를 들어 통계적 가설검정을 설명해보겠다.</p>
<p>스마트 폰의 밧데리를 생산하는 기업에서 충전시간을 향상시키기 위해 밧데리에 신 물질을 넣는 새로운 공법을 시도했다고 가정해보자</p>
<p>이 공법에 의해 충전시간이 늘어난 것인지에 대해서 표본 또는 실험의 결과를 가지고 판단을 내리는 통계적 추론절차를 <strong>가설검정(hypothesis testing)</strong>이라 한다.</p>
<p>통계적 가설검정은 재판과정과 마찬가지로 간접적인 방법 즉, 주장과 반대되는 가설을 사실로 가정한 상태에서 검정이 이루어진다.</p>
<p>즉, 두 개의 가설(H1과 H0)을 세운 후에 검정이 이루어지는데, 이때 두 개의 가설은 법정에서와 같이 서로 상반된 것이어야 한다. </p>
<p><img src="https://velog.velcdn.com/images/yeriel_ju23/post/97b0179a-b79f-41fe-b4b0-4b050b10c5c3/image.png" alt=""></p>
<p>새로운 공법의 도입은 충전시간을 늘릴 것이라는 믿음에서 시작했을 것이므로 주장하려는 가설은 “새로운 공법으로 충전시간은 늘어났다.”이며, 이때 주장하려는 가설을 대립가설(alternative null hypothesis)이라 하고 기호로는 H1(또는 Ha)로 표시한다.</p>
<p>이와 반대되는 가설 즉, 주장과 반대되는 가설은 “새로운 공법으로 충전시간은 늘어나지 않았다.”이며, 이때 주장하려는 가설과 반대되는 가설을 귀무가설(또는 영가설, null hypothesis)이라 하고 기호로는 H0로 표시한다.</p>
<p>가설검정은 가설 H0가 사실이라는 가정 하에 검정이 이루어지므로 검정의 초점은 H0에 있다.</p>
<p>가설검정에서 검사의 역할인 조사자(또는 분석자)는 가설 H0 즉, “충전시간은 늘어나지 않았다.”가 사실이 아님을 밝히는 자료를 표본의 결과로부터 제시하는 것이고, 변호사의 역할을 하는 것은 가설 H0가 사실일 때의 분포가 된다. </p>
<p>이 상황에서 판사의 역할은 표본의 결과(검사의주장)가 타당한지를 밝히는 것이다.
<img src="https://velog.velcdn.com/images/yeriel_ju23/post/27bc232f-7090-4335-99be-9902fcd19b4c/image.png" alt=""></p>
<p>가설검정의 결론으로 “가설 H0을 기각하지 않는다(not reject).”라는 의미는 “가설 H0가 사실이다”를 증명한 것이 아니라, 가설 H0가 사실이아니라고 보기에는 표본의 결과(증거)가 충분한 타당성을 갖지 못한다는 것으로서 “가설 H0(귀무가설)가 틀렸다고 볼 수 없다.”는 의미이다.</p>
<p>반대로 “H0을 기각한다(reject).”는 것은 “H0가 사실이 아니다.”를 증명한 것이 아니라, 표본의 결과(증거)가 H0가 사실이 아니라고 보기에 충분한 타당성을 제시하고 있다는 것이다. </p>
<blockquote>
<p>따라서 가설검정은 법원에서의 재판과 같이 가설의 옳고 그름(참과 거짓)을 판단하는 것이 아니라 <strong>표본의 결과가 “귀무가설 H0가 사실이 아니다.”라는 증거를 얼마나 충분히 제시</strong>하느냐에 따라 가설검정의 판단이 이루어진다고 볼 수 있다.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[통계의 이해 1]]></title>
            <link>https://velog.io/@yeriel_ju23/%ED%86%B5%EA%B3%84%EC%9D%98-%EC%9D%B4%ED%95%B4</link>
            <guid>https://velog.io/@yeriel_ju23/%ED%86%B5%EA%B3%84%EC%9D%98-%EC%9D%B4%ED%95%B4</guid>
            <pubDate>Sun, 03 Jul 2022 08:21:24 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/yeriel_ju23/post/19731bee-6dcd-42a4-a025-6d42706a1425/image.png" alt=""></p>
<h2 id="통계학의-기본-개념">통계학의 기본 개념</h2>
<h3 id="통계학을-공부하는-목적">통계학을 공부하는 목적</h3>
<ol>
<li>우리가 관심을 가지고 연구하려는 대상에 관련한 합당한 자료를 수집하고, 정리하여, 계산하는 능력을 기른다.<ol start="2">
<li>정리·계산된 자료의 특성으로서 일상 생활에서 일어나는 복잡한 문제들을 합리적으로 해결하는 의사결정의 도구로 삼는다. </li>
</ol>
</li>
<li>불확실한 미래 사회현상에 대한 예측을 하고 중요한 정책수립이나 사업을 계획하는데 과학적인 정보를 얻는다.</li>
</ol>
<hr>
<h3 id="통계학의-정의">통계학의 정의</h3>
<h4 id="통계학이란">통계학이란?</h4>
<blockquote>
<p>관심의 대상이 되는 연구목적에 합당한 자료를 수집하고 정리·분석하여 일반성을 지닌 정보를 도출하여 불확실한 상황 하에서 <strong>현명한 의사결정</strong>을 하기 위한 이론과 방법을 체계적으로 다루는 학문</p>
</blockquote>
<blockquote>
<p>주어진 자료에 근거하여 여러 가지 자연현상 또는 사회 현상에 대한 보편 타당한 과학적인 추론과 불확실한 미래를 대비하기 위하여 <strong>합리적인 의사결정</strong>을 도출하는 학문</p>
</blockquote>
<h4 id="통계와-확률의-차이">통계와 확률의 차이</h4>
<p><strong>통계</strong>: 손 안의 정보를 토대로 통 안에 무엇이 들어 있는가를 고민
<strong>확률</strong>: 통 안에 들어 있는 것에 관한 정보를 토대로 손 안에 무엇이 들어 있는가를 고민
(출처: MIT Open 코스웨어의 통계학 관련자료)</p>
<h4 id="통계학의-종류">통계학의 종류</h4>
<ul>
<li><strong>기술통계학</strong>: 통계집단의 특성을 수치화하여 나타내는 방법을 주로 다루는 분야의 학문
수집된 자료의 평균치나, 분산·상관계수 등을 계산하여 자료가 가진 <strong>일반적인 특성을 요약·설명</strong>하는 학문</li>
<li><strong>추론통계학</strong>: 모집단에서 뽑은 표본을 분석하여 이를 바탕으로 미지의 <strong>모집단 전체에 대한 특성을 추정</strong>해 내는 학문
<img src="blob:https://velog.io/92917050-3bce-4c05-a4c0-4f704cea9712" alt="업로드중.."></li>
</ul>
<h4 id="통계학의-용어">통계학의 용어</h4>
<ul>
<li><strong>모집단(Population)</strong>: 연구자(조사자)의 관심의 대상이 되는 데이터 전체 집합</li>
<li><strong>표본(Sample)</strong>: 모집단에서 연구의 대상으로 채택된 일부</li>
<li><strong>모수(Parameter)</strong>: 모집단의 특성을 수치로 나타낸 것</li>
<li><strong>통계량(Statistic)</strong>: 표본의 특성을 수치로 나타낸 것</li>
</ul>
<h4 id="통계적-문제의-유형">통계적 문제의 유형</h4>
<ul>
<li><p><strong>모집단비율에 관한 추정</strong>: 특정 TV프로그램의 시청률을 알아보기 위해 900명의 시청자 집에 특수장치를 설치하였다. 여기서 나온 자료를 이용하여 프로그램 시청률이 포함되어 있는 구간을 통계적으로 추정하였다. </p>
</li>
<li><p><strong>가설의 검정</strong>: 모 제약회사가 새롭고 안전한 진통제를 개발하였다. 이 진통제는 부작용도 없으며 8시간 동안 통증을 없애준다고 한다. 이 주장을 통계적으로 분석하기 위해 피실험자를 대상으로 하여 약의 효과에 관한 실험을 실시하였다. </p>
</li>
<li><p><strong>분산분석</strong>: 상품을 쌓아두는 진열대의 위치에 따라 판매량이 달라지는지 알아보기 위해 눈높이를 기준으로 하여 상, 중, 하 세 위치에 번갈아 진열하고 실제 판매량을 측정하였다. 그리고 눈높이에 따라 판매량이 달라지는지 알아보기 위해 통계적 분석을 실시하였다. </p>
</li>
<li><p><strong>회귀분석</strong>: 광고를 많이 하면 매출액이 늘어나는지를 알아보기 위해 월별 광고비액수와 매출액에 관한 지난 2년간의 자료를 수집하였다. 두 변수간의 관계를 1차식으로 정립한 뒤 통계적 분석을 통해 이들의 관계를 알아보았다. </p>
</li>
<li><p><strong>독립성 분석</strong>: 남녀간 성별에 따라 승진비율에 차이가 있는지를 알바오기 위해 대기업 남녀사원들의 인적자원 관련자료를 수집하였다. 그리고 통계적 분석을 통해 성별과 승진여부가 통계적으로 독립된 것인지 알아보았다. </p>
</li>
</ul>
<h4 id="추정">추정</h4>
<blockquote>
<p>모집단에서 추출한 표본의 결과를 이용하여 모집단의 모수를 추측하는 과정</p>
</blockquote>
<p>표본으로 부터 얻은 결과를 이용하여 모집단의 특성을 예측하는 과정을 통계적 추론이라 하며 통계적 추론은 추정과 가설검정을 포함한다. </p>
<ul>
<li>전 세계의 인구는 몇 명이나 될까?</li>
<li>대학을 졸업하여 취업하면 얼마의 연봉을 받을 수 있을까?</li>
<li>이번 대통령 선거에서 어느 후보가 당선 될 것인가?</li>
</ul>
<p>이러한 의문점에 대해 다음과 같은 정보를 접하게 된다. </p>
<ul>
<li>2014년 5월 1일 11시 현재 전 세계의 인구수는 7,163,134,554명으로 집계되었다. </li>
<li>대학졸업자의 희망연봉은 2,604만원이나, 실제로는 400만원가량 적은 2,208만원을 받았다.(2010년도 대졸자 직업이동경로 조사결과)</li>
<li>대통령 선거 한 달을 앞두고 실시한 여론조사 결과, A후보의 지지율을 58%, B후보의 지지율은 42%로 조사되었다. (여론조사 기관인 A사의 발표)</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Git 정리]]></title>
            <link>https://velog.io/@yeriel_ju23/GitGitHub-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@yeriel_ju23/GitGitHub-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Tue, 10 May 2022 14:37:19 GMT</pubDate>
            <description><![CDATA[<hr>
<p><img src="https://velog.velcdn.com/images/yeriel_ju23/post/274d45d0-3328-4ced-9b31-d29a76b4dde3/image.png" alt=""></p>
<hr>
<h1 id=""></h1>
<p><a href="https://git-scm.com/">Git</a>
<a href="https://github.com/">GitHub</a></p>
<h3 id="github의-역할">GitHub의 역할</h3>
<blockquote>
<ol>
<li>내 소스코드를 저장</li>
<li>소스코드 공유</li>
<li>협업 공간</li>
</ol>
</blockquote>
<h3 id="github">github</h3>
<ul>
<li>git을 통해서 소스코드를 올릴 수 있음</li>
<li>소스코드를 내 컴퓨터에서 인터넷으로 올려주는 역할을 <strong>git</strong>이 함</li>
<li><strong>github</strong>는 소스코드를 올리는 어떤 공간</li>
</ul>
<h3 id="git-환경설정">git 환경설정</h3>
<p>Git Bash 열어주기</p>
<p>Step 1. 유저 이름, 이메일 설정 </p>
<blockquote>
<p>git config --global user.name &quot;your_name&quot;
 git config --global user.email &quot;your_email&quot;</p>
</blockquote>
<p>Step 2. 정보 확인하기</p>
<blockquote>
<p>git config --list</p>
</blockquote>
<p>=&gt; user.name과 user.email이 잘 올라갔는지 확인하기</p>
<h2 id="git-명령어">Git 명령어</h2>
<h3 id="요약">요약</h3>
<blockquote>
<ul>
<li>git은 형상 관리 시스템의 한 종류로 주로 개발자들이 프로그램과 관련된 파일들을 저장하는 데 사용. </li>
</ul>
</blockquote>
<ul>
<li>commit, add, push, pull, status</li>
</ul>
<h3 id="github에-처음-코드-업로드하기">github에 처음 코드 업로드하기</h3>
<ol>
<li><p>초기화</p>
<blockquote>
<p>git init</p>
</blockquote>
</li>
<li><p>추가할 파일 더하기</p>
<blockquote>
<p>git add .</p>
</blockquote>
</li>
</ol>
<p>.은 모든 파일이라는 뜻, 선택적으로 올리고 싶으면 add 뒤에 파일 이름 붙이기 (ex. git add test.py)</p>
<ol start="3">
<li><p>상태 확인(선택사항)</p>
<blockquote>
<p>git status</p>
</blockquote>
</li>
<li><p>히스토리 만들기</p>
<blockquote>
<p>git commit -m &quot;test commit&quot;</p>
</blockquote>
</li>
</ol>
<p>-m 은 메세지의 준말로 &quot;&quot;안에 주고 싶은 히스토리 이름을 주면 됨</p>
<ol start="5">
<li><p>Github repository랑 내 로컬 프로젝트랑 연결</p>
<blockquote>
<p>git remote add origin <a href="https://github.com/%EC%9E%90%EC%8B%A0%EC%9D%98">https://github.com/자신의</a> 레포지토리</p>
</blockquote>
</li>
<li><p>잘 연결됐는지 확인(선택사항)</p>
<blockquote>
<p>git remote -v</p>
</blockquote>
</li>
<li><p>github로 올리기</p>
<blockquote>
<p>git push origin master</p>
</blockquote>
</li>
</ol>
<p>master 자리에는 branch 이름이 들어가면 됨</p>
<h3 id="github에-업데이트-하기">github에 업데이트 하기</h3>
<blockquote>
<p>git add .
git commit -m &quot;&quot;
git push </p>
</blockquote>
<p>내 컴퓨터에 소스코드를 업데이트 하고 싶으면 이 세 개의 스텝만 반복!</p>
<h3 id="github로-팀프로젝트-하기">GitHub로 팀프로젝트 하기</h3>
<ol>
<li>github에서 소스코드 다운로드<blockquote>
<p>git clone 주소 폴더 이름</p>
</blockquote>
</li>
</ol>
<p>폴더 이름은 선택사항. 폴더 이름을 줄 경우 그 폴더가 새로 생성이 되면서 그 안에 코드들이 다운로드 되고, 폴더이름을 주지 않은 경우 깃허브 프로젝트 이름으로 폴더가 자동으로 생성</p>
<ol start="2">
<li><p>GitHub에 내 branch 만들기</p>
<blockquote>
<p>git checkout -b 브랜치이름</p>
</blockquote>
</li>
<li><p>내 브랜치에 소스코드 업데이트 하기</p>
<blockquote>
<p>git add .
git commit -m &quot;&quot;
git push origin 브랜치이름</p>
</blockquote>
</li>
</ol>
<p>github에서 compare &amp; pull request 클릭 후 메세지 작성 -&gt; Create pull request</p>
<p>그러면 pull request라는 것이 생김(master에 갈 수 있게 허락해주세요:))
merge pull request: 잘 작성했군요:)
Review changes: 다시 작성하세요:(</p>
<ol start="4">
<li>master 브랜치에 소스 가져오기(pull)<blockquote>
<p>git pull origin master</p>
</blockquote>
</li>
</ol>
<p>pull을 하기 전에는 기존 소스코드들을 먼저 commit 해놔야 한다. 
pull은 마스터에 있는 코드랑 동기화 시켜준다.</p>
<ol start="5">
<li>branch끼리 이동하는 법<blockquote>
<p>git checkout 브랜치이름</p>
</blockquote>
</li>
</ol>
<p>내 branch에서 master branch로 이동하고 싶거나, 다른 branch로 이동하고 싶을 경우 사용</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] 자바 시작하기]]></title>
            <link>https://velog.io/@yeriel_ju23/Java-%EC%9E%90%EB%B0%94-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@yeriel_ju23/Java-%EC%9E%90%EB%B0%94-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0</guid>
            <pubDate>Tue, 29 Mar 2022 10:58:44 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>모든것이 클래스 기반에서 동작해야 한다. 이것이 자바다. </p>
</blockquote>
<hr>
<h3 id="프로그래밍이란-무엇일까">프로그래밍이란 무엇일까?</h3>
<ul>
<li>프로그래밍: 컴퓨터에게 일을 하도록 명령어를 만드는 것</li>
<li>컴파일: 프로그램 언어를 컴퓨터가 알 수 있는 언어로 바꿔 주는 일</li>
<li>컴파일러: 기계어로 번역해주는 프로그램, 자바를 설치하면 자바 컴파일러도 설치됨</li>
</ul>
<hr>
<h3 id="java를-사용하기-위해서는-뭐가-필요할까">JAVA를 사용하기 위해서는 뭐가 필요할까?</h3>
<blockquote>
<ol>
<li>JDK 설치</li>
<li>IDE 설치</li>
<li>클래스, 함수, public, static에 대한 개념</li>
<li>실행하기</li>
</ol>
</blockquote>
<p>우선 개발환경을 세팅해보자. 
개발환경이란 자바로 프로그램을 만들 수 있는 컴퓨터 환경을 말한다. 즉, 프로그램 소스를 작성하는 툴, 작성한 소스를 컴파일 하는 프로그램 등을 설치해야 한다. </p>
<h4 id="jdk-설치">JDK 설치</h4>
<p><strong>Java Development Kit</strong> 의 약자로, 자바 프로그램을 만들기 위해서는 누구나 이것을 설치해야 한다. </p>
<p><a href="https://www.oracle.com/java/technologies/downloads/">https://www.oracle.com/java/technologies/downloads/</a> </p>
<p>★ 본인의 JDK 설치 디렉토리를 기억해 놓자. </p>
<p>JDK를 설치했다면 JDK가 설치된 디렉토리의 bin이라는 하위 디렉토리에 javac.exe와 java.exe 파일이 저장되어 있을 것이다.
혹시라도 java.exe 만 있고 javac.exe 가 없다면 JDK가 아닌 JRE를 설치한 것이므로 JDK를 다시 설치하자</p>
<blockquote>
<p>JRE는 JDK보다는 작은 개념으로 Java Runtime Environment의 약자이다. 자바가 실행될 수 있는 최소한의 파일들이 설치되어있는 환경이라고 생각하면 된다. JRE에는 javac.exe와 같은 자바소스를 컴파일하기 위한 도구는 설치되지 않는다. </p>
</blockquote>
<p>javac는 java compiler의 약어이다. 즉, 자바파일을 컴파일할 때 사용하는 것이 바로 javac.exe 파일이다. 컴파일이란 프로그래머가 작성한 소스코드를 컴퓨터가 이해할 수 있는 말(기계어)로 바꾸는 행위이다. </p>
<p>만약 우리가 MyProgram.java라는 자바 파일을 작성했다면 프로그램이 정상적으로 동작하는지 확인하기 위해 프로그램을 실행시키고 싶을 것이다. 자바로 작성한 파일을 실행하기 위해서는 두 번의 단계를 거쳐야만 한다. 하나는 .java 파일을 .class 파일로 바꾸어 주는 컴파일 단계이고 두번째는 .class 파일을 실행하는 단계이다. 이렇게 두 단계를 거치면 우리는 작성한 프로그램을 실행할 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/yeriel_ju23/post/4fd4bf4a-bf89-4c78-b6e5-4a628d6d98d7/image.png" alt=""></p>
<p>위 그림에서 Compiler는 javac.exe에 해당되고 Java VM은 java.exe에 해당된다. 위 그림을 순서대로 서술하면 다음과 같다.</p>
<ol>
<li>소스코드(MyPrograme.java)를 작성한다.</li>
<li>컴파일러(Compiler)는 자바 소스코드를 이용하여 클래스 파일(MyProgram.class)을 생성한다. 컴파일 된 클래스 파일은 Java VM(Java Virtual Machine)이 인식할 수 있는 바이너리 파일이다.</li>
<li>Java VM(JVM)은 클래스 파일의 바이너리 코드를 해석하여 프로그램을 수행한다.</li>
<li>MyProgram 수행 결과가 컴퓨터에 반영된다.</li>
</ol>
<hr>
<h4 id="자바는-왜-실행하기도-어려운-class라는-걸-만들어서-귀찮게-하는거야">자바는 왜 실행하기도 어려운 class라는 걸 만들어서 귀찮게 하는거야?!!</h4>
<blockquote>
<p>Java로 exe 프로그램을 만들 수 있는데 JVM이 exe에 포함되는 형식으로 가능하기 때문에 exe 파일이 무척이나 커진다.</p>
</blockquote>
<p>자바는 JVM이라는 중간단계가 있으므로 C등의 언어보다 속도가 느리다. 
하지만 한번 작성한 클래스 파일은 <strong>어떤 OS에서라도 사용할 수 있다</strong>는 장점이 있다. 
한번 작성한 것을 널리 재활용하는 것이 자바의 가장 큰 특징이자 가장 큰 장점이라고 할 수 있다.</p>
<h4 id="ide-설치">IDE 설치</h4>
<p><strong>Intergrated Development Environment</strong>의 약자로, <strong>통합개발환경</strong>이라 부른다.</p>
<p>자바 프로그래밍을 도와주는 IDE 중 가장 많이 추천되는 툴은 &#39;Intellij(인텔리제이)&#39;이며 &#39;eclipse(이클립스)&#39;도 많이 사용한다. </p>
<blockquote>
<p><strong>Intellij</strong> or <strong>eclipse</strong></p>
</blockquote>
<p>클래스 파일을 실행할 때는 위와 같이 <strong>java 클래스파일명</strong> 과 같이 실행한다. 단, 클래스파일명에서 .class 확장자 부분은 제외하고 이름만 입력하여 실행해야 한다.</p>
<p>ex) java HelloWorld</p>
<hr>
<p><img src="https://images.velog.io/images/yeriel_ju23/post/c894820b-c91e-4175-acc9-63a4e4330bcf/image.png" alt=""></p>
<blockquote>
<ul>
<li>package name은 소문자로 시작</li>
</ul>
</blockquote>
<ul>
<li>Calss name은 대문자로 시작</li>
</ul>
<hr>
<h3 id="자바를-쓰면-좋은-이유">자바를 쓰면 좋은 이유</h3>
<p><img src="https://images.velog.io/images/yeriel_ju23/post/0fdc8bc8-7b5e-4a0d-a49f-b970fad9aa49/image.png" alt=""></p>
<ul>
<li>객체 지향 언어이기 때문에 유지보수가 쉽고 확장성이 좋다.</li>
<li>프로그램이 안정적이다.</li>
<li>풍부한 기능을 제공하는 오픈 소스이다.</li>
</ul>
<hr>
<h3 id="자바의-특징">자바의 특징</h3>
<blockquote>
<ol>
<li>간단하다 (Simple)</li>
<li>객체 지향적이다 (Object-oriented)</li>
<li>인터프리터 언어이다 (Interpreted)</li>
<li>강력하다 (robust)</li>
<li>안전하다 (Secured)</li>
<li>플랫폼 독립적이다 (Platform independent)</li>
<li>멀티 쓰레딩을 지원한다 (Multithreaded)</li>
<li>동적이다 (Dynamic)</li>
</ol>
</blockquote>
<p><strong>간단하다 (Simple)</strong>
자바는 C++에 가깝지만 훨씬 간단하다. 자바는 고급 언어들에 들어 있는 여러 가지 요소들 중에서 반드시 필요하지 않다고 생각된 부분들은 모두 제거했다.</p>
<p><strong>객체 지향적이다 (Object-oriented)</strong>
자바는 숫자(int, float, long 등)나 논리값(true, false)을 제외한 거의 모든 것이 객체로 구성되어 있다. 실제로 자바는 Object 클래스에서 모든 클래스를 파생한다.</p>
<p><strong>인터프리터 언어이다 (Interpreted)</strong>
자바는 정확하게 말하면 컴파일 언어인 동시에 인터프리터 언어이다. 자바는 먼저 텍스트 소스를 컴파일하여 2진 파일(클래스 파일)로 만든 다음 자바 런타임이 클래스 파일을 인터프리트하면서 실행한다. 먼저 시스템에 무관한 2진 파일을 만듬으로써 자바는 컴파일 언어에 가까운 속도와 시스템 독립성을 동시에 얻을 수 있었다.</p>
<p><strong>강력하다 (robust)</strong>
자바는 포인터 연산을 지원하지 않는다. 이는 잘못된 주소를 가르킬 가능성을 사전에 없앤 것이다. 자바는 모든 메모리 접근을 자바 시스템이 관리하고 제한하며 또한 예외 핸들링을 하여 시스템 붕괴의 우려가 없다. 예를 들어 자바는 리소스 관리(garbage collection)를 하는데 사용이 끝난 리소스를 시스템이 메모리에서 삭제하는 방식을 채택하고 있어 메모리 누출에 대한 고민을 프로그래머가 할 필요가 없다.</p>
<p><strong>안전하다 (Secured)</strong>
자바는 포인터 개념이 없고 유형 정의가 강고하여서 실행 전에 클래스 파일을 이용한 프로그램의 검사가 가능하다.</p>
<p>자바는 프로그램 작성 시 자료형 타입에 굉장히 민감하다. 이것은 마치 코딩할 때 잔소리꾼이 끊임없이 따라다니며 잘못된 코드를 작성하지 않게끔 도와주는 역할을 한다. 그래서 자바는 일단 컴파일만 되면 실행 시 오류가 발생하는 경우가 다른언어에 비해 현저히 낮다. 능숙한 프로그래머라면 자바의 이렇듯 유연성이 없는 고지식한 면을 싫어 할수도 있다.</p>
<p>하지만 자바의 이런 족쇄같은 타입체크는 코드를 매우 명확하게 만들어주는 힘이 있다. 컴파일이 되었다면 코드에 결정적인 문제는 없는 것이다.</p>
<p><strong>플랫폼 독립적이다 (Platform independent)</strong>
자바의 실행 파일은 이진 코드(클래스) 파일이다. 따라서 자바 런타임이 설치된 시스템에서는 어디서나 자바 프로그램을 실행할 수 있다.</p>
<p>자바에는 많은 특징이 있지만 가장 큰 특징이라면 한번 작성한 프로그램은 os에 상관없이 어디서든 돌려볼 수 있다는 점일 것이다. 이것은 자바 프로그램이 Virtual Machine에 의해서 실행되기 때문이다. 처음에 이 방식은 Virtual Machine을 실행시켜서 프로그램을 돌려야 하기 때문에 좀 느리고 부담스러웠다. 하지만 지금은 하드웨어의 눈부신 발전과 여러 기술들의 개발로 이러한 단점들이 대부분 사라져버린 상태이다.</p>
<p><strong>멀티 쓰레딩을 지원한다 (Multithreaded)</strong>
멀티 쓰레드를 지원할 경우 하나의 프로그램 단위가 동일한 쓰레드를 동시에 수행할 수 있다. 특히 자바는 멀티 프로세서 하드웨어를 지원하도록 설계되었으므로 멀티 CPU 시스템에서 높은 효율을 낼 수 있다.</p>
<p><strong>동적이다 (Dynamic)</strong>
자바 인터페이스를 이용하면 하나의 모듈을 갱신할 때 다른 모듈을 모두 갱신할 필요가 없다. 이것은 인터페이스가 모든 인스턴스 변수와 도구의 실행문을 배제한 채 객체 간의 상호 작용을 정의하기 때문이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Baekjoon] 2588 곱셈]]></title>
            <link>https://velog.io/@yeriel_ju23/Baekjoon-2588-%EA%B3%B1%EC%85%88</link>
            <guid>https://velog.io/@yeriel_ju23/Baekjoon-2588-%EA%B3%B1%EC%85%88</guid>
            <pubDate>Sun, 27 Mar 2022 09:17:23 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/yeriel_ju23/post/eb90fd5a-e975-4c3a-bd08-413ab2e9401a/Baekjoon.png" alt=""></p>
<hr>
<h3 id="문제">문제</h3>
<p><img src="https://images.velog.io/images/yeriel_ju23/post/aaa4a532-a8c8-454b-b188-e158ece81a03/image.png" alt=""></p>
<hr>
<h3 id="방법">방법</h3>
<blockquote>
<ol>
<li>print문에 %(나머지)를 이용하여 바로 출력하는 방법</li>
<li>range 함수를 이용해 마지막부터 첫번째로 출력되게 하는 방법</li>
</ol>
</blockquote>
<h4 id="방법-1-나머지를-구하는-을-이용하여-값을-바로-출력하는-방법">&lt;방법 1&gt; 나머지를 구하는 %을 이용하여 값을 바로 출력하는 방법</h4>
<pre><code>a = int(input())
b = int(input())

print(a * (b%10))
print(a * ((b%100)//10))
print(a * ((b%1000)//100))
print(a*b)
</code></pre><h4 id="방법-2--range시작-마지막-순서-함수를-이용해-마지막부터-시작까지-역순으로-출력하는-방법">&lt;방법 2&gt;  range(시작, 마지막, 순서) 함수를 이용해 마지막부터 시작까지 역순으로 출력하는 방법</h4>
<pre><code>a = int(input())
b = input()

for i in range(len(b),0,-1):
    print(a*int(b[i-1]))

print(a*int(b))</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[Baekjoon]1712번 손익분기점]]></title>
            <link>https://velog.io/@yeriel_ju23/Baekjoon1712%EB%B2%88-%EC%86%90%EC%9D%B5%EB%B6%84%EA%B8%B0%EC%A0%90</link>
            <guid>https://velog.io/@yeriel_ju23/Baekjoon1712%EB%B2%88-%EC%86%90%EC%9D%B5%EB%B6%84%EA%B8%B0%EC%A0%90</guid>
            <pubDate>Tue, 22 Mar 2022 15:07:15 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/yeriel_ju23/post/41aca7e6-f95d-4b2b-955b-4172f123535d/Baekjoon.png" alt=""></p>
<blockquote>
<p>1712번 손익분기점
<a href="https://www.acmicpc.net/problem/1712">https://www.acmicpc.net/problem/1712</a></p>
</blockquote>
<p><img src="https://images.velog.io/images/yeriel_ju23/post/e5f4acd4-60d5-4535-b9bc-90e43fa5508a/image.png" alt=""></p>
<hr>
<p>A = 고정비용
B = 가변비용
C = 판매비용</p>
<p>N = 판매개수</p>
<p>총 수입 &gt; 총 비용
=&gt; (C x N) &gt; A + (B x N)</p>
<ol>
<li><p>B &gt;= C인 경우 -1
: B가 C보다 큰 경우 손익분기점이 존재하지 않는다.</p>
</li>
<li><p>C x N &gt; A + B x N 
: 손익분기점이 발생하는 때의 판매량을 식으로 나타내면 N = N/(C-B)이지만 이 식은 손익분기점인 때가 되고
최초로 이익이 발생하는 시점을 이 식에서 판매량을 하나 더 더해야 함</p>
</li>
</ol>
<hr>
<pre><code>a,b,c = map(int, input().split())

if b &gt;= c:
    print(-1)
else:
    print(a//(c-b)+1)</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[Baekjoon]1297번 TV 크기]]></title>
            <link>https://velog.io/@yeriel_ju23/Baekjoon1297%EB%B2%88-TV-%ED%81%AC%EA%B8%B0</link>
            <guid>https://velog.io/@yeriel_ju23/Baekjoon1297%EB%B2%88-TV-%ED%81%AC%EA%B8%B0</guid>
            <pubDate>Tue, 22 Mar 2022 14:27:19 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>1279번) TV크기 
<a href="https://www.acmicpc.net/problem/1297">https://www.acmicpc.net/problem/1297</a></p>
</blockquote>
<hr>
<blockquote>
<p>피타고라스 정리: c² = a² + b²</p>
</blockquote>
<hr>
<blockquote>
<p>제곱과 루트 구하기</p>
</blockquote>
<ol>
<li>제곱 구하기 aⁿ</li>
</ol>
<ul>
<li>math 모듈 이용: math.pow(a,n)</li>
<li>** 이용: a** n</li>
</ul>
<ol start="2">
<li>루트 구하기 √a</li>
</ol>
<ul>
<li>math 모듈 이용: math.sqrt(a)</li>
<li>** 이용: a ** (1/2) or a ** 0.5</li>
</ul>
<hr>
<pre><code>import math as m

d, h, w = map(int, input().split())
q = m.sqrt(d**2/(h**2+w**2))
#q = d / ((h ** 2 + w ** 2) ** 0.5)
print(int(h * q), int(w * q))</code></pre><hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[IT/코딩 용어 정리]]></title>
            <link>https://velog.io/@yeriel_ju23/IT%EC%BD%94%EB%94%A9-%EC%9A%A9%EC%96%B4-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@yeriel_ju23/IT%EC%BD%94%EB%94%A9-%EC%9A%A9%EC%96%B4-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Mon, 21 Mar 2022 13:22:37 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>컴퓨터와 인터넷
웹 서비스 동작 방식
서버-클라이언트 통신
개발 언어, 프레임워크
아키텍쳐/DB
협업(git)</p>
</blockquote>
<h3 id="컴퓨터와-인터넷">컴퓨터와 인터넷</h3>
<p>컴퓨터란? 기계를 모아둔 것</p>
<ul>
<li>하드디스크: 적어두기</li>
<li>RAM: 기억하기</li>
<li>CPU: 계산하기</li>
</ul>
<p>운영체제(OS): 인간이 기계와 소통할 수 있게 만드는 기반 프로그램</p>
<ul>
<li>리눅스: 오픈소스</li>
</ul>
<p>OS에 명령을 내리는 게 &quot;코딩&quot;
이걸 어떤 말로 하느냐가 &quot;프로그래밍 언어&quot;
그리고 이걸 미리 짜둬서 매번 똑같이 움직이는게 &quot;프로그램&quot;
코딩은 늘 프로그램을 만드는 것 =&gt; 프로그래밍</p>
<p>컴퓨터끼리 대화를 주고 받고 싶다면? &quot;인터넷&quot;
대화를 주고 받으려니 규칙이 필요
그 중 하나가 웹 = http
 http://<del>~</del>  =&gt; 웹 통신을 하겠다는 의미 
암구호 표를 서로 가져서 가운데서 못 듣게 하는 게 =&gt; https</p>
<p>&quot;잘 듣고 있다가 누가 http 요청하면 이 파일을 톨려줘&quot;
=&gt; &quot;웹 서버&quot;를 만들었다고 하는 것</p>
<h3 id="웹-서비스-동작-방식">웹 서비스 동작 방식</h3>
<p>서버: 가운데서 데이터를 저장하고, 주는 것</p>
<ul>
<li>서버가 터지면 카톡이 안되는 이유: 카톡 서버가 편지 전달을 못 하니까!
그럼 서버란 무엇일까? 사실은 그냥 컴퓨터 껍데기 떼고 가로로 눕힌 것
즉, &quot;컴퓨터&quot;라는 사람의 직업과 같은 것(DB, 웹 서핑 등)
<img src="https://images.velog.io/images/yeriel_ju23/post/436e3219-fc8b-43e8-8aae-1085eaaafc54/image.png" alt=""></li>
</ul>
<p>브라우저: 요청을 보내고 받아와서 보여주는 것</p>
<ul>
<li>HTML: 뼈대</li>
<li>CSS/JS: 예쁘게 꾸미기, 뭔가 움직일 수 있음</li>
</ul>
<p>매번 페이지를 로딩 할 수도 없고, 데이터만 갈아 끼우고 싶을 수도 있잖아요!
-&gt;  그럴 대는 데이터만! (규칙 필요)
-&gt; JSON= key:value // 앱에서 많이 쓰임
그렇게 때문에 앱 업데이트가 필요</p>
<p>웹은 업데이트 필요가 없음(서버에서 껍데기까지 다 받아오기 때문)</p>
<blockquote>
<p>서버 = 가운데서 역할
브라우저: 요청 + 그려주기
웹은 다 받고, 앱은 데이터만!! (JSON 형식 { key:value })</p>
</blockquote>
<p>대체 무슨 규칙으로, 어떻게 통신하는 걸까?</p>
<h3 id="서버-클라이언트-통신">서버-클라이언트 통신</h3>
<p>API(Application programming interface)
: 클라이언트 개발자하고 미리 한 약속
헷갈리니까 문서로 써둘까요? &quot;API 명세서&quot;
http:// 서버 위치/API 주소 ? 가져가기로 한 데이터
<img src="https://images.velog.io/images/yeriel_ju23/post/8ae026a0-8448-4876-b71e-991ed03f7bcd/image.png" alt=""></p>
<p>(ex)
&quot;김 책임님 이거 신규 피쳐라 API하 하나만 따주세요&quot; 
=&gt; 새로운 기능 창구를 하나 만들어라. 그 쪽으로 요청하겠음</p>
<p>&quot;API 개발은 끝났고, 클라이언트는 아직이에요&quot;
= 창구는 다 만들었는데, 요청하는 쪽이 아직 작업 중</p>
<p>Open API: 누구나 요청할 수 있게 열어 둔 API
(통상적으로는 누구나 부르지 못하게 함! = 누구나 부르면 배민카피, 쿠팡카피 등)</p>
<p><img src="https://images.velog.io/images/yeriel_ju23/post/f2dc3ca0-334f-43c7-a0b5-50d82b64361b/image.png" alt=""></p>
<blockquote>
<p>API란 창구이자 약속
평소에 보는  URL처럼 생김
웹, 앱... 서버는 상관없다</p>
</blockquote>
<h3 id="개발-언어프레임워크">개발 언어/프레임워크</h3>
<p>프로그래밍 언어로 서버를 처음부터 다 만든다는 것은 매우 어려운 일</p>
<p>프레임워크: 미리 만들어둔 블록 세트</p>
<ul>
<li>Java: spring</li>
<li>Node.js: Express</li>
<li>Python: Django/flask</li>
</ul>
<p>엄청 많고, 대체적으로 유명한 것을 사용</p>
<p>언어 별로 용처와 특징을 알아보자</p>
<p>일단 웹 프론트엔드
<img src="https://images.velog.io/images/yeriel_ju23/post/018f5be7-82df-4db0-92a7-23e9c6873a21/image.png" alt=""></p>
<p>HTML, CSS, Javascript를 더 잘 쓸 수 있게 하는 프레임워크
체감상 리액트가 대세. 그런데 셋 중 하나 할 줄 알면 금방 배운다?!
<img src="https://images.velog.io/images/yeriel_ju23/post/7c9f436e-e100-4d31-a50d-6f13b559db5b/image.png" alt="">
<img src="https://images.velog.io/images/yeriel_ju23/post/5a76be21-e70b-4bcf-ad95-bb37c77517c6/image.png" alt=""></p>
<p>그 다음 서버
<img src="https://images.velog.io/images/yeriel_ju23/post/158d270e-f42f-4e37-8300-f6308bebfe38/image.png" alt=""></p>
<p>대부분의 언어로 서버를 만들 수 있다.</p>
<p>(대표적)
JAVA: 어렵다. 형식이 많음. 큰 회사에서 많이 씀
python: 쉽게 입문, 자유로움. 데이터 분석에도 씀
node.js: javascript와 거의 같음, 스타트업에서 많이 사용
C: 임베디드 칩, IoT에서. C로 서버만드는 곳은 거의 없음
Go: 최근 인기 시작, 쉬운데 적당히 형식 있음
TS: Typescript</p>
<p>앱을 만들 때는
Kotlin: 안드로이드 앱
Swift: 아이폰 앱
한 번에 개발: Flutter, React Native</p>
<p><img src="https://images.velog.io/images/yeriel_ju23/post/92ea1bb3-d01f-431e-869c-1ffd72a05d1d/image.png" alt=""></p>
<h3 id="아키텍쳐db">아키텍쳐/DB</h3>
<p>사실 서버 안에는 엄청나게 많은 역할들이 존재</p>
<ol>
<li>서버와 클라이언트로 구성</li>
<li>웹 서버+DB 와 클라이언트 구성</li>
<li>웹 서버, DB, 클라이언트 구성</li>
<li><img src="https://images.velog.io/images/yeriel_ju23/post/f0ab2921-5e33-46b8-89e9-1ed179165b46/image.png" alt=""></li>
<li><img src="https://images.velog.io/images/yeriel_ju23/post/219d895a-cd30-4adb-a1b8-24d76423074d/image.png" alt=""></li>
<li><img src="https://images.velog.io/images/yeriel_ju23/post/51075ad5-3daf-444a-bbaf-f5f003e616b5/image.png" alt=""></li>
</ol>
<p>그래서 요즘은 클라우드 서비르를 이용
(이미 제공해주는 기능을 잘 구성하는 것도 매우 중요해짐)</p>
<p>DB: 데이터를 잘 찾게 해주는 프로그램
정리된 항목을 &quot;인덱스&quot;</p>
<p>SQL vs noSQL (정형화된 SQL과 비정형화 된 Not-Only SQL)
<img src="https://images.velog.io/images/yeriel_ju23/post/ef1d9c33-b46b-4fbd-b0b6-7a03d4a81edd/image.png" alt=""></p>
<p>데이터분석하기 위해 SQL을 배운다 = SQL DB에서 데이터를 빼내는 방법을 배운다.
<img src="https://images.velog.io/images/yeriel_ju23/post/feb2adfa-4a48-412d-83bb-04c559b70101/image.png" alt=""></p>
<blockquote>
<p>아키텍쳐. 매우 복잡하다
클라우드를 잘 써야한다.
DB는 두 종류. 인덱스가 중요</p>
</blockquote>
<h3 id="git">git</h3>
<p>부분을 나눠서 작업하고, 합치는 방법이 필요
<img src="https://images.velog.io/images/yeriel_ju23/post/167fd350-01c7-47c7-a0d7-a5e80e7edbdc/image.png" alt="">
<img src="https://images.velog.io/images/yeriel_ju23/post/0c62fb93-e048-490e-b4a6-cdde7dc9134a/image.png" alt="">
<img src="https://images.velog.io/images/yeriel_ju23/post/ada9f75b-5278-454d-895f-43f2feaeaa85/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[알고리즘 (Algorithm)]]></title>
            <link>https://velog.io/@yeriel_ju23/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-Algorithm</link>
            <guid>https://velog.io/@yeriel_ju23/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-Algorithm</guid>
            <pubDate>Sat, 13 Mar 2021 07:31:11 GMT</pubDate>
            <description><![CDATA[<h2 id="알고리즘">알고리즘</h2>
<h4 id="정의">정의</h4>
<ul>
<li>문제를 해결하는 단계적 절차 또는 방법</li>
<li>어떤 값이나 값의 집합을 입력으로 받아 또 다른 값이나 값의 집합을 출력하는 잘 정의된 절차</li>
</ul>
<p>알고리즘을 설계하기 위해서 우선 &#39;<strong>해야 할 작업을 명확하게 명시</strong>&#39;해야 한다.
설계하려는 알고리즘이 &#39;무엇을&#39; 하는지는 <strong>입력</strong>과 <strong>출력</strong>으로 명시할 수 있다. </p>
<h4 id="조건">조건</h4>
<ol>
<li>정확성<ul>
<li>알고리즘은 주어진 입력에 대해 올바를 해를 주어져야 한다.</li>
</ul>
</li>
<li>수행성<ul>
<li>알고리즘의 각 단계는 컴퓨터에서 수행 가능하여야 한다. </li>
</ul>
</li>
<li>명확성<ul>
<li>수행할 작업의 내용과 순서가 이해하기 쉽고, 간명하게 기술되어야 한다.</li>
</ul>
</li>
<li>유한성<ul>
<li>알고리즘은 일정한 시간 내에 종료되어야 한다.</li>
</ul>
</li>
<li>효율성<ul>
<li>알고리즘은 효율적이어야 한다.</li>
<li>수행시간이 짧을수록 좋다.</li>
</ul>
</li>
</ol>
<h4 id="표현방법">표현방법</h4>
<ol>
<li>자연어</li>
<li>의사코드(pseudo code)</li>
<li>순서도</li>
</ol>
<h4 id="알고리즘의-분석">알고리즘의 분석</h4>
<h5 id="알고리즘을-평가하는-2가지-요소">알고리즘을 평가하는 2가지 요소</h5>
<ul>
<li>시간 복잡도 -&gt; 얼마나 빠른가?</li>
<li>공간 복잡도 -&gt; 얼마나 메모리를 적게 쓰는가?
(일반적으로 &quot;시간 복잡도&quot;를 더 중요시 함)</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[C언어]1. C언어란?]]></title>
            <link>https://velog.io/@yeriel_ju23/C%EC%96%B8%EC%96%B41.-C%EC%96%B8%EC%96%B4%EB%9E%80</link>
            <guid>https://velog.io/@yeriel_ju23/C%EC%96%B8%EC%96%B41.-C%EC%96%B8%EC%96%B4%EB%9E%80</guid>
            <pubDate>Wed, 27 Jan 2021 15:16:08 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/yeriel_ju23/post/177a53f8-b3fb-4480-8493-ff533ae694f7/image.png" alt="">
<strong>TIOBE 프로그래밍 언어 순위</strong> 
(2021년 1월 27일 기준)  1위 <strong>C언어</strong>
참고 사이트: [<a href="https://www.tiobe.com/tiobe-index//%5D">https://www.tiobe.com/tiobe-index//]</a></p>
<h1 id="what-is-c">What is C?</h1>
<ul>
<li>1972년 AT&amp;T Bell Laboratories(벨 연구소)의 Dennis Ritchie(데니스 리치)가 유닉스 운영체제를 만들기 위해 고안한 범용적 고급 프로그래밍 언어</li>
<li>현재 사용하고 있는 거의 모든 컴퓨터 시스템에서 사용할 수 있는 프로그래밍 언어</li>
</ul>
<h3 id="프로그래밍-언어란">프로그래밍 언어란?</h3>
<p>컴퓨터의 시스템을 구동시키는 소프트웨어를 작성하기 위한 언어</p>
<ul>
<li><strong>Low level language</strong>: 컴퓨터가 이해하기 쉽게 작성된 프로그래밍 언어
ex) 기계어(machine language), 어셈블리어(assembly language)
실행 속도가 매우 빠르지만, 사람이 배우기에는 매우 어려워 프로그램의 유지보수가 힘들다.</li>
<li><strong>High level language</strong>: 사람이 이해하기 쉽게 작성된 프로그래밍 언어
컴파일러나 인터프리터에 의해 기계가 이해할 수 있는 언어로 번역되어 실행된다. 
low level language보다 상대적으로 실행 속도가 느리지만, 가독성이 높고 다루기 쉽다. 
ex) JAVA, Python 등</li>
</ul>
<p>=&gt; <strong>C언어</strong>는 두가지의 특징을 모두 가지고 있는 <strong>절차 지향 프로그래밍 언어</strong>이다.</p>
<h2 id="💻-c언어의-역사">💻 C언어의 역사</h2>
<p>C언어 이전 유닉스 운영체제는 어셈블리어라는 low level language를 사용했는데 어셈블리어는 특정 하드웨어에 종속적인 언어여서, 이 언어로 작성된 프로그램은 다른 하드웨어로 이식할 수가 없었다. 
그래서 하나의 기능을 하는 프로그램을 CPU의 종류만큼 여러번 작성해야하는 불편함이 있어 이식성도 좋고 어셈블리어보다 쉬운 언어가 필요해졌다.</p>
<p><img src="https://images.velog.io/images/yeriel_ju23/post/1c8800d6-6100-4fa6-8f15-d538b330b3ef/image.png" alt=""></p>
<p>처음에 켄 톰슨은 <strong>BCPL 언어</strong>를 고쳐서 <strong>B언어</strong>(Bell 연구소의 첫글자 B를 따서 B언어로 지음)를 개발했는데 후에 데니스 리치가 B언어를 개선하여 <strong>C언어</strong>가 탄생하였다.</p>
<h2 id="c언어의-특징">C언어의 특징</h2>
<p>C언어는 이후의 프로그래밍 언어에 직간접적으로 많은 영향을 주었는데 C언어를 배우면 다른 언어를 배우기 쉽다.</p>
<p>Windows, Linux, OS X와 iOS, Android, Windows Phone 모바일 운영체제의 핵심인 커널은 C 언어로 만들어져 있다.(약간의 어셈블리가 포함됨)
즉, 운영체제의 모든 기능을 이용할 수 있는 건 C언어
다른 언어들은 모두 C언어의 기능(라이브러리)을 가져다 쓰는 구조</p>
<ul>
<li>C언어로 작성된 프로그램은 다양한 하드웨어로의 이식성이 좋다.</li>
<li>C언어는 절차 지향 프로그래밍 언어로, 코드가 복잡하지 않아 상대적으로 유지보수가 쉽다. </li>
<li>C언어는 코드가 간결하며, 완성된 프로그램의 크기가 작고 실행 속도가 빠르다. </li>
<li>구조체, 공용체 등 복합 데이터 타입을 지원한다.</li>
<li>포인터를 활용한 메모리, 배열 접근을 허용한다. </li>
<li>표준 외부 라이브러리 사용한다.</li>
</ul>
<p>=&gt; 메모리와 하드웨어를 직접 제어하는데 C언어를 따라갈 언어가 없다.</p>
<h2 id="🤔-c언어-어디에-쓰일까">🤔 <strong>C언어, 어디에 쓰일까?</strong></h2>
<h4 id="systems-programming">Systems Programming</h4>
<ul>
<li>운영체제(ex, 리눅스) 개발</li>
<li>마이크로 컨트롤러 개발</li>
<li>임베디드 프로세서 개발</li>
<li>디지털 신호처리 프로세서 개발</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[코딩 공부 순서]]></title>
            <link>https://velog.io/@yeriel_ju23/%EC%BD%94%EB%94%A9-%EA%B3%B5%EB%B6%80-%EC%88%9C%EC%84%9C</link>
            <guid>https://velog.io/@yeriel_ju23/%EC%BD%94%EB%94%A9-%EA%B3%B5%EB%B6%80-%EC%88%9C%EC%84%9C</guid>
            <pubDate>Sat, 16 Jan 2021 12:27:38 GMT</pubDate>
            <description><![CDATA[<p>프로그래밍 언어 공부부터 시작하는 것은 어려울 수 있음</p>
<h3 id="웹web으로-시작하기">웹(Web)으로 시작하기</h3>
<pre><code>- 웹이란? 브라우저를 통해 접속할 수 있는 모든 사이트</code></pre><p>   장점 1. 인터넷을 사용해보았다면 누구나 익숙함
   장점 2. 난이도가 상대적으로 낮음
   장점 3. 개발에 필요한 도구가 많음
   장점 4. pc, 스마트폰, 태블릿, TV 등 다양한 기기에서 동작</p>
<h4 id="개발은-크게-frontend-와-backend로-나눌-수-있음">개발은 크게 Frontend 와 backend로 나눌 수 있음</h4>
<ul>
<li>Frontend: 우리가 보는 화면 처리</li>
<li>Backend: DB 조회 등 로직 처리</li>
</ul>
<h4 id="--frontend부터-시작하기">=&gt;  Frontend부터 시작하기.</h4>
<p>∵ frontend는 반응이 바로 나오기 때문에 이해하기 쉽다.</p>
<ul>
<li>프론트엔드만 할 줄 알아도 API를 잘 쓰면 쓸만한 서비스를 만들 수 있음</li>
</ul>
<h3 id="frontend">Frontend</h3>
<p>(HTML, CSS, Javascript)</p>
<pre><code>1. HTML, CSS 공부하기 (프로그래밍 언어는 아님)

2. Javascript 공부하기 특히 그중에서 Vanila Javascript! 

Javascript로 
    1. To do list 만들기와 
    2. 클릭하면 반응하는 interaction 정도 수준은 할 줄 알아야 함.

3. Javascript의 Library에 대해서 공부한다.   
    예를 들어 J-Quary나 reactJS.

- HTML, CSS, Javascript에 대해 어느 정도 공부가 되었으면, Backend에 대해 배운다

4. Node js, Express 공부하기

5. Javascript가 자신에게 맞지 않는다고 느껴지면 Python 공부한다.</code></pre><h3 id="backend">Backend</h3>
<p>(Python, Postgres, Flask) 
=&gt; 본격적으로 개발 언어가 사용됨</p>
<pre><code>Backend는 언어에 맞는 Frame work가(개발을 도와주는 도구) 있는데

Java는 Spring

Python는 Django

Ruby는 Rails가 있으며, 적게 배우고 많은 것을 구현할 수 있는 Ruby를 추천</code></pre><h3 id="무료-코딩-테스트-연습-사이트-목록">무료 코딩 테스트 연습 사이트 목록</h3>
<ol>
<li><p>코드업: <a href="http://codeup.kr/">http://codeup.kr/</a></p>
</li>
<li><p>BOJ: <a href="https://www.acmicpc.net/">https://www.acmicpc.net/</a></p>
</li>
<li><p>프로그래머스: <a href="https://programmers.co.kr/">https://programmers.co.kr/</a></p>
</li>
</ol>
]]></description>
        </item>
    </channel>
</rss>