<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>GGONG LOG</title>
    <link>https://0so01018.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Tue, 7 Apr 2026 14:17:16 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>0so0</managingEditor>
    <image>
      <title>GGONG LOG</title>
      <url>https://tistory1.daumcdn.net/tistory/6401397/attach/1bf5f786ca544541b22ff3db12e1989c</url>
      <link>https://0so01018.tistory.com</link>
    </image>
    <item>
      <title>개인정보처리방침</title>
      <link>https://0so01018.tistory.com/pages/%EA%B0%9C%EC%9D%B8%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EB%B0%A9%EC%B9%A8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;본&amp;nbsp;블로그(0so01018.tistory.com)는 &lt;br /&gt;Google&amp;nbsp;AdSense를&amp;nbsp;사용하여&amp;nbsp;광고를&amp;nbsp;게재할&amp;nbsp;수&amp;nbsp;있으며, &lt;br /&gt;이를&amp;nbsp;위해&amp;nbsp;쿠키(cookie)를&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;Google을&amp;nbsp;포함한&amp;nbsp;제3자&amp;nbsp;광고&amp;nbsp;사업자는 &lt;br /&gt;사용자의&amp;nbsp;이전&amp;nbsp;방문&amp;nbsp;기록을&amp;nbsp;기반으로 &lt;br /&gt;광고를&amp;nbsp;제공하기&amp;nbsp;위해&amp;nbsp;쿠키를&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;사용자는&amp;nbsp;Google&amp;nbsp;광고&amp;nbsp;설정&amp;nbsp;페이지 &lt;br /&gt;(&lt;a href=&quot;https://www.google.com/settings/ads)를&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.google.com/settings/ads)를&lt;/a&gt;&amp;nbsp;통해 &lt;br /&gt;맞춤&amp;nbsp;광고를&amp;nbsp;해제할&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;본&amp;nbsp;블로그는&amp;nbsp;사용자의&amp;nbsp;개인정보를&amp;nbsp;직접&amp;nbsp;수집하거나&amp;nbsp;저장하지&amp;nbsp;않으며, &lt;br /&gt;방문자&amp;nbsp;통계&amp;nbsp;분석을&amp;nbsp;위해&amp;nbsp;제3자&amp;nbsp;서비스(Google&amp;nbsp;Analytics&amp;nbsp;등)를 &lt;br /&gt;사용할&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;본&amp;nbsp;개인정보처리방침은&amp;nbsp;관련&amp;nbsp;법령&amp;nbsp;및&amp;nbsp;서비스&amp;nbsp;변경에&amp;nbsp;따라 &lt;br /&gt;수정될&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;</description>
      <author>0so0</author>
      <guid isPermaLink="true">https://0so01018.tistory.com/pages/%EA%B0%9C%EC%9D%B8%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EB%B0%A9%EC%B9%A8</guid>
      <pubDate>Thu, 5 Feb 2026 17:44:36 +0900</pubDate>
    </item>
    <item>
      <title>문의하기</title>
      <link>https://0so01018.tistory.com/pages/%EB%AC%B8%EC%9D%98%ED%95%98%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;블로그&amp;nbsp;콘텐츠와&amp;nbsp;관련된&amp;nbsp;문의&amp;nbsp;사항이나 &lt;br /&gt;잘못된&amp;nbsp;내용에&amp;nbsp;대한&amp;nbsp;제보가&amp;nbsp;있으신&amp;nbsp;경우 &lt;br /&gt;댓글 부탁드립니다.&lt;/p&gt;</description>
      <author>0so0</author>
      <guid isPermaLink="true">https://0so01018.tistory.com/pages/%EB%AC%B8%EC%9D%98%ED%95%98%EA%B8%B0</guid>
      <pubDate>Thu, 5 Feb 2026 17:44:12 +0900</pubDate>
    </item>
    <item>
      <title>블로그 소개</title>
      <link>https://0so01018.tistory.com/pages/%EB%B8%94%EB%A1%9C%EA%B7%B8-%EC%86%8C%EA%B0%9C</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이&amp;nbsp;블로그는&amp;nbsp;프로그래밍과&amp;nbsp;컴퓨터&amp;nbsp;시스템&amp;nbsp;전반에&amp;nbsp;대해 &lt;br /&gt;학습하고&amp;nbsp;정리한&amp;nbsp;내용을&amp;nbsp;기록하기&amp;nbsp;위해&amp;nbsp;운영되고&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;주로&amp;nbsp;C/C++&amp;nbsp;기반의&amp;nbsp;프로그래밍, &lt;br /&gt;네트워크&amp;nbsp;및&amp;nbsp;시스템&amp;nbsp;관련&amp;nbsp;개념, &lt;br /&gt;알고리즘과&amp;nbsp;문제&amp;nbsp;해결&amp;nbsp;과정&amp;nbsp;등을&amp;nbsp;중심으로&amp;nbsp;다루고&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;개인&amp;nbsp;학습&amp;nbsp;과정에서&amp;nbsp;이해한&amp;nbsp;내용을 &lt;br /&gt;정리하는&amp;nbsp;것을&amp;nbsp;목적으로&amp;nbsp;하며, &lt;br /&gt;같은&amp;nbsp;주제에&amp;nbsp;관심&amp;nbsp;있는&amp;nbsp;분들께 &lt;br /&gt;도움이&amp;nbsp;될&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;정보를&amp;nbsp;공유하고자&amp;nbsp;합니다. &lt;br /&gt;&lt;br /&gt;글의&amp;nbsp;내용은&amp;nbsp;개인적인&amp;nbsp;학습&amp;nbsp;기록을&amp;nbsp;바탕으로&amp;nbsp;작성되었으며, &lt;br /&gt;잘못된&amp;nbsp;부분이나&amp;nbsp;보완이&amp;nbsp;필요한&amp;nbsp;내용이&amp;nbsp;있다면 &lt;br /&gt;문의&amp;nbsp;페이지를&amp;nbsp;통해&amp;nbsp;알려주시면&amp;nbsp;감사하겠습니다. &lt;/p&gt;</description>
      <author>0so0</author>
      <guid isPermaLink="true">https://0so01018.tistory.com/pages/%EB%B8%94%EB%A1%9C%EA%B7%B8-%EC%86%8C%EA%B0%9C</guid>
      <pubDate>Thu, 5 Feb 2026 17:43:11 +0900</pubDate>
    </item>
    <item>
      <title>[Design Pattern] MVVM 패턴</title>
      <link>https://0so01018.tistory.com/7</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Model-View-ViewModel(MVVM) 패턴에 대한 정리&lt;/b&gt;&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item tenping&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;SMALL&lt;/div&gt;
    &lt;tenping class=&quot;adsbytenping&quot; style=&quot;width: 100%; max-width: 768px; margin: 0 auto; display: block;&quot; mediaid=&quot;6401397&quot; tenping-ad-display-type=&quot;UD8Mia8gyIoT5Z2MT6VB3Q%3d%3d&quot;&gt;&lt;/tenping&gt;
    &lt;script src=&quot;//tads.tenping.kr/scripts/adsbytenping.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;MVVM&lt;/b&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Model + View + View Model 3가지 그룹으로 이루어진 패턴&lt;br /&gt;WPF에서 많이 사용되는 프레임워크 패턴&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;사용 이유&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;화면에&amp;nbsp;보여지는것과&amp;nbsp;실제 데이터가 처리되는 로직을 분리하여 유지보수, 개발 효율 증가시키기 위함&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;구조&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1630&quot; data-origin-height=&quot;326&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kAltT/btss72PXb83/MxWehL7AbOKYBKErIl6st1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kAltT/btss72PXb83/MxWehL7AbOKYBKErIl6st1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kAltT/btss72PXb83/MxWehL7AbOKYBKErIl6st1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkAltT%2Fbtss72PXb83%2FMxWehL7AbOKYBKErIl6st1%2Fimg.jpg&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;605&quot; height=&quot;121&quot; data-origin-width=&quot;1630&quot; data-origin-height=&quot;326&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Model : App에서 다루는 Data&lt;br /&gt;View&amp;nbsp; : 사용자에게 보여지는 UI 요소&lt;br /&gt;ViewModel : Model이 가지고 있는 정보를 View에 표현하기 위해 만든 중간 단계 Model&lt;b&gt;&lt;/b&gt;&lt;/blockquote&gt;

