<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>초보 개발자 삔아 의 발자국</title>
    <link>https://bbinya.tistory.com/</link>
    <description>지적은 언제든지 환영입니다!
초보개발자 입니다 좋게봐주세용 ㅎㅅㅎ/</description>
    <language>ko</language>
    <pubDate>Wed, 1 Jul 2026 07:56:55 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>삔아</managingEditor>
    <image>
      <title>초보 개발자 삔아 의 발자국</title>
      <url>https://tistory1.daumcdn.net/tistory/4605329/attach/a36d68cd030640e2a2983595418a2357</url>
      <link>https://bbinya.tistory.com</link>
    </image>
    <item>
      <title>블로그 이사 갑니다!</title>
      <link>https://bbinya.tistory.com/notice/52</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요, 오래전 블로그임에도 불구하고 방문 하여 글을 읽어주신 분들께 감사드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 &lt;a href=&quot;https://bbinya1224.github.io&quot;&gt;https://bbinya1224.github.io&lt;/a&gt;에서 새로운 블로그를 작성중입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블로그가 자주 바뀌는것 같지만.. ㅎㅎㅎ 이번엔 깃허브 블로그에서 열심히 작성해보려구요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;늘 행복하세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요  &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블로그 글을 작성해야지 .. 매일 생각하다가도 매일 까먹고 작성을 안하네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 새로운 마음가짐으로 일주일에 두번은 포스팅 하자고 결심을 하고, 블로그를 이전하고자 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실은, 세달전에 작성한 브라우저의 동작원리 파트 글.. 원본은 노션에 작성하였는데, 노션 그대로 티스토리에 옮기기 너무 버겁더라구요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 부분 부분 나누어서 업로드 하려고 했는데, 하던 도중에 이슈가 발생해서.. 어떻게든 살려낼려 했으나 이슈가 발생함과 동시에 제 의욕이 없어져버렸습니다.  .......&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그동안 티스토리에 업로드 하면서 불편한 점이 한두가지가 아니였을뿐 더러 가독성이 좋은 편이 아니라서, 편하고 가독성 좋은 벨로그로 이전하고자 마음을 먹었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 브라우저의 동작원리 원본이 필요하시다면 말씀 해주시면 정리 해서 노션 링크를 드리겠습니다. 차마 블로그로 정리 할 자신이 없네요.... (T_T)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;벨로그에서 만나요! 감사합니다  &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@subin1224&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://velog.io/@subin1224&lt;/a&gt;&lt;/p&gt;</description>
      <author>삔아</author>
      <guid isPermaLink="true">https://bbinya.tistory.com/notice/52</guid>
      <pubDate>Sat, 6 Nov 2021 16:52:12 +0900</pubDate>
    </item>
    <item>
      <title>스프링부트 환경 설정 및 에러 정리</title>
      <link>https://bbinya.tistory.com/48</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;들어가면서 ..&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;해당 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;a style=&quot;color: #006dd7;&quot; href=&quot;https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard&quot;&gt;스프링부트 강의&lt;/a&gt; &lt;/span&gt;강의를 들으며 정리한 내용 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;기존에 학원에서 설치한 프로그램들이 설치 되어있는 상태 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;프로젝트 환경 설정&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;프로젝트 생성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;JAVA 11 설치&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;IntelliJ 또는 Eclipse 설치&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;a style=&quot;color: #006dd7;&quot; href=&quot;https://start.spring.io/&quot;&gt;스프링 부트 스타터 사이트&lt;/a&gt; &lt;/span&gt;이동해서 스프링 프로젝트 생성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;Gradle Project, 2.3.x 버전&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;Language : Java&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;Packaging : Jar&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;Java : 11&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;Progect Metadata&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;groupId : hello / artifactId : hello-spring (강의용) 나머지는 그대로&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;Dependencies : Spring Web, Thymeleaf&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;스프링 부트는 기존에 썼던 스프링에서 설정해놨던 파일들을 자동으로 해놓음. 아주 간편!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;위에서 받은 압축파일을 푼다 &amp;rarr; IntelliJ 들어가서 Open Project &amp;rarr; hello-spring 에서 gradle 클릭 &amp;rarr; Open as Project 클릭 &amp;rarr; 다운로드를 받는다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;(참고 사항)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;src에 main과 test가 기본으로 들어가게 되는데, main 아래에는 java, resources가 들어가있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;test는 test code들과 관련된 소스들이 들어가있다. 테스트 소스는 요즘 아주 중요하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;resources에는 java파일을 제외한 xml이나 각종 설정 파일들이 들어가있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;build.gradle 이 매우 중요하다. &amp;rarr; gradle이 버전 떙겨오고 라이브러리 가져오는걸로만 일단 먼저 이해하자.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;sourceCompatibility : 자바 버전&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;repositories 에 들어가면 mavenCentral 이 있는데, 이 사이트에서 다운로드를 받아라 라고 기본적으로 간편하게 설정해놓은것.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;dependencies 에 보면 implementation 에 thymeleaf가 있는데, 그건 아까 설치한 템플릿 엔진, 그리고 같이 추가한 starter-web 도 들어가있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;testImplementation 에는 junit 이 자동으로 들어간다. 기본적으로 들어가므로 참고한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;main - java - hello.hellospring - helloSpringApplication 에 들어가면 어노테이션도 되어있고, 클래스도 알아서 만들어져 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;해당 메인 메서드를 run 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ee2323; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;❗❗❗ ERROR&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323; font-family: 'Noto Sans Light';&quot;&gt;'java se 11' using tool chain: 'jdk 8 (1.8)'.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;나는 기존에 Eclipse 로 JDK8을 사용했기 때문인지&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;1154&quot; data-origin-height=&quot;268&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VdWI6/btq6lYuW61K/hsGve83k7y9dGrhHglVkqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VdWI6/btq6lYuW61K/hsGve83k7y9dGrhHglVkqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VdWI6/btq6lYuW61K/hsGve83k7y9dGrhHglVkqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVdWI6%2Fbtq6lYuW61K%2FhsGve83k7y9dGrhHglVkqK%2Fimg.png&quot; data-origin-width=&quot;1154&quot; data-origin-height=&quot;268&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;해당 에러가 나왔다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;File-setting 검색창에 gradle 이라 검색하였더니,&lt;u&gt;&lt;b&gt; JDK 11버전이 아닌것을 확인&lt;/b&gt;&lt;/u&gt;하자.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;837&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbGB4l/btq6kM9RxTJ/ewXUtSKuE1TNJruMKodoG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbGB4l/btq6kM9RxTJ/ewXUtSKuE1TNJruMKodoG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbGB4l/btq6kM9RxTJ/ewXUtSKuE1TNJruMKodoG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbGB4l%2Fbtq6kM9RxTJ%2FewXUtSKuE1TNJruMKodoG0%2Fimg.png&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;837&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;JDK 11버전을 다운 받은 후, Gradle JVM버전을 11로 바꾸면 해결!&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;[ JDK 11 설치 방법 (윈도우용) ]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://www.oracle.com/java/technologies/javase-downloads.html&quot;&gt;https://www.oracle.com/java/technologies/javase-downloads.html&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;들어가서 JDK11 설치&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 100px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 20px;&quot;&gt;변수 이름&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px; text-align: center;&quot;&gt;변수 값&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: left; height: 40px;&quot;&gt;JAVA_HOME&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 40px; text-align: left;&quot;&gt;&lt;span data-reactroot=&quot;&quot;&gt;C:\Program&amp;nbsp;Files\Java\jdk-11.0.x (해당 다운로드 받은 버전)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: left; height: 20px;&quot;&gt;CLASSPATH&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px; text-align: left;&quot;&gt;&lt;span data-reactroot=&quot;&quot;&gt;.%JAVA_HOME%\lib\tools.jar&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: left; height: 20px;&quot;&gt;Path&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px; text-align: left;&quot;&gt;&lt;span data-reactroot=&quot;&quot;&gt;%JAVA_HOME%bin 추가&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;( 기존에 JDK8에 덮어 씀 ... )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ee2323; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;❗❗❗ ERROR&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323; font-family: 'Noto Sans Light';&quot;&gt;A JNI error has occurred, please check your installation and try again&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;컴파일 설정된 SDK 버전과 실행하고 있는 자바버전이 다를 경우에 발생하는 에러.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;File - Project Structure 들어가서 11버전으로 바꾸어준다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;1010&quot; data-origin-height=&quot;540&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mLI7U/btq6gLw6ko0/W9dTXDNxuC1BdQJKINYA51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mLI7U/btq6gLw6ko0/W9dTXDNxuC1BdQJKINYA51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mLI7U/btq6gLw6ko0/W9dTXDNxuC1BdQJKINYA51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmLI7U%2Fbtq6gLw6ko0%2FW9dTXDNxuC1BdQJKINYA51%2Fimg.png&quot; data-origin-width=&quot;1010&quot; data-origin-height=&quot;540&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ee2323; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;❗❗❗ERROR&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323; font-family: 'Noto Sans Light';&quot;&gt;finished with non-zero exit value 1&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;IntelliJ, Gradle 환경에서 프로젝트를 첫 실행 할 때 해당 오류가 발생한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;1178&quot; data-origin-height=&quot;841&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sMdK5/btq6gLqkV5j/s7KznZtG8Gkledk4QOtuMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sMdK5/btq6gLqkV5j/s7KznZtG8Gkledk4QOtuMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sMdK5/btq6gLqkV5j/s7KznZtG8Gkledk4QOtuMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsMdK5%2Fbtq6gLqkV5j%2Fs7KznZtG8Gkledk4QOtuMk%2Fimg.png&quot; data-origin-width=&quot;1178&quot; data-origin-height=&quot;841&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #ee2323;&quot;&gt;&lt;b&gt;File - Settings 메뉴 클릭 gradle 검색 &amp;rarr; Build and run using, Run tests using 둘 다 IntelliJ IDEA 로 변경한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;JVM 11버전으로 안바뀌어져 있다면 바꾸어주자.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #ee2323;&quot;&gt;&lt;b&gt;❗❗❗ERROR&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #9d9d9d;&quot;&gt;기존에 학원에서 들었던 JDK1.8, Eclipse 와 달리 Java SE11버전과 IntelliJ를 새로 사용하기때문인지 에러가 많이 난다.. T_T&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #ee2323;&quot;&gt;Identify and stop the process that's listening on port 8080 or configure this application to listen on another port.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;기본 포트는 8080인데, 이미 나는 AWS로 사용하고 있는 포트이기 때문에 중복으로 실행이 불가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;그래서 이것을 회피하려면 어플리케이션 마다 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;각각 포트번호를 달리주면 된다.&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;(한번에 한개씩 돌리면 상관없다)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #ee2323;&quot;&gt;application.properties 파일에 사용할 포트를 추가한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #ee2323;&quot;&gt;server.port=8090&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;앞으로 나는 해당 강의에서 듣는 port번호는 8090 이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;(CMD창으로 켜서 종료 시키는 방법도 있으나, 내 상황에서는 종료가 되지않아 포트번호 변경을 해주었다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Study/SpringBoot</category>
      <category>error</category>
      <category>springboot</category>
      <category>환경설정</category>
      <author>삔아</author>
      <guid isPermaLink="true">https://bbinya.tistory.com/48</guid>
      <comments>https://bbinya.tistory.com/48#entry48comment</comments>
      <pubDate>Tue, 1 Jun 2021 16:51:32 +0900</pubDate>
    </item>
    <item>
      <title>var, let, const</title>
      <link>https://bbinya.tistory.com/47</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;JavaScript 에서 변수 선언시 var, let, const 를 사용하게 되는데, 이 차이점에 대해 알아보자.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;1. var ( 변수 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;재선언 가능&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;, 변수&lt;/span&gt; &lt;span style=&quot;color: #006dd7;&quot;&gt;재할당 가능&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1620894168275&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var v1 = 'v1';
