<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>딴따라 제퍼의 개발 유랑기</title>
    <link>https://dev-zephyr.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Tue, 16 Jun 2026 00:41:47 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>dev_zephyr</managingEditor>
    <item>
      <title>Java 개발 환경 세팅</title>
      <link>https://dev-zephyr.tistory.com/16</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;세팅 환경&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;JDK 1.8, Eclipse 4.18&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;자바의 첫 걸음인 JDK설치와 IDE인 Eclipse를 세팅한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;사실 자신의 PC나 노트북이면 한번 설치해 놓으면 다시 할 일이 잘 없을테지만&lt;/p&gt;
&lt;p&gt;노트북을 한번 포맷했었던 기억을 떠올리며 알아보기 쉽게 메모한다.&lt;/p&gt;
&lt;p&gt;(현재 2021년 1월 27일에 작성한 버전임)&lt;/p&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;span style=&quot;color: #8a3db6;&quot;&gt;1. JDK 1.8 설치&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;우리의 구글신에 &lt;u&gt;JDK&lt;/u&gt; 검색 -&amp;gt; 최상단에 나오는 Oracle 홈페이지로 접속한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1437&quot; data-origin-height=&quot;1306&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbgwxP/btqUTm9JN4x/63wHpyJbiXsICzDhKPSiI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbgwxP/btqUTm9JN4x/63wHpyJbiXsICzDhKPSiI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbgwxP/btqUTm9JN4x/63wHpyJbiXsICzDhKPSiI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbgwxP%2FbtqUTm9JN4x%2F63wHpyJbiXsICzDhKPSiI1%2Fimg.png&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1437&quot; data-origin-height=&quot;1306&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;Java SE 8 단락의 JDK Download를 클릭한 뒤, Java SE Development Kit 8u281에서 자신의 운영체제에 맞는 버전 다운로드&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;1803&quot; data-origin-height=&quot;1301&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvECOE/btqU0zfpvDm/elbfaSKo5DUSK7JVsJeHMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvECOE/btqU0zfpvDm/elbfaSKo5DUSK7JVsJeHMK/img.png&quot; data-alt=&quot;나는 윈도우 유저!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvECOE/btqU0zfpvDm/elbfaSKo5DUSK7JVsJeHMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvECOE%2FbtqU0zfpvDm%2FelbfaSKo5DUSK7JVsJeHMK%2Fimg.png&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;1803&quot; data-origin-height=&quot;1301&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;** 오라클 사이트에 가입이 되어 있어야 하는데, 언젠가 만날 오라클 DB를 다운로드 할 상황을 대비해 회원 가입 해 두자.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다운받고 Next 신공으로 설치하자.&lt;/p&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;span style=&quot;color: #8a3db6;&quot;&gt;2. JDK 환경 변수 설정(윈도우)&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;설치한 JDK를 윈도우에서 사용하기 위해 환경 변수에 등록해야 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 시작메뉴 아이콘 바로 옆에 검색 아이콘 클릭 -&amp;gt; 고급 시스템 설정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;839&quot; data-origin-height=&quot;677&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BodX6/btqUUprC8YQ/PcJeKFTlOEOorQodGN0u9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BodX6/btqUUprC8YQ/PcJeKFTlOEOorQodGN0u9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BodX6/btqUUprC8YQ/PcJeKFTlOEOorQodGN0u9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBodX6%2FbtqUUprC8YQ%2FPcJeKFTlOEOorQodGN0u9k%2Fimg.png&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;839&quot; data-origin-height=&quot;677&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;gt; 환경 변수&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;597&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/L6Fag/btqUYgOpjxe/OrB1umPkdGGJnwRSvkdHA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/L6Fag/btqUYgOpjxe/OrB1umPkdGGJnwRSvkdHA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/L6Fag/btqUYgOpjxe/OrB1umPkdGGJnwRSvkdHA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL6Fag%2FbtqUYgOpjxe%2FOrB1umPkdGGJnwRSvkdHA1%2Fimg.png&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;597&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;gt; 변수 이름은 JAVA_HOME으로 하고 변수 값에는 jdk가 설치 된 폴더의 경로를 넣어준다. (설치할때 폴더 경로를 바꾸지 않았다면 사진의 경로)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;606&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ugLM2/btqURu1sBxs/Jv71FyEBNc8k5cfj14ZE11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ugLM2/btqURu1sBxs/Jv71FyEBNc8k5cfj14ZE11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ugLM2/btqURu1sBxs/Jv71FyEBNc8k5cfj14ZE11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FugLM2%2FbtqURu1sBxs%2FJv71FyEBNc8k5cfj14ZE11%2Fimg.png&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;606&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;- Path 항목에 %JAVA_HOME%\bin 속성 추가하기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;819&quot; data-origin-height=&quot;870&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpJRdC/btqUZvK59TO/oiy4FuQE1qAsDS11sKleG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpJRdC/btqUZvK59TO/oiy4FuQE1qAsDS11sKleG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpJRdC/btqUZvK59TO/oiy4FuQE1qAsDS11sKleG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpJRdC%2FbtqUZvK59TO%2Foiy4FuQE1qAsDS11sKleG1%2Fimg.png&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;819&quot; data-origin-height=&quot;870&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;다 되었다면 cmd를 이용해 간단한 테스트를 해보자.&lt;/p&gt;
&lt;p&gt;윈도우키+R을 누르고 cmd를 실행한다.&lt;/p&gt;
&lt;p&gt;javac 명령어를 입력하고 화면과 같은 결과가 나오면 설치 성공 확인.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;975&quot; data-origin-height=&quot;510&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpriMz/btqUYf22XqJ/25P5IPL3Z8AZWrExhkFGs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpriMz/btqUYf22XqJ/25P5IPL3Z8AZWrExhkFGs0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpriMz/btqUYf22XqJ/25P5IPL3Z8AZWrExhkFGs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpriMz%2FbtqUYf22XqJ%2F25P5IPL3Z8AZWrExhkFGs0%2Fimg.png&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;975&quot; data-origin-height=&quot;510&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;3. Eclipse 설치&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Java 개발을 편리하게 만드는 개발환경 중 대중적인 Eclipse를 설치(무료!!)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;구글에서 eclipse 검색 -&amp;gt; 최상단에 나오는 Eclipse Download 접속&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Download를 누르면 최신 버전의 Eclipse를 다운받게 되고&lt;/p&gt;
&lt;p&gt;Download Packages를 누르면 예전의 버전을 다운받을 수 있는 곳으로 페이지가 이동된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;****************************&lt;/p&gt;
&lt;p&gt;현재 JDK는 15버전이 최신 버전이고, 이에 따라 Eclipse의 최신버전도 함께 업데이트 된다.&lt;/p&gt;
&lt;p&gt;이번 예제에서는 JDK 1.8을 설치하였기 때문에(예전 버전의 JDK) 최신 버전의 Eclipse에서는 지원이 되지 않는다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;9.png&quot; data-origin-width=&quot;1747&quot; data-origin-height=&quot;511&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdqKoJ/btqUOBT3Upl/goESgA77n8BS9zxqhStlVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdqKoJ/btqUOBT3Upl/goESgA77n8BS9zxqhStlVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdqKoJ/btqUOBT3Upl/goESgA77n8BS9zxqhStlVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdqKoJ%2FbtqUOBT3Upl%2FgoESgA77n8BS9zxqhStlVK%2Fimg.png&quot; data-filename=&quot;9.png&quot; data-origin-width=&quot;1747&quot; data-origin-height=&quot;511&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;때문에 예전 버전의 Eclipse를 다운받기 위해 &lt;span style=&quot;color: #333333;&quot;&gt;Download Packages를 누르자.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Eclipse 버전 별 지원 JDK를 알아보고 싶다면?&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://wiki.eclipse.org/Eclipse/Installation&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://wiki.eclipse.org/Eclipse/Installation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;****************************&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;375&quot; data-origin-height=&quot;343&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsErho/btqUZurVosu/hkISfsTHUD8Y25Am9kjQSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsErho/btqUZurVosu/hkISfsTHUD8Y25Am9kjQSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsErho/btqUZurVosu/hkISfsTHUD8Y25Am9kjQSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsErho%2FbtqUZurVosu%2FhkISfsTHUD8Y25Am9kjQSk%2Fimg.png&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;375&quot; data-origin-height=&quot;343&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;나는 4.14 버전을 선택했다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;우측에 2019-12(4.14) 를 선택하고&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;10.png&quot; data-origin-width=&quot;324&quot; data-origin-height=&quot;248&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WKpt3/btqUYf23i5d/oxcFYNrIRSNTvf5x9UO5pK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WKpt3/btqUYf23i5d/oxcFYNrIRSNTvf5x9UO5pK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WKpt3/btqUYf23i5d/oxcFYNrIRSNTvf5x9UO5pK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWKpt3%2FbtqUYf23i5d%2FoxcFYNrIRSNTvf5x9UO5pK%2Fimg.png&quot; data-filename=&quot;10.png&quot; data-origin-width=&quot;324&quot; data-origin-height=&quot;248&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;OS에 맞는 버전을 다운로드 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;11.png&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;358&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpvsRf/btqUYfossTX/JwpKjTA34WZI3pdGd4IQU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpvsRf/btqUYfossTX/JwpKjTA34WZI3pdGd4IQU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpvsRf/btqUYfossTX/JwpKjTA34WZI3pdGd4IQU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpvsRf%2FbtqUYfossTX%2FJwpKjTA34WZI3pdGd4IQU0%2Fimg.png&quot; data-filename=&quot;11.png&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;358&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;다운로드 받은 파일을 압축 해제한뒤, eclipse.exe파일을 실행하면 끄읕-&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;12.png&quot; data-origin-width=&quot;1326&quot; data-origin-height=&quot;923&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dDN10Z/btqURvlMJYh/cCqZRvxshGmF9XkkcMUEEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dDN10Z/btqURvlMJYh/cCqZRvxshGmF9XkkcMUEEk/img.png&quot; data-alt=&quot;성-공&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dDN10Z/btqURvlMJYh/cCqZRvxshGmF9XkkcMUEEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdDN10Z%2FbtqURvlMJYh%2FcCqZRvxshGmF9XkkcMUEEk%2Fimg.png&quot; data-filename=&quot;12.png&quot; data-origin-width=&quot;1326&quot; data-origin-height=&quot;923&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;</description>
      <category>Java</category>
      <category>eclipse</category>
      <category>Java8</category>
      <category>java세팅</category>
      <category>JDK1.8</category>
      <category>이클립스</category>
      <category>자바세팅</category>
      <category>자바환경변수</category>
      <author>dev_zephyr</author>
      <guid isPermaLink="true">https://dev-zephyr.tistory.com/16</guid>
      <comments>https://dev-zephyr.tistory.com/16#entry16comment</comments>
      <pubDate>Wed, 27 Jan 2021 23:31:34 +0900</pubDate>
    </item>
    <item>
      <title>퍼즐게임 (HTML, JS)</title>
      <link>https://dev-zephyr.tistory.com/14</link>
      <description>&lt;p&gt;나는.. 포켓몬 151마리일때까지밖에 모른당..&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;script들을 파일로 나눠서 모듈화하는 법을 배웠다면&lt;/p&gt;