&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;동작&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nbsp;View를 통한 사용자의 UI 조작 입력&lt;/li&gt;
&lt;li&gt;사용자 입력을 Command 패턴으로 View Model에 전달&lt;/li&gt;
&lt;li&gt;View Model은 Model에게 Data 요청&lt;/li&gt;
&lt;li&gt;Model은 요청받은 Data를 View Model에게 전달&lt;/li&gt;
&lt;li&gt;View Model은 전달받은 Data를 저장&lt;/li&gt;
&lt;li&gt;View는 View Model에 저장된 Data를 binding해 UI에 표시&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Command 패턴 사용(사용실행될 기능을 캡슐화함으로써 주어진 여러 기능을 실행할 수 있는 재사용성이 높은 클래스를 설계하는 패턴)&lt;/li&gt;
&lt;li&gt;Data binding ( 데이터 소스와 UI 요소 간의 연결, WPF의 경우 &lt;span style=&quot;color: #333333;&quot;&gt;XAML에 정의&lt;/span&gt;)&lt;/li&gt;
&lt;li&gt;View와 View Model은 1:1관계&lt;/li&gt;
&lt;li&gt;View와 View Model 사의 의존성 X&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Design Pattern</category>
      <category>Design Pattern</category>
      <category>MVVM</category>
      <category>WPF</category>
      <category>디자인패턴</category>
      <author>0so0</author>
      <guid isPermaLink="true">https://0so01018.tistory.com/7</guid>
      <comments>https://0so01018.tistory.com/7#entry7comment</comments>
      <pubDate>Tue, 3 Oct 2023 19:00:53 +0900</pubDate>
    </item>
    <item>
      <title>[C++] 스마트 포인터</title>
      <link>https://0so01018.tistory.com/52</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;스마트 포인터에 대한 정리&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item tenping&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;SMALL&lt;/div&gt;
    &lt;tenping class=&quot;adsbytenping&quot; style=&quot;width: 100%; max-width: 768px; margin: 0 auto; display: block;&quot; mediaid=&quot;6401397&quot; tenping-ad-display-type=&quot;UD8Mia8gyIoT5Z2MT6VB3Q%3d%3d&quot;&gt;&lt;/tenping&gt;
    &lt;script src=&quot;//tads.tenping.kr/scripts/adsbytenping.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;&lt;b&gt;RAII(Resource acquisition is initialization) &lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;&lt;b&gt;패턴&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;객체가 쓰이는 Scope를 벗어나면 Resource를 해제해주는 기법&lt;/blockquote&gt;
&lt;pre class=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;bool error() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return true;
}

