<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>기록보관소</title>
    <link>https://byeongkyo.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Thu, 18 Jun 2026 22:00:37 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>byeongkyo</managingEditor>
    <item>
      <title>[IntelliJ] 유용한 단축키 - UI 패널 접근</title>
      <link>https://byeongkyo.tistory.com/56</link>
      <description>&lt;div class=&quot;markdown-body&quot;&gt;
&lt;h1&gt;UI&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;UI 패널&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Debug, Run, Problems과 같은 UI 패널들은 개발을 하면서 자주 접근하기 때문에 숏컷을 익혀두면 편리하다. 이하는 각 패널 접근 단축키에 관한 내용이다.&lt;/p&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1590&quot; data-origin-height=&quot;64&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oHwg7/btsBKi5ONL7/OkUPNwgZFdYKbfNI1UqOTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oHwg7/btsBKi5ONL7/OkUPNwgZFdYKbfNI1UqOTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oHwg7/btsBKi5ONL7/OkUPNwgZFdYKbfNI1UqOTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoHwg7%2FbtsBKi5ONL7%2FOkUPNwgZFdYKbfNI1UqOTK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1590&quot; height=&quot;64&quot; data-origin-width=&quot;1590&quot; data-origin-height=&quot;64&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;h2 data-ke-size=&quot;size26&quot;&gt;UI 패널 접근 키&lt;/h2&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;command + 1&lt;/th&gt;
&lt;th&gt;프로젝트 디렉토리&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;command + 2&lt;/td&gt;
&lt;td&gt;북마크&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;command + 3&lt;/td&gt;
&lt;td&gt;Find&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;command + 4&lt;/td&gt;
&lt;td&gt;Run&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;command + 5&lt;/td&gt;
&lt;td&gt;Debug&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;command + 6&lt;/td&gt;
&lt;td&gt;Problems&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;command + 7&lt;/td&gt;
&lt;td&gt;Structures&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;command + 8&lt;/td&gt;
&lt;td&gt;Services&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좌하단 끝의 패널 토글 버튼을 호버링하면 각 패널에 접근하기 위한 숏컷을 알 수 있다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-12-13 오후 1.01.53.png&quot; data-origin-width=&quot;306&quot; data-origin-height=&quot;632&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t6LD3/btsBQU4cmpE/7vjEFz1aZ2gKbwuRkq2Oq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t6LD3/btsBQU4cmpE/7vjEFz1aZ2gKbwuRkq2Oq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t6LD3/btsBQU4cmpE/7vjEFz1aZ2gKbwuRkq2Oq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft6LD3%2FbtsBQU4cmpE%2F7vjEFz1aZ2gKbwuRkq2Oq1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;306&quot; height=&quot;632&quot; data-filename=&quot;스크린샷 2023-12-13 오후 1.01.53.png&quot; data-origin-width=&quot;306&quot; data-origin-height=&quot;632&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;</description>
      <category>IntelliJ</category>
      <author>byeongkyo</author>
      <guid isPermaLink="true">https://byeongkyo.tistory.com/56</guid>
      <comments>https://byeongkyo.tistory.com/56#entry56comment</comments>
      <pubDate>Wed, 13 Dec 2023 13:03:17 +0900</pubDate>
    </item>
    <item>
      <title>[IntelliJ] IntelliJ 빌드 툴 설정</title>
      <link>https://byeongkyo.tistory.com/55</link>
      <description>&lt;div class=&quot;markdown-body&quot;&gt;
&lt;h1&gt;빌드 툴&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;빌드 툴 변경&lt;/h2&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;448&quot; data-origin-height=&quot;226&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Nikir/btsBQRTAKFM/tJVL8loNwhgQ9Bdw5o1CZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Nikir/btsBQRTAKFM/tJVL8loNwhgQ9Bdw5o1CZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Nikir/btsBQRTAKFM/tJVL8loNwhgQ9Bdw5o1CZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNikir%2FbtsBQRTAKFM%2FtJVL8loNwhgQ9Bdw5o1CZk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;448&quot; height=&quot;226&quot; data-origin-width=&quot;448&quot; data-origin-height=&quot;226&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;1. 먼저 Settings... 로 들어간다.&lt;/p&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1954&quot; data-origin-height=&quot;1414&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AUHeg/btsBKi5MaZW/YfMN3FOHhJxfBtqY2Yi85k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AUHeg/btsBKi5MaZW/YfMN3FOHhJxfBtqY2Yi85k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AUHeg/btsBKi5MaZW/YfMN3FOHhJxfBtqY2Yi85k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAUHeg%2FbtsBKi5MaZW%2FYfMN3FOHhJxfBtqY2Yi85k%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1954&quot; height=&quot;1414&quot; data-origin-width=&quot;1954&quot; data-origin-height=&quot;1414&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;2. Build, Execution, Deployment -&amp;gt; Build Tools -&amp;gt; Gradle로 가서 Build and run using, Run tests using을 선택한다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;596&quot; data-origin-height=&quot;170&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXTiTO/btsBQvQWpzW/H7FTOMmKk3vz9OuWhPXaQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXTiTO/btsBQvQWpzW/H7FTOMmKk3vz9OuWhPXaQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXTiTO/btsBQvQWpzW/H7FTOMmKk3vz9OuWhPXaQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXTiTO%2FbtsBQvQWpzW%2FH7FTOMmKk3vz9OuWhPXaQ0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;596&quot; height=&quot;170&quot; data-origin-width=&quot;596&quot; data-origin-height=&quot;170&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;3. 원하는 옵션을 선택한다.&lt;br /&gt;Gradle (Default) : 디폴트 설정이며 Gradle을 사용하여 프로젝트를 빌드한다.&lt;br /&gt;IntelliJ IDEA : IntelliJ에서 자체적으로 제공하는 빌드 툴을 사용한다. 디폴트 Gradle에 비해 IntelliJ에서 더 빨리 빌드된다.&lt;/p&gt;
&lt;/div&gt;</description>
      <category>IntelliJ</category>
      <author>byeongkyo</author>
      <guid isPermaLink="true">https://byeongkyo.tistory.com/55</guid>
      <comments>https://byeongkyo.tistory.com/55#entry55comment</comments>
      <pubDate>Wed, 13 Dec 2023 11:39:44 +0900</pubDate>
    </item>
    <item>
      <title>[SpringBoot] spring initializer를 사용한 프로젝트 생성</title>
      <link>https://byeongkyo.tistory.com/54</link>
      <description>&lt;div class=&quot;markdown-body&quot;&gt;
