<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>jun_x.log</title>
        <link>https://velog.io/</link>
        <description>개발자를 꿈꾸는 대학생</description>
        <lastBuildDate>Fri, 18 Oct 2024 11:53:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>jun_x.log</title>
            <url>https://velog.velcdn.com/images/jun_x/profile/ba405809-84f6-4dba-ad6c-2a3d46847525/image.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. jun_x.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/jun_x" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[MacOS] - MariaDB 설치]]></title>
            <link>https://velog.io/@jun_x/MacOS-MariaDB-%EC%84%A4%EC%B9%98</link>
            <guid>https://velog.io/@jun_x/MacOS-MariaDB-%EC%84%A4%EC%B9%98</guid>
            <pubDate>Fri, 18 Oct 2024 11:53:00 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/jun_x/post/f7246a22-59da-4746-b95f-89625b541af4/image.png" alt=""></p>
<h2 id="mariadb">MariaDB</h2>
<h2 id="환경">환경</h2>
<blockquote>
<h4 id="설치-환경">설치 환경</h4>
<p>OS : MacOS Sonoma 14.7</p>
</blockquote>
<h2 id="1-mariadb-설치">1. MariaDB 설치</h2>
<h3 id="11-homebrew-update">1.1 HomeBrew Update</h3>
<p>brew를 이용해 설치하게 된다.
설치하기 전에 업데이트부터 해야한다.</p>
<pre><code>$brew update</code></pre><h3 id="12-mariadb-레포-정보-확인">1.2 MariaDB 레포 정보 확인</h3>
<pre><code>$ brew info mariadb
==&gt; mariadb: stable 11.5.2 (bottled)
...(이하 생략)</code></pre><p>mariadb 패키지 정보가 출력된다.</p>
<h3 id="13-mariadb-설치">1.3 mariadb 설치</h3>
<pre><code>$ brew install mariadb</code></pre><h3 id="14-설치된-버전-확인">1.4 설치된 버전 확인</h3>
<pre><code>$ mariadb -V
==&gt; mariadb from 11.5.2-MariaDB, client 15.2 for osx10.19 (arm64) using  EditLine wrapper</code></pre><h2 id="2-기본-설정">2. 기본 설정</h2>
<h3 id="21-실행">2.1 실행</h3>
<p>mySQL과 달리 brew services 를 이용해 실행해야 한다.</p>
<pre><code>$ brew services start mariadb</code></pre><h3 id="22-접속">2.2 접속</h3>
<pre><code>$ mariadb</code></pre><h3 id="23-데이터베이스-확인">2.3 데이터베이스 확인</h3>
<pre><code>MariaDB [(none)]&gt; show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.002 sec)</code></pre><p><a href="https://velog.io/@jthugg/install-mariadb-in-mac-os-arm64">https://velog.io/@jthugg/install-mariadb-in-mac-os-arm64</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Project] - 반려동물 종합 플랫폼]]></title>
            <link>https://velog.io/@jun_x/Project-%EB%B0%98%EB%A0%A4%EB%8F%99%EB%AC%BC-%EC%A2%85%ED%95%A9-%ED%94%8C%EB%9E%AB%ED%8F%BC</link>
            <guid>https://velog.io/@jun_x/Project-%EB%B0%98%EB%A0%A4%EB%8F%99%EB%AC%BC-%EC%A2%85%ED%95%A9-%ED%94%8C%EB%9E%AB%ED%8F%BC</guid>
            <pubDate>Thu, 17 Oct 2024 00:17:52 GMT</pubDate>
            <description><![CDATA[<p>담당 역할 : 형상관리</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[MyBatis]]></title>
            <link>https://velog.io/@jun_x/MyBatis</link>
            <guid>https://velog.io/@jun_x/MyBatis</guid>
            <pubDate>Mon, 30 Sep 2024 14:29:29 GMT</pubDate>
            <description><![CDATA[<h2 id="mybatis란">MyBatis란?</h2>
<p>Java의 RDB의</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[IntelliJ] HTML, JSP 태그의 Formating]]></title>
            <link>https://velog.io/@jun_x/IntelliJ-HTML-JSP-%ED%83%9C%EA%B7%B8%EC%9D%98-Formating</link>
            <guid>https://velog.io/@jun_x/IntelliJ-HTML-JSP-%ED%83%9C%EA%B7%B8%EC%9D%98-Formating</guid>
            <pubDate>Wed, 11 Sep 2024 04:36:24 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/jun_x/post/ebbe95ca-3a70-4132-863b-7d99f69e49de/image.png" alt=""></p>
<p>IntelliJ에서 HTML혹은 JSP를 사용할 때 head태그의 경우 들여쓰기가 되는 반면에
Body의 경우 들여쓰기가 기본적으로 안되는게 불편하여 찾다보니 <a href="https://stackoverflow.com/questions/34710762/intellij-jsp-formatting">Stackoverflow</a>에서 해결 방법을 찾았다.
JSP의 경우 HTML과 관련이 있기때문에 HTML과 관련된 Code Style을 수정해주면 된다.
<img src="https://velog.velcdn.com/images/jun_x/post/3dc1c9e9-b0ee-4b1b-99ca-0e546ad6db4d/image.png" alt="">
<img src="https://velog.velcdn.com/images/jun_x/post/b44ee463-3d3f-4775-8746-044f10917b5d/image.png" alt=""></p>
<ul>
<li>Editor - Code Style - HTML - Other로 들어간다.
<img src="https://velog.velcdn.com/images/jun_x/post/17307c20-43da-4fac-b9ec-9b644f6b9a8a/image.png" alt=""></li>
<li>Do not indent children of 의 설정에서 들여쓰기를 하고 싶은 태그를 지워주고 <code>Apply</code> - <code>OK</code>를 누르면 설정이 바뀐다.
<img src="https://velog.velcdn.com/images/jun_x/post/eee598e3-d9b3-4095-bad7-93a46fc02ada/image.png" alt=""></li>
</ul>
<p>자동 포맷팅 단축키를 누르면 정렬된다.</p>
<blockquote>
<ul>
<li>Windows 기준 : <code>Ctrl</code> + <code>Alt</code> + <code>L</code> </li>
</ul>
</blockquote>
<ul>
<li>MacOS 기준 : <code>Cmd</code> + <code>Option</code> + <code>L</code></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[IntelliJ] Dynamic Web Project 생성]]></title>
            <link>https://velog.io/@jun_x/IntelliJ-Dynamic-Web-Project-%EC%83%9D%EC%84%B1</link>
            <guid>https://velog.io/@jun_x/IntelliJ-Dynamic-Web-Project-%EC%83%9D%EC%84%B1</guid>
            <pubDate>Tue, 10 Sep 2024 15:47:07 GMT</pubDate>
            <description><![CDATA[<p>서블릿과 JSP 수업을 들으면서 이클립스의 Dynamic Web Project를 IntelliJ에서 만드는 방법을 찾아보다 버전차이가 있어 정리해보았다.</p>
<blockquote>
<p>환경
M1 MacBook Pro 14
OS : MacOS Sonoma 14.6.1
IDE : IntelliJ Ultimate IDEA 2024.1.4
JDK : <a href="mailto:openjdk@17.0.12">openjdk@17.0.12</a>
Server : apache-tomcat-10.1.28</p>
</blockquote>
<p>IntelliJ Ultimate에서는 아래의 플러그인들이 기본적으로 제공된다.</p>
<ul>
<li>Jakarta EE Platform</li>
<li>Jakarta EE : Application Servers</li>
<li>Jakarta EE : Web/Servlets</li>
</ul>
<hr>
<p><img src="https://velog.velcdn.com/images/jun_x/post/fe85c7d2-4800-40d1-bb40-7e20fa7450e7/image.png" alt=""></p>
<ul>
<li>New Project 선택</li>
<li>Generators에서 Jakarta EE 선택</li>
<li>프로젝트 명 작성</li>
<li>Template에서 Web application 선택</li>
<li>Application server 이미 등록됐다면 등록(없더라도 상관 X)</li>
<li>Group 작성 (보통 도메인을 반대로 작성 한다.)</li>
<li>JDK 선택
<img src="https://velog.velcdn.com/images/jun_x/post/a104c9e7-95de-453f-9ddc-f19af80258bd/image.png" alt=""></li>
<li>Dependencies리스트에서 Specifications 선택
<img src="https://velog.velcdn.com/images/jun_x/post/fa9ad673-1a62-41f5-b00f-8914c70b96bc/image.png" alt=""></li>
<li>Servlet 프레임워크 선택 후 Create
<img src="https://velog.velcdn.com/images/jun_x/post/3cd5bc7f-fc7e-4d31-b004-2d25f18619a9/image.png" alt="">
Dynamic Web Project가 생성 되었다. <h2 id="톰캣-서버-연결">톰캣 서버 연결</h2>
<img src="https://velog.velcdn.com/images/jun_x/post/0cfcb20c-2799-4f20-a176-d908c20c105d/image.png" alt=""></li>
<li>Settings</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jun_x/post/597d9702-1419-433e-8dd6-ae7688cf8124/image.png" alt=""></p>
<ul>
<li>Build, Execution, Deployment - Application Servers</li>
<li><code>+</code> - Tomcat Server</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jun_x/post/b3c45c37-1aac-4c30-bc8d-6a18ad53949a/image.png" alt=""></p>
<ul>
<li>Tomcat 폴더 선택 후 <code>OK</code></li>
<li><code>Apply</code> 후 <code>OK</code></li>
</ul>
<p><img src="https://velog.velcdn.com/images/jun_x/post/8bd2d046-6fd8-400f-b8f6-4d9d5bd34aa3/image.png" alt=""></p>
<ul>
<li>Run - Edit Configurations
<img src="https://velog.velcdn.com/images/jun_x/post/34783d79-fc17-4c92-a636-090ed02a0fc0/image.png" alt="">
로컬에서 진행한다면 Local, 원격에 톰캣을 설치했다면 Remote로 추가한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jun_x/post/08d17d61-7bef-4861-b5b7-db0f3f140c23/image.png" alt=""></p>
<ul>
<li>port 선택
<img src="https://velog.velcdn.com/images/jun_x/post/68877ec4-443d-4cd9-82c3-7fba6b889126/image.png" alt=""></li>
<li>Deployment 설정</li>
<li><code>+</code> 선택 후 <code>Artifact</code> 선택
<img src="https://velog.velcdn.com/images/jun_x/post/c83bb011-8a94-4915-affe-a775903889e5/image.png" alt=""></li>
<li><code>war exploded</code> 선택
<img src="https://velog.velcdn.com/images/jun_x/post/371ddec6-38af-45a6-b6ef-7a74befa844d/image.png" alt=""></li>
<li>Application context 지정<blockquote>
<p>해당 프로젝트의 진입점</p>
</blockquote>
</li>
<li><code>Apply</code> 선택 후 <code>OK</code>
<img src="https://velog.velcdn.com/images/jun_x/post/543ab3ec-0a04-4b6f-9d3d-a836358c5b0c/image.png" alt="">
정상적으로 동작합니다.</li>
</ul>
<h2 id="servlet-파일-생성-메뉴-추가">+Servlet 파일 생성 메뉴 추가</h2>
<p><img src="https://velog.velcdn.com/images/jun_x/post/6fe659af-6745-4d4d-9c85-63bf14363cdc/image.png" alt="">
New를 클릭했을때 Servlet을 생성하는 메뉴가 없을 경우 아래 링크 참고
<a href="https://admd13.tistory.com/43">Create New Servlet 메뉴 생성 방법</a></p>
<h2 id="-eclipse에서-만든-dynamic-web-project를-intellij에-import하는-방법">+ eclipse에서 만든 Dynamic Web Project를 IntelliJ에 import하는 방법</h2>
<p>이클립스에서 이미 만든 Dynamic Web Project를 IntelliJ에서 여는 방법은 아래 링크 참고
<a href="https://jong-bae.tistory.com/53">eclipse Dynamic Web Project 불러오는 방법</a></p>
<h2 id="참고">참고</h2>
<ul>
<li><a href="https://velog.io/@nasubeeni/IntelliJ-%EC%9D%B8%ED%85%94%EB%A6%AC%EC%A0%9C%EC%9D%B4%EC%97%90%EC%84%9C-Servlet-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0">https://velog.io/@nasubeeni/IntelliJ-%EC%9D%B8%ED%85%94%EB%A6%AC%EC%A0%9C%EC%9D%B4%EC%97%90%EC%84%9C-Servlet-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0</a></li>
<li><a href="https://admd13.tistory.com/43">https://admd13.tistory.com/43</a></li>
<li><a href="https://jong-bae.tistory.com/53">https://jong-bae.tistory.com/53</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[jQuery] jQuery 라이브러리 연결 방법]]></title>
            <link>https://velog.io/@jun_x/jQuery-jQuery-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EC%97%B0%EA%B2%B0-%EB%B0%A9%EB%B2%95</link>
            <guid>https://velog.io/@jun_x/jQuery-jQuery-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EC%97%B0%EA%B2%B0-%EB%B0%A9%EB%B2%95</guid>
            <pubDate>Sun, 08 Sep 2024 13:47:30 GMT</pubDate>
            <description><![CDATA[<p>기존에 자바스크립트 언어만으로 구현하기에는 복잡했던 구문을 효율적이고 직관적으로 간소화하기 위해 만들어진 JavaScript기반의 라이브러리로
React와는 다르게 DOM을 직접적으로 건드는 특징을 가지고 있다.</p>
<h2 id="jquery-라이브러리-연결-방법">jQuery 라이브러리 연결 방법</h2>
<p>HTML 코드에 jQuery를 연결하는 방법에는 2가지가 있다</p>
<h4 id="1jquery라이브러리-직접-다운로드-받은-후-경로-지정오프라인-방식">1.jQuery라이브러리 직접 다운로드 받은 후 경로 지정(오프라인 방식)</h4>
<p>서비스를 제공하고 있다면 대부분 이 방식을 체택하여 사용한다. (jQuery 라이브러리를 제공하는 서버오류로인한 서비스 중단을 방지하기 위함)</p>
<h4 id="2-cdn방식온라인">2. CDN방식(온라인)</h4>
<p>소형 규모의 개발 프로젝트의 경우 대부분 이 방식을 사용한다.
HTML head태그내에 script 태그로 연결해준다.</p>
<pre><code class="language-HTML">&lt;script src=&quot;https://code.jquery.com/jquery-3.7.1.js&quot; integrity=&quot;sha256-eKhayi8LEQwp4NKxN+CfCh+3qOVUtJn3QNZ0TciWLP4=&quot; crossorigin=&quot;anonymous&quot;&gt;&lt;/script&gt;</code></pre>
<p><img src="https://velog.velcdn.com/images/jun_x/post/183c51e6-27aa-44a0-9678-548bd7da9734/image.png" alt="">
slim 버전의 경우 AJAX를 지원하지 않는다.</p>
<h2 id="jquery-구문-작성">jQuery 구문 작성</h2>
<p>jQuery구문으로 DOM요소를 다루는 구문을 기본적으로 작성할 것이기 때문에</p>
<p>문서상에 요소들이 다 만들어지고나서 실행되어야 한다.(기본 레이아웃을 짜고 해야한다.)</p>
<p>jQuery CDN방식을 사용하면 코드가 그려지는것 보단 늦을 수 있기 때문에 주의해야한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[WEB] DOM이란?]]></title>
            <link>https://velog.io/@jun_x/WEB-DOM%EC%9D%B4%EB%9E%80</link>
            <guid>https://velog.io/@jun_x/WEB-DOM%EC%9D%B4%EB%9E%80</guid>
            <pubDate>Thu, 05 Sep 2024 00:01:17 GMT</pubDate>
            <description><![CDATA[<p>웹에서 자바스크립트를 사용하는 이유는 어떤 조건에 맞거나 사용자의 동작이 있을 때 웹 문서 전체 또는 일부분이 동적으로 반응하게 하는데 있다. 이렇게 반응하게 하기 위해서는 웹 문서의 모든 요소를 따로 제어할 수 있어야하는데 이러한 모든 정보 요소에 접근하고 제어할 수 있도록 객체를 사용해 웹 문서를 체계적으로 정리하는 방법이 DOM이다. 
HTML로 작성한 웹 문서의 DOM을 HTML DOM이라고 하며 보통 DOM이라고 하면 HTML DOM이다. 
DOM은 웹 문서를 하나의 객체로 정의하고 웹 문서를 이루는 텍스트나 이미지, 표 등의 모든 요소도 각각 객체로 정의 한다. </p>
<h3 id="dom-트리">DOM 트리</h3>
<p>DOM은 웹 문서의 요소를 부모 요소와 자식 요소로 구분한다. 
<img src="https://velog.velcdn.com/images/jun_x/post/b5177ccf-c7fe-4a43-9226-4feef9ed4968/image.png" alt="">
html 요소는 head, body의 부모 요소이고, body는 h1, img의 부모 요소가 된다. 각각의 태그의 속성또한 자식으로 밑에 붙게 된다. </p>
<h4 id="dom을-구성하는-기본원칙">DOM을 구성하는 기본원칙</h4>
<ol>
<li>모든 HTML 태그는 요소(Element)노드</li>
<li>HTML 태그에서 사용하는 텍스트 내용은 자식 노드인 텍스트(text)노드</li>
<li>HTML 태그에 있는 속성은 자식 노드인 속성(attribute)노드</li>
<li>주석은 주석(comment)노드
<img src="https://velog.velcdn.com/images/jun_x/post/575952ab-35a0-4cc0-846c-8a8fad2a9744/image.png" alt=""></li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Network] - HTTP Method]]></title>
            <link>https://velog.io/@jun_x/NetworkHTTP-vs-HTTPS</link>
            <guid>https://velog.io/@jun_x/NetworkHTTP-vs-HTTPS</guid>
            <pubDate>Mon, 26 Aug 2024 15:31:29 GMT</pubDate>
            <description><![CDATA[<h2> HTTP(HyperText Transfer Protocol) </h2>
텍스트 기반의 통신 규약으로 인터넷에서 클라이언트와 서버 간의 통신을 가능하게 하는 통신 규약이다. 
<li style='list-style-type: circle;'>
  HTML, TEXT </li>
<li style='list-style-type: circle;'>
  IMAGE, 음성, 영상, 파일 </li>
  <li style='list-style-type: circle;'>
JSON, XML(API)  등 </li>
거의 모든 형태의 데이터 전송이 가능하다.


<h2 id="http의-통신-구조">HTTP의 통신 구조</h2>
<hr>
<p>HTTP 통신은 클라이언트(Front-End)와 서버(Back-End)로 나뉘어진 구조로 되어 있다. 
클라이언트가 요청(Request)하면 서버가 응답(Response)하는데 이는 각자의 역할에 집중하여 서버에서는 복잡한 비즈니스로직이나 데이터를 다루고 클라이언트는 UI를 그리는데만 집중할 수 있는 구조이기 때문이다. </p>
<h2 id="http-상태-코드">HTTP 상태 코드</h2>
<p>상태 코드는 클라이언트의 요청에 대한 처리 상태를 응답에서 알려주는 기능이다. </p>
<ul>
<li>1xx (정보) : 요청을 받았으며 프로세스를 계속 진행중이라는 의미</li>
<li>2xx (성공) : 요청을 성공적으로 받았고, 받아들여졌다는 의미</li>
<li>3xx (리다이렉션) : 이 요청을 완료하기 위해서는 리다이렉션이 필요하다는 의미</li>
<li>4xx (클라이언트 오류) : 클라이언트의 요청이 올바르지 않다는 의미</li>
<li>5xx (서버 오류) : 서버가 응답할 수 없다는 의미이며, 요청이 올바른지의 여부는 알 수 없음</li>
</ul>
<h2 id="http-메시지">HTTP 메시지</h2>
<p><img src="https://velog.velcdn.com/images/jun_x/post/91ffff00-dc80-43dc-8174-302a51e8574a/image.png" alt=""></p>
<ul>
<li>시작 라인(Start Line)<ul>
<li>Method : GET / POST / PUT / DELTE 등 (HTTP 메서드)</li>
<li>PATH : 요청 대상 경로</li>
<li>Protocol : 사용된 HTTP 버전</li>
</ul>
</li>
<li>헤더(Header) : HTTP 전송에 필요한 부가 정보(메시지 크기, 압축 여부, 인증, 브라우저 정보, 서버 정보, 캐시 등)</li>
<li>공백 라인(Empty Line) : 헤더와 바디를 구분하기 위한 라인 </li>
<li>바디(Message Body) : 실제 전송할 데이터(HTML 문서, 이미지, 영상, JSON 등)
<img src="https://velog.velcdn.com/images/jun_x/post/611647c6-5417-45cf-9341-1836a3cd544c/image.png" alt=""></li>
<li>시작 라인(Start Line)<ul>
<li>Protocol : 사용된 HTTP 버전</li>
<li>Status Code : HTTP 상태 코드</li>
<li>Status Message : Status Code에 대한 메시지</li>
</ul>
</li>
<li>헤더(Header) : HTTP 전송에 필요한 부가 정보(메시지 크기, 압축 여부, 인증, 브라우저 정보, 서버 정보, 캐시 등)</li>
<li>공백 라인(Empty Line) : 헤더와 바디를 구분하기 위한 라인 </li>
<li>바디(Message Body) : 전송 받은 데이터(HTML 문서, 이미지, 영상, JSON 등)<h2 id="http-메서드">HTTP 메서드</h2>
클라이언트와 서버 사이에서 이루어지는 요청(Request)와 응답(Response) 데이터를 전송하는 방식이다.<h3 id="주요-메서드">주요 메서드</h3>
</li>
<li>GET : 리소스 조회</li>
<li>POST : 요청 데이터 처리, 데이터 등록등에 사용</li>
<li>PUT : 리소스 대체, 해당 리소스 없을 경우 생성</li>
<li>PATCH : 리소스를 일부만 변경</li>
<li>DELETE : 리소스 삭제</li>
</ul>
<p><b style='color: red'><u>GET방식과 POST 방식</u></b>
GET 방식은 요청하는 데이터가 <code>HTTP Request Message</code>의 Header 부분에 담겨 전송되기 때문에 URL의 길이제한이 있어 데이터의 크기가 제한적이고, URL에 노출이 되기 때문에 보안이 필요한 데이터에 대해서는 적절하지 않다.</p>
<blockquote>
<p>🚨 Header 부분에 담길 경우 URL상에 <code>?</code> 뒤에 데이터가 붙어 Request가 보내지기 때문에 민감한 정보를 보내기에 적절하지 않다.</p>
</blockquote>
<p>POST 방식은 HTTP Request Message의 Body부분에 데이터가 담겨서 전송된다. 때문에 데이터 크기가 GET방식보다 크고 보안적인 측면에서 GET방식에 비해 낫다. 하지만 암호화를 하지 않는 이상 거기서 거기다.</p>
<h3 id="기타-메서드">기타 메서드</h3>
<ul>
<li>HEAD : GET과 동일하지만 메시지 부분을 제외하고 상태와 헤더만 반환</li>
<li>OPTIONS : 대상 리소스에 대한 통신 가능 옵션 설명</li>
<li>CONNECT : 대상 자원으로 식별되는 서버에 대한 터널을 설정</li>
<li>TRACE : 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트 수행</li>
</ul>
<h2 id="참고">참고</h2>
<ul>
<li><a href="https://inpa.tistory.com/entry/HTTP-%F0%9F%8C%90-%EB%B0%B1%EC%97%94%EB%93%9C-%EB%A1%9C%EB%93%9C%EB%A7%B5-HTTP%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C%EC%9A%94">Inpa DEV</a></li>
<li><a href="https://www.w3schools.com/tags/ref_httpmethods.asp">w3schools</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[MacOS] M1 Mac Oracle 설치]]></title>
            <link>https://velog.io/@jun_x/Mac-OS-M1-Mac-Oracle-%EC%84%A4%EC%B9%98</link>
            <guid>https://velog.io/@jun_x/Mac-OS-M1-Mac-Oracle-%EC%84%A4%EC%B9%98</guid>
            <pubDate>Mon, 19 Aug 2024 13:10:46 GMT</pubDate>
            <description><![CDATA[<p>Apple Silicon인 M1칩 이상부터는 아키텍처의 변경으로 인해 oracle DB를 띄울 수 없기 때문에 Docker를 이용하여 설치할 수 있다.</p>
<blockquote>
<p>✅ 개발 환경</p>
</blockquote>
<ul>
<li>MacOS Sonoma 14.6.1</li>
<li>Docker 27.0.3</li>
</ul>
<h2 id="docker-설치">Docker 설치</h2>
<h3 id="1-공식-홈페이지에서-설치">1) 공식 홈페이지에서 설치</h3>
<p><a href="https://www.docker.com/products/docker-desktop/">Docker Desktop</a>
<img src="https://velog.velcdn.com/images/jun_x/post/a114fb48-e257-4209-b46d-3f423c008b1c/image.png" alt="">
해당 링크에 접속해 Docker desktop을 설치한다.</p>
<h3 id="2-brew를-이용한-설치">2) brew를 이용한 설치</h3>
<blockquote>
<p>일반적으로 사용하는 GUI기반의 어플리케이션을 설치하기 위해서 Cask도 설치 해줘야 한다.
<code>$ brew install cask</code></p>
</blockquote>
<p><code>$ brew install --cask docker</code></p>
<h2 id="colima-설치">colima 설치</h2>
<p>colima는 docker desktop의 유료화에 따른 대체재로 최소한의 설정으로 이용할 수 있는 온픈 소스 컨테이너 런타임으로 x86/64환경으로 oci-oracle-xe 이미지를 띄울 수 있게 해준다.
<code>$ brew install colima</code></p>
<h2 id="colima-실행">colima 실행</h2>
<p><code>$ colima start --memory 4 --arch x86_64</code>
<img src="https://velog.velcdn.com/images/jun_x/post/2c2c2c33-12d0-4498-9ec7-1b1d7c16ac28/image.png" alt="">
colima 실행은 시간이 다소 소요되니 <code>done</code>이 뜰 때까지 약간은 기다려야 한다.</p>
<h2 id="oracle-컨테이너-실행">Oracle 컨테이너 실행</h2>
<p><code>$ docker run -e ORACLE_PASSWORD=[DBA의 패스워드] -p 1521:1521 -d gvenzl/oracle-xe --name [컨테이너 이름]</code></p>
<blockquote>
<ul>
<li>-e옵션 : 컨테이너 내에서 사용할 환경 변수 설정</li>
</ul>
</blockquote>
<ul>
<li>-p옵션 : 호스트와 컨테이너의 포트포워딩(호스트 포트:컨테이너 포트)</li>
<li>-d옵션 : Detached 모드로 보통 데몬 모드라고 부르며 백그라운드로 실행</li>
<li>--name옵션 : 컨테이너의 이름을 지정하는 옵션</li>
</ul>
<h2 id="컨테이너-실행-확인">컨테이너 실행 확인</h2>
<p><code>$ docker ps</code>
<img src="https://velog.velcdn.com/images/jun_x/post/ebfce2ca-89a9-4bb2-88cb-e7f860445e13/image.png" alt="">
실행중인 컨테이너를 확인합니다.</p>
<blockquote>
<p>💡 멈춰있는 컨테이너를 확인하기 위해서는 <code>$ docker ps -a</code>를 사용</p>
</blockquote>
<h2 id="로그-확인">로그 확인</h2>
<p><code>$ docker logs -f [컨테이너 이름]</code>
<img src="https://velog.velcdn.com/images/jun_x/post/cdb9dd18-9d61-4380-abe7-d6208759819e/image.png" alt=""></p>
<h2 id="sqlplus-터미널-연결-테스트">sqlplus 터미널 연결 테스트</h2>
<p><code>$ docker exec -it [컨테이너 이름] sqlplus</code>
컨테이너에 진입</p>
<ul>
<li>Enter user-name : system</li>
<li>Enter password : 위에서 설정한 패스워드
<img src="https://velog.velcdn.com/images/jun_x/post/8df361da-dff5-4c07-83f3-d6bfbae7f55a/image.png" alt="">
SQL &gt; 이 뜨면 설치가 완료.
컨테이너에서 빠져 나오고자 한다면 <code>exit</code>를 입력하면 된다.<h2 id="dbeaver-연동">DBeaver 연동</h2>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jun_x/post/6e101d83-f148-4967-9f63-dd5f3978b945/image.png" alt="">
좌측 상단의 [+] 버튼을 누르면 연결할 DB 종류를 선택하게 된다. Oracle을 선택하고 [다음] 버튼을 누른다.
<img src="https://velog.velcdn.com/images/jun_x/post/e2785d29-0179-4bfa-ac62-49156e084089/image.png" alt="">
DataBase에 <code>ORCL</code> 이라고 되어 있지만 설치한 버전은 <code>xe</code>이기 때문에 해당 부분을 수정해준 뒤 password를 입력하고 테스트 후 연결하면 된다.</p>
<h1 id="oracle-db-종료">Oracle DB 종료</h1>
<p>colima는 백그라운드에서 계속 실행이 되기 때문에 리소스를 많이 잡아 먹는다. 그렇기에 사용이 끝났다면 종료해줘야 한다.</p>
<h3 id="1-docker-컨테이너-종료">1. docker 컨테이너 종료</h3>
<p><code>$ docker stop [컨테이너 이름]</code>
다시 시작할 경우 
<code>$ docker start [컨테이너 이름]</code>을 입력하면 된다. 
단, colima를 우선 실행시켜줘야한다.</p>
<h3 id="2-colima-종료">2. colima 종료</h3>
<p><code>$ colima stop</code></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[MacOS] DBeaver 설치]]></title>
            <link>https://velog.io/@jun_x/MacOS-DBeaver-%EC%84%A4%EC%B9%98</link>
            <guid>https://velog.io/@jun_x/MacOS-DBeaver-%EC%84%A4%EC%B9%98</guid>
            <pubDate>Sun, 18 Aug 2024 11:48:36 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/jun_x/post/a74e1d89-52ec-441b-8747-66fab4405d59/image.png" alt=""></p>