&lt;p&gt;좀 더 보기 편했을 것 같은데..&lt;/p&gt;
&lt;p&gt;풋풋하다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

            &lt;figure class=&quot;unsupported component-kakaotv&quot; contenteditable=&quot;false&quot; style=&quot;background:#000;margin:16px 0;min-height:72px;padding:10px 16px;display:flex;align-items:center;justify-content:center;text-align:center;box-sizing:border-box;width:100%;max-width:100%;&quot;&gt;
                &lt;p contenteditable=&quot;false&quot; style=&quot;margin:0;color:#8a8a8a;font-size:13px;line-height:1.6;user-select:none;pointer-events:none;&quot;&gt;동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.&lt;/p&gt;
            &lt;/figure&gt;
        
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1611741717467&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
        &amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&amp;gt;
        &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;
        &amp;lt;script src=&quot;https://code.jquery.com/jquery-3.5.1.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;

    &amp;lt;style&amp;gt;
        * {
            font-family: '나눔고딕';
        }
        body {
            background-color: beige;
        }
        #puzzle {
            /* border: 1px solid black; */
            border-radius: 10px;
            width: 400px;
            height: 400px;
            margin: 0 auto;
        }
        div.cell {
            /* border: 1px solid rgb(252, 178, 42); */
            width: 100px;
            height: 100px;
            line-height: 100px;
            overflow: hidden;
            float: left;
        }
        div.cell ul {
            position: relative;
            /* border: 1px solid rgb(123, 123, 255); */
            width: 200px;
            height: 100px;
            padding: 0;
            margin: 0;
            list-style-type: none;
            left: -100px;
            transition: left .2s ease-in;
        }
        div.cell ul li {
            width: 100px;
            height: 100px;
            float: left;
            text-align: center;
            line-height: 100px;
        }
        div.cell ul li:nth-child(1) {
            background-color: rgba(255, 175, 222, 0.466);
            border-radius: 8px;
            
        }
        div.cell ul li:nth-child(2) {
            background-color: rgba(162, 255, 190, 0.637);
            color: rgba(162, 255, 190, 0.637);
            border-radius: 8px;
            
        }
        div.cell ul li img {
            width: 90%;
            height: 90%;
            border-radius: 5px;
        }
        #status {
            width: 400px;
            height: 50px;
            line-height: 50px;
            text-align: center;
            background-color: rgba(118, 187, 187, 0.979);
            color: white;
            font-size: 20px;
            margin: 2px auto;
            border-radius: 10px;
        }
        #btn_wrap {
            text-align: center;
        }
        .button {
            display: inline-block;
            border-radius: 4px;
            background-color: #fd815b;
            border: none;
            color: #FFFFFF;
            text-align: center;
            font-size: 20px;
            padding: 10px;
            width: 200px;
            transition: all 0.5s;
            cursor: pointer;
            margin: 5px;
        }

        .button span {
            cursor: pointer;
            display: inline-block;
            position: relative;
            transition: 0.5s;
        }

        .button span:after {
            content: '\00bb';
            position: absolute;
            opacity: 0;
            top: 0;
            right: -20px;
            transition: 0.5s;
        }

        .button:hover span {
            padding-right: 25px;
        }

        .button:hover span:after {
            opacity: 1;
            right: 0;
        }
    &amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div id=&quot;container&quot;&amp;gt;
        &amp;lt;div id=&quot;status&quot;&amp;gt;Pokemon 맞추기 게임&amp;lt;/div&amp;gt;
        &amp;lt;div id=&quot;puzzle&quot;&amp;gt;&amp;lt;/div&amp;gt;
        &amp;lt;div id=&quot;btn_wrap&quot;&amp;gt;
            &amp;lt;button class=&quot;button&quot; style=&quot;vertical-align:middle&quot; onclick=&quot;start()&quot;&amp;gt;&amp;lt;span&amp;gt;시작 &amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;
        &amp;lt;/div&amp;gt;
        
        &amp;lt;script id=&quot;template_cell&quot; type=&quot;template/html&quot;&amp;gt;
            &amp;lt;div class=&quot;cell&quot;&amp;gt;
                &amp;lt;ul&amp;gt;
                    &amp;lt;li&amp;gt;&amp;lt;img src=&quot;poke/ball.png&quot;&amp;gt;&amp;lt;/li&amp;gt;
                    &amp;lt;li&amp;gt;-1&amp;lt;/li&amp;gt;
                &amp;lt;/ul&amp;gt;
            &amp;lt;/div&amp;gt;
        &amp;lt;/script&amp;gt;
    &amp;lt;/div&amp;gt;


    &amp;lt;script&amp;gt;
        // 변수 선언 부분
        var isPlay = false; // 게임의 시작을 알리는 변수.
        // 이미지들의 경로 배열
        var pathArr = ['poke/01.png', 'poke/02.png', 'poke/03.png', 'poke/04.png', 
            'poke/05.png', 'poke/06.png', 'poke/07.png', 'poke/08.png', 'poke/ball.png'];
        var successCount = 0;
        var statusEl = document.getElementById('status');
        var template_cell = document.getElementById(&quot;template_cell&quot;);
        var txtCell = template_cell.innerHTML;
        var puzzle = document.getElementById(&quot;puzzle&quot;);
        var txtCells = &quot;&quot;;
        for(var i=0; i&amp;lt;16; i++) {
            txtCells += txtCell;
        }
        puzzle.innerHTML = txtCells;
        var cells = document.getElementsByClassName(&quot;cell&quot;);

        // 각각 셀에 0~7까지의 텍스트와 이미지를 넣는다..
        for(var i=0; i&amp;lt;cells.length; i++) {
            // 해당 cell의 li태그를 가져오기
            var numLabel = cells[i].getElementsByTagName(&quot;li&quot;)[1];
            numLabel.innerHTML = '&amp;lt;img src=&quot;' + pathArr[i % (cells.length/2)] + '&quot;&amp;gt;' +
                                    i % (cells.length/2);
        }

// 셀의 숫자를 섞어준다.
        for(var cnt=0; cnt&amp;lt;50; cnt++) {
            var i = Math.floor(Math.random()*16);
            var j = Math.floor(Math.random()*16);
            var iLabel = cells[i].getElementsByTagName(&quot;li&quot;)[1];
            var jLabel = cells[j].getElementsByTagName(&quot;li&quot;)[1];
            var tmp = iLabel.innerHTML;
            iLabel.innerHTML = jLabel.innerHTML;
            jLabel.innerHTML = tmp;
        }

        for(var i=0; i&amp;lt;cells.length; i++) {
            cells[i].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;0px&quot;;
        }

        function start() {
            intro01();
        }

        var intro01 = function intro_01() {
            // 첫번째 쑈
            var performCnt = 0;
            var interval_f1 = setInterval(function() {
                var cell_ul = cells[performCnt].getElementsByTagName(&quot;ul&quot;)[0];
                cell_ul.style.left = &quot;-100px&quot;;
                performCnt++;
                if(performCnt == 16) {
                    intro_02();
                    statusEl.innerText = &quot;성공하길 바래 :)&quot;
                    clearInterval(interval_f1);
                }
            }, 100);
        }

        function intro_02() {
            // 두번째 쑈
            var performCnt = 0;
            var i = 0;
            var j = 0;
            var interval_f2 = setInterval(function() {
                var cell_ul = cells[i + j*4].getElementsByTagName(&quot;ul&quot;)[0];
                cell_ul.style.left = &quot;0px&quot;;
                performCnt++;
                j++;
                if(j == 4) {
                    i++;
                    j = 0;
                }
                if(performCnt == 16) {
                    intro_03();
                    statusEl.innerText = &quot;Are You Ready?&quot;
                    clearInterval(interval_f2);
                }
            }, 100);
        }

        function intro_03() {
            var i = 15;
            var interval_f3 = setInterval(function() {
                console.log(i);
                cells[i--].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;-100px&quot;;
                console.log(i);
                cells[i--].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;-100px&quot;;
                console.log(i);
                cells[i--].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;-100px&quot;;
                console.log(i);
                cells[i--].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;-100px&quot;;
                if(i == -1) {
                    intro_04();
                    clearInterval(interval_f3);
                }
            }, 200);

        }