console.log(v1);	//v1

var v1 = 'v123';
console.log(v1);	//v123&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;var로 선언한 변수는 중복해서 선언 및 초기화가 가능하다. (에러 X)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;마지막에 할당된 값이 변수에 저장된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;유연한 변수 선언으로 간단한 테스트에는 편리 할 수 있겠으나, 코드량이 많아 진다면 어디에 어떻게 사용 되는지 파악하기 힘들 뿐만 아니라, 값이 바뀔 우려가 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt; var은 &lt;span style=&quot;color: #ee2323;&quot;&gt;function-scoped&lt;/span&gt; 단위로 hoisting이 일어난다.&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;hoisting 이란 : '변수 선언문' 을 미리 실행해두기 때문에 뒤에서 선언된 변수도 앞의 코드에서 참조 할 수 있게 되는데, 이를 변수 호이스팅 이라고 한다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;먼저, var변수에서는 함수 내부에 선언된 변수만 지역변수로 한정한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1620895173101&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function f1(){
	var a = 10;
    console.log(a);
}

f1();	//10

console.log(a);		//ReferenceError: a is not defined
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;그외의 나머지( if문, for문, while문, try/catch문 등의 코드 블럭{ ... } 내부에서 )는 var로 선언된 변수를 전역 변수로 간주한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1620895916057&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for(var i=0; i&amp;lt;10; i++){
	console.log('i', i);
}

//var i가 hoisting 됨
console.log('after loop i is ', i);	// after loop i is 10&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;# 직관적으로 살펴보자&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1620896637126&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//hoisting
console.log(a);	//undefined

var a = 10;