<h2 id="dbeaver란">DBeaver란?</h2>
<p>오라클의 SQL Developer와 같이 DB관리 툴로 DB를 시각적으로 관리할 수 있는 편리한 도구이다.
JDBC 기반이기에 어지간한 주요 DB는 다 지원한다.
DBeaver-community의 경우 무료이므로 작은 프로젝트에 사용할 때 적합하다.</p>
<h2 id="dbeaver-설치">DBeaver 설치</h2>
<p>우선 MacOS에서 설치할 경우 brew를 이용한 방법을 이용한다.
<code>brew update</code></p>
<p>를 통해 brew를 최신 상태로 만든다.
<code>brew search DBeaver</code> 로 검색하면 
아래와 같이 dbeaver-community 버전이 뜬다.
<img src="https://velog.velcdn.com/images/jun_x/post/58e3c49e-4383-4990-bdab-af0ed954136f/image.png" alt=""></p>
<p><code>brew install dbeaver-community</code>
명령을 통해 설치한다.
<img src="https://velog.velcdn.com/images/jun_x/post/a40a680e-19eb-4da8-815c-bf0c5bbc5a45/image.png" alt="">
dbeaver-community was successfully installed! 라는 문구가 떴다면 정상적으로 설치된 것이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] 기초 - 다형성(Polymorphism)]]></title>
            <link>https://velog.io/@jun_x/Java-%EA%B8%B0%EC%B4%88-%EB%8B%A4%ED%98%95%EC%84%B1Polymorphism</link>
            <guid>https://velog.io/@jun_x/Java-%EA%B8%B0%EC%B4%88-%EB%8B%A4%ED%98%95%EC%84%B1Polymorphism</guid>
            <pubDate>Wed, 31 Jul 2024 11:46:26 GMT</pubDate>
            <description><![CDATA[<h2 id="다형성polymorphism이란">다형성(Polymorphism)이란?</h2>
<p>OOP의 4대 특징 중 하나로 <code>여러 개의 형태를 가질 수 있는 능력</code> 의미로 하나의 행동으로 여러가지 일을 수행한다는 개념이다.
자바에서 다형성이란 상속 관계에 있을 때 발현 되는 것으로 상위 클래스 타입의 레퍼런스 변수를 이용해 상속 받은 하위 클래스의 인스턴스를 참조할 수 있도록 허용하는 것이다.
다형성의 장점</p>
<ul>
<li>유지보수 용이 : 여러 객체들을 하나의 타입의 레퍼런스를 이용해 관리할 수 있다.</li>
<li>재사용성 증대 : 객체들의 재사용이</li>
</ul>
<h2 id="레퍼런스-변수의-형변환">레퍼런스 변수의 형변환</h2>
<p>기본형 변수와 같이 레퍼런스 변수또한 형변환이 가능하다. 
<code>단, 서로 상속관계에 있는 클래스사이에서만 가능하기 때문에 조상타입의 레퍼런스 변수를 자손타입의 레퍼런스 변수로의 형변환만 가능하다.</code></p>
<h2 id="업-캐스팅up-casting">업-캐스팅(Up-Casting)</h2>
<p>조상 타입의 레퍼런스로 후손의 객체를 참조할 수 있게 형 변환하는 것으로
자바에서 대입 연산자의 특성으로 인해 피연산자들은 무조건 자료형이 같아야 한다. 이는 객체를 생성할 때도 대입 연산자를 사용하기 때문에 동일한 자료형으로 변환해줘야하는데 기본형 변수와 같이 작은 자료형에서 큰 자료형의 형변환은 생략이 가능하다.</p>
<pre><code class="language-java">class TV {
    public void turnOn() {}
    public void turnOff() {}
}

class SamsungTV extends TV {
    @Override
    public void turnOn() {
        super.turnOn();
    }

    @Override
    public void turnOff() {
        super.turnOff();
    }
    public void hiBixby(){}
}</code></pre>
<p>부모 클래스인 TV 클래스와 자식 클래스인 SamsungTV가 있다.</p>
<pre><code class="language-java">TV tv1 = new SamsungTV();</code></pre>
<p>부모 타입의 레퍼런스 변수에 자식 인스턴스를 담을 수 있다.</p>
<h2 id="다운-캐스팅down-casting">다운-캐스팅(Down-Casting)</h2>
<p>조상타입의 레퍼런스 변수를 자손타입의 레퍼런스 변수로 변환하는 것으로
업 캐스팅한 레퍼런스 변수들만 다운-캐스팅이 가능하다.
<code>즉, 상속 관계에 있어야만 캐스팅이 가능하다.</code></p>
<pre><code class="language-java">((SamsungTV)tv1).hiBixby()</code></pre>
<p>부모 클래스 타입의 tv1이 자식 클래스의 메서드를 사용</p>
<h2 id="instanceof-연산자">instanceof 연산자</h2>
<p>현재 레퍼런스 변수가 어떤 클래스 타입의 객체 주소를 참조하고 있는지 확인할 때 사용하는 연산자로 다운-캐스팅이 가능한지 확인하는 것과 같다.
최상위 조상 클래스 타입에 상속된 다양한 인스턴스 객체를 담았을 경우 각 인스턴스들의 메서드를 사용할 때 하나하나 명시적 다운-캐스팅이 불가능 하기에 instanceof 연산자를 사용한다. </p>
<p>```java
if(tv1 instanceof SamsungTV){
    ((SamsungTV)tv1).hiBixby();
}</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] 기초 - 상속(inheritance)]]></title>
            <link>https://velog.io/@jun_x/Java-%EA%B8%B0%EC%B4%88-%EC%83%81%EC%86%8Dinheritance</link>
            <guid>https://velog.io/@jun_x/Java-%EA%B8%B0%EC%B4%88-%EC%83%81%EC%86%8Dinheritance</guid>
            <pubDate>Sun, 21 Jul 2024 15:41:57 GMT</pubDate>
            <description><![CDATA[<h2 id="상속inheritance란">상속(inheritance)란?</h2>
<p>기존의 클래스가 가지고 있는 멤버(필드, 메서드)들을 새로 작성할 클래스에서 직접 만들지 않고 사용하는 것이다.</p>
<h3 id="장점">장점</h3>
<ul>
<li>보다 적은 양의 코드로 새로운 클래스를 작성 가능</li>
<li>코드를 공통적으로 관리하기에 코드의 추가 및 변경 용이</li>
<li>코드의 중복 제거를 통해 프로그램의 생산성과 유지보수에 증가<h3 id="상속-구현-방법">상속 구현 방법</h3>
<pre><code class="language-java">public class Child extends Parent {
//   필드
//   생성자
//   메서드
}</code></pre>
클래스 간의 상속시 <code>extends</code> 키워드를 사용한다.
Child 클래스는 Parent를 상속받은 자식 클래스이고 이 두 클래스는 서로 상속 관계에 있다고 표현한다. 상속해주는 클래스를 <code>조상 클래스</code>라고 하며 상속 받는 클래스를 <code>자손 클래스</code>라고 한다.<blockquote>
<p>다음과 같은 용어로도 불린다.
조상 클래스 : 부모(parent)클래스, 상위(super)클래스, 기반(base)클래스
자손 클래스 : 자식(child)클래스, 하위(sub)클래스, 파생된(derived)클래스</p>
</blockquote>
</li>
</ul>
<h3 id="특징">특징</h3>
<blockquote>
<ol>
<li>모든 클래스는 Object클래스의 후손
Object 클래스가 제공하는 메서드를 오버라이딩하여 상위 메서드를 재구현 할 수 있다.</li>
<li>부모 클래스의 생성자, 초기화 블록은 상속 되지 않는다.
자식 클래스 생성 시, 부모 클래스 생성자가 먼저 호출되고, 그 이후에 자식 클래스 생성자가 호출된다. 
자식 클래스 생성자에서 부모 클래스의 생성자 호출시 <code>super()</code> 를 통해 호출한다.</li>
<li>부모의 private 멤버의 경우 상속은 되지만 직접적으로 접근할 수 없다.
<code>super()</code> 키워드 혹은 부모 클래스의 <code>getter/setter</code> 메서드를 이용해 접근해야 한다.</li>
</ol>
</blockquote>
<h3 id="상속된-클래스의-인스턴스-생성">상속된 클래스의 인스턴스 생성</h3>
<pre><code class="language-java">Child ch = new Child();</code></pre>
<img src="https://velog.velcdn.com/images/jun_x/post/c33b1d69-073a-40ab-bccd-11c7c0ddbfb7/image.png">
ch 는 레퍼런스 변수로 heap 영역의 Child 클래스로 할당 받은 메모리주소를 가르킨다. 자식 클래스의 인스턴스를 생성하면, 자손의 멤버와 조상의 멤버가 모두 합쳐진 하나의 인스턴스가 생성된다. 그렇기에 자식 클래스의 인스턴스가 부모 클래스의 멤버들을 사용할 수 있게 되는 것이다.

<h3 id="super">super()</h3>
<p>this()메서드와 마찬가지로 super()역시 생성자로 super()의 경우 <U><strong>부모 클래스의 생성자를 호출</strong></U>하는데 사용한다. 자식 클래스의 멤버가 부모 클래스의 멤버를 사용하게 된다면 부모의 멤버들을 초기화 하기 위해 사용한다.
<code>이때 자식 클래스 생성자의 첫 줄에 super()를 사용해야한다.</code></p>
<h3 id="super-1">super.</h3>
<p>부모 클래스의 상속받은 멤버를 참조하는데 사용되는 참조 변수로 멤버변수와 지역변수의 이름이 같은 때 this.를 붙여서 구별하듯이 부모 클래스로부터 상속받은 멤버와 자신의 멤버와 이름이 같을 때 super.을 붙여 구분할 수 있다.
부모 클래스로부터 상속받은 멤버도 자식 클래스 자신의 멤버이므로 super.대신 this.도 사용할 수 있지만, 부모 클래스의 멤버와 자식 클랫의 멤버가 중복 정의되어 서로 구별하는 경우에만 super.를 사용하는 것이 좋다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] 기초 - 클래스와 메서드]]></title>
            <link>https://velog.io/@jun_x/Java-%EA%B8%B0%EC%B4%88-%ED%81%B4%EB%9E%98%EC%8A%A4%EC%99%80-%EB%A9%94%EC%84%9C%EB%93%9C</link>
            <guid>https://velog.io/@jun_x/Java-%EA%B8%B0%EC%B4%88-%ED%81%B4%EB%9E%98%EC%8A%A4%EC%99%80-%EB%A9%94%EC%84%9C%EB%93%9C</guid>
            <pubDate>Sun, 14 Jul 2024 12:16:53 GMT</pubDate>
            <description><![CDATA[<h2 id="📌-객체object란">📌 객체(Object)란?</h2>
<p>넓은 의미로의 객체는 현실시계에서 독립적(존재하는 목적이 있고 가치가 있는 것)으로 존재하는 모든 것을 의미한다. 
프로그래밍에서의 객체는 데이터(속성)과 기능을 가지는 프로그램 단위를 말한다.</p>
<h2 id="📌-메서드method란">📌 메서드(Method)란?</h2>
<p>클래스 내부에 자신의 멤버 변수를 활용해 객체의 기능을 수행하는 멤버 함수로 자바에서는 메서드(Method)라 부른다. 다른 언어의 함수와 비슷하지만 자바에서는 클래스 안에 선언된 함수다. 자바는 기본적으로 파일을 만들 때 클래스 단위로 만들어지기 때문에 모든 함수는 메서드라 봐도 무방하다.
특징</p>
<ul>
<li>유지보수성 증대(재사용 가능)</li>
<li>중첩 메서드 구현은 불가능하다.(메서드 안에 메서드를 선언하는 것)<blockquote>
<p>[표현법]
(접근 제어자) (반환 자료형) (메서드 명) (매개변수){
  메서드 코드
}</p>
</blockquote>
<h3 id="메서드-오버로딩method-overloading">메서드 오버로딩(Method Overloading)</h3>
하나의 클래스 내에 동일한 이름을 가진 메서드가 있더라도 <code>매개변수의 개수 또는 타입</code>이 다르다면 동일한 이름을 사용하는 메서드를 정의하고 사용할 수 있다.<h3 id="메서드-오버라이딩method-overriding">메서드 오버라이딩(Method Overriding)</h3>
부모 클래스로부터 상속받은 메서드를 자식 클래스에서 재정의 하는 것으로 상속 받은 메서드를 그대로 사용할 수 도 있지만 자식 클래스의 상황에 맞게 변경해야하는 경우 사용한다.
<code>단, 자식 객체를 통해 오버라이딩된 메서드를 실행할 경우 자식 메서드가 우선권을 가지고 있다.</code><blockquote>
<p>메서드 오버라이딩 조건
부모 클래스의 메서드를 재정의하는 것이므로, 자식 클래스에서는 오버라이딩하고자 하는 <code>메서드의 이름, 매개변수, 리턴 값</code>이 <span style="color:red">모두 같아야 한다.</span></p>
</blockquote>
</li>
</ul>
<h3 id="this-키워드">this 키워드</h3>
<p>this는 인스턴스의 자기자신을 의미한다.
인스턴스화 되었을 때 자기자신의 메모리 주소를 담고있는 키워드로 3가지 기능이 있다.</p>
<ul>
<li>자기 자신의 메모리를 가르킨다.</li>
<li>생성자에서 다른 생성자를 호출할 경우 사용된다.</li>
<li>인스턴스 자신의 주소를 반활할 때 사용한다.<h2 id="📌-클래스class란">📌 클래스(Class)란?</h2>
데이터(필드)와 기능(메서드)를 가진 객체(Object)를 만드는 틀(설계도)이다.
클래스의 가장 중요한 기능은 객체를 만드는 것이다.
클래스의 인스턴스를 생성할 때는 new 키워드를 사용하여 생성하고 생성자(Constructor)를 호출하게 된다. </li>
</ul>
<blockquote>
<p>[표현법]
(접근 제어자) (반환 자료형) class (클래스명) (매개변수) {
    필드 영역
    생성자 영역
    메서드 영역
}</p>
</blockquote>
<h3 id="생성자constructor">생성자(Constructor)</h3>
<p>new 키워드를 통해 인스턴스 생성시 반드시 호출되고 제일 먼저 실행되는 일종의 메서드로 인스턴스 변수를 초기화 시키는 역할만 한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] 기초 - 접근 제어자(Access Modifier)]]></title>
            <link>https://velog.io/@jun_x/Java-%EA%B8%B0%EC%B4%88-%EC%A0%91%EA%B7%BC-%EC%A0%9C%EC%96%B4%EC%9E%90Access-Modifier</link>
            <guid>https://velog.io/@jun_x/Java-%EA%B8%B0%EC%B4%88-%EC%A0%91%EA%B7%BC-%EC%A0%9C%EC%96%B4%EC%9E%90Access-Modifier</guid>
            <pubDate>Wed, 10 Jul 2024 07:23:29 GMT</pubDate>
            <description><![CDATA[<h2 id="접근-제어자란">접근 제어자란?</h2>
<p>자바에서 접근 제어자는 클래스, 메서드, 인스턴스 및 클래스 변수를 선언할 때 사용되는 것으로 외부에서 접근하지 못하도록 제한하는 역할을 한다. 이를 통해 정보 은닉을 실현할 수 있게 만들어주는 것으로 <code>public, protected, 생략(default), private</code> 총 4가지가 있다.
접근 제어자는 아래와 같이 public이 가장 많은 접근을 허용하고 private로 갈 수록 점진적으로 접근을 제한한다.
<strong>public &gt; protected &gt; default &gt; private</strong></p>
<h2 id="public">public</h2>
<p>public 접근 제어자가 붙은 변수나 메서드는 <U><strong>어떤 클래스에서도 접근이 가능</strong></U>하다.</p>
<h2 id="protected">protected</h2>
<p>protected 접근 제어자가 붙은 변수나 메서드는 <U><strong>동일 패키지의 클래스 또는 해당 클래스를 상속받는 클래스에서만 접근이 가능</strong></U>하다.</p>
<h2 id="생략default">(생략)default</h2>
<p>default는 <code>package-private</code>이라고도 불리며, 접근 제어자를 생략하게 되면 자동으로 default가 되고 생략한 변수나 메서드는 <U><strong>동일 패키지 안에서만 접근이 가능</strong></U>하다.</p>
<h2 id="private">private</h2>
<p>private 접근 제어자가 붙은 변수나 메서드는 <U><strong>해당 클래스 안에서만 접근이 가능</strong></U>하다.</p>
<blockquote>
<p>💡 
<strong>클래스의 접근 제어자 : public, default</strong>
<strong>메서드의 접근 제어자 : public, protected, default, private 모두 사용이 가능하다.</strong></p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] 기초 - 기본형 변수와 참조형 변수 (Reference Variable)]]></title>
            <link>https://velog.io/@jun_x/Java-%EA%B8%B0%EC%B4%88-%EA%B8%B0%EB%B3%B8%ED%98%95-%EB%B3%80%EC%88%98%EC%99%80-%EC%B0%B8%EC%A1%B0%ED%98%95-%EB%B3%80%EC%88%98-Reference-Variable</link>
            <guid>https://velog.io/@jun_x/Java-%EA%B8%B0%EC%B4%88-%EA%B8%B0%EB%B3%B8%ED%98%95-%EB%B3%80%EC%88%98%EC%99%80-%EC%B0%B8%EC%A1%B0%ED%98%95-%EB%B3%80%EC%88%98-Reference-Variable</guid>
            <pubDate>Mon, 08 Jul 2024 01:50:51 GMT</pubDate>
            <description><![CDATA[<h2 id="변수란">변수란?</h2>
<p>데이터(값)을 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간을 의미한다.</p>
<p>자바(Java)에서 변수는 크게 2가지로 분류할 수 있다.</p>
<ul>
<li>기본형 변수(Primitive Variable)</li>
<li>참조형 변수(Reference Variable)<h2 id="기본형-변수primitive-variable란">기본형 변수(Primitive Variable)란?</h2>
기본형 변수에 저장되는 값은 리터럴 값(실제 값)으로 있는 그대로의 값을 저장한다. 
아래는 기본형 변수에 저장될 수 있는 자료형들이다.</li>
<li>boolean</li>
<li>char</li>
<li>byte, short, int, long</li>
<li>float, double</li>
</ul>
<p>기본형 변수는 참조형 변수와 다르게 <code>연산이 가능</code>하고 <code>초기화시 &#39;0&#39;으로 초기화</code> 된다.</p>
<h2 id="참조형-변수reference-variable란">참조형 변수(Reference Variable)란?</h2>
<p>기본형 변수와 다르게 리터럴 값이 아닌 <code>주소 값</code>을  저장하는 변수이다.
여기서 주소 값이란 메모리의 주소값이다.</p>
<h2 id="기본형-변수와-참조형-변수의-차이">기본형 변수와 참조형 변수의 차이</h2>
<p><code>기본형 변수</code>는 선언시 Stack영역에 자료형의 크기만큼 메모리 공간을 차지하고 그 메모리 공간에 데이터(실제 값)가 저장된다.
<code>참조형 변수</code>는 선언하게 되면 기본형 변수와 같이 Stack영역에 생성되는 것은 기본형 변수와 같지만 Stack영역에 생성된 <code>참조 변수</code>의 경우 <u style="color:red">Heap영역에 생성된 메모리의 주소 값</u>을 가지고 있다.</p>
<p>이해하기 쉽게 비유 하자면 기본형 변수의 경우 고정된 크기의 상자들로 크기가 고정되어 있어 Stack이라는 사무실에 잘 정리해서 쌓아둔다.
참조형 변수의 경우 크기가 가변적이기에 테트리스 하듯이 잘 정리될 수 없어 Heap이라는 큰 창고에 정리해두고 정리해둔곳의 주소를 사무실에 모아두고 필요한 경우 사무실에서 참조 변수에 적힌 주소대로 찾아가 값을 가져오거나 넣어둘 수 있는 개념으로 이해하면 쉽다.</p>
<pre><code class="language-java">    String str1 = new String(&quot;Java&quot;); // 참조 변수(객체) 생성
    String str2; // 참조 변수만 생성
    str2 = str1; // str2에 str1의 주소값을 대입 
    System.out.println(str1 == str2); // true 출력
    String str3 = new String(&quot;Java&quot;);
    System.out.println(str1 == str3); // false 출력
</code></pre>
<p>왜 str1과 str2가 같은지 비교 했을 때는 true가 출력되고, 
str1과 동일한 &quot;Java&quot;라는 문자열이 들어있는 str3가 같은지 비교 했을 때는 false가 출력 됐을까? 
참조 변수에는 str1에는 &quot;0x112&quot;라는 주소값이 저장됐다고 했을 때 str2에 주소값을 대입 했으니 동일하게 &quot;0x112&quot;라는 주소가 있을 것이다. 하지만 새로운 주소값을 가지고 있는 str3는 &quot;0x100&quot;이 있으면 동일하지 않기 때문에 false를 출력한 것이다. 
이처럼 참조 변수의 <code>동등 연산자로 비교할 경우 주소값만을 비교</code>하고 문자열이 같은지 비교하기 위해서는 아래 코드와 같이 String 클래스의 <code>equals()</code> 메서드를 이용해서 비교해야한다.</p>
<pre><code>System.out.println(str1.equals(str3)); // true 출력</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[MacOS]Conda를 이용한 패키지 관리]]></title>
            <link>https://velog.io/@jun_x/Conda%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-CUDA-%EB%B2%84%EC%A0%84-%EA%B4%80%EB%A6%AC</link>
            <guid>https://velog.io/@jun_x/Conda%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-CUDA-%EB%B2%84%EC%A0%84-%EA%B4%80%EB%A6%AC</guid>
            <pubDate>Fri, 05 Jul 2024 00:45:17 GMT</pubDate>
            <description><![CDATA[<h2 id="anaconda란">Anaconda란?</h2>
<p><code>Tensorflow &amp; PyTorch</code> 와 같은 딥러닝 패키지를 사용하는 여러 사람들은 특정 패키지 버전에 따라 환경을 구성 및 관리하기위해 아나콘다(Anaconda)혹은 docker를 이용해 관리를 한다. </p>
<h2 id="anaconda-설치">Anaconda 설치</h2>
<p>brew를 이용해 anaconda를 설치한다.
터미널에 아래 명령어를 복사/붙여넣기 한다.</p>
<pre><code>brew install --cask anaconda</code></pre><p>설치하게 되면 어떤 경로에 설치 되는지 아래와 같이 PATH가 나오게 된다.</p>
<pre><code>PREFIX=/opt/homebrew/anaconda3</code></pre><h2 id="환경-변수-설정">환경 변수 설정</h2>
<p>export 명령어를 통해 환경 변수를 설정하고 이를 현재 쉘 세션과 그 자식 프로세스들에게 전달하는 설정을 한다. 아래 명령어를 터미널에 한 줄 씩 복사/붙여넣기 한다.</p>
<pre><code>vi ~/.zshrc 
# 아래 문장을 그대로 입력한다.
export PATH=&quot;/Users/username/anaconda/bin:$PATH&quot;
# ESC -&gt; :wq 를 이용해 저장후 바쪄 나온다.
source ~/.zshrc
# 변경 사항 적용</code></pre><p>source ~/.zshrc 은 변경사항을 적용하기 위한 명령어로 만약 기본 쉘이 zsh 이 아니라면 해당 쉘로 사용하면 된다.(source ~/.bashrc)</p>
<ul>
<li><p>기본 쉘 확인(<code>echo $SHELL</code>) 명령어를 터미널에 입력하여 확인</p>
<h2 id="콘다-버전-확인">콘다 버전 확인</h2>
<p>잘 설치가 되었다면 아래 명령을 통해 버전을 확인할 수 있고 (base)가 떠 있게 된다.</p>
<pre><code>conda --version</code></pre><p><img src="https://velog.velcdn.com/images/jun_x/post/462b19be-9535-4eaa-bbda-816eba2e3afe/image.png" alt=""></p>
</li>
</ul>
<h2 id="conda-명령어들">Conda 명령어들</h2>
<p><code>conda env list</code> : 생성한 가상환경들과 해당 가상환경의 디렉터리 출력
<code>conda search python</code> : 설치 가능한 파이썬 버전 출력
<code>conda create -n [가상환경 이름] python=[특정 버전]</code>
<code>conda activate [가상환경 이름]</code>  : 특정 가상환경 활성화
<code>conda deactivate</code> : 활성화 한 가상환경 종료 (base)로 돌아온다.
<code>conda list</code> : 설치된 패키지들을 버전과 함께 보여준다.
<code>conda env remove -n [가상환경 이름]</code> : 가상환경 삭제
<code>conda install [패키지이름]</code> : conda에서 패키지 설치, 호환이 되는 것 들만 되는 경우가 많아 <code>pip</code>도 사용해야할 수 있음</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java]-기초 배열(Array)]]></title>
            <link>https://velog.io/@jun_x/Java-%EA%B8%B0%EC%B4%88-%EB%B0%B0%EC%97%B4Array</link>
            <guid>https://velog.io/@jun_x/Java-%EA%B8%B0%EC%B4%88-%EB%B0%B0%EC%97%B4Array</guid>
            <pubDate>Thu, 04 Jul 2024 07:27:46 GMT</pubDate>
            <description><![CDATA[<h2 id="배열이란">배열이란?</h2>
<p>자료형이 동일한 둘 이상의 데이터를 저장할 수 있는 메모리 공간으로, 
배열은 참조 변수로 Stack영역에 할당되며 배열 공간의 주소를 저장하고, 주소를 통해 인덱스를 참조하는 방식으로 값을 처리한다.
실제 값은 Heap영역에 존재한다.</p>
<blockquote>
<p>참조 변수(레퍼런스 변수)란?
주소값을 담고 있는 변수</p>
</blockquote>
<h2 id="배열-선언-및-할당">배열 선언 및 할당</h2>
<p>배열을 선언과 할당하게 되면 참조 변수를 만들고 참조 변수에 실제 값들이 들어이 있는 Heap영역에 선언된 배열의 [0]인덱스의 주소를 가진다.
배열의 크기를 지정하여 선언하지 않으면 Heap 영역의 실제 메모리를 차지하고 있는 것이 아니다.
크기를 지정하여 선언하게 되면 자동으로 초기화 한다.
기본 자료형 배열의 경우 모든 요소를 <code>&#39;0&#39;</code>으로 초기화 
String의 경우 <code>null</code>로 초기화</p>
<pre><code class="language-java">int[] arr = new int[5];   // 배열선언

int[] arr = {1,2,3,4,5};  // 선언과 동시에 할당
int[] arr = new int[5] {1,2,3,4,5} // 선언과 동시에 할당</code></pre>
<h2 id="배열-추가-및-접근-방법">배열 추가 및 접근 방법</h2>
<p>배열에 접근하는 건 인덱스를 사용한다.
[표현법]
배열명[인덱스]</p>
<pre><code class="language-java">    int[] arr = new int[4]
    arr[0] = 1;
    arr[1] = 2;
    arr[2] = 3;
    arr[3] = 4;
    for(int i = 0; i &lt; arr.length; i++){
        System.out.print(arr[i] + &quot; &quot;);
    }</code></pre>
<p><code>[출력]</code></p>
<pre><code>1 2 3 4</code></pre><h2 id="int형-배열을-사용한-예제">int형 배열을 사용한 예제</h2>
<blockquote>
<p>   <code>[예제]</code>
사용자에게 배열의 길이를 입력받아 해당 길이의 정수형 배열 arr을 생성한다.
       arr 모든 인덱스값에 1~100사이의 랜덤값을 할당해주고
       arr에 모든 값을 출력한 후
       이중 짝수인 값의 총 합을 구해서 출력</p>
</blockquote>
<pre><code class="language-java">import java.util.Scanner;
public class A_Array3 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print(&quot;정수 입력 : &quot;);
        int size = scanner.nextInt();
        int sum = 0;
        scanner.nextLine();
        int[] arr = new int[size];
        for(int i =0; i&lt;arr.length;i++){
            arr[i] = (int)(Math.random() * 100) + 1;
        }
        for(int i =0; i&lt; arr.length;i++){
            System.out.println(arr[i]);
        }
        for(int i = 0; i &lt; arr.length ;i++){
            if(arr[i] % 2 == 0){
                sum += arr[i];
            }
        }
        System.out.println(&quot;짝수의 총합 : &quot; + sum);
        scanner.close();
    }
}</code></pre>
<h2 id="string형-배열-character형-배열-사용-예제">String형 배열, Character형 배열 사용 예제</h2>
<blockquote>
<p><code>[예제]</code>
    문자열을 입력 받아 문자 하나하나를 배열에 넣고 검색할 문자가 문자열에 몇 개 들어가 있는지 개수와
    몇 번째 인덱스에 위치하는지 인덱스를 출력하세요.
    <code>[출력]</code>
    문자열 : application
    문자 : i
    application에 i가 존재하는 위치(인덱스) : 4 8
    i의 개수 : 2</p>
</blockquote>
<pre><code class="language-java">public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int count = 0;

        System.out.print(&quot;문자열 : &quot;);
        String str = scanner.nextLine();

        Character[] chr = new Character[str.length()];
        for(int i = 0; i &lt; str.length(); i++){
            chr[i] = str.charAt(i);
        }

        System.out.print(&quot;문자 : &quot;);
        Character findChar = scanner.next().charAt(0);
        System.out.print(str + &quot;에 &quot;+  findChar + &quot;가 존재하는 위치(인덱스) : &quot;);

        for(int i = 0; i &lt; chr.length; i++){
            if(chr[i] == findChar){
                System.out.print(i + &quot; &quot;);
                count++;
            }
        }
        System.out.println();
        System.out.println(findChar + &quot; 개수 : &quot; + count);
        scanner.close();
    }</code></pre>
<h2 id="배열-복사">배열 복사</h2>
<p>배열 자료형의 가장 큰 단점은 배열의 크기가 고정이라는 것이다. 배열 복사를 통해 이 부분을 해결할 수 있다.</p>
<h3 id="얕은-복사">얕은 복사</h3>
<p>객체의 레퍼런스 값만 가져와 참조형 변수에 저장하고 하나의 객체를 두 참조형 변수가 참조하게 만드는 것이다.</p>
<pre><code class="language-java">int[] arr1 = new int[4];
int[] arr2 = aar1;</code></pre>
<p>스택 영역에 참조형 변수 arr1과 arr2는 힙 영역의 같은 배열을 참조하고 있어 arr2에 값을 변경하여도 arr1의 배열에 값도 변경된다.</p>
<h3 id="깊은-복사">깊은 복사</h3>
<p>배열에 새로운 값을 넣을 때 배열의 크기가 가득찬 경우 크기를 늘린 새로운 배열에 기존 배열의 내용을 복사하여 사용할 수 있다. </p>
<blockquote>
<p>// 방법 1 
<U style="color:red">System.arraycopy</U>(<code>[원본 배열]</code>, <code>[원본 배열의 복사 시작 인덱스]</code>, <code>[대상 배열]</code>, <code>[대상 배열의 복사할 시작 인덱스]</code>, <code>[복사할 개수]</code>);
// 방법 2
새로운 배열 = <U style="color:red">Arrays.copyOf</U>(<code>[기존 배열]</code>, <code>[새로운 배열의 크기]</code>);</p>
</blockquote>
<p>추가적으로 크기를 조정할 순 없지만 객체를 그대로 복사하는 .clone() 메서드가 있다.</p>
<blockquote>
</blockquote>
<p>새로운 배열 = <code>[기존 배열]</code>.<U style="color:red">clone()</U>;</p>
<pre><code class="language-java">int[] arr1 = {1,2,3,4};
int[] arr2 = new int[10];
System.arraycopy(arr1, 0, arr2, 0, arr1.length);
// {1, 2, 3, 4, 0, 0, 0, 0, 0, 0}

int[] arr3 = Arrays.copyOf(arr1, arr1.length + 1);

int[] arr4 = new int[10];
arr4 = arr1.clone();</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java]기초 - Math 클래스]]></title>
            <link>https://velog.io/@jun_x/Java%EA%B8%B0%EC%B4%88-Math-%ED%81%B4%EB%9E%98%EC%8A%A4</link>
            <guid>https://velog.io/@jun_x/Java%EA%B8%B0%EC%B4%88-Math-%ED%81%B4%EB%9E%98%EC%8A%A4</guid>
            <pubDate>Tue, 02 Jul 2024 13:29:12 GMT</pubDate>
            <description><![CDATA[<h2 id="math-클래스란">Math 클래스란?</h2>
<p>기본 지수, 로그, 제곱근 및 삼각 함수와 같은 자주 사용되는 기본 숫자 연산 수행을 위한 메서드들을 구현해 놓은 클래스로 <code>java.lang</code> 패키지에 포함되어 있다.</p>
<h2 id="math-클래스-사용">Math 클래스 사용</h2>
<p>별도의 import가 필요하지 않으며 Static 메서드 이므로 Math.random()과 같이 직접 호출하여 사용한다.</p>
<h2 id="math-클래스의-주요-메서드">Math 클래스의 주요 메서드</h2>
<h3 id="mathrandom">Math.random()</h3>
<p>0.0 ~ 0.9999999999999999 사이의 랜덤한 값을 반환하는 메서드
<code>0.0 ~ 1.0 미만의 값을 리턴한다.</code></p>
<blockquote>
<p>⭐️</p>
</blockquote>
<pre><code class="language-java">int num = (int)(Math.random() * [최댓값 - 최솟값 + 1]) + [최솟값];</code></pre>
<p>랜덤하게 리턴받을 범위를 부여할 수 있다.</p>
<pre><code class="language-java">        /*
        * 1부터 랜덤값(1~100사이)까지의 합계를 출력
        * 1에서부터 xx까지의 총 합계 :
        * */
        int randNum = (int)(Math.random()*99) + 1;
        int i = 1;
        int sum = 0;
        while(i &lt; randNum){
            sum += i;
            i++;
        }
        System.out.println(&quot;1에서부터 &quot;+ randNum + &quot;까지의 총 합계 : &quot; + sum);</code></pre>
<h3 id="mathabs">Math.abs()</h3>
<p>입력된 값을 절댓값으로 반환하는 메서드</p>
<pre><code class="language-java">
        int num1 = -12;
        int num2 = 5;
        System.out.println(Math.abs(num1)); // 12
        System.out.println(Math.abs(num2)); // 5
</code></pre>
<h3 id="mathceil">Math.ceil()</h3>
<p>입력된 값의 소수점 첫째 자리에서 올림 한 값을 반환하는 메서드</p>
<pre><code class="language-java">        double num3 = 3.14;
        System.out.println(Math.ceil(num3)); // 4.0</code></pre>
<h3 id="mathfloor">Math.floor()</h3>
<p>입력된 값의 소수점 첫째 자리에서 버림 한 값을 반환하는 메서드</p>
<pre><code class="language-java">        double num3 = 3.14;
        System.out.println(Math.floor(num3)); // 3.0</code></pre>
<h3 id="mathround">Math.round()</h3>
<p>입력된 값의 소수점 첫째 자리에서 반올림한 값을 반환하는 메서드</p>
<pre><code class="language-java">        double num3 = 3.14;
        System.out.println(Math.round(num3)); // 3</code></pre>
<h3 id="mathmaxa-b">Math.max(a, b)</h3>
<p>입력값 a, b 중 큰 값을 반환하는 메서드</p>
<pre><code class="language-java">        int num1 = 2;
        int num2 = 4;
        System.out.println(Math.max(num1, num2)); // 4</code></pre>
<h3 id="mathmina-b">Math.min(a, b)</h3>
<p>입력값 a, b 중 작은 값을 반환하는 메서드</p>
<pre><code class="language-java">        int num1 = 2;
        int num2 = 4;
        System.out.println(Math.min(num1, num2)); // 2</code></pre>
<h3 id="mathpowa-b">Math.pow(a, b)</h3>
<p>$a^b$을 반환하는 메서드</p>
<pre><code class="language-java">        int num1 = 2;
        int num2 = 3;
        System.out.println(Math.pow(num1, num2));</code></pre>
<h3 id="mathsqrt">Math.sqrt()</h3>
<p>입력된 값의 제곱근 값을 반환하는 메서드 
$\sqrt{n}$</p>
<pre><code class="language-java">        int num1 = 4;
        System.out.println(Math.sqrt(num1)); // 2.0</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java]기초 - 형 변환(Type Conversion)]]></title>
            <link>https://velog.io/@jun_x/Java%EA%B8%B0%EC%B4%88-%ED%98%95-%EB%B3%80%ED%99%98Type-Conversion</link>
            <guid>https://velog.io/@jun_x/Java%EA%B8%B0%EC%B4%88-%ED%98%95-%EB%B3%80%ED%99%98Type-Conversion</guid>
            <pubDate>Tue, 02 Jul 2024 03:09:23 GMT</pubDate>
            <description><![CDATA[<h2 id="형-변환이란">형 변환이란?</h2>
<p>Java의 경우 연산을 위해서는 두 피연산자의 자료형이 같아야한다.</p>
<ul>
<li>선언된 변수를 다른 자료형으로 바꿀 필요가 있을 때</li>
<li>연산을 위해 자료형을 동일하게 만들 때
이 때, 사용자가 코드에 변환될 자료형을 직접 지시해줘야하는 것을 <span style="color:red"><code>명시적 형 변환</code></span> 이라고 하고, 변환될 자료형을 입력하지 않아도 컴파일러가 알아서 형 변환을 해주는 것을 <span style="color:red"><code>암시적 형 변환</code></span>이라고 한다.<h2 id="암시적-형-변환implicit-type-conversion">암시적 형 변환(Implicit Type Conversion)</h2>
자동 형 변환이라고도 부르는 암시적 형 변환은 규칙에 부합하면 형 변환을 컴파일러가 알아서 해준다.
<img src="https://velog.velcdn.com/images/jun_x/post/531445c2-40e6-42f6-ac1b-80b1e0a4023a/image.png" alt=""></li>
</ul>
<blockquote>
<p>암시적 형 변환 규칙</p>
</blockquote>
<ol>
<li>자료형의 크기가 큰 방향으로 일어난다.</li>
<li>자료형의 크기에 상관없이 정수 자료형보다 실수 자료형을 우선시 한다.</li>
</ol>
<p><img src="https://velog.velcdn.com/images/jun_x/post/47c384aa-906d-460d-8b62-49a2ea19b61b/image.png" alt=""></p>
<p>위 코드의 경우 변수<code>num1</code>을 데이터 손실이 생기지 않게 <code>(double)</code> 자료형으로 암시적 형 변환을 통해 연산이 진행된다.</p>
<h2 id="묵시적-형-변환explicit-type-conversion">묵시적 형 변환(Explicit Type Conversion)</h2>
<p>암시적 형 변환 규칙에 부합하지 않지만, 형 변환이 필요한 경우 사용한다.
<code>🚨 자료형의 크기가 큰 변수 -&gt; 작은 자료형으로 형 변환 시 데이터의 손실이 있을 수 있다.
ex) long -&gt; int</code></p>
<blockquote>
<p>💻[표현법]
변환하고자 하는 값 또는 변수 앞에 (변환하고자 하는 자료형) 을 붙여 주면 된다.</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/jun_x/post/b7d78592-d9b6-4d0c-bf53-ce18a03668e0/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java]기초 - Scanner 클래스]]></title>
            <link>https://velog.io/@jun_x/Java%EA%B8%B0%EC%B4%88-Scanner</link>
            <guid>https://velog.io/@jun_x/Java%EA%B8%B0%EC%B4%88-Scanner</guid>
            <pubDate>Mon, 01 Jul 2024 12:52:29 GMT</pubDate>
            <description><![CDATA[<h2 id="scanner-클래스란">Scanner 클래스란?</h2>
<p>사용자에게 표준 입력(키보드) 및 파일 입력 등 다양한 소스를 통해 데이터를 읽어오는데 도움을 주는 클래스로<code>java.util 패키지</code> 내에 존재한다 표준 입력의 경우 정수, 실수, 문자, 문자열과 같은 원시 타입을 입력 받는다.</p>
<h2 id="scanner-클래스-사용-방법">Scanner 클래스 사용 방법</h2>
<h3 id="1-import를-통해-외부-클래스를-호출한다">1. import를 통해 외부 클래스를 호출한다.</h3>
<p><img src="https://velog.velcdn.com/images/jun_x/post/d02ba024-e81c-489d-b6d4-797d78b8a522/image.png" alt=""></p>
<h3 id="2-표준-입력을-받기-위한-scanner-클래스-객체를-생성한다">2. 표준 입력을 받기 위한 Scanner 클래스 객체를 생성한다.</h3>
<p><img src="https://velog.velcdn.com/images/jun_x/post/9f2682bd-7998-408c-8c16-d68896622ca3/image.png" alt="">
System.in : 정수형, 실수형과 같은 값을 화면에서 입력받을때 사용
System.out : 화면으로 출력할 때 사용</p>
<h3 id="3-객체를-이용해-scanner-클래스의-메서드를-이용해-사용한다">3. 객체를 이용해 Scanner 클래스의 메서드를 이용해 사용한다.</h3>
<p><img src="https://velog.velcdn.com/images/jun_x/post/b49ace35-0bb2-45f8-9a80-41fd88524c5f/image.png" alt="">
Scanner 객체를 모두 사용했다면 <span style="color:red">불필요한 자원 낭비를 막기 위해</span> <span style="color:red"><code>.close()</code></span> 메서드를 이용해 객체를 닫아주고 Scanner 객체를 사용하지 않음을 명시적으로 표현한다.</p>
<h2 id="주요-메서드">주요 메서드</h2>
<ul>
<li><span style="color:red"><code>.next()</code></span>         : 사용자가 입력한 값 중 공백(구분자)이 있을 경우 공백 이전까지의 값만 가져온다.</li>
<li><span style="color:red"><code>.nextLine()</code></span>    : 사용자가 입력한 값 중 \n(구분자)를 포함하는 한 라인을 읽고 \n 이전 까지의 값만 가져온다.</li>
<li><span style="color:red"><code>nextInt()</code></span>        : 사용자가 입력한 정수형 값을 가져온다.</li>
<li><span style="color:red"><code>nextFloat()</code></span>    : 사용자가 입력한 Float형 값을 가져온다.</li>
<li><span style="color:red"><code>nextDouble()</code></span> : 사용자가 입력한 Double형 값을 가져온다.</li>
<li><span style="color:red"><code>hasNext()</code></span> : 입력에 다음 토큰이 있는지 여부 확인</li>
<li><span style="color:red"><code>hasNextLine()</code></span> : 입력에 다음 라인이 있는 여부 확인<ul>
<li><span style="color:red"><code>useDelimiter(String 패턴)</code></span> : 입력에서 사용할 구분자를 설정<blockquote>
<p>입력 값을 2개 이상 따로 받을 경우 <code>nextLine() 외 메서드</code> 사용시 \n(개행) 토큰이 함께 들어오기 때문에 
<code>.nextLine()</code> 메서드를 통해 입력 버퍼를 비워줘야 한다.</p>
</blockquote>
</li>
</ul>
</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>