function intro_04() {
            // 1초에 함번씩 콜백함수 기능을 반복한다.
            var count = 4;
            var intervalRef = setInterval(function() {
                count--;
                if(count == 0) {
                    clearInterval(intervalRef);
                    statusEl.innerText = &quot;Go!&quot;;
                    // 함수 호출 부분
                    for(var i=0; i&amp;lt;cells.length; i++) {
                        setEventHandler(cells[i]);
                    }
                    isPlay = true;
                    return;
                }
                statusEl.innerText = count;
            }, 1000);

            // 5초 후에 전체 감춰주기
            setTimeout(function() {
                for(var i=0; i&amp;lt;cells.length; i++) {
                    // $(cells[i]).trigger('click');
                    showHideLabel(cells[i]);
                }
            }, 4000);
        }
        
        
        // 각각 셀에 이벤트 등록
        // 함수 선언 부분
        function showHideLabel(cell) {
            var ulTag = cell.getElementsByTagName(&quot;ul&quot;)[0];
            if(ulTag.style.left == '0px') {
                ulTag.style.left = '-100px';
            } else {
                ulTag.style.left = '0px';
            }
        }

        var tmpCell = null;
        function setEventHandler(cell) {
            cell.addEventListener('click',  function() {
                // 규칙 유효성 check
                if(isPlay) {
                    // 처음 눌렀나? 두번째 눌렀나?
                    if(tmpCell == null) {
                        statusEl.innerText = &quot;&quot;;
                        tmpCell = this;
                    } else {
                        if(tmpCell == this) {
                            statusEl.innerText = &quot;같은 셀을 두번 선택했습니다.&quot;
                            return;
                        }
                        // 게임 판정 부분
                        var check_1 = tmpCell.getElementsByTagName(&quot;li&quot;)[1].innerText;
                        var check_2 = this.getElementsByTagName(&quot;li&quot;)[1].innerText;

                        // 성공했을때
                        if(check_1 == check_2) {
                            statusEl.innerText = &quot;Great!!&quot;;
                            successCount++;
                            if(successCount == 8) {
                                finish();
                            }
                        } else { // 툴렸을때
                            statusEl.innerText = &quot;Wrong!&quot;;
                            // 다시뒤집기
                            var cell_1 = tmpCell.getElementsByTagName(&quot;ul&quot;)[0];
                            var cell_2 = this.getElementsByTagName(&quot;ul&quot;)[0];
                            // showHideLabel(this);
                            cell_2.style.left = &quot;-100px&quot;; 

                            //1.5초 후에 다시 감추기 (0px)
                            setTimeout(function() {
                                cell_1.style.left = &quot;0px&quot;; 
                                cell_2.style.left = &quot;0px&quot;; 
                                clearInterval();
                                return;
                            }, 1000);
                            

                            tmpCell = null;
                            return;
                        }
                        
                        tmpCell = null;
                    }
                    showHideLabel(this);
                }
            }, true);
            $(cell).trigger('click');

        }
function finish() {
            var cnt = 0;
            var flag = true;

            var finish_evt1 = setInterval(function(){
                // 인터벌에선 for문을 못쓰기때문에 하드..
                if(flag) {
                    cells[0].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;0px&quot;;
                    cells[2].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;0px&quot;;
                    cells[5].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;0px&quot;;
                    cells[7].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;0px&quot;;
                    cells[8].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;0px&quot;;
                    cells[10].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;0px&quot;;
                    cells[13].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;0px&quot;;
                    cells[15].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;0px&quot;;
                    cells[1].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;-100px&quot;;
                    cells[3].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;-100px&quot;;
                    cells[4].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;-100px&quot;;
                    cells[6].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;-100px&quot;;
                    cells[9].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;-100px&quot;;
                    cells[11].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;-100px&quot;;
                    cells[12].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;-100px&quot;;
                    cells[14].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;-100px&quot;;
                    statusEl.innerText = &quot;&quot;;
                    flag = false;
                    cnt++;
                } else {
                    cells[0].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;-100px&quot;;
                    cells[2].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;-100px&quot;;
                    cells[5].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;-100px&quot;;
                    cells[7].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;-100px&quot;;
                    cells[8].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;-100px&quot;;
                    cells[10].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;-100px&quot;;
                    cells[13].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;-100px&quot;;
                    cells[15].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;-100px&quot;;
                    cells[1].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;0px&quot;;
                    cells[3].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;0px&quot;;
                    cells[4].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;0px&quot;;
                    cells[6].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;0px&quot;;
                    cells[9].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;0px&quot;;
                    cells[11].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;0px&quot;;
                    cells[12].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;0px&quot;;
                    cells[14].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;0px&quot;;
                    statusEl.innerText = &quot;congratulation!!!!&quot;;
                    flag = true;
                    cnt++;
                }
                if(cnt == 10) {
                    cells[1].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;-100px&quot;;
                    cells[3].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;-100px&quot;;
                    cells[4].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;-100px&quot;;
                    cells[6].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;-100px&quot;;
                    cells[9].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;-100px&quot;;
                    cells[11].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;-100px&quot;;
                    cells[12].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;-100px&quot;;
                    cells[14].getElementsByTagName(&quot;ul&quot;)[0].style.left = &quot;-100px&quot;;
                    clearInterval(finish_evt1);
                    return;
                }
            }, 500);
             
        }
    &amp;lt;/script&amp;gt;


&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Repository</category>
      <category>CSS</category>
      <category>HTML</category>
      <category>javascript</category>
      <author>dev_zephyr</author>
      <guid isPermaLink="true">https://dev-zephyr.tistory.com/14</guid>
      <comments>https://dev-zephyr.tistory.com/14#entry14comment</comments>
      <pubDate>Wed, 27 Jan 2021 19:03:07 +0900</pubDate>
    </item>
    <item>
      <title>계산기 (Java Swing)</title>
      <link>https://dev-zephyr.tistory.com/13</link>
      <description>&lt;p&gt;처음으로 만든 GUI 프로그램이었다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;지금 다시 코드를 리뷰해 보니,&lt;/p&gt;
&lt;p&gt;엄청나게 치열했던 기억이 새록새록 나고&lt;/p&gt;
&lt;p&gt;또, 고치고 싶은 코드도 많이 보인다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그때의 그 풋풋함을 나중에도 기억하게&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그대로 남겨놔야겠다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1611741403945&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.StringTokenizer;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class MyLayout02 extends JFrame{
	
	MyFrame02 frame;
	
	ArrayList&amp;lt;String&amp;gt; list = new ArrayList&amp;lt;&amp;gt;(); // 화면에 보여지는 식을 저장.
	ArrayList&amp;lt;String&amp;gt; tmpNumList = new ArrayList&amp;lt;&amp;gt;(); // 계산에 쓸 숫자를 스트링으로 저장.
	ArrayList&amp;lt;Integer&amp;gt; numList = new ArrayList&amp;lt;&amp;gt;();	// 계산에 쓸 숫자를 저장.
	ArrayList&amp;lt;String&amp;gt; operList = new ArrayList&amp;lt;&amp;gt;();	// 계산에 쓸 연산자를 저장.
	
	String showNum = &quot;&quot;;
	int result;
	
	JTextField showFormula = null;
	JTextField showNumber = null;		

	public MyLayout02() {
		
		frame = new MyFrame02();
		run();
		
	}
	
	
	public void run() {
		frame.setLayout(null);
		
		showFormula = new JTextField();
		showFormula.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 25));
		showFormula.setHorizontalAlignment(JTextField.RIGHT);
		showFormula.setBounds(0, 0, 480, 40);
		frame.getContentPane().add(showFormula);
		
		showNumber = new JTextField();
		showNumber.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 50));
		showNumber.setHorizontalAlignment(JTextField.RIGHT);
		showNumber.setBounds(0, 40, 480, 120);
		frame.getContentPane().add(showNumber);
		
		JButton b_MC = new JButton(&quot;MC&quot;);
		b_MC.setBounds(0, 160, 96, 80); 
		b_MC.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 30));
		frame.getContentPane().add(b_MC);
		
		JButton b_MR = new JButton(&quot;MR&quot;);
		b_MR.setBounds(96, 160, 96, 80);
		b_MR.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 30));
		frame.getContentPane().add(b_MR);
		
		JButton b_MS = new JButton(&quot;MS&quot;);
		b_MS.setBounds(192, 160, 96, 80);
		b_MS.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 30));
		frame.getContentPane().add(b_MS);
		
		JButton b_MPlus = new JButton(&quot;M+&quot;);
		b_MPlus.setBounds(288, 160, 96, 80);
		b_MPlus.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 30));
		frame.getContentPane().add(b_MPlus);
		
		JButton b_Mminus = new JButton(&quot;M-&quot;);
		b_Mminus.setBounds(384, 160, 96, 80);
		b_Mminus.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 30));
		frame.getContentPane().add(b_Mminus);
		//
		
		JButton backSpace = new JButton(&quot;&amp;lt;-&quot;);
		backSpace.setBounds(0, 240, 96, 80);
		backSpace.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 30));
		frame.getContentPane().add(backSpace);
		
		JButton ce = new JButton(&quot;CE&quot;);
		ce.setBounds(96, 240, 96, 80);
		ce.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 30));
		frame.getContentPane().add(ce);
		
		JButton reset = new JButton(&quot;C&quot;);
		reset.setBounds(192, 240, 96, 80);
		reset.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 30));
		frame.getContentPane().add(reset);
		reset.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				list.clear();
				numList.clear();
				operList.clear();
				tmpNumList.clear();
				showFormula.setText(&quot;&quot;);
				showNumber.setText(&quot;0&quot;);
			}
		});
		
		JButton plusMinus = new JButton(&quot;&amp;plusmn;&quot;);
		plusMinus.setBounds(288, 240, 96, 80);
		plusMinus.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 30));
		frame.getContentPane().add(plusMinus);
		
		JButton root = new JButton(&quot;&amp;radic;&quot;);
		root.setBounds(384, 240, 96, 80);
		root.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 30));
		frame.getContentPane().add(root);
		//
		
		JButton seven = new JButton(&quot;7&quot;);
		seven.setBounds(0, 320, 96, 80);
		seven.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 30));
		frame.getContentPane().add(seven);
		seven.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				input(&quot;7&quot;);
				showNumber.setText(showNum);
			}
		});
		
		JButton eight = new JButton(&quot;8&quot;);
		eight.setBounds(96, 320, 96, 80);
		eight.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 30));
		frame.getContentPane().add(eight);
		eight.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				input(&quot;8&quot;);
				showNumber.setText(showNum);
			}
		});
		
		JButton nine = new JButton(&quot;9&quot;);
		nine.setBounds(192, 320, 96, 80);
		nine.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 30));
		frame.getContentPane().add(nine);
		nine.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				input(&quot;9&quot;);
				showNumber.setText(showNum);
			}
		});
		
		JButton div = new JButton(&quot;/&quot;);
		div.setBounds(288, 320, 96, 80);
		div.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 30));
		frame.getContentPane().add(div);
		div.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				showFormula.setText(inputOper(&quot;/&quot;));;
			}
		});

		JButton remain = new JButton(&quot;%&quot;);
		remain.setBounds(384, 320, 96, 80);
		remain.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 30));
		frame.getContentPane().add(remain);
		//
		
		JButton four = new JButton(&quot;4&quot;);
		four.setBounds(0, 400, 96, 80);
		four.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 30));
		frame.getContentPane().add(four);
		four.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				input(&quot;4&quot;);
				showNumber.setText(showNum);
			}
		});
		
		JButton five = new JButton(&quot;5&quot;);
		five.setBounds(96, 400, 96, 80);
		five.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 30));
		frame.getContentPane().add(five);
		five.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				input(&quot;5&quot;);
				showNumber.setText(showNum);
			}
		});
		
		JButton six = new JButton(&quot;6&quot;);
		six.setBounds(192, 400, 96, 80);
		six.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 30));
		frame.getContentPane().add(six);
		six.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				input(&quot;6&quot;);
				showNumber.setText(showNum);
			}
		});
		
		JButton mul = new JButton(&quot;*&quot;);
		mul.setBounds(288, 400, 96, 80);
		mul.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 30));
		frame.getContentPane().add(mul);
		mul.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				showFormula.setText(inputOper(&quot;*&quot;));;
			}
		});
		
		JButton oneX = new JButton(&quot;1/x&quot;);
		oneX.setBounds(384, 400, 96, 80);
		oneX.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 30));
		frame.getContentPane().add(oneX);
		//
		
		JButton one = new JButton(&quot;1&quot;);
		one.setBounds(0, 480, 96, 80);
		one.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 30));
		frame.getContentPane().add(one);
		one.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				input(&quot;1&quot;);
				showNumber.setText(showNum);
			}
		});
		
		JButton two = new JButton(&quot;2&quot;);
		two.setBounds(96, 480, 96, 80);
		two.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 30));
		frame.getContentPane().add(two);
		two.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				input(&quot;2&quot;);
				showNumber.setText(showNum);
			}
		});
		
		JButton three = new JButton(&quot;3&quot;);
		three.setBounds(192, 480, 96, 80);
		three.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 30));
		frame.getContentPane().add(three);
		three.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				input(&quot;3&quot;);
				showNumber.setText(showNum);
			}
		});
		
		JButton sub = new JButton(&quot;-&quot;);
		sub.setBounds(288, 480, 96, 80);
		sub.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 30));
		frame.getContentPane().add(sub);
		sub.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				showFormula.setText(inputOper(&quot;-&quot;));;
			}
		});
		
		JButton equal = new JButton(&quot;=&quot;);
		equal.setBounds(384, 480, 96, 160);
		equal.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 30));
		frame.getContentPane().add(equal);
		equal.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
				showFormula.setText(inputOper(&quot;=&quot;));;
				showNumber.setText(Integer.toString(calc()));
			}
		});