console.log(a);	//10&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;코드 실행 전에 자바스크립트 엔진이 &lt;b&gt;미리 변수를 선언&lt;/b&gt;하고, &lt;b&gt;undefined로 초기화&lt;/b&gt; 해두었기 때문에 앞에서 var로 선언한 변수 a를 참조한 코드에도 에러를 발생시키지 않는다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;2. let ( 변수 &lt;span style=&quot;color: #ee2323;&quot;&gt;재선언 불가능&lt;/span&gt;, 변수 &lt;span style=&quot;color: #006dd7;&quot;&gt;재할당 가능&lt;/span&gt;)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1620894539993&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let l1 = 'let 변수';
console.log(l1);	//let 변수

l1 = '재할당';
console.log(l1);	//재할당

let l1 = '재선언';
console.log(l1);	//Uncaught SyntaxError: Identifier 'l1' has already been declared&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;let 변수는 재할당이 가능하지만, var와는 다르게 재선언이 불가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;3. const (변수 &lt;span style=&quot;color: #ee2323;&quot;&gt;재선언 불가능&lt;/span&gt;, 변수 &lt;span style=&quot;color: #ee2323;&quot;&gt;재할당 불가능&lt;/span&gt;)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1620894744665&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const c1 = 'const 변수';
console.log(c1);	//const 변수

const c1 = 'const 변수'; 
console.log(c1); // Uncaught SyntaxError: Identifier 'c1' has already been declared

c1 = '재할당 TEST';    // Uncaught TypeError:Assignment to constant variable.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;const 변수는 constant(상수) 로 한 번만 선언하고, 재 할당 및 재 선언이 불가능 하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;처음 선언할 때 반드시 초기화(값 할당)을 해주어야 한다.&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1620894984290&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const c2;	//SyntaxError: Missing initializer in const declaration
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;span&gt; let 과 const 는&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt; block-level&lt;/span&gt; &lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;scoped&lt;/span&gt;&lt;span&gt;&amp;nbsp; 단위로 hoisting이 일어난&lt;/span&gt;다.&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;let/const로 변수를 선언하는 경우, 코드 실행 전에는 변수 선언만 해두며, 초기화는 코드 실행 과정에서 변수 선언문을 만났을때 수행한다.&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;let, const는 함수 내부는 물론, if문이나 for문 등의 코드블럭 { ... } 에서 선언된 변수도 지역변수로 취급한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1620896130094&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if(true){
	let a = 10;
    console.log(a); //10
}

console.log(a);	//ReferenceError: a is not defined

function f2(){
	let b = 10;
    console.log(b);	//10
}

console.log(b);	//ReferenceError: a is not defined
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;if문의 블럭 내부에서 선언된 let 변수와, 함수 내부에서 선언된 let 변수 역시 외부에서 참조 할 수 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1620896832557&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;l4 = 'test';	// ReferenceError: c is not defined
let l4;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;let 과 const가 hoisting이 일어나지 않는것은 아니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;위의 코드에서 &lt;span style=&quot;color: #ee2323;&quot;&gt;ReferenceError&lt;/span&gt;가 발생한 이유는 &lt;b&gt;변수의 선언과 초기화 사이에 일시적으로 변수 값을 참조 할 수 없는 구간인 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;tdz(temporal dead zone)&lt;/span&gt; &lt;/b&gt;때문인데, &lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;let 변수는 값을 할당하기 전에 변수가 선언 되있어야 하는데 그렇지 않기 때문에 에러가 난다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;const 변수는 좀 더 엄격하게, 선언과 동시에 값을 할당해야만 에러가 나지 않는다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1620896988834&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let l5;
l5 = 'NEXT';

const cst;	// Missing initializer in const declaration&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;# 직관적으로 살펴보자.&lt;/p&gt;
&lt;pre id=&quot;code_1620897454803&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//1)
let a = 10;	//전역변수 a 선언

if(true){
	console.log(a);	//10
}