&lt;h1&gt;Spring Initializer를 사용한 프로젝트 생성 방법&lt;/h1&gt;
&lt;h2&gt;Spring Initializer&lt;/h2&gt;
&lt;p&gt;스프링에서 제공하는 스프링 부트 프로젝트 초기화를 위한 웹 기반 도구이다.&lt;br&gt;start.spring.io 로 접속하여 사용한다.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://start.spring.io&quot;&gt;https://start.spring.io&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;화면 설명&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3018&quot; data-origin-height=&quot;1436&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ljARo/btsBKfmAamo/MdoMe8imqN16HQA693kt3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ljARo/btsBKfmAamo/MdoMe8imqN16HQA693kt3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ljARo/btsBKfmAamo/MdoMe8imqN16HQA693kt3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FljARo%2FbtsBKfmAamo%2FMdoMe8imqN16HQA693kt3k%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;3018&quot; height=&quot;1436&quot; data-origin-width=&quot;3018&quot; data-origin-height=&quot;1436&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;빌드 툴, 사용 언어, 스프링 버전, 프로젝트 이름 등을 원하는대로 설정할 수 있다.&lt;/li&gt;
&lt;li&gt;Group은 조직 명, Artifact는 빌드 결과물 이름, Name은 프로젝트 명을 의미한다.&lt;/li&gt;
&lt;li&gt;Dependencies에서 추가하고자 하는 의존성을 선택 가능하다&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Dependencies 설정&lt;/h2&gt;
&lt;p&gt;Dependencies를 클릭하면 어떤 라이브러리를 사용해서 spring boot 프로젝트를 구성할지 선택한다. 기본적으로 웹 프로젝트를 진행할 것이기 때문에 아래와 같은 라이브러리를 추가한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1462&quot; data-origin-height=&quot;590&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lMjpe/btsBGnlGCtF/LZcEwNkZc962rk6LaI0E2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lMjpe/btsBGnlGCtF/LZcEwNkZc962rk6LaI0E2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lMjpe/btsBGnlGCtF/LZcEwNkZc962rk6LaI0E2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlMjpe%2FbtsBGnlGCtF%2FLZcEwNkZc962rk6LaI0E2K%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1462&quot; height=&quot;590&quot; data-origin-width=&quot;1462&quot; data-origin-height=&quot;590&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Spring Web : 스프링으로 웹 프로젝트를 시작하기 위해 기본적으로 추가해야하는 라이브러리&lt;/li&gt;
&lt;li&gt;thymeleaf : html 렌더링을 위해 필요한 라이브러리&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;프로젝트 생성&lt;/h2&gt;
&lt;p&gt;Generate 버튼을 클릭하면 프로젝트를 생성 가능하다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1264&quot; data-origin-height=&quot;194&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0aonO/btsBUBh5DVe/nSYkIKeLYj8dkfdEr5caI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0aonO/btsBUBh5DVe/nSYkIKeLYj8dkfdEr5caI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0aonO/btsBUBh5DVe/nSYkIKeLYj8dkfdEr5caI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0aonO%2FbtsBUBh5DVe%2FnSYkIKeLYj8dkfdEr5caI0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1264&quot; height=&quot;194&quot; data-origin-width=&quot;1264&quot; data-origin-height=&quot;194&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;생성된 프로젝트는 zip파일로 다운로드 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1550&quot; data-origin-height=&quot;48&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8SRNg/btsBTXFYcgS/Wbg5qHzbDQDRIT1ZXKvqbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8SRNg/btsBTXFYcgS/Wbg5qHzbDQDRIT1ZXKvqbk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8SRNg/btsBTXFYcgS/Wbg5qHzbDQDRIT1ZXKvqbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8SRNg%2FbtsBTXFYcgS%2FWbg5qHzbDQDRIT1ZXKvqbk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1550&quot; height=&quot;48&quot; data-origin-width=&quot;1550&quot; data-origin-height=&quot;48&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2&gt;프로젝트 열기&lt;/h2&gt;
&lt;p&gt;압축을 해제한 프로젝트에는 build.gradle 파일이 존재하는데 intellij에서 project open 후 해당파일을 선택하면 생성한 프로젝트를 사용해서 작업할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1230&quot; data-origin-height=&quot;836&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cF8Vpi/btsBT1uy28g/sK34DPZwAombXDhGkJFwiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cF8Vpi/btsBT1uy28g/sK34DPZwAombXDhGkJFwiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cF8Vpi/btsBT1uy28g/sK34DPZwAombXDhGkJFwiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcF8Vpi%2FbtsBT1uy28g%2FsK34DPZwAombXDhGkJFwiK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1230&quot; height=&quot;836&quot; data-origin-width=&quot;1230&quot; data-origin-height=&quot;836&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;/div&gt;</description>
      <category>Spring Boot</category>
      <author>byeongkyo</author>
      <guid isPermaLink="true">https://byeongkyo.tistory.com/54</guid>
      <comments>https://byeongkyo.tistory.com/54#entry54comment</comments>
      <pubDate>Mon, 11 Dec 2023 19:42:51 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA] 맥북 Oracle OpenJDK 설치</title>
      <link>https://byeongkyo.tistory.com/52</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. 최신 버전의 JDK를 곧바로 받고 싶다면 &lt;a href=&quot;https://jdk.java.net/archive/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://jdk.java.net&lt;/a&gt; 으로 접속한다.&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1701663283663&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Archived OpenJDK GA Releases&quot; data-og-description=&quot;Archived OpenJDK General-Availability Releases This page is an archive of previously released builds of the JDK licensed under the GNU General Public License, version&amp;nbsp;2, with Classpath Exception. WARNING: These older versions of the JDK are provided to he&quot; data-og-host=&quot;jdk.java.net&quot; data-og-source-url=&quot;https://jdk.java.net/archive/&quot; data-og-url=&quot;https://jdk.java.net/archive/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://jdk.java.net/archive/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://jdk.java.net/archive/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Archived OpenJDK GA Releases&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Archived OpenJDK General-Availability Releases This page is an archive of previously released builds of the JDK licensed under the GNU General Public License, version&amp;nbsp;2, with Classpath Exception. WARNING: These older versions of the JDK are provided to he&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;jdk.java.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재(2023-12-04) 기준 jdk 22가 최신 버전이고 Production 빌드 기준으로는 21이 최신이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. 특정 버전의 OpenJDK를 설치하기 위해서는 &lt;a href=&quot;https://jdk.java.net/archive/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://jdk.java.net/archive/&lt;/a&gt;&amp;nbsp;으로 접속한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 링크로 접속하면 구버전 openJDK를 다운로드 받아 사용할 수 있다.&lt;/p&gt;