//
		
		JButton zero = new JButton(&quot;0&quot;);
		zero.setBounds(0, 560, 192, 80);
		zero.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 30));
		frame.getContentPane().add(zero);
		zero.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				input(&quot;0&quot;);
				showNumber.setText(showNum);
			}
		});
		
		JButton point = new JButton(&quot;.&quot;);
		point.setBounds(192, 560, 96, 80);
		point.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 30));
		frame.getContentPane().add(point);
		
		JButton add = new JButton(&quot;+&quot;);
		add.setBounds(288, 560, 96, 80);
		add.setFont(new Font(&quot;Consolas&quot;, Font.ITALIC, 30));
		frame.getContentPane().add(add);
		add.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				showFormula.setText(inputOper(&quot;+&quot;));;
			}
		});
	}
	
	
	public void input(String input) {
		list.add(input);					// 화면에 보여지는 식에 저장하고
		showNum = showNum.concat(input);	// 화면에 보여지는 숫자에 저장
		
	}	
	
	public String inputOper(String oper) {	// 연산자 버튼을 누르면 식을 보여주는 화면에 여태까지 입력받은 숫자+연산자를 리턴해서 출력한다.
		list.add(oper);
		operList.add(oper);
		tmpNumList.add(showNum);			
		
		String tmp = &quot;&quot;;
		for(int i=0; i&amp;lt;list.size(); i++) {	// 입력받은 모든것은 list에 저장되어 있으므로,
			if(i == 0) {
				tmp = list.get(i);			// 리스트 전체에 저장된 값을 하나의 스트링으로 
			} else {
				tmp = tmp.concat(list.get(i));	// 합친다.
			}
		}
		
		showNum = &quot;&quot;;						// 화면에 보여질 숫자는 다시 처음부터 보여져야 하기 때문에 초기화한다.
		return tmp;
	}
	
	public int calc() {
		
		int num;
		
		for(int i=0; i&amp;lt;tmpNumList.size(); i++) {	// 숫자는 &amp;lt;String&amp;gt;배열에 담겨있기때문에,
			num = Integer.parseInt(tmpNumList.get(i));	// 계산을 위해 Int로 바꿔서 &amp;lt;Integer&amp;gt;배열에 담는다.
			numList.add(num);
		}
		
		for(int i=0; i&amp;lt;operList.size(); i++) {	// 계산한다.
			
			if(i == 0) {					
				switch(operList.get(i)) {
				case &quot;+&quot; : result = numList.get(i) + numList.get(i+1); break;
				case &quot;-&quot; : result = numList.get(i) - numList.get(i+1); break;
				case &quot;*&quot; : result = numList.get(i) * numList.get(i+1); break;
				case &quot;/&quot; : result = numList.get(i) / numList.get(i+1); break;
				}
			} else {
				switch(operList.get(i)) {
				case &quot;+&quot; : result += numList.get(i+1); break;
				case &quot;-&quot; : result -= numList.get(i+1); break;
				case &quot;*&quot; : result *= numList.get(i+1); break;
				case &quot;/&quot; : result /= numList.get(i+1); break;
			}
			
			}
		}
		
		return result;
	}
	
	
	public static void main(String[] args) {
		new MyLayout02();

	}

}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1611741429441&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import javax.swing.JFrame;

public class MyFrame02 extends JFrame{

	public MyFrame02() {
		this(&quot;계산기 by zephyr&quot;, 490, 680);
	}
	
	public MyFrame02(String title, int width, int height) {
		setTitle(title);
		setSize(width, height);
		
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	// X버튼 누르면 종료
		
	}

	public static void main(String[] args) {
		new MyFrame02();

	}

}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

            &lt;figure class=&quot;unsupported component-kakaotv&quot; contenteditable=&quot;false&quot; style=&quot;background:#000;margin:16px 0;min-height:72px;padding:10px 16px;display:flex;align-items:center;justify-content:center;text-align:center;box-sizing:border-box;width:100%;max-width:100%;&quot;&gt;
                &lt;p contenteditable=&quot;false&quot; style=&quot;margin:0;color:#8a8a8a;font-size:13px;line-height:1.6;user-select:none;pointer-events:none;&quot;&gt;동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.&lt;/p&gt;
            &lt;/figure&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;</description>
      <category>Repository</category>
      <category>java</category>
      <category>계산기</category>
      <category>자바</category>
      <category>자바계산기</category>
      <author>dev_zephyr</author>
      <guid isPermaLink="true">https://dev-zephyr.tistory.com/13</guid>
      <comments>https://dev-zephyr.tistory.com/13#entry13comment</comments>
      <pubDate>Wed, 27 Jan 2021 18:58:17 +0900</pubDate>
    </item>
    <item>
      <title>명품자바 8장 오픈챌린지 (Hangman 게임)</title>
      <link>https://dev-zephyr.tistory.com/12</link>
      <description>&lt;p&gt;String을 자르고 붙이고 지지고 볶는건&amp;nbsp;&lt;/p&gt;
&lt;p&gt;예전이나 지금이나 엄청 집중하게 만든다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1611741200579&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class HangMan {
	
	ArrayList&amp;lt;String&amp;gt; words = new ArrayList&amp;lt;String&amp;gt;();
	Scanner scanWords = new Scanner(new FileReader(&quot;words.txt&quot;));
	Scanner scan = new Scanner(System.in);
	char[] question;
	final int WORDS_SIZE = 30;
	
	int randomNum;
	char answer = ' ';
	int cnt = 0;
	int answerCnt = 0;
	boolean flag = false;
	
	public HangMan() throws FileNotFoundException {
		while(scanWords.hasNext()) {			// 변수들을 초기화 해준다.
			String word = scanWords.nextLine();
			words.add(word);
		}
		System.out.println(&quot;지금부터 행맨 게임을 시작합니다.&quot;);
		while(true) {
			init();
			run();
		}
	}
	
	public void init() {						// 무한루프를 돌아, 값을 다시 초기화해야하는 
		randomNum = 0;
		cnt = 0;
		answerCnt = 0;
		answer = ' ';
	}
	
	public void run() {
		Random rand = new Random();
		Random rand2_1 = new Random();
		Random rand2_2 = new Random();
		randomNum = rand.nextInt(WORDS_SIZE);
		
		question =  words.get(randomNum).toCharArray();	// 문제로 낼 단어를 char배열로 만든다.
		
		int questionSize = question.length;				// 단어의 알파벳 숫자중에서 랜덤 숫자를 뽑아야 하기때문에 char배열의 사이즈를 알아낸다.
		int randomNum2_1;
		int randomNum2_2;
		
		while(true) {
			randomNum2_1 = rand2_1.nextInt(questionSize);	// 0부터 char배열의 사이즈 중 랜덤 숫자 한개뽑음
			randomNum2_2 = rand2_2.nextInt(questionSize);	// 0부터 char배열의 사이즈 중 랜덤 숫자 한개 더 뽑음
			if(randomNum2_1 == randomNum2_2) {				// 랜덤숫자 두개가 같은 숫자가 안나오게 중복체크
				continue;
			}
			break;
		}
		
		for(int i=0; i&amp;lt;question.length; i++) {		// 문제 단어를 출력하는데,
			if(i == randomNum2_1) {					// 랜덤 숫자 index에 있는 알파벳은 - 로 출력한다.
				System.out.print(&quot;-&quot;);
			} else if( i == randomNum2_2) {			// 알파벳 하나더.
				System.out.print(&quot;-&quot;);
			} else {
				System.out.print(question[i]);
			}
		}
		System.out.println();
		
		while(true) {
			System.out.print(&quot;&amp;gt;&amp;gt; &quot;);
			String tmpAnswer = scan.next();			// 알파벳 하나를 입력받고
			answer = tmpAnswer.charAt(0);			// char배열과 비교해야하기때문에 char로 캐스팅
			
			if(answer == question[randomNum2_1]) {	// 입력받은값이 랜덤 알파벳1과 같으면
				answerCnt++;						// 정답숫자 하나 카운트하고
				flag = true;						// 깃발을 true로 한다.
			}
			if(answer == question[randomNum2_2]) {	// 입력받은값이 랜덤 알파벳2와 같으면
				answerCnt++;						// 정답숫자 하나 카운드 하고
				flag = false;						// 깃발을 false로 한다.
			}
			
			if(answerCnt == 1) {						// 정답숫자가 하나면
				if(flag) {									// flag가 true면 알파벳1을 맞춘것이기때문에
					for(int i=0; i&amp;lt;question.length; i++) {	// 알파벳2만 -로 출력한다. 
						if( i == randomNum2_2) {
							System.out.print(&quot;-&quot;);
						} else {
							System.out.print(question[i]);
						}
					}
					System.out.println();
				} else if (!flag) {						// 반대로, flag가 false면 알파벳 2를 맞춘것이기때문에 
					for(int i=0; i&amp;lt;question.length; i++) {	// 알파벳 1만 -로 출력한다.
						if( i == randomNum2_1) {
							System.out.print(&quot;-&quot;);
						} else {
							System.out.print(question[i]);
						}
					}
					System.out.println();
				}
			}
			
			if(answerCnt == 2) {						// 정답숫자가 2개면 다 맞춘것이기때문에
				choice();								// choice 메소드로, choice 메소드 안에 있는 내용이
				return;									// 똑같이 두번 나와서 메소드로 만듦.
			}
			
			cnt++;										// 여태까지 if문에 하나도 안걸린거면 정답을 못맞춘것이기때문에, 카운트++
			
			if(cnt == 5) {								// 5번동안 못맞췄기때문에
				System.out.println(&quot;5번 실패하였습니다.&quot;);
				choice();								// choice 메소드로 보낸다.
				return;
			}
		}
		
	}
	
	public void choice() {
		for(int i=0; i&amp;lt;question.length; i++) {			// 정답 단어를 쫙 출력해주고
			System.out.print(question[i]);
		}
		System.out.println();
		System.out.print(&quot;Next(y/n)? &quot;);				// 물어본다. 계속할지말지
		String choice = scan.next();
		if(choice.equals(&quot;y&quot;)) {						// 계속 하면 바로 보내고(생성자에서 무한루프임)
			return;
		} else {
			System.out.println(&quot;종료&quot;);					// 아니면 시스템 종료.
			System.exit(0);
		}
	}
	
	public static void main(String[] args) throws FileNotFoundException {
		new HangMan();

	}

}&lt;/code&gt;&lt;/pre&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-filename=&quot;hang.jpg&quot; data-origin-width=&quot;365&quot; data-origin-height=&quot;774&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QTB26/btqUWtmNFCq/slxRe0UmR9AmXZFekG6mqK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QTB26/btqUWtmNFCq/slxRe0UmR9AmXZFekG6mqK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QTB26/btqUWtmNFCq/slxRe0UmR9AmXZFekG6mqK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQTB26%2FbtqUWtmNFCq%2FslxRe0UmR9AmXZFekG6mqK%2Fimg.jpg&quot; data-filename=&quot;hang.jpg&quot; data-origin-width=&quot;365&quot; data-origin-height=&quot;774&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;</description>
      <category>Repository</category>
      <category>java</category>
      <category>명품자바</category>
      <category>자바</category>
      <author>dev_zephyr</author>
      <guid isPermaLink="true">https://dev-zephyr.tistory.com/12</guid>
      <comments>https://dev-zephyr.tistory.com/12#entry12comment</comments>
      <pubDate>Wed, 27 Jan 2021 18:53:39 +0900</pubDate>
    </item>
    <item>
      <title>명품자바 7장 오픈챌린지 (단어 Quiz 게임)</title>
      <link>https://dev-zephyr.tistory.com/11</link>
      <description>&lt;p&gt;컬렉션을 사용하기 시작했다.&lt;/p&gt;