//2)
let b = 10;	//전역변수 b 선언
if(true){
	console.log(b);	//ReferenceError: a is not defined
	let b = 20;	//지역변수 b 선언
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;1) 코드를 보면, 전역변수로 선언된 a의 값 10을 if문 블럭에서 참조하여 출력하고 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;2) 코드를 보면, 전역변수 b가 있음에도 불구하고 &lt;span style=&quot;color: #ee2323;&quot;&gt;ReferenceError &lt;/span&gt;가 발생한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;지역변수 b가 hositing 되면서 앞서 말한 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;tdz 구간&lt;/span&gt;이 만들어졌기 때문.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;이를 통해, let으로 선언된 변수 역시도 호이스팅이 발생함 을 알 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;✔&lt;/span&gt; 참고 ) 지역변수가 전역변수보다 우선 순위를 갖는다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;구글의&amp;nbsp;자바스크립트&amp;nbsp;스타일&amp;nbsp;가이드&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;Use&amp;nbsp;const&amp;nbsp;and&amp;nbsp;let&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;i&gt;&lt;b&gt;Declare all local variables with either&amp;nbsp;const&amp;nbsp;or&amp;nbsp;let.&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;i&gt;&lt;b&gt;Use const by default, unless a variable needs to be reassigned.&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;i&gt;&lt;b&gt;The&amp;nbsp;var&amp;nbsp;keyword must not be used.&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;b&gt;1. const와 let을 이용해서 변수를 선언할것.&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;2. 값을 재할당하는 경우가 아니라면, const를 디폴트로 사용할것.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;3. var는&amp;nbsp;절대로&amp;nbsp;사용하지&amp;nbsp;말것.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://google.github.io/styleguide/jsguide.html#features-use-const-and-let&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://google.github.io/styleguide/jsguide.html#features-use-const-and-let&lt;/a&gt;&lt;/p&gt;</description>
      <category>Programming/JavaScript</category>
      <category>const</category>
      <category>let</category>
      <category>var</category>
      <category>자바스크립트</category>
      <author>삔아</author>
      <guid isPermaLink="true">https://bbinya.tistory.com/47</guid>
      <comments>https://bbinya.tistory.com/47#entry47comment</comments>
      <pubDate>Thu, 13 May 2021 18:24:21 +0900</pubDate>
    </item>
    <item>
      <title>request 와 response</title>
      <link>https://bbinya.tistory.com/46</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxr5yS/btq4ll8vt4x/AQ5KZ7cRpDAmYwgY6Gs0mk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxr5yS/btq4ll8vt4x/AQ5KZ7cRpDAmYwgY6Gs0mk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxr5yS/btq4ll8vt4x/AQ5KZ7cRpDAmYwgY6Gs0mk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbxr5yS%2Fbtq4ll8vt4x%2FAQ5KZ7cRpDAmYwgY6Gs0mk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;웹은 서버와 클라이언트로 구성되며 서로 간에 HTTP 프로토콜을 기반으로 동작한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;클라이언트와 웹 서버 사이의 요청에 관련된 정보는 request객체에 저장되어 관리가 되며,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;응답에 관련된 정보는 response 객체에 저장되고 관리된다.&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;request, response는 &lt;span style=&quot;color: #ee2323;&quot;&gt;개발자가 객체를 별도로 생성하지 않아도 JSP에서 바로 사용 할 수 있는 객체 &lt;/span&gt;라는 공통점을 가지고 있다.&lt;/b&gt; &lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;JSP 내장객체&lt;/b&gt; 로, &lt;span style=&quot;color: #006dd7;&quot;&gt;request, response, out&lt;/span&gt;, page, config, application, pageContext, exception, session 이 있다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;request - javax.servlet.http.HttpServletRequest 객체&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;클라이언트 요청시에 생성이 되며, 요청에 대한 처리가 완료 되면 소멸 된다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;컨테이너는 요청된 데이터를 바탕으로 HttpServletRequest 객체를 만들어서 전달 해 준다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;사용자가 입력한 요청 데이터를 받아오는 작업의 메서드&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;code&gt;String getParameter(String name)&lt;/code&gt; :&amp;nbsp; name(변수이름, 파라미터)의 값을 가져온다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;request 객체는 최종적으로 클라이언트에게 응답되기 전 까지는 계속 유지된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;하나의 요청을 처리하는 스레드에서 용도를 다할 때 까지 계속 공유되는 객체이기 때문에 &amp;lt;jsp:forward&amp;gt; 와 같이&lt;u&gt; 다른페이지로 흐름 제어를 넘기는 경우에도 같은 request객체가 유지가 된다.&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&amp;lt;jsp:param&amp;gt; 태그로 파라미터를 넘겨주는 것과 동일한 효과이지만 &lt;b&gt;정보의 묶음인 '객체'의 전달이 가능&lt;/b&gt;하다. 서블릿에서는 액션 태그가 없기 때문에, Atrribute 를 이용한 메서드를 통해 추가적인 객체를 request에 담아줄 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;  Parameter는 사용자가 보낸 정보고, Attribute는 개발자가 필요에 의해 첨부된 별도의 객체 모음 이다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;code&gt;String setAttribute(String name, Object o)&lt;/code&gt; : request 객체에 'name'이름의 Object 객체를 첨부 함.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;code&gt;Object getAttribute(String name)&lt;/code&gt; : request 객체에 첨부된 'name' 이름의 값을 가져옴&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;response - javax.servlet.http.HttpServletResponse 객체&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;클라이언트 요청시 생성이 되며, 요청에 대한 처리가 완료되면 소멸 된다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;클라이언트에게 회신을 보내주는 응답 객체이다. 출력 자체는 HTML 코드나 out 객체를 통해 하면 되지만, 헤더 정보에 추가로 내용을 넣거나 쿠키 전송 혹은 클라이언트의 페이지가 쿼리스트링을 가지고 다른페이지로 이동 할 수 있게끔 하는 용도로 사용 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;주로 클라이언트의 페이지를 리다이렉트 시킬 때 response 응답 객체를 사용한다.&lt;/b&gt; &lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;  클라이언트가 요청한 페이지에서 추가적인 파라미터와 함께 다른 페이지로 전환 시키는 것을 &lt;b&gt;리다이렉트&lt;/b&gt;라고 한다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;액션태그의 forward와 다른점은 forward는 자바 내부에서 URI를 찾아 다른 페이지로 넘어가 수행한 뒤 결과를 회신 하는 것이고, response의 리다이렉트는 해당 페이지가 클라이언트에게 응답객체를 보내 다시 클라이언트 측에서 전송된 URI로 자동 접속 하도록 만든다는 점이다.&lt;/span&gt; &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;URI에는 쿼리스트링을 포함 할 수 있으므로 클라이언트가 호출 시에 넘겨줘야 할 파라미터를 같이 보낼 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;code&gt;void sendRedirect(String location)&lt;/code&gt; : 지정된 URI를 클라이언트 측에서 재호출 하도록 함&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #9d9d9d; font-family: 'Noto Sans Light';&quot;&gt;참고사이트&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://codevang.tistory.com/198?category=844273&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;codevang.tistory.com/198?category=844273&lt;/a&gt;&lt;/p&gt;</description>
      <category>Study/JSP</category>
      <category>JSP</category>
      <category>request</category>
      <category>response</category>
      <category>servlet</category>
      <author>삔아</author>
      <guid isPermaLink="true">https://bbinya.tistory.com/46</guid>
      <comments>https://bbinya.tistory.com/46#entry46comment</comments>
      <pubDate>Fri, 7 May 2021 18:04:32 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA] 유클리드 호제법_최소공배수, 최대공약수 구하기</title>
      <link>https://bbinya.tistory.com/45</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;유클리드 호제법 이란?&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;유클리드 알고리즘 (Euclidean algorithm) 은 2개의 자연수의 최대공약수(GCD) 를 구하는 알고리즘 이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;비교대상인 두 개의 자연수 a와 b에서 (이때, a&amp;gt;b) a를 b로 나눈 나머지를 r 이라고 했을때&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;GCD(a, b) = GCD(b, r)&lt;/span&gt; 이며,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&quot;r이 0이면 그때 b가 최대공약수이다.&quot; &lt;/span&gt;라는 원리를 활용한 알고리즘 이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;만약 r이 0이 아니라면 a에 b값을 다시 넣고, r을 b에 대입 한 후 다시 반복한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;1) &lt;span style=&quot;color: #ee2323;&quot;&gt;반복문&lt;/span&gt;을 이용해서 최대공약수 구하기&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1620016083958&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  int gcd(int a, int b) { //최대공약수
    while(b!=0) {
      int r=a%b;
      a=b;
      b=r;
    }
    return a;
  }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;2) &lt;span style=&quot;color: #ee2323;&quot;&gt;재귀함수&lt;/span&gt;를 이용해서 최대공약수 구하기&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1620023281275&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	
	//재귀함수 사용 - 구현이 간단, 코드 간결, 시간 복잡도 O(logN)
	int GCD(int a, int b) { //최대공약수 - 재귀함수 사용
		if(a%b ==0) {
			return b;
		}
		return GCD(b, a%b);
	}
	
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;+) 최소공배수 구하기&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;두&amp;nbsp;자연수&amp;nbsp;A,B의&amp;nbsp;최대공약수가&amp;nbsp;G,&amp;nbsp;최소공배수가&amp;nbsp;L일때 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;A=&amp;nbsp;a*G,&amp;nbsp;B=b*G&amp;nbsp;(a,b는&amp;nbsp;서로소)&amp;nbsp;라고&amp;nbsp;하면 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;L=a*b*G &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;A*B=L*G &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;두개의 식이 성립. 이를 이용한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1620023322165&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	int lcm(int a, int b) { //최소공배수
		//L=A*B/G
		//0이 아닌 두 수의 곱 / 두 수의 최대 공약수
		return a*b / gcd(a,b);
	}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Study/Algorithm</category>
      <category>java</category>
      <category>유클리드호제법</category>
      <author>삔아</author>
      <guid isPermaLink="true">https://bbinya.tistory.com/45</guid>
      <comments>https://bbinya.tistory.com/45#entry45comment</comments>
      <pubDate>Mon, 3 May 2021 15:30:24 +0900</pubDate>
    </item>
    <item>
      <title>Class 의 개념</title>
      <link>https://bbinya.tistory.com/44</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;클래스의 개념을 알아보기에 앞서서 객체지향언어 을 잠깐 짚고 들어가보자.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;객체지향이론의 기본 개념&lt;/b&gt;은&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt; '실제 세계는 사물(객체)로 이루어져 있으며, 발생하는 모든 사건들은 사물간의 상호작용이다.'&lt;/b&gt; &lt;/span&gt;라는 것 이다. 이 기본 개념을 이용하여, &lt;b&gt;자바에서 코드 간에 서로 관계를 맺어 줌으로써 보다 유기적으로 프로그램을 구성하는 것이 가능&lt;/b&gt;해졌다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;자바 하면 객체 지향 언어, &lt;b&gt;객체 지향 프로그래밍 (OOP, Object-Oriented Programming)&lt;/b&gt; 가 떠오를 것 이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;객체 지향 언어의 주요 특징은 다음과 같다.&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;1. 코드의 재사용성이 높다.&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;: 새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;2. 코드의 관리가 용이하다.&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;: 코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경 할 수 있다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;3. 신뢰성이 높은 프로그래밍을 가능하게 한다.&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;: 제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지할 수 있다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;이러한 장점으로 프로그램의 개발과 유지보수에 드는 시간과 비용을 획기적으로 개선이 가능해졌다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;객체지향개념을 학습할 때&lt;b&gt; 재사용성과 유지보수 그리고 중복된 코드의 제거&lt;/b&gt;, 이 세 가지 관점에서 보면 보다 쉽게 이해할 수 있을 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;그럼 이제 클래스에 대해 알아보자.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;✔&lt;/span&gt; 클래스란&lt;/b&gt; &lt;b&gt;'객체를 정의해놓은 것.&lt;/b&gt;' 또는 &lt;b&gt;'객체의 설계도 또는 틀'&lt;/b&gt; 이라고 정의 할 수 있다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;클래스는 객체를 생성하는데 사용되며, 객체는 클래스에 정의된 대로 생성된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;객체의 사전적인 정의는 '실제로 존재하는 것' 이지만, 프로그래밍에서의 객체는 클래스에 정의된 내용대로 메모리에 생성된 것을 뜻한다. &lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;즉, 사물과 같은 유형적인 것 뿐만 아니라, 개념이나 논리와 같은 무형적인 것들도 객체로 간주한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;클래스를 정의하고 클래스를 통해 객체를 생성하는 이유는 설계도를 통해서 제품을 만드는 이유와 같다. 하나의 설계도만 잘 만들어 놓으면 제품을 만드는 일이 쉬워진다는 것과 같다고 생각하자.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;클래스의 객체를 사용한다는 것은 객체가 가지고 있는 속성과 기능을 사용한다는 뜻이다.&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화 라고 하며,&lt;span style=&quot;color: #ee2323;&quot;&gt; 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스&lt;/span&gt; 라고 한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;클래스란 객체를 정의한 것 이므로&lt;b&gt; 클래스에는 객체의 모든 속성과 기능이 정의되어 있다.&lt;/b&gt; &lt;b&gt;클래스로부터 객체를 생성하면, 클래스에 정의된 속성과 기능을 가진 객체가 만들어 지는 것&lt;/b&gt; 이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;속성과 기능은 아래와 같이 같은 뜻의 여러 가지 용어가 있으며, 이 중에서도 '속성' 보다는 '&lt;b&gt;멤버변수&lt;/b&gt;'를, '기능' 보다는&lt;b&gt; '메서드'&lt;/b&gt;를 주로 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;객체의 속성과 기능&lt;br /&gt;속성(property)&lt;/b&gt; &lt;span style=&quot;color: #ee2323;&quot;&gt;멤버변수(member variable)&lt;/span&gt;&lt;u&gt;,&lt;/u&gt; 특성(attribute), &lt;span style=&quot;color: #ee2323;&quot;&gt;필드(field)&lt;/span&gt;, 상태(state)&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;기능(function)&lt;/b&gt; &lt;span style=&quot;color: #ee2323;&quot;&gt;메서드(method)&lt;/span&gt;, 함수(function), 행위(behavior)&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;보다 쉽게 이해 할 수 있도록, TV를 예로 들어보자.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;TV의 속성으로는 전원상태, 크기, 길이, 높이, 색상, 볼륨, 채널 과 같은 것들이 있으며, &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;기능으로는 켜기, 끄기, 볼륨 높이기, 채널 변경하기 등이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1619699448628&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Class Tv{
	//TV의 속성 (멤버변수)
    String color;	// 색상
    boolean power;	// 전원상태 (on/off)
    int channel;	//채널
    
    //TV의 기능(메서드)
    //TV를 켜거나 끄는 기능을 하는 메서드
    void power(){
    	power = !power;
    }
    
    //TV의 채널을 높이는 기능을 하는 메서드
    void channelUp(){
    	++channel;
    }
    
    //TV의 채널을 낮추는 기능을 하는 메서드
    void channelDown(){
    	--channel;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;이러한 속성과 기능들을 각각 변수와 메서드로 표현을 하면 위와 같은 코드가 짜여진다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;자바에서는 어떤 프로그래밍이든 클래스 안에 속해있다. 또한, 다른 클래스에서 다른 클래스를 선언 하여 사용할 수 있다. &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;사람에 따라 같은 프로그램을 만들더라도, 여러가지 관점으로 만들 수 있다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;JDK(Java Development Kit)에서는 프로그래밍을 위해 많은 수의 유용한 클래스(Java API)를 기본적으로 제공하고 있으며, 우리는 이 클래스들을 이용해서 원하는 기능의 프로그램을 보다 쉽게 작성 할 수 있게된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p&gt;&lt;span style=&quot;color: #666666;&quot;&gt;[참고자료]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #666666;&quot;&gt;Java의 정석 - 남궁 성 지음&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming/Java</category>
      <category>Class</category>
      <category>java</category>
      <category>OOP</category>
      <category>기본개념</category>
      <author>삔아</author>
      <guid isPermaLink="true">https://bbinya.tistory.com/44</guid>
      <comments>https://bbinya.tistory.com/44#entry44comment</comments>
      <pubDate>Thu, 29 Apr 2021 21:39:30 +0900</pubDate>
    </item>
    <item>
      <title>String s = &amp;quot;test&amp;quot;와 String s = new String(&amp;quot;test&amp;quot;)의 차이점</title>
      <link>https://bbinya.tistory.com/43</link>
      <description>&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;String&lt;/b&gt;은 자바 개발자라면 자주 쓰게 되는 자료형 중 하나 이다. 해당 자료형은 &lt;b&gt;불변성(Immutable)&lt;/b&gt; 이라는 성질을 가지고 있으며, 같은 값의 문자열에 대해서는 단 하나의 문자열 객체만을 생성하도록 설계되어 있다. 이러한 성질을 가지게 된 이유 중 하나의 가장 큰 장점은 &lt;b&gt;성능&lt;/b&gt; 때문이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;같은 값을 갖는 문자열 객체는 JVM의 객체가 생성되는 공간인 Heap에 매번 새로 생성하게 되면 메모리 공간적 측면에서 비효율적 이기 때문.&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;자, 다시 돌아와서&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;String은 &lt;b&gt;두가지 생성 방식&lt;/b&gt;이 있고, 그에 따라 각각 차이점이 존재한다.&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;new 연산자를 이용한 방식&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;리터럴을 이용한 방식&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;이번 포스팅은 new 연산자를 이용한 방식과, 리터럴을 이용한 방식의 차이점이 무엇인지 알아볼 것 이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1619262239212&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class StringTest {
    public static void main(String[] args) {
        String str1 = &quot;test&quot;;
        String str2 = new String(&quot;test&quot;);
        
	System.out.println(str1);
        System.out.println(str2);
        
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #409d00; font-family: 'Noto Sans Light';&quot;&gt;- 결과 -&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;test &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;test&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;code&gt;String s = &quot;test&quot;&lt;/code&gt; 와 &lt;code&gt;String s = new String(&quot;test&quot;)&lt;/code&gt; 를 각각 출력해보면, 똑같이&lt;span style=&quot;color: #ee2323;&quot;&gt; test&lt;/span&gt; 가 나온다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;그럼 둘은 같은 걸까?&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1619262447751&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;System.out.println( str1==str2 );&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;  ==연산&lt;/span&gt;은 값을 비교하는것이 아니라 &lt;span style=&quot;color: #ee2323;&quot;&gt;같은 메모리를 참조하는지 비교하는 것&lt;/span&gt; 이다.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;해당 코드를 실행해보면, &lt;span style=&quot;color: #ee2323;&quot;&gt;false&lt;/span&gt; 라는 결과를 얻게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;즉, 서로 같지 않다는 뜻인건데, 어떤것이 다른지 알아보자.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;먼저, &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;new를 통해 생성된 String은 Heap 영역에 존재하게 된다. 반대로, 리터럴을 이용한 경우 String constant pool 영역에 존재하게 된다.&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciyJqe/btq3niK43mc/rEMRXgmcVuDePVr3kiReXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciyJqe/btq3niK43mc/rEMRXgmcVuDePVr3kiReXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciyJqe/btq3niK43mc/rEMRXgmcVuDePVr3kiReXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciyJqe%2Fbtq3niK43mc%2FrEMRXgmcVuDePVr3kiReXk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1619263987591&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class StringTest {
    public static void main(String[] args) {
        String str1 = &quot;test&quot;;
        String str2 = new String(&quot;test&quot;);
        String str3 = &quot;test&quot;;
        String str4 = new String(&quot;test&quot;);

        System.out.println(System.identityHashCode(str1));
        System.out.println(System.identityHashCode(str2));
        System.out.println(System.identityHashCode(str3));
        System.out.println(System.identityHashCode(str4));
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;해당 해시코드를 출력해보는 코드를 실행해보면&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #8a3db6;&quot;&gt;460141958 &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #1a5490;&quot;&gt;1163157884 &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #8a3db6;&quot;&gt;460141958 &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #ef5369;&quot;&gt;1956725890&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;이런 결과물이 나온다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;즉, str1, str3은 같은 해시코드를 가지고 있지만, str2와 str4는 같은 new 연산자를 이용하여 생성해주어도 다른 해시코드를 갖고있단 점을 알 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;String과 new String() 은 같은 값을 갖더라도 메모리 상에서 처리 되는 방식이 다르다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;두 가지 방법중 어떤 방식을 사용할지 고민이 된다면, 굳이 객체로 만들어 GC대상이 되는 것 보다 String pool을 활용 하는 방법을 사용할것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;두 가지 방법에 대한 메모리 효율 비교는 의미가 별로 없다. 문자열이 차지하는 메모리는 크지 않을 것 이기 때문..&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;✔&lt;/b&gt; &lt;/span&gt;문자열을 비교할 때에는 &lt;b&gt;equals()&lt;/b&gt; 를 사용해주자.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;✔&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;속도적인 부분이나 메모리 부분 때문에 &lt;b&gt;==을 사용해야 한다면 intern()메서드&lt;/b&gt;를 이용해주자.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt; &lt;b&gt; intern()&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;해당 리터럴이 pool 에 존재하는지 확인하고 존재하면 해당 pool 에 있는 리터럴을 리턴하고 없다면 리터럴을 pool 에 집어넣는다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming/Java</category>
      <category>java</category>
      <category>String</category>
      <author>삔아</author>
      <guid isPermaLink="true">https://bbinya.tistory.com/43</guid>
      <comments>https://bbinya.tistory.com/43#entry43comment</comments>
      <pubDate>Sat, 24 Apr 2021 20:40:59 +0900</pubDate>
    </item>
    <item>
      <title>Map.getOrDefault(Object Key, Integer defaultValue)</title>
      <link>https://bbinya.tistory.com/42</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;Map.getOrDefault(Object&amp;nbsp;Key,&amp;nbsp;Integer&amp;nbsp;defaultValue)&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt; &amp;nbsp; 찾는 키가 존재한다면 찾는 키의 값을 반환하고 없다면 기본 값을 반환한다.&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;즉, &lt;b&gt;키 값이 몇번이나&lt;span style=&quot;color: #ee2323;&quot;&gt;&amp;nbsp;사용&lt;/span&gt;되었는지 찾고싶을때 사용한다.&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;찾는 key를 가지지 않는 map 이 있을 수 있지만 Value를 가지길 원하고 map이 변경되는것을 원치 않을때 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1618747274526&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.HashMap;
import java.util.Map;

public class GetOrDefaultEx {
    public static void main(String[] args) {
        String[] ex = {&quot;A&quot;, &quot;B&quot;, &quot;C&quot;, &quot;A&quot;};
        Map&amp;lt;String, Integer&amp;gt; map = new HashMap&amp;lt;&amp;gt;();
        for(String str : ex) map.put(str, map.getOrDefault(str, 0) + 1);
        System.out.println(&quot;:: MAIN :: &quot; + map);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;▼&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;출력 결과&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;::&amp;nbsp;MAIN&amp;nbsp;::&amp;nbsp;{A=2,&amp;nbsp;B=1,&amp;nbsp;C=1}&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming/Java</category>
      <category>java</category>
      <category>map</category>
      <author>삔아</author>
      <guid isPermaLink="true">https://bbinya.tistory.com/42</guid>
      <comments>https://bbinya.tistory.com/42#entry42comment</comments>
      <pubDate>Sun, 18 Apr 2021 21:07:19 +0900</pubDate>
    </item>
    <item>
      <title>Stack과 Queue</title>
      <link>https://bbinya.tistory.com/41</link>
      <description>&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;목차&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1) Stack과 Queue의 기본 개념 및 특징&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2) Stack과 Queue의 메서드&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3) Stack과 Queue의 활용 예시&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1) Stack과 Queue의 기본 개념 및 특징&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VVcFv/btq2oStjFjR/8BEb1z9QoMhzdWxbMoDzn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VVcFv/btq2oStjFjR/8BEb1z9QoMhzdWxbMoDzn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VVcFv/btq2oStjFjR/8BEb1z9QoMhzdWxbMoDzn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVVcFv%2Fbtq2oStjFjR%2F8BEb1z9QoMhzdWxbMoDzn0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;스택&lt;/b&gt;은 마지막에 저장한 데이터를 가장 먼저 꺼내게 되는 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;LIFO (Last In First Out)&lt;/span&gt; 구조&lt;/b&gt;로 되어있고, &lt;b&gt;큐&lt;/b&gt;는 처음에 저장한 데이터를 가장 먼저 꺼내게 되는 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;FIFO (First In First Out)&lt;/span&gt; 구조&lt;/b&gt;로 되어있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;예를 들어 스택에 0, 1, 2 의 순서로 데이터를 넣었다면 꺼낼 때는 2, 1, 0의 순서로 꺼내게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;큐에는 0, 1, 2 순서로 데이터를 넣었다면 0, 1, 2 의 순서로 데이터를 꺼내게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2) Stack과 Queue의 메서드&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwc10p/btq2lA7Mbqr/KEkEDvlUjetzNdQkZROQ1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwc10p/btq2lA7Mbqr/KEkEDvlUjetzNdQkZROQ1K/img.png&quot; data-alt=&quot;Stack의 메서드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwc10p/btq2lA7Mbqr/KEkEDvlUjetzNdQkZROQ1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbwc10p%2Fbtq2lA7Mbqr%2FKEkEDvlUjetzNdQkZROQ1K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Stack의 메서드&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vWbUv/btq2sZZwY6K/tnyP1u2sEroVbnKYX80cm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vWbUv/btq2sZZwY6K/tnyP1u2sEroVbnKYX80cm1/img.png&quot; data-alt=&quot;Queue의 메서드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vWbUv/btq2sZZwY6K/tnyP1u2sEroVbnKYX80cm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvWbUv%2Fbtq2sZZwY6K%2FtnyP1u2sEroVbnKYX80cm1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Queue의 메서드&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3) Stack과 Queue의 활용 예시&lt;/span&gt;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;pre id=&quot;code_1618304537034&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;