void fnc() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int* c = new int[100];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (error()) return;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;delete[] c;
}

int main(void) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fnc();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_CrtDumpMemoryLeaks();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;Detected memory leaks! Dumping objects -&amp;gt; {156} normal block at 0x00C60C58, 400 bytes long. Data: &amp;lt; &amp;gt; CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD Object dump complete.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 예외(에러)가 발생할 경우 c가 소멸되지 않아 메모리 누수가 발생하기 때문에 이 문제를 해결하기 위해 RAII 패턴 도입&lt;br /&gt;&amp;nbsp;&lt;br /&gt;* _CrtDumpMemoryLeaks() 관련 내용은 아래 참고&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/crtdumpmemoryleaks?view=msvc-170&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/crtdumpmemoryleaks?view=msvc-170&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;스마트 포인터(Smart pointer)&lt;/b&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;메모리 누수(memory leak)로 부터 프로그램의 안정성을 보장하기 위해 C++에서 제공하는 기능&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;unique_ptr&lt;/b&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;하나의 스마트포인터만이 특정 객체를 소유할 수 있도록 객체에 소유권 개념을 도입한 포인터&lt;br /&gt;소유권을 이전할 수 있지만 스마트포인터가 객체의 소유권을 가지고 있을 때에만 소멸자가 해당 객체를 삭제가능&lt;/blockquote&gt;
&lt;pre class=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;int main(void) {

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int* temp = new int;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*temp = 1;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unique_ptr&amp;lt;int&amp;gt; u1(temp);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cout &amp;lt;&amp;lt; &quot;u1 : &quot; &amp;lt;&amp;lt; *u1 &amp;lt;&amp;lt; endl;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unique_ptr&amp;lt;int&amp;gt; u2(new int(2));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cout &amp;lt;&amp;lt; &quot;u2 : &quot; &amp;lt;&amp;lt; *u2 &amp;lt;&amp;lt; endl;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// u1의 소유권 이전
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unique_ptr&amp;lt;int&amp;gt; u3 = move(u1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cout &amp;lt;&amp;lt; &quot;u3 : &quot; &amp;lt;&amp;lt; *u3 &amp;lt;&amp;lt; endl;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// u1의 소유권이 이전되어 u1 복사시 compile error 발생
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unique_ptr&amp;lt;int&amp;gt; u4 = u1; 
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;78&quot; data-origin-height=&quot;57&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8zrVF/btsvMWscr7v/v1TVEGXjut9np1JUd9tvV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8zrVF/btsvMWscr7v/v1TVEGXjut9np1JUd9tvV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8zrVF/btsvMWscr7v/v1TVEGXjut9np1JUd9tvV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8zrVF%2FbtsvMWscr7v%2Fv1TVEGXjut9np1JUd9tvV1%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;78&quot; height=&quot;57&quot; data-origin-width=&quot;78&quot; data-origin-height=&quot;57&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;std&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;make_unique&lt;/span&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;지정된 타입의 객체 생성, 생성된 객체를 가리키는 unique_ptr 반환&lt;/blockquote&gt;
&lt;pre class=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;class test {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int a, b;

public :
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;test(int a, int b) : a(a), b(b){

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int add() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return a + b;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;~test() {

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
};

int main(void) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;auto ptr = make_unique&amp;lt;test&amp;gt;(2, 3);
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;shared_ptr&lt;/b&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;하나의특정 객체를 참조하는 스마트 포인터가 몇개인지 확인하고, 참주 횟수가 0이 되면 메모리를 자동 해제(delete)하는 포인터&lt;/blockquote&gt;
&lt;pre class=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;int main(void) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// shared_ptr&amp;lt;객체&amp;gt; s1(new 객체);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;shared_ptr&amp;lt;int&amp;gt; s1(new int(5));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cout &amp;lt;&amp;lt; &quot;s1 : &quot; &amp;lt;&amp;lt; *s1 &amp;lt;&amp;lt; endl;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cout &amp;lt;&amp;lt; &quot;s1 use_count : &quot; &amp;lt;&amp;lt; s1.use_count() &amp;lt;&amp;lt; endl;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;auto s2 = s1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cout &amp;lt;&amp;lt; &quot;s2 use_count : &quot; &amp;lt;&amp;lt; s2.use_count() &amp;lt;&amp;lt; endl;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s1.reset();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cout &amp;lt;&amp;lt; &quot;s2 use_count : &quot; &amp;lt;&amp;lt; s2.use_count() &amp;lt;&amp;lt; endl;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s2.reset();

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;187&quot; data-origin-height=&quot;90&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbBREZ/btsvDlzxzQJ/3FOvg8CKzAOtxkLp4bFCKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbBREZ/btsvDlzxzQJ/3FOvg8CKzAOtxkLp4bFCKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbBREZ/btsvDlzxzQJ/3FOvg8CKzAOtxkLp4bFCKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbBREZ%2FbtsvDlzxzQJ%2F3FOvg8CKzAOtxkLp4bFCKK%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;187&quot; height=&quot;90&quot; data-origin-width=&quot;187&quot; data-origin-height=&quot;90&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;weak_ptr&lt;/b&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;shared_ptr에서 순환 참조가 일어나는 것을 제거하기 위해 사용하는 포인터&lt;br /&gt;shared_ptr 인스턴스가 소유하는 객체에 대한 접근만 허용&lt;/blockquote&gt;</description>
      <category>Language/C++</category>
      <category>C++</category>
      <category>raii</category>
      <category>shared_ptr</category>
      <category>unique_ptr</category>
      <category>weak_ptr</category>
      <category>스마트포인터</category>
      <author>0so0</author>
      <guid isPermaLink="true">https://0so01018.tistory.com/52</guid>
      <comments>https://0so01018.tistory.com/52#entry52comment</comments>
      <pubDate>Mon, 25 Sep 2023 19:00:55 +0900</pubDate>
    </item>
    <item>
      <title>[Network] REST API</title>
      <link>https://0so01018.tistory.com/53</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;REST API에 대한 설명&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item tenping&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;SMALL&lt;/div&gt;
    &lt;tenping class=&quot;adsbytenping&quot; style=&quot;width: 100%; max-width: 768px; margin: 0 auto; display: block;&quot; mediaid=&quot;6401397&quot; tenping-ad-display-type=&quot;UD8Mia8gyIoT5Z2MT6VB3Q%3d%3d&quot;&gt;&lt;/tenping&gt;
    &lt;script src=&quot;//tads.tenping.kr/scripts/adsbytenping.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;REST&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;(Representational State Transfer)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 것&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HTTP URI를 통해 자원 명시&lt;/li&gt;
&lt;li&gt;HTTP Method를 통해 자원에 대한 CRUD O&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;peration &lt;/span&gt;적용&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;CRUD Operation&lt;/b&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;기본적인 데이터 처리 기능인 Create, Read, Update, Delete를 묶어 일컫는 말&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;REST 구성&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자원(Resource) : HTTP URI&lt;/li&gt;
&lt;li&gt;행위(Verb) : HTTP Method&lt;/li&gt;
&lt;li&gt;표현(Representations) :&amp;nbsp; HTTP Message&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;REST 특징&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Uniform Interface(인터페이스 일관성)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행&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;2. Stateless(무상태)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작업을 위한 상태 정보를 따로 저장하지 관리하지 않아 서버의 자유도를 높이고, 불필요한 정보를 관리하지 않음으로써 단순화함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. Cacheable(캐시 처리 가능)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;HTTP가 가진 캐싱 기능 적용 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. Self-descriptiveness(자체 표현 구조)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;REST API 메시지만 보고도 이를 쉽게 이해할 수 있는 자체 표현 구조&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;5. &lt;/span&gt;Client - Server 구조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;REST 서버는 API 제공, 클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인 정보)등을 직접 관리하는 구조로 각각의 영할이 확실하게 구분되어 서로 간의 의존성이 줄어듦&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;6. Layered system(계층화)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;다중 계층으로 구성될 수 있으며 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있고 PROXY, 게이트웨이 같은 네트워크 기반의 중간매체를 사용가능하게 함&lt;/span&gt;&lt;/p&gt;

&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;HTTP Method&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;POST : 데이터 생성&lt;/li&gt;
&lt;li&gt;GET : 데이터 조회&lt;/li&gt;
&lt;li&gt;PUT : 데이터 수정&lt;/li&gt;
&lt;li&gt;DELETE : 데이터 삭제&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Network</category>
      <category>crud</category>
      <category>Delete</category>
      <category>Get</category>
      <category>HTTP</category>
      <category>Network</category>
      <category>Post</category>
      <category>put</category>
      <category>Rest</category>
      <author>0so0</author>
      <guid isPermaLink="true">https://0so01018.tistory.com/53</guid>
      <comments>https://0so01018.tistory.com/53#entry53comment</comments>
      <pubDate>Wed, 20 Sep 2023 07:00:20 +0900</pubDate>
    </item>
    <item>
      <title>[C++] OOP 특징</title>
      <link>https://0so01018.tistory.com/51</link>
      <description>&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item tenping&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;SMALL&lt;/div&gt;
    &lt;tenping class=&quot;adsbytenping&quot; style=&quot;width: 100%; max-width: 768px; margin: 0 auto; display: block;&quot; mediaid=&quot;6401397&quot; tenping-ad-display-type=&quot;UD8Mia8gyIoT5Z2MT6VB3Q%3d%3d&quot;&gt;&lt;/tenping&gt;
    &lt;script src=&quot;//tads.tenping.kr/scripts/adsbytenping.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;OOP 특징 및 핵심 개념에 대한 정리&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;OOP(Object Oriented Programming&lt;/b&gt;)&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;객체지향 프로그래밍&lt;br /&gt;필요한 데이터를 추상화하여 속성과 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법&lt;b&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;캡슐화(Encapsulation&lt;/b&gt;)&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;객체의 속성과 행위를 하나로 묶고 구현 코드를 외부에 감춰 은닉하는 것&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 번들링(Data bundling) - 변수와 함수를 하나의 단위로 묶는 것&lt;/li&gt;
&lt;li&gt;멤버 변수 + 멤버 함수 + 접근지정자를 =&amp;nbsp;&amp;nbsp;클래스로 캡슐화 지원&lt;/li&gt;
&lt;li&gt;정보 은닉(Information hiding) - 클래스 내부 구현을 외부로 드러나지 않도록 감춤&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;추상화(Abstraction&lt;/b&gt;)&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;중요하고 필요한 정보만 표현하기 위해 객체의 공통적 속성과 행위를 하나로 묶는 것&lt;/blockquote&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;상속(Inheritance)&lt;/b&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;상위 클래스에 정의된 기능을 가져와 재사용하거나 새로운 기능을 추가해 코드의 중복을 줄이고 재사용성을 늘릴 수 있는 방법&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존에 잘 만들어진 클래스 재활용 가능&lt;/li&gt;
&lt;li&gt;공통 코드를 상위 클래스에 정의하여 반복 제거, 유지보수 편리&lt;/li&gt;
&lt;li&gt;공동의 조상을 가지는 클래스 계층을 구성함으로써 다형성 부여&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;다형성(Polymorphism)&lt;/b&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;객체가 상속을 통해 기능을 확장하고 변경하여 여러 형태의 객체로 재구성되는 것&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;오버로딩 : 같은 이름의 메서드나 연산자를 매개변수만 변경하여 중복정의 하는 것&lt;/li&gt;
&lt;li&gt;오버라이딩 : 같은 이름과 매개변수를 가지는 메서드를 하위 클래스에서 재정의 하는 것&lt;/li&gt;
&lt;li&gt;미리 만들어둔 코드를 수정하지 않고, 클래스를 상속하여 동작 변경 가능&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Language/C++</category>
      <category>C++</category>
      <category>OOP특성</category>
      <category>다형성</category>
      <category>추상화</category>
      <category>캡슐화</category>
      <author>0so0</author>
      <guid isPermaLink="true">https://0so01018.tistory.com/51</guid>
      <comments>https://0so01018.tistory.com/51#entry51comment</comments>
      <pubDate>Mon, 18 Sep 2023 07:00:16 +0900</pubDate>
    </item>
    <item>
      <title>[C++] 클래스(Class)</title>
      <link>https://0so01018.tistory.com/50</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;C언어에서의 구조체&lt;/b&gt;&lt;/h3&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item tenping&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;SMALL&lt;/div&gt;
    &lt;tenping class=&quot;adsbytenping&quot; style=&quot;width: 100%; max-width: 768px; margin: 0 auto; display: block;&quot; mediaid=&quot;6401397&quot; tenping-ad-display-type=&quot;UD8Mia8gyIoT5Z2MT6VB3Q%3d%3d&quot;&gt;&lt;/tenping&gt;
    &lt;script src=&quot;//tads.tenping.kr/scripts/adsbytenping.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;사용자가 여러 데이터(멤버 변수)를 가지고 새롭게 정의할 수 있는 사용자 정의 타입&amp;nbsp;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1694858128910&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;struct Person {
  char* name;
  int   age;
}; 

void PrintPerson(struct Person p) {
  printf(&amp;ldquo;%s, %d\n&amp;rdquo;, p.name, p.age);
}

void main() {
  struct Person jane, john; 
  
  jane.name = &amp;ldquo;Jane Smith&amp;rdquo;;
  jane.age  = 20;
  PrintPerson(jane);

  john.name = &amp;ldquo;John Smith&amp;rdquo;;
  john.age  = 15;
  PrintPerson(john);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;C++에서의 클래스&lt;/b&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;사용자가 여러 데이터(멤버 변수), 데이터를 조작하는 방법(멤버 함수, 매소드)를 가지고 새롭게 정의할 수 있는 사용자 정의 형식&lt;/blockquote&gt;
&lt;pre id=&quot;code_1694858310879&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Person {
 public:
  char* name;
  int   age;

  void Print() {
    printf(&amp;ldquo;%s, %d\n&amp;rdquo;, name, age);
  }
}; 

void main() {
  Person jane, john; 

  jane.name = &amp;ldquo;Jane Smith&amp;rdquo;;
  jane.age  = 20;
  jane.Print();

  john.name = &amp;ldquo;John Smith&amp;rdquo;;
  john.age  = 10;
  john.Print();
}&lt;/code&gt;&lt;/pre&gt;

&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;구조체와 클래스 비교&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 81.1628%; height: 273px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;항목&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;C언어 구조체&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;C++ 구조체&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;C++ 클래스&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;멤버 변수&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;O&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;멤버 함수&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;O&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;접근 지정자&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;O (기본값 public)&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;O (기본값 private)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;생성자&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;O&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;소멸자&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;O&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;상속&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;O&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;템플릿&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;O&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;접근지정자&lt;span style=&quot;color: #3a3838;&quot;&gt;(Access specifiers)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;클래스 멤버에 대한 접근 권한 지정&lt;/blockquote&gt;
&lt;table style=&quot;border-collapse: collapse; width: 64.8837%; height: 121px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;지정자&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;클래스 내부&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;파생 클래스&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;외부&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;private&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;protected&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;public&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre id=&quot;code_1694858655169&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Test {
 private:
  int i;
  double d;

 protected:
  char c;

 public:
  short s;
  void func1() {};
};

void main() {
  Test t;

  t.i = 10;    // 오류
  t.d = 3.14;  // 오류

  t.c = &amp;lsquo;A&amp;rsquo;;   // 오류

  t.s = 8000;  // 가능, 대입됨
  t.func1();   // 가능, 호출됨

}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;생성자&lt;span style=&quot;color: #3a3838;&quot;&gt;(Constructor)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;객체가 생성될 때 호출되는 함수(클래스 이름과 동일한 멤버함수)&lt;br /&gt;사용자가 정의하지 않은 경우 컴파일러가 인수 없는 기본 생성자 정의&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성자 호출 시점&lt;/p&gt;
&lt;pre id=&quot;code_1694858792577&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Person {
 private:
  char* name_;
  int   age_;

 public:
  Person() {
    name_ = &amp;ldquo;noname&amp;rdquo;;
    age_  = 0;
  }

  void Print() {
    printf(&amp;ldquo;%s, %d\n&amp;rdquo;, name_, age_);
  }
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 일반적인 객체 생성(stack에 메모리 할당)&lt;/p&gt;
&lt;pre id=&quot;code_1694858853181&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void main() {
  Person jane;  // 생성자 호출 
  // jane.name_는 &amp;ldquo;noname&amp;rdquo;, jane.age_는 0으로 초기화
  jane.Print();
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- new 연산자 사용(heap에 메모리 할당)&lt;/p&gt;
&lt;pre id=&quot;code_1694858861398&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void main() {
  // new 연산자로 생성하는 경우, -&amp;gt; 연산자 사용
  Person *jane = new Person();
  jane-&amp;gt;Print();
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;생성자 오버로딩&lt;/b&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;인수 목록이 다른 생성자 정의&lt;/blockquote&gt;
&lt;pre id=&quot;code_1694859031055&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Person {
 private:
  char* name_;
  int   age_;

 public:
  Person() {
    name_ = &amp;ldquo;noname&amp;rdquo;;
    age_  = 0;
  }

  Person(char* name, int age) {
    name_ = name;
    age_  = age;
  }

  // ...
};&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;소멸자&lt;span style=&quot;color: #3a3838;&quot;&gt;(Destructor)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;객체가 소멸될 때 호출되는 함수&lt;br /&gt;클래스 이름 앞에 ~기호를 붙여서 사용&lt;br /&gt;객체가 소멸될때 반드시 호출 되므로 메모리 leak 위험 방지&lt;/blockquote&gt;
&lt;pre id=&quot;code_1694859143062&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Person {
 private:
  char* name_;
  int   age_;

 public:
  Person(char* name, int age) : 
    name_(name), age_(age) {

  ~Person() {
  }
};&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Language/C++</category>
      <category>CLASS</category>
      <category>구조체</category>
      <category>구조체클래스차이</category>
      <category>생성자</category>
      <category>소멸자</category>
      <category>클래스</category>
      <author>0so0</author>
      <guid isPermaLink="true">https://0so01018.tistory.com/50</guid>
      <comments>https://0so01018.tistory.com/50#entry50comment</comments>
      <pubDate>Sun, 17 Sep 2023 07:00:47 +0900</pubDate>
    </item>
    <item>
      <title>[OS] 뮤텍스(Mutex) &amp;amp; 세마포어(Semaphore)</title>
      <link>https://0so01018.tistory.com/49</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;뮤텍스와 세마포어의 특징, 차이에 대한 정리&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item tenping&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;SMALL&lt;/div&gt;
    &lt;tenping class=&quot;adsbytenping&quot; style=&quot;width: 100%; max-width: 768px; margin: 0 auto; display: block;&quot; mediaid=&quot;6401397&quot; tenping-ad-display-type=&quot;UD8Mia8gyIoT5Z2MT6VB3Q%3d%3d&quot;&gt;&lt;/tenping&gt;
    &lt;script src=&quot;//tads.tenping.kr/scripts/adsbytenping.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;임계 영역(Critical Section)&lt;/b&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;함수 내에 둘 이상의 스레드가 동시에 실행하면 문제를 일으키는 하나 이상의 문장으로 묶여있는 코드블록&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;쓰레드 동기화&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;동일한 메모리 영역으로 동시 접근이 발생하는 상황에 필요&lt;/li&gt;
&lt;li&gt;동일한 메모리 영역에 접근하는 쓰레드의 실행 순서를 지정해야 하는 상황에 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;뮤텍스(Mutex)&lt;/b&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Mutual Exclution&lt;br /&gt;임계영역에 여러 쓰레드의 동시접근을 허용하지 않는 기술&lt;br /&gt;동기화 대상이 하나일때 사용&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하기 두 함수를 통해 임계영역 보호&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;pthread_mutex_lock(pthread_mutex *mutex)&lt;/li&gt;
&lt;li&gt;pthread_mutex_unlock(pthread_mutex *mutex)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1694850248676&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pthread_mutex_lock(&amp;amp;mutex);
// 임계 영역 시작
// ...
// 임계 영역 끝
pthread_mutex_unlock(&amp;amp;mutex)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;임계 영역의 시작과 끝을 감싸 사용 쓰레드가 임계영역을 빠져나갈 때까지 블로킹&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* unlock이 호출 되지 않았을 때, lock 함수가 블로킹 상태에서 빠져나가지 못하는 Dead-Lock 상태에 주의해야 함&lt;/p&gt;

&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;세마포어(Semaphore)&lt;/b&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;임계영역에 여러 프로세스, 쓰레드의 동시접근을 허용하지 않는 기술&lt;br /&gt;접근 순서를 동기화 해야할때 사용&lt;br /&gt;동기화 대상이 하나 이상일때 사용&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하기 두 함수를 통해 임계영역 보호&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;sem_post(sem_t *sem) 가 호출되면 세마포어 +1&lt;/li&gt;
&lt;li&gt;sem_wait(sem_t *sem) 가 호출되면 세마포어 -1(세마포어 값은 0보다 작아질 수 없음)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1694850583694&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sem_wait(sem_t *sem);
// 임계 영역 시작
// ...
// 임계 영역 끝
sem_post(sem_t *sem);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;wait 호출 시 세마포어 값이 0이 되며 post가 불리기 전까지 다른 쓰레드에서 임계영역 진입을 막음&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;amp; 세마포어 차이&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;동기화 대상의 개수 - 뮤텍스 : 1개, 세마포어 : 1개 이상&lt;/li&gt;
&lt;li&gt;뮤텍스는 소유하고있는 쓰레드만이 뮤텍스 해제 가능, 세마포어는 다른 쓰레드가 세마포어 해제 가능&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;뮤텍스는 자원을 소유할 수 있고,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;책임을 가지는 반면&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt; 세마포어&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;는 자원 소유가 불가&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>OS/All</category>
      <category>Dead-Lock</category>
      <category>mutex</category>
      <category>semaphore</category>
      <category>데드락</category>
      <category>멀티쓰레드</category>
      <category>뮤텍스</category>
      <category>뮤텍스세마포어차이</category>
      <category>세마포어</category>
      <author>0so0</author>
      <guid isPermaLink="true">https://0so01018.tistory.com/49</guid>
      <comments>https://0so01018.tistory.com/49#entry49comment</comments>
      <pubDate>Sat, 16 Sep 2023 19:00:58 +0900</pubDate>
    </item>
    <item>
      <title>[git] Permission denied (publickey) 해결 방법</title>
      <link>https://0so01018.tistory.com/48</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;git clone이나 push할때 발생하는 Permission denied (publickey) 에러 해결 방법 정리&lt;/p&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. ssh key 생성 명령어 입력&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1694678984442&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ssh-keygen -t rsa -b 4096 -C github 메일 주소
ssh-keygen -t rsa -b 4096 -C &quot;email@addrres&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 경로지정, 비밀번호 설정(안할 경우 엔터)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1694679029470&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/User/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/User/.ssh/id_rsa
Your public key has been saved in /c/Users/User/.ssh/id_rsa.pub
The key fingerprint is:&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. github 에 ssh key 등록&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Settings의 SSH and GPG keys로 이동하여 New SSH key 클릭&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(아래 그림의 노란색 화살표 참고)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1314&quot; data-origin-height=&quot;644&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8zrMz/btstTqRns3B/7WKSGt22NQ99F3USU4srfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8zrMz/btstTqRns3B/7WKSGt22NQ99F3USU4srfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8zrMz/btstTqRns3B/7WKSGt22NQ99F3USU4srfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8zrMz%2FbtstTqRns3B%2F7WKSGt22NQ99F3USU4srfK%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;668&quot; height=&quot;644&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1314&quot; data-origin-height=&quot;644&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2에서 지정한 경로(/c/Users/User/.ssh/id_rsa.pub) 의 pub 파일을 notepad로 열어 복사후 아래 key 에 입력 후&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Add SSH key 버튼 클릭 하면 적용 완료&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1306&quot; data-origin-height=&quot;667&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8u4oE/btst5jXo4ma/j7pq3u2YnNoO1PiuKjzlck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8u4oE/btst5jXo4ma/j7pq3u2YnNoO1PiuKjzlck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8u4oE/btst5jXo4ma/j7pq3u2YnNoO1PiuKjzlck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8u4oE%2Fbtst5jXo4ma%2Fj7pq3u2YnNoO1PiuKjzlck%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;705&quot; height=&quot;667&quot; data-origin-width=&quot;1306&quot; data-origin-height=&quot;667&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. git clone, push 명령어 수행 후 정상인지 확인&lt;/b&gt;&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item tenping&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;SMALL&lt;/div&gt;
    &lt;tenping class=&quot;adsbytenping&quot; style=&quot;width: 100%; max-width: 768px; margin: 0 auto; display: block;&quot; mediaid=&quot;6401397&quot; tenping-ad-display-type=&quot;UD8Mia8gyIoT5Z2MT6VB3Q%3d%3d&quot;&gt;&lt;/tenping&gt;
    &lt;script src=&quot;//tads.tenping.kr/scripts/adsbytenping.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Git</category>
      <category>clone</category>
      <category>GIT</category>
      <category>git clone 오류</category>
      <category>permission denied (publickey)</category>
      <category>Pull</category>
      <category>Push</category>
      <author>0so0</author>
      <guid isPermaLink="true">https://0so01018.tistory.com/48</guid>
      <comments>https://0so01018.tistory.com/48#entry48comment</comments>
      <pubDate>Thu, 14 Sep 2023 19:00:39 +0900</pubDate>
    </item>
  </channel>
</rss>