&lt;p&gt;(근데 왜 Arraylist가 아닌 Vector를 썼지..?)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1611740990916&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.Random;
import java.util.Scanner;
import java.util.Vector;

class Word {
	private String eng;
	private String kor;
	
	public Word(String eng, String kor) {
		this.eng = eng;
		this.kor = kor;
	}
	
	public String getEng() {
		return eng;
	}
	
	public String getKor() {
		return kor;
	}
	
}


public class OpenChallenge01 {
	Scanner scan = new Scanner(System.in);
	Vector&amp;lt;Word&amp;gt; v = new Vector&amp;lt;&amp;gt;();
	Random rand = new Random();
	final int MAX_CHOICE = 4;
	int[] question = new int[MAX_CHOICE];
	
	public OpenChallenge01() {
		setVector();			// 벡터에 영+한 단어 객체를 생성한다.
		System.out.println(&quot;Java 단어 테스트를 시작합니다. -1을 입력하면 종료합니다.&quot;);
		System.out.println(&quot;현재 &quot; + v.size() + &quot;개의 단어가 들어 있습니다.&quot;);
		System.out.println(&quot;__________________________________________________&quot;);
		game();
	}
	
	public void game() {
		while(true) {
			setChoice(); 	// 랜덤 숫자 4개(보기의 숫자만큼) 생성해서 배열에 담기
			int answerNum = rand.nextInt(4);	//0~3중 정답번호 생성
			int answerIndex = question[answerNum]; // 정답번호를 가지고있는 배열 안에 들어있는 숫자가 정답이다.
			
			System.out.println(v.get(answerIndex).getEng() + &quot;?&quot;); // 정답 인덱스의 영어단어를 물어보고
			
			for(int i=0; i&amp;lt;question.length; i++) {		//벡터의 인덱스로는 question 배열에 담긴 값들을 하나씩 넣으면서
				System.out.print(&quot;(&quot; + (i+1) + &quot;)&quot;);	//해당 인덱스의 kor를 출력한다.
				System.out.print(v.get(question[i]).getKor() + &quot; &quot;); 
			}
			System.out.print(&quot;&amp;gt;&amp;gt; &quot;);
			
			int choice = scan.nextInt();
			if(choice == -1) {
				System.out.println(&quot;종료합니다.&quot;);
				break;
			}
			else if(choice-1 == answerNum) { //초이스는 1~4이지만 인덱스는 0~3이기때문에 초이스-1해준다.
				System.out.println(&quot;Excellent !!&quot;);
				System.out.println(&quot;__________________________________________________&quot;);
			} else {
				System.out.println(&quot;No. !!&quot;);
				System.out.println(&quot;__________________________________________________&quot;);
			}
		}
		
		
	}
	
	public void setChoice() {
		for(int i=0; i&amp;lt;MAX_CHOICE; i++) {		// 보기 4개를 랜덤하게 만들기위해 question배열에 0~3 랜덤값 4개를 넣는다.
			question[i] = rand.nextInt(v.size()); // 같은 보기가 나오면 안되기때문에 중복되지 않게 넣는다.
			for(int j=0; j&amp;lt;i; j++) {
				if(question[i] == question[j]) {
					i--;
					continue;
				}
			}
		}
	}
	
	public void setVector() {
		v.add(new Word(&quot;constructor&quot;, &quot;생성자&quot;));
		v.add(new Word(&quot;overriding&quot;, &quot;재정의&quot;));
		v.add(new Word(&quot;extends&quot;, &quot;상속&quot;));
		v.add(new Word(&quot;array&quot;, &quot;배열&quot;));
		v.add(new Word(&quot;string&quot;, &quot;문자열&quot;));
		v.add(new Word(&quot;character&quot;, &quot;문자&quot;));
		v.add(new Word(&quot;integer&quot;, &quot;정수&quot;));
		v.add(new Word(&quot;double&quot;, &quot;실수&quot;));
		v.add(new Word(&quot;abstract&quot;, &quot;추상&quot;));
		v.add(new Word(&quot;implements&quot;, &quot;구현하다&quot;));
	}
	
	public static void main(String[] args) {
		new OpenChallenge01();
	}

}&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-filename=&quot;캡처 (1).jpg&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;685&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yM2CG/btqUYgOgg5E/3vvE7JHf9K4IuSm88Wxm31/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yM2CG/btqUYgOgg5E/3vvE7JHf9K4IuSm88Wxm31/img.jpg&quot; data-alt=&quot;결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yM2CG/btqUYgOgg5E/3vvE7JHf9K4IuSm88Wxm31/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyM2CG%2FbtqUYgOgg5E%2F3vvE7JHf9K4IuSm88Wxm31%2Fimg.jpg&quot; data-filename=&quot;캡처 (1).jpg&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;685&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;</description>
      <category>Repository</category>
      <category>java</category>
      <category>명품자바</category>
      <category>자바</category>
      <author>dev_zephyr</author>
      <guid isPermaLink="true">https://dev-zephyr.tistory.com/11</guid>
      <comments>https://dev-zephyr.tistory.com/11#entry11comment</comments>
      <pubDate>Wed, 27 Jan 2021 18:51:08 +0900</pubDate>
    </item>
    <item>
      <title>명품자바 5장 오픈챌린지 (Bear와 Fish게임)</title>
      <link>https://dev-zephyr.tistory.com/10</link>
      <description>&lt;p&gt;추상클래스, 상속, 랜덤 클래스, 2차원 배열 등등&lt;/p&gt;
&lt;p&gt;배웠던 모든것을 사용해야 하는 난이도 있는 문제였다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1611740683493&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.Random;

public abstract class GameObject {
	protected int distance; // 한번이동거리
	protected int x, y; // 현재위치
	
	public GameObject(int startX, int startY, int distance)	 {//초기 위치와 이동 거리 설정
		this.x = startX;
		this.y = startY;
		this.distance = distance;
	}
	
	public int getX() { 
		return x;
	}
	
	public int getY() {
		return y;
	}
	
	public void setX(int x) { // 좌표에 움직임 추가를 위해 x,y setter 생성
		this.x = x;
	}
	
	public void setY(int y) {
		this.y = y;
	}
	
	public boolean collide(GameObject p) { // 충돌했을때 true 리턴
		if(this.x == p.getX() &amp;amp;&amp;amp; this.y == p.getY()) {
			return true;
		} else {
			return false;
		}
	}
	
	protected abstract void move(int inputX, int inputY); // 이동 후의 새로운 위치로 x, y 변경
	protected abstract char getShape(); // 객체의 모양을 나타내는 문자 리턴
}

class Bear extends GameObject {
	
	public Bear(int startX, int startY, int distance) {
		super(startX, startY, distance);
	}

	protected void move(int inputX, int inputY) {
		if(!(getX() == 0 &amp;amp;&amp;amp; inputX == -1)) { //bear가 맵 밖으로 나가려고할때 제외
			this.x += inputX; 
		}
		if(!(getY() == 0 &amp;amp;&amp;amp; inputY == -1)) {
			this.y += inputY;
		}
	}
	
	protected char getShape() {
		return 'B';
	}
	
}