public class StackQueueEx {
	public static void main(String[] args) {
		Stack st = new Stack();
		Queue q = new LinkedList(); //Queue인터페이스의 구현체인 LinkedList 사용
		
		st.push(&quot;0&quot;);
		st.push(&quot;1&quot;);
		st.push(&quot;2&quot;);
		
		q.offer(&quot;0&quot;);
		q.offer(&quot;1&quot;);
		q.offer(&quot;2&quot;);
		
		System.out.println(&quot; --- Stack ----&quot;);
		while(!st.empty()) {
			System.out.println(st.pop());
		}
		
		System.out.println(&quot; --- Queue ----&quot;);
		while(!q.isEmpty()) {
			System.out.println(q.poll());
		}
	}

}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/emf4iV/btq2yaGtMst/43mBsCrblXFChFVDLZG0v0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/emf4iV/btq2yaGtMst/43mBsCrblXFChFVDLZG0v0/img.png&quot; data-alt=&quot;&amp;amp;amp;lt;위 코드 실행 결과&amp;amp;amp;gt;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/emf4iV/btq2yaGtMst/43mBsCrblXFChFVDLZG0v0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Femf4iV%2Fbtq2yaGtMst%2F43mBsCrblXFChFVDLZG0v0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;&amp;lt;위 코드 실행 결과&amp;gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;✔&lt;/b&gt;&lt;/span&gt; 스택의 활용 예 : 수식계산, 수식괄호검사, 워드프로세서의 undo/redo, 웹브라우저의 뒤로/ 앞으로&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;✔&lt;/b&gt;&lt;/span&gt; 큐의 활용 예 : 최근사용문서, 인쇄작업 대기목록, 버퍼(buffer)&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. 웹브라우저의 '뒤로', '앞으로' 버튼 기능 구현 &amp;rarr; 스택 2개 이용&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1618305251111&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.Stack;