&lt;figure id=&quot;og_1701663186944&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Archived OpenJDK GA Releases&quot; data-og-description=&quot;Archived OpenJDK General-Availability Releases This page is an archive of previously released builds of the JDK licensed under the GNU General Public License, version&amp;nbsp;2, with Classpath Exception. WARNING: These older versions of the JDK are provided to he&quot; data-og-host=&quot;jdk.java.net&quot; data-og-source-url=&quot;https://jdk.java.net/archive/&quot; data-og-url=&quot;https://jdk.java.net/archive/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://jdk.java.net/archive/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://jdk.java.net/archive/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Archived OpenJDK GA Releases&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Archived OpenJDK General-Availability Releases This page is an archive of previously released builds of the JDK licensed under the GNU General Public License, version&amp;nbsp;2, with Classpath Exception. WARNING: These older versions of the JDK are provided to he&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;jdk.java.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;tar 때는 zip 파일 중 편한걸 골라 다운로드 받으면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;m1 맥북 에어의 경우&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Mac/AArch64 64bit&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이라고 되어있는 파일을 받으면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3. 다운로드 받은 OpenJDK를 설치하기 위해서는 아래 절차대로 진행한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다운로드 받은 jdk tar 또는 zip 파일을 직접 압축 해제하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://openjdk.org/install/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://openjdk.org/install/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1701663462175&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;OpenJDK: Download and install&quot; data-og-description=&quot;How to download and install prebuilt OpenJDK packages JDK 9 &amp;amp; Later Oracle's OpenJDK JDK binaries for Windows, macOS, and Linux are available on release-specific pages of jdk.java.net as .tar.gz or .zip archives. As an example, the archives for JDK 13 may &quot; data-og-host=&quot;openjdk.org&quot; data-og-source-url=&quot;https://openjdk.org/install/&quot; data-og-url=&quot;https://openjdk.org/install/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://openjdk.org/install/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://openjdk.org/install/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;OpenJDK: Download and install&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;How to download and install prebuilt OpenJDK packages JDK 9 &amp;amp; Later Oracle's OpenJDK JDK binaries for Windows, macOS, and Linux are available on release-specific pages of jdk.java.net as .tar.gz or .zip archives. As an example, the archives for JDK 13 may&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;openjdk.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1154&quot; data-origin-height=&quot;460&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzFJcE/btsBgy2rWqV/BXK5pINlObkmX8ypyix5K1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzFJcE/btsBgy2rWqV/BXK5pINlObkmX8ypyix5K1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzFJcE/btsBgy2rWqV/BXK5pINlObkmX8ypyix5K1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzFJcE%2FbtsBgy2rWqV%2FBXK5pINlObkmX8ypyix5K1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1154&quot; height=&quot;460&quot; data-origin-width=&quot;1154&quot; data-origin-height=&quot;460&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;4. tar 명령어를 사용하여 압축 해제&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉘을 실행하여 tar 명령어를 사용하면 openjdk의 압축 해제 및 설치가 완료된다. 특정 폴더에 압축을 해제하기 위해서는 아래 명령어를 입력하면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1701665274084&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;tar -xvf openjdk-17.0.2_macos-aarch64_bin.tar -C ~/Library/Java/JavaVirtualMachines&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;5. Intellij에서 openjdk 설치 확인&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;intellij에서 new project로 프로젝트 생성시 detected jdk 목록에서 이전에 설치한 openjdk가 정상적으로 잡히는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1054&quot; data-origin-height=&quot;80&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dAG1Gq/btsBl64oZzi/wc103x6HQKAba1U94FsBE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dAG1Gq/btsBl64oZzi/wc103x6HQKAba1U94FsBE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dAG1Gq/btsBl64oZzi/wc103x6HQKAba1U94FsBE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdAG1Gq%2FbtsBl64oZzi%2Fwc103x6HQKAba1U94FsBE0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1054&quot; height=&quot;80&quot; data-origin-width=&quot;1054&quot; data-origin-height=&quot;80&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이하는 곁가지 내용들...&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;archive 사이트에 올라온 여러 버전 중 GA라고 붙어있는건 어떤의미인가?&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;General availability(GA) is the marketing stage at which all necessary commercialization activities have been completed and a software product is available for purchase, depending, however, on language, region, and electronic vs. media availability.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; SW lifecycle의 한 단계를 의미한다. 쉽게 말해서 Release 상태이며 사용자들에게 상업적으로 판매 및 배포가 가능한 상태를 의미한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;538&quot; data-origin-height=&quot;1144&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZuMci/btsBqrfI4jl/9jYcwefcKD9xPpV8AGGmjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZuMci/btsBqrfI4jl/9jYcwefcKD9xPpV8AGGmjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZuMci/btsBqrfI4jl/9jYcwefcKD9xPpV8AGGmjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZuMci%2FbtsBqrfI4jl%2F9jYcwefcKD9xPpV8AGGmjk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;350&quot; height=&quot;744&quot; data-origin-width=&quot;538&quot; data-origin-height=&quot;1144&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Software_release_life_cycle&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Software_release_life_cycle&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1701664244324&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Software release life cycle - Wikipedia&quot; data-og-description=&quot;From Wikipedia, the free encyclopedia Sum of the phases of development and maturity for computer software The software release life cycle is the process of developing, testing, and distributing a software product. It typically consists of several stages, s&quot; data-og-host=&quot;en.wikipedia.org&quot; data-og-source-url=&quot;https://en.wikipedia.org/wiki/Software_release_life_cycle&quot; data-og-url=&quot;https://en.wikipedia.org/wiki/Software_release_life_cycle&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/NMAMX/hyUIuYxEep/scGWoNZs3pKVRX5kEejCx1/img.png?width=1200&amp;amp;height=2540&amp;amp;face=0_0_1200_2540,https://scrap.kakaocdn.net/dn/jXapp/hyUE5lMC09/RyfCv1tX95Pc2w5lEYzyk1/img.png?width=800&amp;amp;height=1693&amp;amp;face=0_0_800_1693,https://scrap.kakaocdn.net/dn/lovvo/hyUE39jfyz/CuAvKZQixtYt4LawmGvZHK/img.png?width=640&amp;amp;height=1355&amp;amp;face=0_0_640_1355&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Software_release_life_cycle&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://en.wikipedia.org/wiki/Software_release_life_cycle&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/NMAMX/hyUIuYxEep/scGWoNZs3pKVRX5kEejCx1/img.png?width=1200&amp;amp;height=2540&amp;amp;face=0_0_1200_2540,https://scrap.kakaocdn.net/dn/jXapp/hyUE5lMC09/RyfCv1tX95Pc2w5lEYzyk1/img.png?width=800&amp;amp;height=1693&amp;amp;face=0_0_800_1693,https://scrap.kakaocdn.net/dn/lovvo/hyUE39jfyz/CuAvKZQixtYt4LawmGvZHK/img.png?width=640&amp;amp;height=1355&amp;amp;face=0_0_640_1355');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Software release life cycle - Wikipedia&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;From Wikipedia, the free encyclopedia Sum of the phases of development and maturity for computer software The software release life cycle is the process of developing, testing, and distributing a software product. It typically consists of several stages, s&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;en.wikipedia.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>JAVA</category>
      <author>byeongkyo</author>
      <guid isPermaLink="true">https://byeongkyo.tistory.com/52</guid>
      <comments>https://byeongkyo.tistory.com/52#entry52comment</comments>
      <pubDate>Mon, 4 Dec 2023 13:22:41 +0900</pubDate>
    </item>
    <item>
      <title>[C++] call by reference</title>
      <link>https://byeongkyo.tistory.com/51</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;i&gt;&lt;b&gt;call by reference&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;call by reference는 인자의 값이 아니라 참조를 전달하는 것이다. 함수 호출시 지역변수로 전달되는 값은 원본 데이터를 참조하는 참조다. call by reference를 하기 위해서는 함수 선언서 parameter를 참조 변수로 하면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1700829618766&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void addOne(int &amp;amp;y)
{
	cout &amp;lt;&amp;lt; y &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; &amp;amp;y &amp;lt;&amp;lt; &quot; (in function)&quot; &amp;lt;&amp;lt; endl;
	y = y + 1;
}