class Fish extends GameObject {
	Random rand = new Random();
	int randomMove;
	int cnt = 1;
	
	public Fish(int startX, int startY, int distance) {
		super(startX, startY, distance);
	}
	
	protected void move(int x, int y) {
		if(cnt &amp;lt; 4) { // fish는 3번 이동금지
			cnt++;
			return;
		} else { // 2번 랜덤 한칸 이동
			randomMove = rand.nextInt(4);
			switch(randomMove) {
			case 0 :
				setX(getX() + 1);
				break;
			case 1 :
				setX(getX() - 1);
				break;
			case 2 :
				setY(getY() + 1);
				break;
			case 3 :
				setY(getY() - 1);
			}
			if(cnt == 5) { // 2번 이동하면 cnt를 다시 처음값 1로 초기화.
				cnt = 1;
				return;
			}
			cnt++;
		}
	}
	
	protected char getShape() {
		return '@';
	}
	
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1611740715892&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.Scanner;

public class Game {
	Scanner scan = new Scanner(System.in);
	char[][] map;
	Bear bear;
	Fish fish;
	int inputX = 0, inputY = 0;
	
	Game() {
		run();
	}

	void showMap(Bear bear, Fish fish) {
		for(int i=0; i&amp;lt;map.length; i++) {
			for(int j=0; j&amp;lt;map[i].length; j++) {
				map[i][j] = '-';						   // 빈칸을 '-' 로 채운다.
				if(i == fish.getX() &amp;amp;&amp;amp; j == fish.getY()) { // fish의 x,y좌표에
					map[i][j] = fish.getShape();		   // fish의 shape('@')를 넣는다.
				}
				if(i == bear.getX() &amp;amp;&amp;amp; j == bear.getY()) { // 마찬가지로 bear도.
					map[i][j] = bear.getShape();		   // bear를 나중에 넣는 이유는 
				}										   // bear가 fish를 잡았을때
				System.out.print(map[i][j]);			   // @말고 B가 화면에 남기때문
			}
			System.out.println();
		}
	}
	
	void convertInput(String choice) {
		while(true) {						// 입력받은 이동에 맞춰 x,y값을 1시켜준다.
			if(choice.equals(&quot;a&quot;)) {
				inputY = -1;
				return;
			} else if(choice.equals(&quot;s&quot;)) {
				inputX = 1;
				return;
			}else if(choice.equals(&quot;w&quot;)) {
				inputX = -1;
				return;
			} else if(choice.equals(&quot;d&quot;)) {
				inputY = 1;
				return;
			} else {
				System.out.println(&quot;잘못입력하셨습니다.&quot;);
			}
		}
	}
	
	void userControl(Bear bear, Fish fish) {
		System.out.print(&quot;왼쪽(a), 아래(s), 위(w), 오른쪽(d) &amp;gt;&amp;gt; &quot;);
		convertInput(scan.next()); // 입력받은 값을 움직이는값 int로 변환하고
		bear.move(inputX, inputY);
		fish.move(0, 0);
		System.out.print(&quot;Bear: (&quot; + bear.getX() + &quot;, &quot; + bear.getY() + &quot;) \t&quot;); // 좌표확인을위해
		System.out.println(&quot;Fish: (&quot; + fish.getX() + &quot;, &quot; + fish.getY() + &quot;)&quot;);  // 추가함
		
	}
	
	void run() {
		map = new char[10][20];

		bear = new Bear(0, 0, 1);
		fish = new Fish(5, 5, 1);

		System.out.println(&quot;** Bear의 Fish 먹기 게임을 시작합니다.**&quot;);

		while (true) {
			showMap(bear, fish);
			if(bear.collide(fish)) { // 두 객체가 충돌했을때 메세지 띄우고 종료
				System.out.println(&quot;Bear Wins!!&quot;);
				break;
			}
			userControl(bear, fish);
		}
	}

	public static void main(String[] args) {
		new Game();
	}
}&lt;/code&gt;&lt;/pre&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-filename=&quot;bear1.jpg&quot; data-origin-width=&quot;503&quot; data-origin-height=&quot;932&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eflDZI/btqUYGsr2p1/DxPc3qDPInrziCeuZz2NHK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eflDZI/btqUYGsr2p1/DxPc3qDPInrziCeuZz2NHK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eflDZI/btqUYGsr2p1/DxPc3qDPInrziCeuZz2NHK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeflDZI%2FbtqUYGsr2p1%2FDxPc3qDPInrziCeuZz2NHK%2Fimg.jpg&quot; data-filename=&quot;bear1.jpg&quot; data-origin-width=&quot;503&quot; data-origin-height=&quot;932&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 style=&quot;text-align: center;&quot;&gt;-- 중간 생략 --&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;bear2.jpg&quot; data-origin-width=&quot;505&quot; data-origin-height=&quot;958&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CeKY0/btqUYHEQmRN/4bXJLdrFEAq0Ggsqdcr4HK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CeKY0/btqUYHEQmRN/4bXJLdrFEAq0Ggsqdcr4HK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CeKY0/btqUYHEQmRN/4bXJLdrFEAq0Ggsqdcr4HK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCeKY0%2FbtqUYHEQmRN%2F4bXJLdrFEAq0Ggsqdcr4HK%2Fimg.jpg&quot; data-filename=&quot;bear2.jpg&quot; data-origin-width=&quot;505&quot; data-origin-height=&quot;958&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Repository</category>
      <category>java</category>
      <category>명품자바</category>
      <category>자바</category>
      <author>dev_zephyr</author>
      <guid isPermaLink="true">https://dev-zephyr.tistory.com/10</guid>
      <comments>https://dev-zephyr.tistory.com/10#entry10comment</comments>
      <pubDate>Wed, 27 Jan 2021 18:46:10 +0900</pubDate>
    </item>
    <item>
      <title>명품자바 5장 실습문제 12번 (LinkedList)</title>
      <link>https://dev-zephyr.tistory.com/9</link>
      <description>&lt;p&gt;연결리스트(LinkedList)를 직접 구현하는 문제로 해석했다.&lt;/p&gt;
&lt;p&gt;prev, next 등 node의 개념이 완전하지 않아 그림을 계속 그려가며 구현했던 기억이 난다.&lt;/p&gt;
&lt;p&gt;연결리스트도 빡센데 추상클래스, 상속까지 더해져 꽤 고전했었던 난이도 있는 문제였다.&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-filename=&quot;linkedlist.jpg&quot; data-origin-width=&quot;1600&quot; data-origin-height=&quot;603&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7pDth/btqUUpEXBYM/PdVV2RqKO6FYZYrb9KkrJK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7pDth/btqUUpEXBYM/PdVV2RqKO6FYZYrb9KkrJK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7pDth/btqUUpEXBYM/PdVV2RqKO6FYZYrb9KkrJK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7pDth%2FbtqUUpEXBYM%2FPdVV2RqKO6FYZYrb9KkrJK%2Fimg.jpg&quot; data-filename=&quot;linkedlist.jpg&quot; data-origin-width=&quot;1600&quot; data-origin-height=&quot;603&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1611740410659&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.InputMismatchException;
import java.util.Scanner;

abstract class Shape {
	private Shape next;
	
	public Shape() {
		next = null;
	}
	
	public void setNext(Shape obj) {
		next = obj;
	}
	
	public Shape getNext() {
		return next;
	}
	
	public abstract void draw();
}

class Line extends Shape {

	public Line() {
		super();
	}
	
	@Override
	public void draw() {
		System.out.println(&quot;Line&quot;);
	}
	
}

class Rect extends Shape {

	public Rect() {
		super();
	}
	
	@Override
	public void draw() {
		System.out.println(&quot;Rect&quot;);
	}
	
}

class Circle extends Shape {

	public Circle() {
		super();
	}
	
	@Override
	public void draw() {
		System.out.println(&quot;Circle&quot;);
	}
	
}

class GraphicEditor {
	Scanner scan = new Scanner(System.in);
	Shape head, tail;
	int nodeSize = 0;
	int choice;
	
	public GraphicEditor() {
		tail = null;
		run();
	}
	
	public void run() {
		System.out.println(&quot;그래픽 에디터 beauty를 실행합니다.&quot;);
		while(true) {
			System.out.print(&quot;삽입(1), 삭제(2), 모두 보기(3), 종료(4)&amp;gt;&amp;gt; &quot;);
			choice = validateChoice(4); // 제대로 된 숫자를 입력받기위해
			
			switch(choice) {
			case 1 :
				System.out.print(&quot;Line(1), Rect(2), Circle(3)&amp;gt;&amp;gt; &quot;);
				choice = validateChoice(3);
				add(choice);
				break;
			case 2 : 
				System.out.print(&quot;삭제할 도형의 위치&amp;gt;&amp;gt; &quot;);
				choice = validateChoice(nodeSize);
				delete(choice); 
				break;
			case 3 : 
				showAll(); 
				break;
			case 4 : 
				exit(); 
				break;
			}
		}
	}
	
	public int validateChoice(int limit) { // 잘못된숫자입력, 예외처리 한방에 하는 method
		while(true) {
			try {
				
				int tmp = scan.nextInt();
				if(tmp &amp;lt; 1 || tmp &amp;gt; limit) { //  메뉴에 없는 입력값을 받으면 다시 받는다
					System.out.print(&quot;잘못 입력하셨습니다. 다시입력하세요&amp;gt;&amp;gt; &quot;);
					continue;
				} else {
					return tmp;
				}
			} catch (InputMismatchException e) { // 숫자 말고 다른거 눌렀을때 다시 받는다
				System.out.print(&quot;잘못 입력하셨습니다. 다시입력하세요&amp;gt;&amp;gt; &quot;);
				scan.nextLine();
				continue;
			}
		}
	}
	
	public void add(int choice) {
		switch(choice) {
		case 1: 
			addNode(new Line()); 
			break;
		case 2: 
			addNode(new Rect());
			break;
		case 3:
			addNode(new Circle());
			break;
		}
	}
	
	public void addNode(Shape obj) {
		// Linked_List개념에서 처음 시작 객체의 주소를 잃어버리면 아예 모든 객체에 접근할 방법이 없어지기때문에
		// 처음 시작 객체의 주소를 담고있는 head는 유지되어야 한다.
		
		if(head == null) { // 처음 입력받을때
			Shape node = obj; //노드(객체)생성
			head = node;		// 헤드는 객체가 된다.(첫번째 객체이므로)
			nodeSize++;
			tail = node;   // 처음 객체가 마지막 객체다. 
			
		} else {			// 처음 입력이 아닐때 
			Shape node = obj; // 노드(객체) 생성
			tail.setNext(node); // tail(마지막객체)의 next를 현재 만든 객체로 참조하고
			tail = node;        // tail은 마지막객체를 참조한다.
			nodeSize++;
		}
	}
	