public class StackEx {
	public static Stack back = new Stack();
	public static Stack forward = new Stack();
	
	public static void main(String[] args) {
		goURL(&quot;1.네이트&quot;);
		goURL(&quot;2.야후&quot;);
		goURL(&quot;3.네이버&quot;);
		goURL(&quot;4.다음&quot;);
		
		printStatus();
		
		goBack();
		System.out.println(&quot; = '뒤로' 버튼을 누른 후 = &quot;);
		printStatus();
		
		goBack();
		System.out.println(&quot; = '뒤로' 버튼을 누른 후 = &quot;);
		printStatus();

		goForward();
		System.out.println(&quot; = '앞으로' 버튼을 누른 후 = &quot;);
		printStatus();
		
		goURL(&quot;bbinya.tistory.com&quot;);
		System.out.println(&quot;= 새로운 주소로 이동 후 =&quot;);
		printStatus();
		
	}
	
	public static void printStatus() {
		System.out.println(&quot;back:&quot;+back);
		System.out.println(&quot;forward:&quot;+forward);
		System.out.println(&quot;현재 화면은 '&quot; + back.peek() + &quot;' 입니다.&quot;);
		System.out.println();
	}
	
	public static void goURL(String url) {
		back.push(url);
		if(!forward.empty()) forward.clear();
	}
	