int main()
{
	int x = 5;
	cout &amp;lt;&amp;lt; x &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; &amp;amp;x &amp;lt;&amp;lt; endl;
	addOne(x);
	cout &amp;lt;&amp;lt; x &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; &amp;amp;x &amp;lt;&amp;lt; endl;

	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;269&quot; data-origin-height=&quot;59&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIKQCe/btsASVbma8Q/t1QkKCgpF9REfx8YfB3Hq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIKQCe/btsASVbma8Q/t1QkKCgpF9REfx8YfB3Hq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIKQCe/btsASVbma8Q/t1QkKCgpF9REfx8YfB3Hq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIKQCe%2FbtsASVbma8Q%2Ft1QkKCgpF9REfx8YfB3Hq1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;269&quot; height=&quot;59&quot; data-origin-width=&quot;269&quot; data-origin-height=&quot;59&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;i&gt;&lt;b&gt;함수 출력으로써 call by reference&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;call by reference가 유용하게 쓰이는 한 경우는 함수의 출력으로써 인자를 전달할때다.&lt;/span&gt; 복수의 출력 값이 필요한 것과 같은 경우에 유용하게 사용 가능하다. 아래 코드에서 sin, cos 각각의 결과 값을 참조 변수에 대입하여 전달한다. 입력 인자는 변경이 불필요한 경우 const 키워드를 붙여 애초에 변경이 불가능하게끔 할 수도 있다. 어떤 인자가 입력이고 출력인지 혼동될 경우 const로 입력되는 인자는 최소한 입력 인자라는 것을 알 수 있게끔 하는 용도도 존재한다. 포인터보다는 사용법이 더 직관적이라고 개인적으로 생각된다.&lt;br /&gt;특히나 입력 인자를 const 참조 변수로 전달하는 것은 c++ 프로그래밍을 할 때 굉장히 많이 쓰이는 방식이기 때문에 알아두는게 좋다.&lt;/p&gt;
&lt;pre id=&quot;code_1700830430362&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void getSinCos(const double &amp;amp;degrees, double &amp;amp;sin_out, double &amp;amp;cos_out)
{
	const double pi = 3.141592;
	double radians = degrees * pi / 180.0;
	sin_out = std::sin(radians);
	cos_out = std::cos(radians);
}

int main()
{
	double sin(0.0);
	double cos(0.0);

	getSinCos(30.0, sin, cos);

	cout &amp;lt;&amp;lt; sin &amp;lt;&amp;lt; endl;
	cout &amp;lt;&amp;lt; cos &amp;lt;&amp;lt; endl;

	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;134&quot; data-origin-height=&quot;41&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cR0wIa/btsAQBENPyT/t048Ek6dWsJvjNcPsMdc9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cR0wIa/btsAQBENPyT/t048Ek6dWsJvjNcPsMdc9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cR0wIa/btsAQBENPyT/t048Ek6dWsJvjNcPsMdc9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcR0wIa%2FbtsAQBENPyT%2Ft048Ek6dWsJvjNcPsMdc9K%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;134&quot; height=&quot;41&quot; data-origin-width=&quot;134&quot; data-origin-height=&quot;41&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;i&gt;&lt;b&gt;포인터의 참조 전달&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포인터의 참조가 필요할 경우 int *&amp;amp;와 같은 형식으로 parameter를 선언하면 된다. 해석이 햇갈릴 수도 있는데 왼쪽부터 int 변수의 -&amp;gt; 포인터의 -&amp;gt; 참조 변수 와 같은 순서로 적용된다. 아니면 typedef를 사용하여 int *의 alias를 지정하면 보다 쉽게 사용할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1700833583349&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void foo(int *&amp;amp;ptr)
{
	cout &amp;lt;&amp;lt; ptr &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; &amp;amp;ptr &amp;lt;&amp;lt; endl;
}

int main()
{
	int x = 5;
	int *ptr = &amp;amp;x;
	foo(ptr);
	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;i&gt;&lt;b&gt;배열의 참조 전달&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배열의 참조를 전달할 때 주의사항이 있는데 int &amp;amp;arr[5]와 같은 식으로 쓰면 안되는 것이다. 해당 표기는 참조변수의 배열이며 C++에서는 허용되지 않는다. int (&amp;amp;arr)[5] 와 같은 식으로 parameter를 설정해야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1700834321959&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void changeElement(int (&amp;amp;arr)[5])
{
	arr[0] = 123;
}

int main()
{
	int arr[]{ 1, 2, 3, 4, 5 };
	changeElement(arr);
	cout &amp;lt;&amp;lt; arr[0] &amp;lt;&amp;lt; endl;

	return 0;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>C++ 학습</category>
      <author>byeongkyo</author>
      <guid isPermaLink="true">https://byeongkyo.tistory.com/51</guid>
      <comments>https://byeongkyo.tistory.com/51#entry51comment</comments>
      <pubDate>Fri, 24 Nov 2023 21:42:56 +0900</pubDate>
    </item>
    <item>
      <title>[C++] call by value</title>
      <link>https://byeongkyo.tistory.com/50</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;i&gt;&lt;b&gt;call by value&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;값에 의한 전달을 하면 argument가 별도의 함수 지역변수로 복사된다.&lt;/span&gt; 함수의 지역변수는 함수 스코프 내에서만 유효하며 함수 스코프를 벗어나는 순간 stack 메모리를 반환한다. 아래는 간단한 call by value의 예제다. primitive 타입의 경우 복사 자체의 오버헤드가 크지 않지만 구조체나 배열과 같은 경우 복사 지역변수로 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;복사하는 과정 자체가 오버헤드가 클 수 있기 때문에 주로 call by reference&lt;/span&gt;를 사용한다.&lt;/p&gt;
&lt;pre id=&quot;code_1700821604107&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void doSome(int y)
{
	cout &amp;lt;&amp;lt; &quot;In func &quot; &amp;lt;&amp;lt; y &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; &amp;amp;y &amp;lt;&amp;lt; endl;
}

int main()
{
	int x = 6;
	cout &amp;lt;&amp;lt; &quot;In main &quot; &amp;lt;&amp;lt; x &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; &amp;amp;x &amp;lt;&amp;lt; endl;
    
    // 이하 argument들은 모두 call by value다.
	doSome(5);
	doSome(x);
	doSome(x + 1);

	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;220&quot; data-origin-height=&quot;78&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMj6N3/btsARjjAS4V/h3RIsNAaywTLOflKfU2yG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMj6N3/btsARjjAS4V/h3RIsNAaywTLOflKfU2yG1/img.png&quot; data-alt=&quot;main에서 선언한 argument와 지역변수의 포인터 값이 다르다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMj6N3/btsARjjAS4V/h3RIsNAaywTLOflKfU2yG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMj6N3%2FbtsARjjAS4V%2Fh3RIsNAaywTLOflKfU2yG1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;220&quot; height=&quot;78&quot; data-origin-width=&quot;220&quot; data-origin-height=&quot;78&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;main에서 선언한 argument와 지역변수의 포인터 값이 다르다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>C++ 학습</category>
      <author>byeongkyo</author>
      <guid isPermaLink="true">https://byeongkyo.tistory.com/50</guid>
      <comments>https://byeongkyo.tistory.com/50#entry50comment</comments>
      <pubDate>Fri, 24 Nov 2023 19:27:28 +0900</pubDate>
    </item>
    <item>
      <title>[C++] std::vector</title>
      <link>https://byeongkyo.tistory.com/49</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;i&gt;&lt;b&gt;std::vector&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vector를 사용하면 동적 array를 사용하는 것보다 보다 편하게 프로그래밍을 할 수 있다. 아래와 같이 선언 및 초기화할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1700802830578&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;std::vector&amp;lt;int&amp;gt; array;
std::vector&amp;lt;int&amp;gt; array2 = { 1, 2, 3, 4, 5 };
std::vector&amp;lt;int&amp;gt; array3 { 1, 2, 3 };&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;i&gt;&lt;b&gt;vector::reserve&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;벡터를 사용할때 가능하면 reserve를 하는 것이 좋다.&lt;/span&gt; vector의 메모리 재할당이 비효율적으로 반복되는 것을 방지하기 때문에 성능상 이점이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vector를 처음 선언하면 capacity가 디폴트 크기로 설정된다. 그러다 push_back() 함수를 반복적으로 호출하여 element 수가 capacity를 초과하여 더 이상 저장이 불가능하면 메모리 재할당을 수행한다. 이러한 과정이 반복되면 그 때마다 vector 메모리 재할당 &amp;amp; 기존 element 복사을 수행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;미리 필요한 vector 크기를 알고 reserve를 하면 이러한 반복적인 재할당&amp;amp;복사를 방지할 수 있다.&lt;/span&gt; reserve한 vector의 총 크기는 capacity() 함수로 알 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1700815913635&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const int arr_len = 100;
std::vector&amp;lt;int&amp;gt; array;
array.reserve(arr_len);
cout &amp;lt;&amp;lt; array.capacity() &amp;lt;&amp;lt; endl; // 100
cout &amp;lt;&amp;lt; array.size() &amp;lt;&amp;lt; endl; // 저장된 element가 없으니 0이 출력되는 것에 주의&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;i&gt;&lt;b&gt;벡터 인덱싱&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[] 연산자를 통한 인덱싱과 at() 함수를 사용한 인덱싱 모두 가능하다.&lt;/p&gt;
&lt;pre id=&quot;code_1700812862674&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cout &amp;lt;&amp;lt; array[0] &amp;lt;&amp;lt; endl;
cout &amp;lt;&amp;lt; array.at(0) &amp;lt;&amp;lt; endl;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;i&gt;&lt;b&gt;벡터의 장점?&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용도 간편하지만 무엇보다 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;별도의 메모리 할당, 해제가 필요 없다&lt;/span&gt;는 것이 장점이다. &lt;span style=&quot;background-color: #f6e199;&quot;&gt;스코프를 벗어나면 자동으로 할당이 해제&lt;/span&gt;되기 때문에 new, delete와 같은 별도의 키워드가 필요없고 메모리 누수의 가능성도 상대적으로 작다.&lt;/p&gt;</description>
      <category>C++ 학습</category>
      <author>byeongkyo</author>
      <guid isPermaLink="true">https://byeongkyo.tistory.com/49</guid>
      <comments>https://byeongkyo.tistory.com/49#entry49comment</comments>
      <pubDate>Fri, 24 Nov 2023 14:29:45 +0900</pubDate>
    </item>
    <item>
      <title>[C++] std::array</title>
      <link>https://byeongkyo.tistory.com/48</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;i&gt;&lt;b&gt;std::array&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C++ std namespace에 속하는 array와 유사한 기능을 제공하는 클래스다. 기존의 배열을 래핑했다고 볼 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1700799940139&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;array&amp;gt;

using namespace std;

int main()
{
	array&amp;lt;int, 5&amp;gt; my_arr = { 1, 2, 3, 4, 5 };
	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;i&gt;&lt;b&gt;기존 배열과의 차이점&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 배열에서는 배열의 크기를 벗어나는 인덱스의 접근에 대해서 접근을 허용했지만 std::array는 예외를 발생시킨다. 아래와 같은 경우 쓰레기 값을 출력한다.&lt;/p&gt;
&lt;pre id=&quot;code_1700801040307&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using namespace std;

int main()
{
	int arr[5] = { 0 };
	cout &amp;lt;&amp;lt; arr[10] &amp;lt;&amp;lt; endl;

	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;126&quot; data-origin-height=&quot;46&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FYDDD/btsASu409Gf/tLwshXBv2gYv9zUSUeBK3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FYDDD/btsASu409Gf/tLwshXBv2gYv9zUSUeBK3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FYDDD/btsASu409Gf/tLwshXBv2gYv9zUSUeBK3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFYDDD%2FbtsASu409Gf%2FtLwshXBv2gYv9zUSUeBK3k%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;126&quot; height=&quot;46&quot; data-origin-width=&quot;126&quot; data-origin-height=&quot;46&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;std::array에서 범위를 벗어나는 값을 출력하려고 하면 예외가 발생한다.&lt;/p&gt;
&lt;pre id=&quot;code_1700801128623&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using namespace std;

int main()
{
	array&amp;lt;int, 5&amp;gt; my_arr = { 1, 2, 3, 4, 5 };
	cout &amp;lt;&amp;lt; my_arr[10] &amp;lt;&amp;lt; endl;

	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;319&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUerXP/btsAMX2uotx/hAxk5onbaG6D32y38OZxA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUerXP/btsAMX2uotx/hAxk5onbaG6D32y38OZxA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUerXP/btsAMX2uotx/hAxk5onbaG6D32y38OZxA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUerXP%2FbtsAMX2uotx%2FhAxk5onbaG6D32y38OZxA1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;402&quot; height=&quot;319&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;319&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;i&gt;&lt;b&gt;몇 가지 유용한 기능&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;size()&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;array의 크기를 출력한다.&lt;/p&gt;
&lt;pre id=&quot;code_1700801640227&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;array&amp;lt;int, 5&amp;gt; my_arr = { 1, 2, 3, 4, 5 };
cout &amp;lt;&amp;lt; my_arr.size() &amp;lt;&amp;lt; endl;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;sort()&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;std에 정의된 sort 함수와 array를 함께 사용하면 보다 편하게 정렬이 가능하다.&lt;/p&gt;
&lt;pre id=&quot;code_1700801810766&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int main()
{
	array&amp;lt;int, 5&amp;gt; my_arr = { 1, 21, 3, 47, 5 };

	for (auto &amp;amp;element : my_arr)
	{
		cout &amp;lt;&amp;lt; element &amp;lt;&amp;lt; &quot; &quot;;
	}
	cout &amp;lt;&amp;lt; endl;

	sort(my_arr.begin(), my_arr.end());
	for (auto &amp;amp;element : my_arr)
	{
		cout &amp;lt;&amp;lt; element &amp;lt;&amp;lt; &quot; &quot;;
	}

	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;105&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bG7zG4/btsASbLtVQW/ClpBe9YWaSoybHVwZQtoFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bG7zG4/btsASbLtVQW/ClpBe9YWaSoybHVwZQtoFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bG7zG4/btsASbLtVQW/ClpBe9YWaSoybHVwZQtoFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbG7zG4%2FbtsASbLtVQW%2FClpBe9YWaSoybHVwZQtoFK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;105&quot; height=&quot;40&quot; data-origin-width=&quot;105&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내림차순으로 정렬하기 위해서는 rbegin(), rend()를 사용한다.&lt;/p&gt;
&lt;pre id=&quot;code_1700801946001&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sort(my_arr.rbegin(), my_arr.rend());
for (auto &amp;amp;element : my_arr)
{
	cout &amp;lt;&amp;lt; element &amp;lt;&amp;lt; &quot; &quot;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;109&quot; data-origin-height=&quot;41&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ex7Mzg/btsASrHoSHk/1GuIRzuiLoJuJeVCCZlCDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ex7Mzg/btsASrHoSHk/1GuIRzuiLoJuJeVCCZlCDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ex7Mzg/btsASrHoSHk/1GuIRzuiLoJuJeVCCZlCDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fex7Mzg%2FbtsASrHoSHk%2F1GuIRzuiLoJuJeVCCZlCDk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;109&quot; height=&quot;41&quot; data-origin-width=&quot;109&quot; data-origin-height=&quot;41&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;i&gt;&lt;b&gt;std::array를 함수의 인자로 전달&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;std::array 자체를 함수 인자로 전달해도 정상적으로 동작한다. &lt;span style=&quot;background-color: #f6e199;&quot;&gt;다만 함수를 호출할때 array 전체가 복사되기 때문에&lt;/span&gt; 성능상의 문제가 발생할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1700801405636&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using namespace std;

// std::array 전체를 함수 인자로 전달
void doSome(array&amp;lt;int , 5&amp;gt; arr)
{
	cout &amp;lt;&amp;lt; arr.size() &amp;lt;&amp;lt; endl;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이럴 경우 array를 참조로 전달하면 전체가 복사되는 비효율적인 상황을 방지할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1700801466923&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using namespace std;

void doSome(const array&amp;lt;int , 5&amp;gt; &amp;amp;arr)
{
	cout &amp;lt;&amp;lt; arr.size() &amp;lt;&amp;lt; endl;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>C++ 학습</category>
      <author>byeongkyo</author>
      <guid isPermaLink="true">https://byeongkyo.tistory.com/48</guid>
      <comments>https://byeongkyo.tistory.com/48#entry48comment</comments>
      <pubDate>Fri, 24 Nov 2023 13:45:52 +0900</pubDate>
    </item>
    <item>
      <title>[C++] 다중 포인터</title>
      <link>https://byeongkyo.tistory.com/47</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;i&gt;&lt;b&gt;다중 포인터&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포인터도 일종의 변수이기 때문에 당연히 포인터의 포인터도 만들 수 있다. 이렇게 참조가 중첩된 포인터를 다중 포인터라고 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1700731627419&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int *ptr = nullptr;
int **ptrptr = nullptr;

int value = 5;

ptr = &amp;amp;value;
ptrptr = &amp;amp;ptr;

cout &amp;lt;&amp;lt; ptr &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; *ptr &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; &amp;amp;ptr &amp;lt;&amp;lt; endl;
cout &amp;lt;&amp;lt; ptrptr &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; *ptrptr &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; &amp;amp;ptrptr &amp;lt;&amp;lt; endl;
cout &amp;lt;&amp;lt; **ptrptr &amp;lt;&amp;lt; endl;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;419&quot; data-origin-height=&quot;61&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rHPHP/btsAMoFuN81/lxTbAURKHhW6VPS2Yux031/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rHPHP/btsAMoFuN81/lxTbAURKHhW6VPS2Yux031/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rHPHP/btsAMoFuN81/lxTbAURKHhW6VPS2Yux031/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrHPHP%2FbtsAMoFuN81%2FlxTbAURKHhW6VPS2Yux031%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;419&quot; height=&quot;61&quot; data-origin-width=&quot;419&quot; data-origin-height=&quot;61&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;i&gt;&lt;b&gt;다중 포인터를 사용한 다중 배열 선언&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다중 포인터를 사용해서 다중 배열을 선언할 수도 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1700796477973&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int row = 3;
int col = 5;

int *r1 = new int[col] {1, 2, 3, 4, 5};
int *r2 = new int[col] {6, 7, 8, 9, 10};
int *r3 = new int[col] {11, 12, 13, 14, 15};

int **rows = new int*[row] {r1, r2, r3};

delete[] rows;
delete[] r1;
delete[] r2;
delete[] r3;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>C++ 학습</category>
      <author>byeongkyo</author>
      <guid isPermaLink="true">https://byeongkyo.tistory.com/47</guid>
      <comments>https://byeongkyo.tistory.com/47#entry47comment</comments>
      <pubDate>Thu, 23 Nov 2023 18:27:23 +0900</pubDate>
    </item>
    <item>
      <title>[C++] void pointer</title>
      <link>https://byeongkyo.tistory.com/46</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;i&gt;&lt;b&gt;void pointer&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제네릭 포인터라고도 한다. &lt;span style=&quot;background-color: #f6e199;&quot;&gt;모든 데이터 타입에 대응되는 포인터&lt;/span&gt;라고 생각하면 된다. void 포인터를 선언하면 int, double, char 등 다양한 데이터 타입의 참조를 저장할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1700726995999&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int i = 5;
float f = 3.0;
char c = 'a';

void *ptr = nullptr;

// 모두 유효하다
ptr = &amp;amp;i;
ptr = &amp;amp;f;
ptr = &amp;amp;c;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 이런 식으로 저장하면 해당 포인터가 어떤 데이터를 참조하는지 알 수 없게된다. +/- 연산을 적용하는 것도 불가능하다.(당연하다 어떤 데이터타입을 참조하는지 알 수 없으니 계산할 메모리의 크기 자체를 정의할 수 없다.) 역참조도 불가능하다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;i&gt;&lt;b&gt;void pointer 캐스팅&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void pointer 자체로는 쓰임새가 제한되기 때문에 실제로 포인터를 활용하기 위해서는 캐스팅을 수행해야 한다. 변수를 캐스팅할때 사용했던 static_cast를 사용할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1700729382309&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;float f = 3.5;
void *ptr = nullptr;
ptr = &amp;amp;f;
cout &amp;lt;&amp;lt; *(static_cast&amp;lt;float*&amp;gt;(ptr)) &amp;lt;&amp;lt; endl;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>C++ 학습</category>
      <author>byeongkyo</author>
      <guid isPermaLink="true">https://byeongkyo.tistory.com/46</guid>
      <comments>https://byeongkyo.tistory.com/46#entry46comment</comments>
      <pubDate>Thu, 23 Nov 2023 17:49:48 +0900</pubDate>
    </item>
  </channel>
</rss>