	public void delete(int choice) {
		int index = choice - 1;
		Shape node = head;
		if(index == 0) { //처음 입력한 객체를 지울때
			head = node.getNext(); // head(시작)은 2번째 객체부터.
		}
		for(int i=0; i&amp;lt;index-1; i++) {	//삭제하고자 하는 번지의 전까지 이동한다.
			node = node.getNext();
		}
		node.setNext(node.getNext().getNext());	 // 다음다음 노드로 바로 연결하면 다음노드는 가르키는 참조변수가 없으므로 삭제(가비지)된다.
												// ex) 1-2-3-4-5에서 3을 지우려면 1-2-4-5처럼 2에서 바로 4로 연결시킨다.
	}
	
	public void showAll() {
		Shape node = head;
		while(node != null) { 
			node.draw();		//head부터 draw() 하고
			node = node.getNext(); // 그 객체가 참조하는 next(다음객체)를 node에 담고 계속 반복한다. 
		}
		
	}
	
	public void exit() {
		System.out.println(&quot;beauty를 종료합니다.&quot;);
		System.exit(0);
	}
}


public class Exercise12_2 {
	public static void main(String[] args) {
		
		new GraphicEditor();
		
	}
}&lt;/code&gt;&lt;/pre&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-filename=&quot;12.jpg&quot; data-origin-width=&quot;408&quot; data-origin-height=&quot;478&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bK7ACt/btqUYgU3wDX/Ek5bxHeLBAykgmuU3MKFk0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bK7ACt/btqUYgU3wDX/Ek5bxHeLBAykgmuU3MKFk0/img.jpg&quot; data-alt=&quot;결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bK7ACt/btqUYgU3wDX/Ek5bxHeLBAykgmuU3MKFk0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbK7ACt%2FbtqUYgU3wDX%2FEk5bxHeLBAykgmuU3MKFk0%2Fimg.jpg&quot; data-filename=&quot;12.jpg&quot; data-origin-width=&quot;408&quot; data-origin-height=&quot;478&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;</description>
      <category>Repository</category>
      <category>java</category>
      <category>명품자바</category>
      <category>자바</category>
      <author>dev_zephyr</author>
      <guid isPermaLink="true">https://dev-zephyr.tistory.com/9</guid>
      <comments>https://dev-zephyr.tistory.com/9#entry9comment</comments>
      <pubDate>Wed, 27 Jan 2021 18:42:00 +0900</pubDate>
    </item>
    <item>
      <title>명품자바 4장 실습문제 12번 (예약시스템)</title>
      <link>https://dev-zephyr.tistory.com/8</link>
      <description>&lt;p&gt;학원에서의 과제를 저장해 놓는겸사겸사리.&lt;/p&gt;
&lt;p&gt;몇달 전인데 기억이 안나는 부분도 있고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;플로우차트 보면 귀엽다..ㅋㅋ&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Flow_Chart_Reservation.png&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;953&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Rybh6/btqURveZvMy/3fVK1OeE6eANfmE1wIUq6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Rybh6/btqURveZvMy/3fVK1OeE6eANfmE1wIUq6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Rybh6/btqURveZvMy/3fVK1OeE6eANfmE1wIUq6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRybh6%2FbtqURveZvMy%2F3fVK1OeE6eANfmE1wIUq6K%2Fimg.png&quot; data-filename=&quot;Flow_Chart_Reservation.png&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;953&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1611740084027&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.InputMismatchException;
import java.util.Scanner;

class CustomerDTO {
	private String name;
	
	public CustomerDTO() { // 기본생성자를 호출하면 객체의 필드(name)가 &quot;---&quot;으로 초기화된다.
		name = &quot;---&quot;;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public String getName() {
		return name;
	}
	
}

class Controller {
	Scanner scan = new Scanner(System.in);
	final int BLOCK_MAX_SIZE = 10;
	CustomerDTO[] s = new CustomerDTO[BLOCK_MAX_SIZE];
	CustomerDTO[] a = new CustomerDTO[BLOCK_MAX_SIZE];
	CustomerDTO[] b = new CustomerDTO[BLOCK_MAX_SIZE];
	
	public Controller() { // 처음 기본생성자에서 좌석을 모두 ---로 초기화한다.
		for(int i=0; i&amp;lt;BLOCK_MAX_SIZE; i++) {
			CustomerDTO c = new CustomerDTO();
			s[i] = c;
		}
		for(int i=0; i&amp;lt;BLOCK_MAX_SIZE; i++) {
			CustomerDTO c = new CustomerDTO();
			a[i] = c;
		}
		for(int i=0; i&amp;lt;BLOCK_MAX_SIZE; i++) {
			CustomerDTO c = new CustomerDTO();
			b[i] = c;
		}
	}
	
	public int verifyInt() { // 숫자를 입력받을때마다 사용. 숫자말고 문자를 잘못입력했을때 에러방지.
		int choice;
		while(true) {
			try {
				choice = scan.nextInt();
				return choice;
			} catch(InputMismatchException e) { // 숫자말고 다른거 입력했을때 예외처리
				System.out.println(&quot;잘못된 입력입니다. 다시 입력해주세요.&quot;);
				scan.next();
			}
		}
	}
	
	public String showBlock() { // 예약,취소하기전 객체배열(좌석블럭)을 출력하는 메서드
		while(true) {			// 좌석 구분 번호를 입력받고 좌석(S, A, B)중 하나를 리턴한다.
			System.out.print(&quot;좌석 구분 S(1), A(2), B(3) &amp;gt;&amp;gt; &quot;);
				int choice = verifyInt();
				switch(choice) {
				case 1 :
					show(s);
					return &quot;s&quot;;
				case 2 :	
					show(a);
					return &quot;a&quot;;
				case 3 :
					show(b);
					return &quot;b&quot;;
				default :
					System.out.println(&quot;잘못입력하셨습니다.&quot;); // 1,2,3말고 다른거 입력받았을대
				}
		}
	}
	
	public void show(CustomerDTO[] dto) { // 파라미터로 들어온 객체배열(좌석블럭)을 출력하는 메서드
		for(int i=0; i&amp;lt;dto.length; i++) {
			System.out.print(dto[i].getName() + &quot; &quot;);
		}
		System.out.println();
	}
	
	public void showAll() { // 모든 객체를 출력하는 메서드
		for(int i=0; i&amp;lt;s.length; i++) {
			System.out.print(s[i].getName() + &quot; &quot;);
		}
		System.out.println();
		for(int i=0; i&amp;lt;a.length; i++) {
			System.out.print(a[i].getName() + &quot; &quot;);
		}
		System.out.println();
		for(int i=0; i&amp;lt;b.length; i++) {
			System.out.print(b[i].getName() + &quot; &quot;);
		}
		System.out.println();
		System.out.println(&quot;&amp;lt;&amp;lt;&amp;lt;조회를 완료하였습니다.&amp;gt;&amp;gt;&amp;gt;&quot;);
	}
	
	public void input() {
		String block = showBlock();
		//이름 입력받은걸 객체로 만들고
		//번호 입력받은걸 인덱스로 삼아서 만든 객체를 그 자리에 넣는다.
		CustomerDTO tmp = new CustomerDTO();
		System.out.print(&quot;이름&amp;gt;&amp;gt; &quot;);
		tmp.setName(scan.next());
		System.out.print(&quot;번호&amp;gt;&amp;gt; &quot;);
		int seatNumber = verifyInt();
		
		if(block.equals(&quot;s&quot;)) {
			s[seatNumber-1] = tmp; // 좌석은 1번부터 시작하는데 배열인덱스는 0부터 시작하므로 -1
		} else if(block.equals(&quot;a&quot;)) {
			a[seatNumber-1] = tmp;
		} else {
			b[seatNumber-1] = tmp;
		}
		
	}
	
	public void cancle() { // 취소 메서드
		String block = showBlock();      // 배열에서 삭제시킨다는 개념이 아닌
		System.out.print(&quot;이름&amp;gt;&amp;gt; &quot;);      // 처음의 &quot;---&quot; 값으로 덮어버린다는 개념
		String cancleName = scan.next();
		
		if(block.equals(&quot;s&quot;)) { // 입력받은 이름을 가진 객체를 찾아서 새로운 객체(기본생성자-&amp;gt;초기값&quot;---&quot;)로 덮어쓴다.
			for(int i=0; i&amp;lt;s.length; i++) {
				if(cancleName.equals(s[i].getName())) {
					s[i] = new CustomerDTO();
					break;
				} 
			}
		} else if(block.equals(&quot;a&quot;)) {
			for(int i=0; i&amp;lt;a.length; i++) {
				if(cancleName.equals(a[i].getName())) {
					a[i] = new CustomerDTO();
					break;
				}
			}
		} else if(block.equals(&quot;b&quot;)){
			for(int i=0; i&amp;lt;b.length; i++) {
				if(cancleName.equals(b[i].getName())) {
					b[i] = new CustomerDTO();
					break;
				}
			}
		} 
	}
}

class Viewer {
	Scanner scan = new Scanner(System.in);
	Controller ctr = new Controller();
	int choice = 0;
	
	public Viewer() { // 기본생성자가 호출되면 프로그램 시작
		run();
	}
	
	public void run() {
		System.out.println(&quot;명품콘서트홀 예약 시스템입니다.&quot;);		
		
		while(true) {
			System.out.print(&quot;예약: 1, 조회: 2, 취소: 3, 끝내기: 4 &amp;gt;&amp;gt; &quot;);
			choice = ctr.verifyInt();
			switch(choice) {
			case 1 : // input
				ctr.input();
				break;
			case 2 : // 조회(전체출력)
				ctr.showAll();
				break;
			case 3 : // 취소(해당좌석 조회 후 삭제)	
				ctr.cancle();
				break;
			case 4 : // finish
				finish();
			}
			
		}
		
	}
	