	public static void goForward() {
		if(!forward.empty()) back.push(forward.pop());
	}
	
	public static void goBack() {
		if(!back.empty()) forward.push(back.pop());
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPKl0M/btq2s5s1iyX/vH1DuvxRPOK6a0FpuF7I60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPKl0M/btq2s5s1iyX/vH1DuvxRPOK6a0FpuF7I60/img.png&quot; data-alt=&quot;위 코드를 실행한 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPKl0M/btq2s5s1iyX/vH1DuvxRPOK6a0FpuF7I60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPKl0M%2Fbtq2s5s1iyX%2FvH1DuvxRPOK6a0FpuF7I60%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;위 코드를 실행한 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2. 최근 명령어 이력 조회하기 &amp;rarr; Queue 이용&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1618305898907&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;

public class QueueEx {
	static Queue q = new LinkedList();
	static final int MAX_SIZE=5; 	//Queue에 최대 5개까지만 저장 되도록
	
	public static void main(String[] args) {
		System.out.println(&quot;help 를 입력하면 도움말을 볼 수 있습니다.&quot;);
		
		while(true) {
			System.out.print(&quot;&amp;gt;&amp;gt;&quot;);
			try {
				//화면으로부터 라인단위로 입력 받는다.
				Scanner sc = new Scanner(System.in);
				String input = sc.nextLine().trim();
				
				if(&quot;&quot;.equals(input)) continue;
				
				if(input.equalsIgnoreCase(&quot;q&quot;)) {
					System.exit(0);
				}else if(input.equalsIgnoreCase(&quot;help&quot;)) {
					System.out.println(&quot;help - 도움말을 보여줍니다.&quot;);
					System.out.println(&quot;q또는 Q - 프로그램을 종료합니다.&quot;);
					System.out.println(&quot;history - 최근에 입력한 명령어를 &quot; + MAX_SIZE + &quot;개 보여줍니다.&quot;);
				}else if(input.equalsIgnoreCase(&quot;history&quot;)) {
					int i=0;
					//입력받은 명령어를 저장하고,
					save(input);
					
					//LinkedList의 내용을 보여준다.
					LinkedList tmp = (LinkedList)q;
					ListIterator it = tmp.listIterator();
					
					while(it.hasNext())  System.out.println(++i+&quot;.&quot;+it.next());
				}else {
					save(input);
					System.out.println(input);
				}
				
			}catch(Exception e) {
				System.out.println(&quot;입력 오류 입니다.&quot;);
			}
		}
	}
	
	public static void save(String input) {
		//queue에 저장한다.
		if(!&quot;&quot;.equals(input)) q.offer(input);
		
		// queue의 최대크기를 넘으면 제일처음 입력된 것을 삭제한다.
		if(q.size() &amp;gt; MAX_SIZE) q.remove();
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m0SyP/btq2x47q03E/EAloLtyNPFH8yuLMhhPe3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m0SyP/btq2x47q03E/EAloLtyNPFH8yuLMhhPe3k/img.png&quot; data-alt=&quot;위 코드를 실행한 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m0SyP/btq2x47q03E/EAloLtyNPFH8yuLMhhPe3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm0SyP%2Fbtq2x47q03E%2FEAloLtyNPFH8yuLMhhPe3k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;위 코드를 실행한 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming/Java</category>
      <category>java</category>
      <category>queue</category>
      <category>Stack</category>
      <author>삔아</author>
      <guid isPermaLink="true">https://bbinya.tistory.com/41</guid>
      <comments>https://bbinya.tistory.com/41#entry41comment</comments>
      <pubDate>Tue, 13 Apr 2021 18:25:59 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] 위장</title>
      <link>https://bbinya.tistory.com/40</link>
      <description>&lt;h2&gt;&lt;b&gt;❗❗ 해당 문제는&lt;span style=&quot;color: #ee2323;&quot;&gt;JAVA&lt;/span&gt;로 풀었습니다.&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/42578&quot;&gt;문제보러가기&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;문제&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LhUdq/btq1vhVj6sQ/A7S2sXgKpqYlz0iVWrDyk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LhUdq/btq1vhVj6sQ/A7S2sXgKpqYlz0iVWrDyk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LhUdq/btq1vhVj6sQ/A7S2sXgKpqYlz0iVWrDyk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLhUdq%2Fbtq1vhVj6sQ%2FA7S2sXgKpqYlz0iVWrDyk1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;제한사항&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;스파이가 가진 의상의 수는 1개 이상 30개 이하입니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;같은 이름을 가진 의상은 존재하지 않습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;clothes의 모든 원소는 문자열로 이루어져 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;모든 문자열의 길이는 1 이상 20 이하인 자연수이고 알파벳 소문자 또는 '_' 로만 이루어져 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;스파이는 하루에 최소 한 개의 의상은 입습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style=&quot;color: #000000; background-color: #dddddd;&quot;&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLeUIu/btq1tC6MxWY/PKeLPw8FOnX0lQtKtoqKL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLeUIu/btq1tC6MxWY/PKeLPw8FOnX0lQtKtoqKL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLeUIu/btq1tC6MxWY/PKeLPw8FOnX0lQtKtoqKL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLeUIu%2Fbtq1tC6MxWY%2FPKeLPw8FOnX0lQtKtoqKL1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;입출력 예 설명&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;예제 #1&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;headgear에 해당하는 의상이 yellow_hat, green_turban이고 eyewear에 해당하는 의상이 blue_sunglasses이므로 아래와 같이 5개의 조합이 가능합니다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;1. yellow_hat&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;2. blue_sunglasses&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;3. green_turban&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;4. yellow_hat + blue_sunglasses&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;5. green_turban + blue_sunglasses&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;예제 #2&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;face에 해당하는 의상이 crow_mask, blue_sunglasses, smoky_makeup이므로 아래와 같이 3개의 조합이 가능합니다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;1. crow_mask &lt;br /&gt;2. blue_sunglasses &lt;br /&gt;3. smoky_makeup&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;내풀이&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1617208952387&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

class Solution {
    public int solution(String[][] clothes) {
        int answer=1;
        Map&amp;lt;String, Integer&amp;gt;map = new HashMap&amp;lt;&amp;gt;();
        for(int i=0; i&amp;lt; clothes.length; i++) {
            map.put(clothes[i][1], map.getOrDefault(clothes[i][1], 0)+1);
        }
        Iterator&amp;lt;Integer&amp;gt; iter = map.values().iterator();
        while(iter.hasNext()) {
        	answer *= iter.next().intValue()+1;
        }
        return answer-1;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000;&quot;&gt;문제가 옛날에 풀었던 경우의 수 문제를 너무 생각나게해서..... 너무 슬펐다.. 처음 접근 했던 방법은 틀렸었다,.. ( 그냥 얕잡아 보고 nCr . 하다가 ... )&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;어쨋든 다시 진정하고 문제를 이해하는데 의상 종류별 의상의 갯수를 뽑아내기만 한다면 문제 풀이가 쉬워진단걸 눈치채고, 어떻게 뽑아낼까 정말 별별 방법을 다 써보다가 결국엔 갓구글링을 시도했는데, 또... getOrDefault 다 .... &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;당해놓고 또 당하는 나는 정말 바보인듯..getOrDefault() 힌트를 얻고 후다닥 풀었다..  &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;담아놓은 map의 value들을 뽑아내고, &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당 의상 종류의 의상을 안입는 경우도 있으므로 (쉽게 투명옷 이라고 생각하자) &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;각각 +1을 한뒤에 곱해주고 마지막엔 최소 한가지 의상은 꼭 입어야 하므로 -1 까지 해주었다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(모든 의상 종류들이 다 투명옷을 입었을땐 없으므로)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p&gt;약간 이번 문제는 코딩보다 고등학교때 풀었던 경우의 수 문제를 생각나게 했었다 ㅋㅋㅋㅋ 몇년전이람 ,,  &lt;/p&gt;</description>
      <category>Study/Algorithm</category>
      <category>java</category>
      <category>코딩테스트</category>
      <category>프로그래머스</category>
      <author>삔아</author>
      <guid isPermaLink="true">https://bbinya.tistory.com/40</guid>
      <comments>https://bbinya.tistory.com/40#entry40comment</comments>
      <pubDate>Thu, 1 Apr 2021 01:50:12 +0900</pubDate>
    </item>
  </channel>
</rss>