	public void finish() {
		System.out.println(&quot;&amp;lt;&amp;lt;&amp;lt; 프로그램 종료 &amp;gt;&amp;gt;&amp;gt;&quot;);
		System.exit(0);
	}
	
	
	
}

public class Exercise12 {
	public static void main(String[] args) {
		new Viewer();
	}

}&lt;/code&gt;&lt;/pre&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-filename=&quot;캡처.jpg&quot; data-origin-width=&quot;557&quot; data-origin-height=&quot;959&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KzSjb/btqUSpZKtHL/1NS8TEXTksjlW7qod7dxQk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KzSjb/btqUSpZKtHL/1NS8TEXTksjlW7qod7dxQk/img.jpg&quot; data-alt=&quot;결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KzSjb/btqUSpZKtHL/1NS8TEXTksjlW7qod7dxQk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKzSjb%2FbtqUSpZKtHL%2F1NS8TEXTksjlW7qod7dxQk%2Fimg.jpg&quot; data-filename=&quot;캡처.jpg&quot; data-origin-width=&quot;557&quot; data-origin-height=&quot;959&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;</description>
      <category>Repository</category>
      <category>java</category>
      <category>명품자바</category>
      <category>자바</category>
      <author>dev_zephyr</author>
      <guid isPermaLink="true">https://dev-zephyr.tistory.com/8</guid>
      <comments>https://dev-zephyr.tistory.com/8#entry8comment</comments>
      <pubDate>Wed, 27 Jan 2021 18:35:03 +0900</pubDate>
    </item>
    <item>
      <title>Static</title>
      <link>https://dev-zephyr.tistory.com/7</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;Static&lt;/b&gt;&lt;/span&gt;은 해당 메소드나 상수, 필드 등을 객체 선언 없이 사용가능하도록&lt;/p&gt;
&lt;p&gt;메서드 메모리 영역에 등록시키는 키워드 입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1. Static으로 선언된 필드, 메서드는 객체 생성 없이 다른 클래스에서 호출 가능합니다.&lt;/p&gt;
&lt;p&gt;이때, &lt;span style=&quot;color: #8a3db6;&quot;&gt;클래스명.필드&lt;/span&gt; 혹은 &lt;span style=&quot;color: #8a3db6;&quot;&gt;클래스명.메서드() &lt;span style=&quot;color: #000000;&quot;&gt;로 호출합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1611738443887&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class c1학년2반 {
	
	static String teacher = &quot;김선생&quot;; 
	
	String student;
	
	public c1학년2반(String student) {
		this.student = student;
	}
	
}

public class Static01 {
	
	public static void main(String[] args) {
		
		System.out.println(c1학년2반.teacher);

	}
	
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1학년2반이라는 클래스에 선생님의 이름(필드)을 static으로 선언하였고,&lt;/p&gt;
&lt;p&gt;Static01 클래스에서 해당 필드를 객체 선언 없이 바로 사용하는 예제입니다.&lt;/p&gt;
&lt;p&gt;static 메서드도 동일하게 호출 가능합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2. Static으로 선언된 멤버변수 &lt;span style=&quot;color: #006dd7;&quot;&gt;클래스 변수&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;라고 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp;클래스 변수는 해당 클래스로 만들어진 객체 모두가 &lt;span style=&quot;color: #8a3db6;&quot;&gt;같은 값&lt;/span&gt;을 공유합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1611738691429&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class c1학년2반 {
	
	static String teacher = &quot;김선생&quot;; 
	
	String student;
	
	public c1학년2반(String student) {
		this.student = student;
	}
	
}

public class Static01 {
	
	public static void main(String[] args) {
		
		c1학년2반 test01 = new c1학년2반(&quot;태돌이&quot;);
		c1학년2반 test02 = new c1학년2반(&quot;김지미&quot;);

		System.out.println(test01.teacher); // 결과 =&amp;gt; 김선생
		System.out.println(test02.teacher); // 결과 =&amp;gt; 김선생
        
	}
	
	
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;test01, test02객체 모두 김선생을 호출하였는데,&lt;/p&gt;
&lt;p&gt;이때, 어느 한 객체에서 클래스 변수의 내용을 수정하면 다른 객체들도 수정된 결과를 출력하게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1611738888802&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class c1학년2반 {
	
	static String teacher = &quot;김선생&quot;; 
	
	String student;
	
	public c1학년2반(String student) {
		this.student = student;
	}
	
}

public class Static01 {
	
	public static void main(String[] args) {
		
		c1학년2반 test01 = new c1학년2반(&quot;태돌이&quot;);
		c1학년2반 test02 = new c1학년2반(&quot;김지미&quot;);

		System.out.println(test01.teacher); // 결과 =&amp;gt; 김선생
		System.out.println(test02.teacher); // 결과 =&amp;gt; 김선생
		
		test01.teacher = &quot;박선생&quot;;
		
		System.out.println(test01.teacher); // 결과 =&amp;gt; 박선생
		System.out.println(test02.teacher); // 결과 =&amp;gt; 박선생
		
	}
	
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이처럼 test01에서 변경된 값이 test02에서 호출되는 결과가 나타납니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;why?&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;클래스 변수(static 멤버 변수)는 클래스가 메모리에 로드될 때 한번(하나) 생성되고,&lt;/p&gt;
&lt;p&gt;해당 클래스로 생성된 객체(인스턴스)들은 모두 한번 생성된 클래스 변수를&amp;nbsp;&lt;/p&gt;
&lt;p&gt;함께 공유하기 때문입니다.&lt;/p&gt;
&lt;p&gt;따라서 모든 인스턴스가 같은 값을 공유해야 하는 상황에는 static으로 변수를 선언하고,&lt;/p&gt;
&lt;p&gt;각각 인스턴스가 다른 값을 가져야 하는 상황에는 static이 아닌 일반적인 변수로 사용해야 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Java</category>
      <category>java</category>
      <category>static</category>
      <category>자바</category>
      <category>자바static</category>
      <category>자바인스턴스</category>
      <category>클래스변수</category>
      <author>dev_zephyr</author>
      <guid isPermaLink="true">https://dev-zephyr.tistory.com/7</guid>
      <comments>https://dev-zephyr.tistory.com/7#entry7comment</comments>
      <pubDate>Wed, 27 Jan 2021 18:19:39 +0900</pubDate>
    </item>
    <item>
      <title>Class Constructor (생성자)</title>
      <link>https://dev-zephyr.tistory.com/6</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;생성자(Constructor)&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;&quot;&gt;생성자란 해당 클래스의 객체가 new 키워드와 함께 처음 생성될 때,&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;/p&gt;
&lt;p&gt;생성자를 제공해줍니다. (컴파일시 기본 생성자 자동 생성)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;기본 생성자&lt;/b&gt;&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;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;construc.JPG&quot; data-origin-width=&quot;246&quot; data-origin-height=&quot;139&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/w38Ll/btqUM9i31Vz/ZRKIx3cYkkEpHgZFKGpWpK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/w38Ll/btqUM9i31Vz/ZRKIx3cYkkEpHgZFKGpWpK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/w38Ll/btqUM9i31Vz/ZRKIx3cYkkEpHgZFKGpWpK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fw38Ll%2FbtqUM9i31Vz%2FZRKIx3cYkkEpHgZFKGpWpK%2Fimg.jpg&quot; data-filename=&quot;construc.JPG&quot; data-origin-width=&quot;246&quot; data-origin-height=&quot;139&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;&quot;&gt;이 때, 기본형 데이터타입의 필드인 경우 0으로 초기화되고,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;참조형 데이터타입의 필드는 null로 초기화됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;파라미터가 있는 생성자&lt;/b&gt;&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;사용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;construc2.JPG&quot; data-origin-width=&quot;294&quot; data-origin-height=&quot;176&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btR7Yr/btqUUproI7h/rRscR6ROoelRoaNe7U8Kek/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btR7Yr/btqUUproI7h/rRscR6ROoelRoaNe7U8Kek/img.jpg&quot; data-alt=&quot;클래스에 원하는 값을 담는 생성자 선언&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btR7Yr/btqUUproI7h/rRscR6ROoelRoaNe7U8Kek/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtR7Yr%2FbtqUUproI7h%2FrRscR6ROoelRoaNe7U8Kek%2Fimg.jpg&quot; data-filename=&quot;construc2.JPG&quot; data-origin-width=&quot;294&quot; data-origin-height=&quot;176&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;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;construc3.JPG&quot; data-origin-width=&quot;340&quot; data-origin-height=&quot;87&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nnDdY/btqUOCedShJ/MLYUwTlMbnbuerawIaKyf0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nnDdY/btqUOCedShJ/MLYUwTlMbnbuerawIaKyf0/img.jpg&quot; data-alt=&quot;객체 생성시 파라미터값(이름)을 넣어주면 선언된 필드에 값이 입력된다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nnDdY/btqUOCedShJ/MLYUwTlMbnbuerawIaKyf0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnnDdY%2FbtqUOCedShJ%2FMLYUwTlMbnbuerawIaKyf0%2Fimg.jpg&quot; data-filename=&quot;construc3.JPG&quot; data-origin-width=&quot;340&quot; data-origin-height=&quot;87&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;만약 파라미터가 있는 생성자가 없다면,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;construc4.JPG&quot; data-origin-width=&quot;297&quot; data-origin-height=&quot;72&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bc29MP/btqUSo7yzBh/JxdeU6WNRkfchybU45ccuk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bc29MP/btqUSo7yzBh/JxdeU6WNRkfchybU45ccuk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bc29MP/btqUSo7yzBh/JxdeU6WNRkfchybU45ccuk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbc29MP%2FbtqUSo7yzBh%2FJxdeU6WNRkfchybU45ccuk%2Fimg.jpg&quot; data-filename=&quot;construc4.JPG&quot; data-origin-width=&quot;297&quot; data-origin-height=&quot;72&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;/p&gt;
&lt;p&gt;그때그때 상황에 맞춰 사용해야 하지만 예제와 같은 로직이 필요한 상황이라면&lt;/p&gt;
&lt;p&gt;저는 생성자로 한줄에 필드를 초기화하는 방법을 사용할 것 같습니다 :)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Java</category>
      <category>java</category>
      <category>java생성자</category>
      <category>자바</category>
      <category>자바생성자</category>
      <author>dev_zephyr</author>
      <guid isPermaLink="true">https://dev-zephyr.tistory.com/6</guid>
      <comments>https://dev-zephyr.tistory.com/6#entry6comment</comments>
      <pubDate>Wed, 27 Jan 2021 17:38:40 +0900</pubDate>
    </item>
  </channel>
</rss>