<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>minsoungdev 님의 블로그</title>
    <link>https://minsoungdev.tistory.com/</link>
    <description>minsoungdev 님의 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Mon, 21 Sep 2026 20:21:30 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>minsoungdev</managingEditor>
    <image>
      <title>minsoungdev 님의 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/8153391/attach/114ec12cb9424363b208dd8eb32f4bbd</url>
      <link>https://minsoungdev.tistory.com</link>
    </image>
    <item>
      <title>하루</title>
      <link>https://minsoungdev.tistory.com/68</link>
      <description>&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;저는 희한한 꿈을 꾸었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내용은...&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;꿈&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;눈을 떠보니 기숙사 호실 안이었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;꿈속에서 잠이 들었다가 다시 눈을 뜨면서 이야기가 시작됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;깨어나보니 밖이 아주 소란스러웠습니다. 10시 이후로는 자습실이든 호실이든 조용히 해야 했거든요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2층 우측 자습실에서 누군가 웃고 떠드는 소리가 들렸습니다. 저는 상황을 확인하고자 몸을 이끌고 밖으로 나갔습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;확인해 보니 그곳에는 원래 있어서는 안 되는 여학생과 선생님이 있었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서로 호실 구역이 나눠져 있어서 구역을 넘으면 안되는 구조였습니다. 어째서인지는 모르겠지만 선생님께서 자의적으로 여학생의 편의를 봐주셔서 2층 자습실에서 자습을 할 수 있게 해주셨습니다. 저는 이것이 기숙사 규정에 어긋나는 행동이라고 말하며, 사감 선생님께 허락을 받으셨는지, 또 왜 이렇게 시끄럽게 떠들고 있었는지 따져 물었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선생님께서는 사감선생님께 허락은 안 받으셨고 자기의 재량껏 편의를 봐주셨다고 하셨습니다. 저는 당시 여러 상황이 겹친 데다 잠까지 깨서 상당히 화가 난 상태여서 선생님과 언쟁을 벌이게 됩니다. 그때 그동안 여학생은 이상하게도 언쟁 중인 저와 선생님의 주위를 계속 빙빙 돌고 있었습니다.(?)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국에는 제가 사감선생님께 이 사실을 말씀드린다고 하고 자리를 떠나려고 합니다. 그때 선생님께서 돌변하시더니 그러면 안된다고 소리를 치셨습니다. 저는 곧바로 1층으로 도망쳤고, 선생님께서는 어디서 구했는지도 모를 벽돌(?)을 들고 저를 죽일 듯이 뒤쫓아 오셨습니다.&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;사감선생님들께서 계신 1층 관리실에는 아무도 계시지 않았습니다. 저는 급한 대로 관리실 맞은편에 있는 1층 세탁실로 뛰어들어 갔습니다. 곧바로 문에 달린 레버형 잠금장치를 돌려 문을 잠그려고 했습니다. 하지만 레버락은 왼쪽으로 돌려봐도, 오른쪽으로 돌려봐도 뭐에 걸린 듯 돌아가지 않았습니다. 벽돌을 들고 쫓아온 선생님은 저를 다 쫓아오셨고 문 하나를 두고 문으로 줄다리기를 하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필사적으로 문을 당기며 버티다가 한계에 다다른 저는, 갑자기 문을 앞으로 힘껏 밀어버렸습니다. 문을 당기고 있던 선생님께서는 문에 세게 맞으셨습니다. 문에 세게 부딪혔음에도, 꿈이라서 그런지 선생님은 곧바로 다시 일어나 벽돌로 제 머리를 내리쳤습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 벽돌을 맞고 깨어나보니 다시 호실 침대에서 눈을 뜨게 되었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일어나고 보니 앞에는 선배님 한 분이 계셨습니다. 저와 친한 사이도 아니었고, 오히려 제가 조금 좋지 않은 감정을 가지고 있던 선배님이었습니다. 그때 당시에 저는 굉장히 목이 마른 상태였습니다. 그런데 제가 목이 마른 것을 아셨는지, 선배님께서는 음료수 한 잔을 가져다주셨습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 저는 뭔가 꺼림칙한 느낌에 음료수를 마시는 척만 하고 음료수를 다 흘려버렸습니다. 그러고 나서 선배님께서 지금까지 있었던 일들을 이야기해 주시고 저는 자리를 뜨려고 합니다. (지금까지 있었던 일들 이야기는 기억이 안 남)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 그때 선배님께서 호실 밖으로 나가려는 저를 붙잡으시고 하시는 말씀이 &quot;이쯤이면 때가 되었는데?&quot; 하더니 사실 음료수에 약을 타 놓았다고 하셨습니다. 하지만 저는 음료수를 마시지 않았기 때문에 저는 바로 선배님을 제압하기 위해서 달려듭니다.&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 그 자리에서 곧바로 총을 선배님의 머리에 겨누고 방아쇠를 당겼습니다....&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러고 꿈에서 깨어나게 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정말 불쾌한 개꿈이었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;근황&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학교 생활이 바빠서 블로그를 유기한 느낌이라 이렇게 근황을 전하고자 글을 써봤습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근에 고민도 많고 생각도 많고 걱정도 많았던 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러다 보니 마음이 불안해지고 원래의 저를 많이 잃어갔던거 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가진 것이 있어도 하나를 잃고 나면 잃은 것만 바라보다 더 많은 것을 잃어버리 듯&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저도 최근에 좋은, 기쁜 일이 생겨도 걱정들로 인해서 처지고 슬픔에 잠겼던 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 많은 것을 잃기 전에 잃은 것에 대한 생각을 버리고,&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;최근에 겜마고 농구대회에서도 우승도 하고 (전체 경기에서 총 10골 정도 넣음)&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-origin-width=&quot;557&quot; data-origin-height=&quot;446&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cg7pnJ/dJMcafBoWCd/BR1bWrag3nlsjxDWxmyv6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cg7pnJ/dJMcafBoWCd/BR1bWrag3nlsjxDWxmyv6k/img.png&quot; data-alt=&quot;https://ggm-h.goeay.kr/ggm-h/main.do&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cg7pnJ/dJMcafBoWCd/BR1bWrag3nlsjxDWxmyv6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcg7pnJ%2FdJMcafBoWCd%2FBR1bWrag3nlsjxDWxmyv6k%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;365&quot; height=&quot;292&quot; data-origin-width=&quot;557&quot; data-origin-height=&quot;446&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://ggm-h.goeay.kr/ggm-h/main.do&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;경기게임마이스터고등학교 홈페이지에 사진이 실리기도 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이상 저의 근황이었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 글에서 저의 최근 했던 많은 생각들까지 담아보려고 했지만 너무 글의 길이가 길어지고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나중에 한번에 적는 것이 났다고 생각하여 나중에 다뤄보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;오늘의 추천 노래는&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://youtu.be/KifSefVEdBs?si=_TSKEWzoXksKAIVH&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Steve Lacy - oh yeah?&lt;/a&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;&amp;nbsp;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;봐주셔서&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;nbsp;감사합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;☺️&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>minsoungdev</author>
      <guid isPermaLink="true">https://minsoungdev.tistory.com/68</guid>
      <comments>https://minsoungdev.tistory.com/68#entry68comment</comments>
      <pubDate>Sun, 20 Sep 2026 12:34:00 +0900</pubDate>
    </item>
    <item>
      <title>  C# async / await 비동기 프로그래밍   </title>
      <link>https://minsoungdev.tistory.com/67</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;안녕하세요. 박민성입니다.&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;☺️&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;오늘은 C#의 async&amp;nbsp;/&amp;nbsp;await&amp;nbsp;비동기&amp;nbsp;프로그래밍에 대해서 글을 쓰고자 합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;학교에서 배우는 네트워크 시간이나 최근 엔진 수업때 사용하여서 공부하게 되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;워낙 주제가 방대하고 알아야 할 것들이 많아서 시간이 오래 걸릴 것 같아서 &lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;사실 살짝 미룬 감이 있긴 합니다.&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;1. async / await란? &lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;async / await는 오래 걸리는 작업이 끝날 때까지 프로그램 전체를 멈춰 세우지 않고 기다리는 동안 다른 작업을 할 수 있도록 비동기 코드를 작성하는 C# 기능입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1786925576596&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;private async Task TestAsync()
{
    Debug.Log(&quot;시작&quot;);

    await Task.Delay(3000);

    Debug.Log(&quot;3초 후&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 &lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Task&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Delay&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;3000&lt;/span&gt;&lt;span&gt;); 을 만났다고 해서 프로그램 전체를 3초 동안 멈추게 하는 것이 아닙니다.&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;a href=&quot;https://learn.microsoft.com/en-us/dotnet/csharp/asynchronous-programming/async-scenarios?utm_source=chatgpt.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Microsoft에서 await이 비동기 작업이 끝날 때까지 현재 async 메서드의 실행을 일시 중단한다고 설명하고 있습니다.&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하게 기다려야 하는 작업 때문에 현재 흐름 전체를 붙잡아 두지 않는 것이라고 이해하면 될 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 동기와 비동기의 차이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 이걸 이해해야지 async / await가 왜 필요한지 알게 됩니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;동기 방식&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;abnf&quot;&gt;&lt;code&gt;DoA();
DoB();
DoC();&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 A, B, C 순서대로 A실행되고 A완료되면 B실행되고 C까지 이렇게 작동됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;B가 5초 걸리면 C는 5초 동안 기다려야 하는 한 타임에 한 동작들 실행하는 것이 동기 방식입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;비동기 방식&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 작업이 기다림을 필요로 한다면&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A 실행 -&amp;gt; 비동기 작업 시작 -&amp;gt; 기다리는 동안 제어권 반환 -&amp;gt; 작업 완료 -&amp;gt; 이어서 실행처럼 작동할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A가 실행 중에 B와 C가 동시에 실행할 수 있게 합니다.&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;span style=&quot;letter-spacing: 0px;&quot;&gt;결과가 올 때까지 기다리는 작업에서 유용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/dotnet/csharp/asynchronous-programming/?utm_source=chatgpt.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt; Microsoft의 TAP(Task-based Asynchronous Pattern)도 이런 비동기 작업을 Task를 중심으로 표현하고 있습니다.&lt;/span&gt;&lt;/a&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;h2 data-ke-size=&quot;size26&quot;&gt;3. Task란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;async / await를 이해하려면 Task를 먼저 알아야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Task는 간단하게 현재 진행 중이거나 앞으로 완료될 작업을 나타내는 객체를 나타냅니다.&lt;/p&gt;
&lt;pre id=&quot;code_1786928153386&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Task task = Task.Delay(3000);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;task에는 3초라는 값이 저장되는 게 아닙니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개념적으로 task는 &quot;3초를 기다리는 작업&quot;을 담고 있는 것입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1786928387351&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;await task;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드는 이 작업이 끝날 때까지 현재 async 메서드를 잠시 중단하고 완료되면 이어서 실행하라는 것을 나타냅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. async의 역할&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메서드에 async를 붙이면 해당 메서드 안에서 await를 사용할 수가 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;382&quot; data-origin-height=&quot;219&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTYaSD/dJMcabFfbGB/xVA3WGdAXtLZgxECLQVT4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTYaSD/dJMcabFfbGB/xVA3WGdAXtLZgxECLQVT4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTYaSD/dJMcabFfbGB/xVA3WGdAXtLZgxECLQVT4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTYaSD%2FdJMcabFfbGB%2FxVA3WGdAXtLZgxECLQVT4K%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;382&quot; height=&quot;219&quot; data-origin-width=&quot;382&quot; data-origin-height=&quot;219&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;없다면 await을 사용할 수 없습니다.&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;async의 핵심 역할은 &lt;b&gt;메서드를 비동기 메서드로 선언하고 그 안에서 await를 사용할 수 있게 하는 것입니다.&lt;/b&gt;&amp;nbsp;&lt;br /&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/async?utm_source=chatgpt.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;async 메서드는 첫 번째 완료되지 않은 await를 만날 때까지 동기적으로 실행되는 것입니다.&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. await의 역할&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 글의 핵심이 되는 내용인 await입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1786929257351&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;await SomeTask();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;await은 작업이 끝날 때까지 현재 async 메서드의 진행을 잠시 멈추고 완료되면 그다음부터 다시 실행하게 됩니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;private async Task TestAsync()
{
    Debug.Log(&quot;1&quot;);

    await Task.Delay(2000);

    Debug.Log(&quot;2&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드는 1을 출력 시키고 -&amp;gt;&amp;nbsp; 2초 작업을 기다립니다. -&amp;gt; TestAsync의 실행을 중단 -&amp;gt; 다른 코드 실행 가능 -&amp;gt; 2초가 완료되면 -&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TestAsync 다시 이어집니다. -&amp;gt; 2를 출력시킵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. 기본 사용법&lt;/h2&gt;
&lt;pre id=&quot;code_1786929749268&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;private async Task WaitAsync()
{
    await Task.Delay(1000);

    Debug.Log(&quot;완료&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;2937&quot; data-start=&quot;2921&quot; data-ke-size=&quot;size16&quot;&gt;호출하는 쪽도 async이라면&lt;/p&gt;
&lt;pre id=&quot;code_1786929765376&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;await WaitAsync();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;await을 사용하여 WaitAsync()이 끝날 때까지 기다릴 수 있습니다. 이것이 위에 설명했던 다른 코드를 실행 가능한 시점인 것입니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;private async Task StartGameAsync()
{
    Debug.Log(&quot;로딩 시작&quot;);

    await LoadDataAsync();

    Debug.Log(&quot;게임 시작&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;LoadDataAsync()가 완료된 이후에 &quot;게임 시작&quot;이 실행되는 구조입니다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;Task playerTask = LoadPlayerAsync();
Task itemTask = LoadItemsAsync();

await Task.WhenAll(playerTask, itemTask);&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;&lt;a href=&quot;https://learn.microsoft.com/en-us/dotnet/csharp/asynchronous-programming/?utm_source=chatgpt.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt; 이런 식으로 서로 독립적인 비동기 작업을 조합할 수 있다는 것도 Task 방식의 큰 장점이라고 Microsoft에서 설명하고 있습니다.&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;7. Task&amp;lt;T&amp;gt;로 결과값 받기&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작업이 끝난 뒤 &lt;b&gt;값을 반환&lt;/b&gt;하고 싶다면 Task&amp;lt;T&amp;gt;를 사용할 수 있습니다!&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;private int GetLevel()
{
    return 10;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 일반 메서드는 10을 반환할 때 메서드 반환형에 int를 적습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1786930085048&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;private async Task&amp;lt;int&amp;gt; GetLevelAsync()
{
    await Task.Delay(1000);

    return 10;
}

int level = await GetLevelAsync(); // 사용&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비동기 메서드는 Task에 있는 제네릭 T에 반환형을 적어서 그 자료형을 반환 시킵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Task는 완료 여부를 가진 작업이라고 하면 Task&amp;lt;T&amp;gt;는 완료되면 T 결과까지 돌려주는 작업이라고 생각하시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/dotnet/csharp/asynchronous-programming/async-return-types?utm_source=chatgpt.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt; Task와 Task&amp;lt;TResult&amp;gt;는 C# async 메서드의 대표적인 반환형입니다.&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;8. async가 새로운 스레드를 만드는 걸까요?  &lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;아닙니다.&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1786930293571&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;async Task TestAsync()&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;async / await의 핵심은 &lt;b&gt;스레드 생성이 아니라 비동기적인 제어 흐름입니다.&lt;/b&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;CPU 작업을 실제 백그라운드 스레드로 옮기는 경우에는 Task.Run 같은 별도의 방법이 사용될 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/dotnet/csharp/asynchronous-programming/async-scenarios?utm_source=chatgpt.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Microsoft도 I/O-bound와 CPU-bound 작업의 비동기 처리 방식이 다르다고 설명하고 있습니다.&lt;/a&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;async = 멀티스레딩이라고 외우시면 안됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;9. Unity Coroutine과 뭐가 다를까요?&lt;/h2&gt;
&lt;pre id=&quot;code_1786930794453&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;private IEnumerator Wait() // 유니티 코루틴
{
    yield return new WaitForSeconds(1f);

    Debug.Log(&quot;완료&quot;);
}

async Task WaitAsync() // async / await
{
    await Task.Delay(1000);

    Debug.Log(&quot;완료&quot;);
}&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;하지만 서로 다른 시스템으로서 코루틴은 유니티의 IEnumerator/yield 기반 실행 시스템이고&lt;/p&gt;
&lt;p data-end=&quot;5807&quot; data-start=&quot;5715&quot; data-ke-size=&quot;size16&quot;&gt;async / await는 C# 언어의 비동기 프로그래밍 모델이입니다.&lt;/p&gt;
&lt;p data-end=&quot;5807&quot; data-start=&quot;5715&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;5807&quot; data-start=&quot;5715&quot; data-ke-size=&quot;size26&quot;&gt;10. 최신 Unity에 Awaitable&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 Unity는 자체적으로&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;Awaitable&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타입을 제공합니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;cs&quot;&gt;&lt;code&gt;private async Awaitable WaitAsync()
{
    await Awaitable.WaitForSecondsAsync(1);

    Debug.Log(&quot;완료&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/6000.0/Documentation/Manual/async-awaitable-introduction.html?utm_source=chatgpt.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt; Unity 공식 문서는 Awaitable을 C#의 async/await 모델에서 기다릴 수 있고 async 반환형으로도 쓸 수 있는 Unity 전용 타입으로 설명하며 Unity 비동기 코드에서는 .NET Task보다 Awaitable이 선호되는 경우가 있다고 안내합니다.&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Coroutine, Task, Awaitable 적절하게 사용하는 것이 중요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;이상으로 오늘은&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;C#에 async&amp;nbsp;/&amp;nbsp;await&amp;nbsp;비동기&amp;nbsp;프로그래밍에&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;대해서 알아보았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;async / await에 관련해서 Unity까지 이어지면 내용이 제 기준으로 엄청 방대해지기 때문에 다 다루지는 못했습니다..&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;뭔가 어설프게 끝난 것도 제가 이해한 것까지만 다루어서 애매하게 끊긴 느낌도 있습니다..&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;오늘은 기숙사에 들어가는 날입니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;내일은 개학입니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;블로그를 매일 쓰는 것은 방학때 게으르게 공부하지 않으려고 했던 저와의 약속 같은 것입니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;개학하고 나서는 매일 블로그를 쓰는 것은 불가능에 가깝겠지만 중요한 일이 일어나거나 전하고자 하는 내용이 있다면 틈틈이 글을 쓰고자 합니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;지금까지 글을 봐주셔서&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;nbsp;감사합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;☺️&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;오늘의 추천 노래는&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;&lt;a href=&quot;https://youtu.be/cBiqltuGT88?si=0W5_8P7SfEFDGllr&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;015B - 이젠 안녕&lt;/a&gt; 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>minsoungdev</author>
      <guid isPermaLink="true">https://minsoungdev.tistory.com/67</guid>
      <comments>https://minsoungdev.tistory.com/67#entry67comment</comments>
      <pubDate>Mon, 17 Aug 2026 10:54:12 +0900</pubDate>
    </item>
    <item>
      <title>  C# Raw String Literal   </title>
      <link>https://minsoungdev.tistory.com/66</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;안녕하세요. 박민성입니다.&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;☺️&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;오늘은 C#의 Raw&amp;nbsp;String&amp;nbsp;Literal에 대해서 글을 쓰고자 합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;전에 String에 대해서 어느 정도는? 자세히 알아보았는데여 오늘은 신기한걸 발견하게 되어&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;공부하고 블로그에 쓰게 되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;1. Raw String Literal이란? &lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;419&quot; data-start=&quot;326&quot; data-ke-size=&quot;size16&quot;&gt;Raw String Literal은 문자열 안의 따옴표, 역슬래시, 여러 줄 텍스트를 이스케이프 문자 없이 거의 그대로 작성할 수 있게 해주는 C# 문법입니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;694&quot; data-origin-height=&quot;148&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rIzP0/dJMcabMazkt/oDZs2a9bD1aCEU140QIfQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rIzP0/dJMcabMazkt/oDZs2a9bD1aCEU140QIfQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rIzP0/dJMcabMazkt/oDZs2a9bD1aCEU140QIfQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrIzP0%2FdJMcabMazkt%2FoDZs2a9bD1aCEU140QIfQ0%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;694&quot; height=&quot;148&quot; data-origin-width=&quot;694&quot; data-origin-height=&quot;148&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Raw String Literal은 문자열 내용을 코드에 거의 원문 그대로 적을 수 있다는 점이 가장 큰 장점입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 왜 필요할까요~?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 문자열에서는 따옴표나 줄바꿈을 넣을 때 이스케이프 문자를 많이 써야 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어서 JSON을 문자열로 작성하게 된다면&lt;/p&gt;
&lt;pre id=&quot;code_1786888151647&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;string json = &quot;{\n  \&quot;name\&quot;: \&quot;Player\&quot;,\n  \&quot;level\&quot;: 10\n}&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;읽기 굉~~~장히 불편합니다. Raw String Literal을 쓴다면~&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;d&quot;&gt;&lt;code&gt;string json = &quot;&quot;&quot;
{
  &quot;name&quot;: &quot;Player&quot;,
  &quot;level&quot;: 10
}
&quot;&quot;&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 JSON 모양 그대로 쓸 수가 있습니다.&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;JSON, XML, SQL, HTML, Shader 코드, 여러 줄 텍스트 등 여러 곳에서 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 기본 문법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 기본적인 형태는 큰 따옴표 3개를 써서 사용하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 여기서 신기한 점은&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;string message = &quot;&quot;&quot;
Player said &quot;Hello&quot;
&quot;&quot;&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열 안에 큰 따옴표를 사용할 수 있게 됩니다. (그냥 문자열을 사용할 때는 \&quot; 이스케이프 문자에 큰 따옴표를 썼어야 합니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또! 신기한 점은&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;629&quot; data-origin-height=&quot;115&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2gQyB/dJMcadpv84t/ByeZPuyJPivdgp760Sx590/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2gQyB/dJMcadpv84t/ByeZPuyJPivdgp760Sx590/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2gQyB/dJMcadpv84t/ByeZPuyJPivdgp760Sx590/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2gQyB%2FdJMcadpv84t%2FByeZPuyJPivdgp760Sx590%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;629&quot; height=&quot;115&quot; data-origin-width=&quot;629&quot; data-origin-height=&quot;115&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 &quot;&quot;&quot; 큰 따옴표 3개를 사용해버릴 수가 있습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 또또! 새로운 사실은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이스케이프 문자가 작동되지 않습니다! (필요가 없으니 작동 시퀀스에 포함되지 않았던 거였습니다.)&lt;/p&gt;
&lt;pre id=&quot;code_1786889344099&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;string path = &quot;C:\\Users\\Player\\Save&quot;; // 일반 문자열 작성

string path = &quot;&quot;&quot;
C:\Users\Player\Save
&quot;&quot;&quot;; // Raw String Literal 작성&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;594&quot; data-origin-height=&quot;121&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oTXKo/dJMcadwdydM/kRsUZjigbV2HNI0gP6Dh7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oTXKo/dJMcadwdydM/kRsUZjigbV2HNI0gP6Dh7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oTXKo/dJMcadwdydM/kRsUZjigbV2HNI0gP6Dh7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoTXKo%2FdJMcadwdydM%2FkRsUZjigbV2HNI0gP6Dh7k%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;594&quot; height=&quot;121&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;121&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 Raw String Literal에서는 기본적으로 이스케이프 시퀀스를 일반 문자처럼 취급합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 문자열 보간과 같이 사용하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Raw String Literal도 보간 문자열과 같이 사용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;611&quot; data-origin-height=&quot;228&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1psWw/dJMcaafmmju/EtLs97fKOXNXXLF4JsTy9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1psWw/dJMcaafmmju/EtLs97fKOXNXXLF4JsTy9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1psWw/dJMcaafmmju/EtLs97fKOXNXXLF4JsTy9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1psWw%2FdJMcaafmmju%2FEtLs97fKOXNXXLF4JsTy9K%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;611&quot; height=&quot;228&quot; data-origin-width=&quot;611&quot; data-origin-height=&quot;228&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 $를 붙이면 { } 안에 변수를 넣을 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;여기서 또또또 Raw String Literal에 신기한 부분이 있습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$을 2개 이상 사용할 수 있습니다. 이러면&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;369&quot; data-origin-height=&quot;151&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckklgb/dJMcaalZ8uX/Glu45BKQRZm3YPliTLrcs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckklgb/dJMcaalZ8uX/Glu45BKQRZm3YPliTLrcs1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckklgb/dJMcaalZ8uX/Glu45BKQRZm3YPliTLrcs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fckklgb%2FdJMcaalZ8uX%2FGlu45BKQRZm3YPliTLrcs1%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;369&quot; height=&quot;151&quot; data-origin-width=&quot;369&quot; data-origin-height=&quot;151&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;{{}}으로 처리하게 되어서 다르게 사용하실 수도 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 사용할때 주의할 점!  &lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Raw String Literal은 닫는 &quot;&quot;&quot;의 들여쓰기를 기준으로 공통 들여쓰기를 처리하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 말은 즉...&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot;&gt;&lt;code&gt;string text = &quot;&quot;&quot;
    Player
    Level 10
    &quot;&quot;&quot;;
&amp;uarr;
여기는 없는 처리&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 큰 따옴표 3개 &quot;&quot;&quot;이 기준이 되는 선이라는 소리입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;719&quot; data-origin-height=&quot;328&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t4PLs/dJMcacqJR9Q/0X2x7H4xLibXxdUdKNkOPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t4PLs/dJMcacqJR9Q/0X2x7H4xLibXxdUdKNkOPk/img.png&quot; data-alt=&quot;그림판&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t4PLs/dJMcacqJR9Q/0X2x7H4xLibXxdUdKNkOPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft4PLs%2FdJMcacqJR9Q%2F0X2x7H4xLibXxdUdKNkOPk%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;719&quot; height=&quot;328&quot; data-origin-width=&quot;719&quot; data-origin-height=&quot;328&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;그림판&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드에서 이렇게 회색 선으로 알려주고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;528&quot; data-origin-height=&quot;133&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0gyCF/dJMcadJM2lO/vn9VLt8hVUXL3UhpsM6Xs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0gyCF/dJMcadJM2lO/vn9VLt8hVUXL3UhpsM6Xs0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0gyCF/dJMcadJM2lO/vn9VLt8hVUXL3UhpsM6Xs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0gyCF%2FdJMcadJM2lO%2Fvn9VLt8hVUXL3UhpsM6Xs0%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;528&quot; height=&quot;133&quot; data-origin-width=&quot;528&quot; data-origin-height=&quot;133&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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-origin-width=&quot;715&quot; data-origin-height=&quot;391&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MxO6m/dJMcadwdyM8/sKnUKCSTXlAad2nzGm8pRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MxO6m/dJMcadwdyM8/sKnUKCSTXlAad2nzGm8pRk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MxO6m/dJMcadwdyM8/sKnUKCSTXlAad2nzGm8pRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMxO6m%2FdJMcadwdyM8%2FsKnUKCSTXlAad2nzGm8pRk%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;539&quot; height=&quot;295&quot; data-origin-width=&quot;715&quot; data-origin-height=&quot;391&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;라고 오류가 나게 됩니다. 이 점. 주의 하셔야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;br /&gt;이상으로 오늘은&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;C#에 Raw&amp;nbsp;String&amp;nbsp;Literal에&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;대해서 알아보았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예전에 수업 시간에 자동으로 코드를 생성 시켜주는 곳에서 &quot;&quot;&quot;을 사용했던 기억이 나서 공부하게 되었습니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;실무에서 유용하게 어디선가는 사용될 듯 싶습니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;오늘의 추천 노래는&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://youtu.be/YO-6FsfdXbo?si=wN8UEE7_wUEs_HNz&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;Les Mis&amp;eacute;rables - One Day More&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;이라는 노래입니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&quot;내일이 오면..&quot; 학교에 가게 됩니다..&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;레미제라블을 보면서 어렸을 적에 충격을 많이 받았습니다..  &lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 노래가 캐릭터들이 각자 처한 상황을 담아낸 노래이며 정말 마지막에 다 같이 부르는 하모니는 실로 말할 수 없을 만큼 감동적인 장면이었습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;레미제라블에는 이외에도 좋은 노래가 많은데요. Do you hear the people sing, Red and Black, &lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;Look Down 등 정말 좋은 노래가 많습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;내일은 더욱 좋은 글을 써보도록 노력해보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;봐주셔서 감사합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;☺️&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>minsoungdev</author>
      <guid isPermaLink="true">https://minsoungdev.tistory.com/66</guid>
      <comments>https://minsoungdev.tistory.com/66#entry66comment</comments>
      <pubDate>Sun, 16 Aug 2026 23:12:11 +0900</pubDate>
    </item>
    <item>
      <title>  C# List Pattern   </title>
      <link>https://minsoungdev.tistory.com/65</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;안녕하세요. 박민성입니다.&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;☺️&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;오늘은 C#의 List&amp;nbsp;Pattern에 대해서 글을 쓰고자 합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;1. List Pattern이란? &lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/patterns?utm_source=chatgpt.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;List Pattern은 &lt;/a&gt;&lt;b&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/patterns?utm_source=chatgpt.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;배열이나 리스트 같은 순차 데이터의 요소와 구조를 패턴으로 검사하는 기능입니다.&lt;/a&gt;&amp;nbsp;&lt;/b&gt;전에 작성했던 패턴 매칭의 한 종류입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1786793399583&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int[] numbers = { 1, 2, 3 };

if (numbers is [1, 2, 3])
{
    Debug.Log(&quot;일치&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서! &lt;span&gt;[&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;]은 새로운 배열을 만드는 코드가 아닌 &lt;b&gt;패턴&lt;/b&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;위 코드는 numbers가 정확히 1, 2, 3이라는 구조를 가지고 있는가요? 를 if로 검사하는 코드입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt; 2. 기본 사용법 &lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1786796616842&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;컬렉션 is [패턴1, 패턴2, 패턴3]&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;이런 형태로 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1786796792625&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int[] numbers = { 10, 20, 30 };

if (numbers is [10, 20, 30])
{
    Debug.Log(&quot;같음&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;959&quot; data-start=&quot;944&quot; data-ke-size=&quot;size16&quot;&gt;각 위치를 순서대로 검사해.&lt;/p&gt;
&lt;p data-end=&quot;959&quot; data-start=&quot;944&quot; data-ke-size=&quot;size16&quot;&gt;index 0이 10인가요?, index 1 &amp;rarr; 20인가요?, index&amp;nbsp;2&amp;nbsp;&amp;rarr;&amp;nbsp;30인가요?&lt;/p&gt;
&lt;p data-end=&quot;1037&quot; data-start=&quot;1022&quot; data-ke-size=&quot;size16&quot;&gt;전부 맞으면 true입니다.&lt;/p&gt;
&lt;p data-end=&quot;1037&quot; data-start=&quot;1022&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1037&quot; data-start=&quot;1022&quot; data-ke-size=&quot;size18&quot;&gt;여기서 중요한 점은 배열의 길이도 같이 검사한다는 점입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1786796995512&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int[] numbers = { 1, 2, 3, 4 };

if (numbers is [1, 2, 3])
{
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;1037&quot; data-start=&quot;1022&quot; data-ke-size=&quot;size16&quot;&gt;이 if문은 false가 나옵니다.&lt;/p&gt;
&lt;p data-end=&quot;1037&quot; data-start=&quot;1022&quot; data-ke-size=&quot;size16&quot;&gt;요소가 정확히 3개이고, 각각 1, 2, 3인지 검사하는 것입니다.&lt;/p&gt;
&lt;p data-end=&quot;1037&quot; data-start=&quot;1022&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1037&quot; data-start=&quot;1022&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/functional/pattern-matching?utm_source=chatgpt.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt; Microsoft 문서에서도 List Pattern을 시퀀스의 &lt;b&gt;형태(shape)&lt;/b&gt;를 검사하는 패턴으로 설명합니다.&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. _ discard 사용하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 위치의 값은 상관없다면 _를 사용할 수 있습니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;int[] numbers = { 10, 999, 30 };

if (numbers is [10, _, 30])
{
    Debug.Log(&quot;일치&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1037&quot; data-start=&quot;1022&quot; data-ke-size=&quot;size16&quot;&gt;여기서 _는 어떤 값이든 상관없음을 나타냅니다.&lt;/p&gt;
&lt;p data-end=&quot;1037&quot; data-start=&quot;1022&quot; data-ke-size=&quot;size16&quot;&gt;하지만.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여전히 요소 개수는 비교하는 것과 같아야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. .. Slice Pattern 사용하기&lt;/h2&gt;
&lt;pre id=&quot;code_1786798843881&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int[] numbers = { 1, 2, 3, 4, 5 };

if (numbers is [1, .., 5])
{
    Debug.Log(&quot;일치&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이런식으로 신기하게 작성할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 코드의 뜻은&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;첫 번째 요소 = 1, 중간 = 몇 개든 가능, 마지막 요소 = 5 이라는 뜻입니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그렇기 때문에!&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1, 5&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1, 2, 5&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1, 2, 3, 4, 5&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이런 배열들이 true가 나오기 때문입니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;모두가 첫 번째 요소가 1로 시작해서 중간은 상관없이 마지막 요소가 5로 끝납니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;..는 여기서 &lt;b&gt;Slice Pattern&lt;/b&gt;이라고 불립니다. 한 List Pattern 내부에서 slice pattern은 직접적으로 한 번만 사용할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;전에 글로 작성했던 &lt;span&gt;numbers&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;1..4&lt;/span&gt;&lt;span&gt;] 배열 길이에 대한 ..은 현재 List Pattern에서 사용하는 ..과 다른 문법입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;5. 값뿐만 아니라 타입도 검사 가능&lt;/h2&gt;
&lt;pre id=&quot;code_1786799797819&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;object[] values = { 10, &quot;Sword&quot; };

if (values is [int, string])
{
    Debug.Log(&quot;int와 string&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;첫 번째 요소가 int, 두 번째 요소가 string인지 검사합니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #ffffff; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;  여기서ㅇㄴㅁㅇㄴㅁㅇ&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여기서 중요!!&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;List Pattern은 패턴 검사와 동시에 값을 변수에 저장하여 사용할 수 있습니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;if (values is [int damage, string weaponName])
{
    Debug.Log(damage);
    Debug.Log(weaponName);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;var를 사용할 수도 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;6. 관계 패턴과 같이 사용하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;gt;=, &amp;lt;= 이런 비교 연산자를 사용할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;int[] stats = { 100, 50 };

if (stats is [&amp;gt; 0, &amp;gt; 0])
{
    Debug.Log(&quot;둘 다 0보다 큼&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1786800776276&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int[] numbers = { 10, 50, 90 };

if (numbers is [&amp;lt; 20, _, &amp;gt; 80])
{
    Debug.Log(&quot;조건 만족&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/patterns?utm_source=chatgpt.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt; 이렇게 List Pattern 안에서 다른 패턴을 조합할 수 있습니다. C#의 패턴들은 서로 조합해서 사용할 수 있습니다.&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;7. switch와도 사용 가능&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://minsoungdev.tistory.com/39&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt; List Pattern은 is에서만 사용하는 게 아닙니다.&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;cs&quot;&gt;&lt;code&gt;string Check(int[] numbers)
{
    return numbers switch
    {
        [] =&amp;gt; &quot;비어있음&quot;,
        [0] =&amp;gt; &quot;0 하나&quot;,
        [1, 2] =&amp;gt; &quot;1과 2&quot;,
        [1, ..] =&amp;gt; &quot;1로 시작함&quot;,
        [.., 9] =&amp;gt; &quot;9로 끝남&quot;,
        _ =&amp;gt; &quot;기타&quot;
    };
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;오늘은&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;C#에 List&amp;nbsp;Pattern에&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;대해서 알아보았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;전에 소개했더 패턴 매칭과 이어지는 내용이 있었습니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;방학이 얼마남지 않았습니다.... 8월 17일.... 다음주 월요일.... 기숙사에 들어갑니다...&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;하지만!!!!! 저는 학교생활이 즐겁다고 생각하기에 큰 걱정은 없습니다 ㅎㅎ  &lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;걱정이 좀 있긴 하지만...&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;오늘의 노래 추천은&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://youtu.be/YO-6FsfdXbo?si=wN8UEE7_wUEs_HNz&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;BellyJay - MONTAGEM HIKARI&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/span&gt;이라는 노래입니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;제가 펑크 중에서 가장 좋아하는 곡입니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;요즘 추천할 곡이 점점 떨어져 나갑니다;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;내일은 더욱 좋은 글을 써보도록 노력해보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;봐주셔서 감사합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;☺️&lt;/span&gt;&lt;/p&gt;</description>
      <author>minsoungdev</author>
      <guid isPermaLink="true">https://minsoungdev.tistory.com/65</guid>
      <comments>https://minsoungdev.tistory.com/65#entry65comment</comments>
      <pubDate>Sat, 15 Aug 2026 22:56:47 +0900</pubDate>
    </item>
    <item>
      <title>  C# required    </title>
      <link>https://minsoungdev.tistory.com/64</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;안녕하세요. 박민성입니다.&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;☺️&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;오늘은 C#의 required에 대해서 글을 쓰고자 합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;1. required란? &lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/required&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt; required는 &lt;b&gt;객체를 생성할 때 특정 필드나 프로퍼티에 값을 반드시 넣도록 강제하는 C# 키워드&lt;/b&gt;입니다.&lt;/a&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1786713540966&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class PlayerData
{
    public required string Name { get; set; }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 선언한다면&lt;/p&gt;
&lt;pre id=&quot;code_1786713776173&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;PlayerData player = new PlayerData(); // XXXX&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런식으로 객체를 만들 수가 없습니다!!&lt;/p&gt;
&lt;pre id=&quot;code_1786715067871&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;PlayerData player = new PlayerData // OOOO
{
    Name = &quot;Player&quot;
};&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Name을 required로 선언했기 때문에 &quot;무적권&quot; 그 객체를 만들 때에는&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;required가 붙은 Name에 값을 넣어줘야 합니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;required는 이 멤버는 객체 생성 시 반드시 초기화되어야 한다는 것을 설정해주는 키워드입니다. (필수 한정자)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;required는 객체에서 어떤 값이 필수로 있어야 하는 데이터에 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;약간 데이터 테이블에 기본키(Primary Key)가 생각나는 문법입니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 생성자와 차이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성자를 사용해도 필수 값을 강제할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1786715924566&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class PlayerData
{
    public string Name { get; }

    public PlayerData(string name)
    {
        Name = name;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;PlayerData player = new PlayerData(&quot;Player&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;required는 비슷한 목적으로 사용할 수 있지만 객체 초기화 문법을 유지할 수가 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1786716095134&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;PlayerData player = new PlayerData
{
    Name = &quot;Player&quot;,
    Level = 10
};&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성자는 생성 과정 자체에서 값을 전달하는 느낌이고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;required는 객체 초기화 과정에서 필수 멤버를 강제시키는 느낌입니다.&lt;/p&gt;
&lt;p data-end=&quot;2476&quot; data-start=&quot;2459&quot; data-section-id=&quot;13dtidc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2476&quot; data-start=&quot;2459&quot; data-section-id=&quot;13dtidc&quot; data-ke-size=&quot;size18&quot;&gt;당연히 여러 멤버에 사용 가능합니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;swift&quot;&gt;&lt;code&gt;public class CharacterData
{
    public required string Id { get; init; }
    public required string Name { get; init; }

    public int Level { get; init; }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot;&gt;&lt;code&gt;CharacterData data = new CharacterData
{
    Id = &quot;player_001&quot;,
    Name = &quot;dksgur&quot;
};&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확실히 필수 값이 많아지면 가독성인 측면에서 생성자보다는 required가 좋아 보입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 상속에서의 동작&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부모 클래스에 required 멤버가 있으면 자식 클래스를 만들 때도 그 값을 설정해야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1786717224012&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Character
{
    public required string Name { get; init; }
}

public class Player : Character
{
    public int Level { get; init; }
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1786717232734&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Player player = new Player
{
    Name = &quot;Player&quot;,
    Level = 10
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;3242&quot; data-start=&quot;3207&quot; data-ke-size=&quot;size16&quot;&gt;처럼 부모 클래스의 required 멤버까지 초기화해야 합니다.&lt;/p&gt;
&lt;p data-end=&quot;3242&quot; data-start=&quot;3207&quot; data-ke-size=&quot;size16&quot;&gt;상속이라는 것이 자식은 부모를 포함하고 크기 더 큰 존재인 느낌이기 때문입니다.&lt;/p&gt;
&lt;p data-end=&quot;3277&quot; data-start=&quot;3244&quot; data-ke-size=&quot;size16&quot;&gt;즉! required 조건은 상속받은 클래스에서도 이어집니다.&lt;/p&gt;
&lt;p data-end=&quot;3277&quot; data-start=&quot;3244&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;3277&quot; data-start=&quot;3244&quot; data-ke-size=&quot;size26&quot;&gt;4. 주의점&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt; required가 null을 완전히 막는 것은 아닙니다!!(중요)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1786717605499&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public required string Name { get; set; }&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;이 코드는 Name에 반드시 정상 문자열이 들어가야 하는 것이 아닌 Name을 초기화해야 한다는 것입니다.&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉! required는 &lt;b&gt;초기화 여부를 강제하는 기능&lt;/b&gt;이지 값 자체가 올바른지 검증하는 기능은 아닙니다.&lt;/p&gt;
&lt;div&gt;그렇기 때문에 required &amp;ne; 유효성 검사 &amp;ne; null 완전 방지&amp;nbsp; &amp;nbsp;입니다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;오늘은&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;C#에 required 에&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;대해서 알아보았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;또 이렇게 C# 문법에 대한 지식이 +1 되었습니다... C# 문법에 대한 지식이 Max를 찍을 때까지 정진하겠습니다!&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;오늘의 노래 추천은&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;a style=&quot;color: #006dd7;&quot; href=&quot;https://youtu.be/Vy1JwiXHwI4?si=qPyykNJr92cVL6qU&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;AJR - Karma&lt;/span&gt;&lt;/a&gt; &lt;/span&gt;이라는 노래입니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;마음이 뭉클해지는 노래입니다&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;내일은 더욱 좋은 글을 써보도록 노력해보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;봐주셔서 감사합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;☺️&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>minsoungdev</author>
      <guid isPermaLink="true">https://minsoungdev.tistory.com/64</guid>
      <comments>https://minsoungdev.tistory.com/64#entry64comment</comments>
      <pubDate>Fri, 14 Aug 2026 15:17:00 +0900</pubDate>
    </item>
    <item>
      <title>  C# partial   </title>
      <link>https://minsoungdev.tistory.com/63</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;안녕하세요. 박민성입니다.&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;☺️&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;오늘은 C#의 partial에 대해서 글을 쓰고자 합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;1. partial이란?&lt;/h2&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/partial-classes-and-methods&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt; partial은 하나의 클래스 정의를 여러 파일이나 여러 선언으로 나눠서 작성할 수 있게 해주는 키워드입니다.&lt;/a&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1786569635497&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public partial class Player
{
    private int health = 100;
}

public partial class Player
{
    public void TakeDamage(int damage)
    {
        health -= damage;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일은 두 개지만 컴파일할 때는 하나의 Player 클래스로 합쳐지게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 단순한 사용하는 이유는 클래스를 여러 파일로 나눠서 관리하기 위해서 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 중요한 것은 파일만 나눠진 것이지 클래스가 여러 개가 된 것은 아닙니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 다른 partial 파일의 멤버도 사용할 수 있습니다.&lt;/h2&gt;
&lt;pre id=&quot;code_1786570275800&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public partial class Player
{
    private int health = 100;
}

public partial class Player
{
    public void TakeDamage(int damage)
    {
        health -= damage;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;둘이 같은 클래스이기 때문에 한쪽에 있는 private 멤버도 다른 partial 파일에서 사용할 수 있습니다.&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;health가 private인데도 사용할 수 있는 이유는 두 파일이 결국 같은 클래스이기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 이미 만들어진 partial 클래스에 기능 추가하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Unity 관련 도구나 어떤 외부 시스템이 클래스를 자동으로 만들어줬다고 했을때&lt;/p&gt;
&lt;pre id=&quot;code_1786570666706&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public partial class PlayerData // 자동 생성된 코드 뿌슝빠슝
{
    public int level;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 파일은 자동 생성되는 파일이라 직접 수정하고 싶지 않을 수 있습니다. (&quot;약간 건들이면 오류가 날 것 같은데..?&quot;)&lt;/p&gt;
&lt;pre id=&quot;code_1786570881279&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public partial class PlayerData
{
    public void LevelUp()
    {
        level++;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 다른 파일을 하나 만들어서 기능을 추가할 수 있습니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;public class PlayerData
{
    public int level;

    public void LevelUp()
    {
        level++;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&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;이미 존재하는 partial 클래스의 원본 파일을 수정하지 않고 별도의 파일에서 같은 클래스에 기능을 추가할 수 있다는 것이 partial에 진가이기도 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 아무 기존 클래스에나 붙일 수 있는 건 아닙니다.&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어서 Unity의 GameObject 클래스가 이미 존재한다고 해서&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;cs&quot;&gt;&lt;code&gt;public partial class GameObject
{
    public void MyFunction()
    {
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&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;partial로 이어 붙이려면 원래 클래스도 partial로 선언되어 있어야 합니다. &lt;b&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. partial method&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;partial은 클래스에만 쓰는 게 아닙니다.&lt;/p&gt;
&lt;pre id=&quot;code_1786572654473&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public partial class Player
{
    partial void OnDamaged(int damage);
}&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;그리고 다른 partial 부분에서&lt;/p&gt;
&lt;pre id=&quot;code_1786572668064&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public partial class Player
{
    partial void OnDamaged(int damage)
    {
        Debug.Log(damage);
    }
}&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;이 방식도 자동 생성 코드와 직접 작성한 코드를 연결할 때 의미가 있습니다.&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;partial과 상속이 얼핏 비슷해 보이지만 partial은 같은 클래스인거에 비해 상속은 다른 서로 다른 클래스이기 때문에 엄연히 다른 주제입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. 최근 C#에서 partial&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근에는 partial이 클래스와 메서드뿐만 아니라 기능이 더 추가됐습니다!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;public partial class Player
{
    public partial int Health { get; set; }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C# 13에서는 partial property도 사용할 수 있습니다!!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/L6U5a/dJMcaafjyKE/UWFaag9SDTwt2eVkxWJXD0/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/L6U5a/dJMcaafjyKE/UWFaag9SDTwt2eVkxWJXD0/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/L6U5a/dJMcaafjyKE/UWFaag9SDTwt2eVkxWJXD0/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL6U5a%2FdJMcaafjyKE%2FUWFaag9SDTwt2eVkxWJXD0%2Fimg.webp&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;45&quot; height=&quot;1280&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1280&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 부분에서 실제 구현을 제공할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 최근 partial은 큰 클래스 파일 나눈다 보다는 기존에 있던 코드에 직접 작성한 코드를 추가 시키는 느낌에 문법입니다.&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;span style=&quot;color: #222222; text-align: start;&quot;&gt;오늘은&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;C#에 partial에&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;대해서 알아보았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예전에 수업에서 BT수업이었나...? 아무튼 partial를 사용했던 걸로 기억이 나서&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;partial에 대해서 쓰게 되었습니다. 많이 까지는 아니더라도 무조건 사용할 때가 있는 문법이라고 생각이 듭니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;오늘의 노래 추천은&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;a href=&quot;https://youtu.be/XKpDYzVzqgE?si=Uk32KsIbKo1LSV1r&amp;amp;t=131&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;김승민 - 잘 지내길 바래&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; 이라는 노래입니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot;&gt;너를 사랑한단 말은 아직 후회가 되질 않아서&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot;&gt;너도 잘 지내기를 바래&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;내일은 더욱 좋은 글을 써보도록 노력해보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;봐주셔서 감사합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;☺️&lt;/span&gt;&lt;/p&gt;</description>
      <author>minsoungdev</author>
      <guid isPermaLink="true">https://minsoungdev.tistory.com/63</guid>
      <comments>https://minsoungdev.tistory.com/63#entry63comment</comments>
      <pubDate>Thu, 13 Aug 2026 07:47:43 +0900</pubDate>
    </item>
    <item>
      <title>  C# 제네릭(Generic)과 &amp;lt;T&amp;gt;   </title>
      <link>https://minsoungdev.tistory.com/62</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;안녕하세요. 박민성입니다.&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;☺️&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;오늘은 C#의 제네릭(Generic)과&amp;nbsp;&amp;lt;T&amp;gt;에 대해서 글을 쓰고자 합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;제네릭은 Untiy 개발하면서 많이 사용하기 때문에 공부하여 글을 남기고자 합니다.&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;1. 제네릭이란? &lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;369&quot; data-start=&quot;313&quot; data-ke-size=&quot;size16&quot;&gt;제네릭은 타입을 미리 하나로 고정하지 않고 사용할 때 타입을 정할 수 있게 하는 기능입니다.&lt;/p&gt;
&lt;p data-end=&quot;369&quot; data-start=&quot;313&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어서 일반 메서드라면&lt;/p&gt;
&lt;pre id=&quot;code_1786470894631&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;private void PrintInt(int val)
{
    Debug.Log(val);
}

private void PrintString(string val)
{
    Debug.Log(val);
}&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;하지만.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제네릭을 사용하면&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot;&gt;&lt;code&gt;private void Print&amp;lt;T&amp;gt;(T val)
{
    Debug.Log(val);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나로 처리할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1786471048582&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Print&amp;lt;int&amp;gt;(10);
Print&amp;lt;string&amp;gt;(&quot;Hello&quot;);
Print&amp;lt;float&amp;gt;(3.14f);

Print(10);
Print(&quot;Hello&quot;);
Print(3.14f);&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;아래 코드는 위 코드에서 보통은 타입 추론이 가능하기 때문에 &amp;lt;&amp;gt;은 생략 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제네릭은 같은 로직을 여러 타입에 재사용할 수 있게 해주어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중복 코드를 줄이면서 타입 안전성을 유지하는 것이 제네릭을 사용하는 이유입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. &amp;lt;T&amp;gt;의 T는 정확히 뭘까요?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;T는 &lt;b&gt;타입 매개변수(Type Parameter)&lt;/b&gt;이라는 뜻입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1786471280947&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;private void Print&amp;lt;T&amp;gt;(T val)
{
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 T는 아직 정해지지 않은 타입을 뜻합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 &lt;span&gt;Print&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;);을 작성하면 T는 int가 되고 &lt;span&gt;Print&lt;/span&gt;&lt;span&gt;&amp;lt;string&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;);을 작성하면 T는 string이 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;하지만 여기서 중요한점!!&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;T는 C# 키워드가 아닙니다. 그냥 예전부터 자리잡은 것 때문에 Type의 앞글자인 T를 많이 사용하지만&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1786471522208&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;private void Print&amp;lt;MyType&amp;gt;(MyType val)
{
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&lt;span&gt;이런식으로 다르게 작성하여 사용할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 제네릭 메서드&lt;/h2&gt;
&lt;pre id=&quot;code_1786471835780&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;private T GetValue&amp;lt;T&amp;gt;(T val)
{
    return val;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 메서드 반환형을 T로 할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1786471870175&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int number = GetValue(10);
string text = GetValue(&quot;Hello&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 컴파일러가 전달된 값을 보고 T를 추론을 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GetValue(10)은 T가 int, &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;GetValue(&quot;Hello&quot;)은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;T가 string입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1786472062185&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;private T GetFirst&amp;lt;T&amp;gt;(T[] array)
{
    return array[0];
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;T는 매개변수 타입 뿐만 아니라 반환형, 지역 변수 타입 등 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 제네릭 클래스&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메서드뿐 아니라 클래스 자체도 제네릭으로 만들 수가 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1786472103562&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Box&amp;lt;T&amp;gt;
{
    public T value;
}&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;사용할 때 타입을 결정하게 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1786472122439&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Box&amp;lt;int&amp;gt; intBox = new Box&amp;lt;int&amp;gt;();
intBox.value = 10;

Box&amp;lt;string&amp;gt; stringBox = new Box&amp;lt;string&amp;gt;();
stringBox.value = &quot;Sword&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같은 Box&amp;lt;T&amp;gt; 클래스지만 Box&amp;lt;int&amp;gt;과 Box&amp;lt;string&amp;gt;은 서로 다른 구체 타입으로 취급됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. List&amp;lt;T&amp;gt;, GetComponent&amp;lt;T&amp;gt;()&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이게 제네릭이 사용된 예제입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1786472341767&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;List&amp;lt;int&amp;gt; numbers = new List&amp;lt;int&amp;gt;();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 List는 개념적으로 List&amp;lt;T&amp;gt; 형태의 제네릭 클래스입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;241&quot; data-origin-height=&quot;32&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JMLZm/dJMcabFbzOB/Gk1YKktK9mhbm6rZgARgs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JMLZm/dJMcabFbzOB/Gk1YKktK9mhbm6rZgARgs1/img.png&quot; data-alt=&quot;List를 F12로 들어갔을때&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JMLZm/dJMcabFbzOB/Gk1YKktK9mhbm6rZgARgs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJMLZm%2FdJMcabFbzOB%2FGk1YKktK9mhbm6rZgARgs1%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;241&quot; height=&quot;32&quot; data-origin-width=&quot;241&quot; data-origin-height=&quot;32&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;List를 F12로 들어갔을때&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 int를 넣었기 때문에 &lt;span&gt;List&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&amp;gt;가 된 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;당연히&lt;/p&gt;
&lt;pre id=&quot;code_1786472455630&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;List&amp;lt;string&amp;gt; names;
List&amp;lt;GameObject&amp;gt; objects;
List&amp;lt;Enemy&amp;gt; enemies;&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;하나의 List&amp;lt;T&amp;gt; 구현을 여러 타입에 재사용하는 것입니다!&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Unity의 GetComponent&amp;lt;T&amp;gt;()도 제네릭입니다.&lt;/h4&gt;
&lt;pre id=&quot;code_1786472517714&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Rigidbody rb = GetComponent&amp;lt;Rigidbody&amp;gt;();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Unity 개발하면서 이런식으로 컴포넌트를 GetComponent를 사용해서 가져오고 사용할 때가 많습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1786472680734&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GetComponent&amp;lt;T&amp;gt;()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GetComponent는 제네릭 메서드입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1786472714498&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Rigidbody rb = GetComponent&amp;lt;Rigidbody&amp;gt;(); // T가 Rigidbody로

BoxCollider collider = GetComponent&amp;lt;BoxCollider&amp;gt;(); // T가 BoxCollider로&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. 여러 타입 매개변수도 가능.&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;public class Pair&amp;lt;T1, T2&amp;gt;
{
    public T1 first;
    public T2 second;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 T를 2개를 사용할 수 있습니다. (단, 이름은 다르게)&lt;/p&gt;
&lt;pre id=&quot;code_1786473142778&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Dictionary&amp;lt;TKey, TValue&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Dictionary가 이 사용 예제입니다. &lt;span&gt;Dictionary&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;TKey&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;TValue&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt; &lt;span&gt;는&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TKey인 키 타입과 TValue인 값 타입 이 두개로 이루어져 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;7. 제네릭의 한계&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;T는 아무 타입이나 들어올 수 있기 때문에 컴파일러는 T가 어떤 기능을 가진지 모릅니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;aspectj&quot;&gt;&lt;code&gt;private void Attack&amp;lt;T&amp;gt;(T target)
{
    target.TakeDamage(10);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이런식으로 사용하는 것은 불가능합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;왜냐하면 여기서 컴파일러는 아직 T 값이 무엇인지 모르기 때문입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;T는 int가 될 수도, string이 될 수도, Enemy가 될 수도 있기 때문입니다.&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&gt;그렇기 때문에&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1786473505961&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;where T : IDamageable&lt;/code&gt;&lt;/pre&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;오늘은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;C#에 제네릭(Generic)과&amp;nbsp;&amp;lt;T&amp;gt;에&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;대해서 알아보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제네릭은 정말 개발하면서 없으면 안되는 기능 중 하나인데여 두루두루 이곳저곳에서 많이 사용되는 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제네릭 제약조건은 최대한 빠른 시일 내에 글을 작성해보도록 해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;오늘의 추천 노래는&lt;/span&gt;&lt;/p&gt;
&lt;h1 style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;&lt;a href=&quot;https://youtu.be/0AWeNYlSmI0?si=iiO4uKw11Op9XJCk&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;GRIMACE&lt;/a&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;가사 내용보다 그냥 듣는 것이 즐겁습니다 ㅎㅎ&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;내일은 더욱 좋은 글을 써보도록 노력해보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;봐주셔서 감사합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;☺️&lt;/span&gt;&lt;/p&gt;</description>
      <author>minsoungdev</author>
      <guid isPermaLink="true">https://minsoungdev.tistory.com/62</guid>
      <comments>https://minsoungdev.tistory.com/62#entry62comment</comments>
      <pubDate>Wed, 12 Aug 2026 10:23:12 +0900</pubDate>
    </item>
    <item>
      <title>  C# ref local, ref return   </title>
      <link>https://minsoungdev.tistory.com/61</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;안녕하세요. 박민성입니다.&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;☺️&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;오늘은 C#의 ref&amp;nbsp;local,&amp;nbsp;ref&amp;nbsp;return대해서 글을 쓰고자 합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;1. 일반 대입은 값을 복사합니다.&lt;/h2&gt;
&lt;pre id=&quot;code_1786441015641&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int[] numbers = { 10, 20, 30 };

int val = numbers[0];

val = 100;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;val은 100이고 numbers[0]은 10입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;val의 값을 바꾼다고 해서 numbers[0]은 변하지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;val는 numbers[0]의 값을 복사했을 뿐이라서 서로 별개이기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. ref local이란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ref local은 값을 복사하지 않고 기존 변수의 저장 위치를 직접 참조하는 지역 변수입니다. 약간 C++에 포인터가 생각나는 문법입니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot;&gt;&lt;code&gt;int[] numbers = { 10, 20, 30 };

ref int val = ref numbers[0];&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;455&quot; data-start=&quot;398&quot; data-ke-size=&quot;size16&quot;&gt;이 코드는 val는 새로운 int 값을 가진 변수가 아니라 numbers[0] 자체를 가리키게 됩니다.&lt;/p&gt;
&lt;p data-end=&quot;455&quot; data-start=&quot;398&quot; data-ke-size=&quot;size16&quot;&gt;그럼&lt;/p&gt;
&lt;pre id=&quot;code_1786442053437&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;val = 100;

Debug.Log(numbers[0]); // 100&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 val을 바꾸면 numbers[0]가 바뀌게 됩니다. 둘이 같은 저장 공간을 바라보는 것인 겁니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기 대문에&lt;/p&gt;
&lt;pre id=&quot;code_1786442872112&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;val++;

numbers[0]++; // 똑같음&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 ref local을 사용할 때&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1786442374219&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ref int val = ref numbers[0];&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞이랑 뒤 둘다 ref를 작성해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞 ref는 val이 참조 지역 변수인 것을 뜻하고 뒤 ref는 오른쪽 값을 복사하지 말고 해당 저장 위치를 참조하라는 뜻입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. ref return이란?&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;private int GetFirst(int[] numbers)
{
    return numbers[0];
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 메서드는 값을 반환합니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;int value = GetFirst(numbers);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 호출하면 numbers[0]의 값이 복사돼서 반환됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;private ref int GetFirst(int[] numbers)
{
    return ref numbers[0];
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1476&quot; data-start=&quot;1424&quot; data-ke-size=&quot;size16&quot;&gt;하지만 반환형 앞에 ref를 붙이면 값이 아니라 원본 저장 위치를 반환할 수 있습니다!&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1786444050167&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ref int val = ref GetFirst(numbers);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 호풀할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 val는 원본 배열 요소를 직접 참조하기 때문에&lt;/p&gt;
&lt;pre id=&quot;code_1786444093960&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;val = 500;

Debug.Log(numbers[0]); // 500&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런식으로 val 값을 바꾸면 numbers[0]도 바뀌게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무 변수나 ref return할 수 있는 건 아닙니다.&lt;/p&gt;
&lt;pre id=&quot;code_1786445302935&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;private ref int GetValue()
{
    int number = 10;

    return ref number; // 오류
}&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;왜냐하면 number는 메서드의 지역 변수라서 메서드가 끝나면 더 이상 사용할 수 없기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. ref readonly&lt;/h2&gt;
&lt;pre id=&quot;code_1786445585532&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ref readonly int value = ref numbers[0];&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원본을 참조하되 수정은 못 하게 만들 수도 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1786445603755&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Debug.Log(value); // OO

value = 100; // XX&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;큰 구조체를 복사하지 않고 읽기만 하고 싶을 때 유용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;오늘은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;C#에 ref&amp;nbsp;local,&amp;nbsp;ref&amp;nbsp;return에&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;대해서 알아보았는데요~!&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Unity 개발하면서 유용하게 사용될 듯 싶습니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;기본적인 int, float 자료형이 아닌 struct를 사용할 때 많이 사용할 듯 생각이 듭니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;큰 구조체를 사용할 때 최적화 용도로 사용하지 않을까여?&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;오늘의 노래 추천은&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://youtu.be/a1vHjBy85TU?si=hsyhw5vYujX-Xw2i&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;CORTIS (코르티스) - REDRED&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; 이라는 곡입니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt; &lt;span style=&quot;color: #000000;&quot;&gt;팔랑귀 팔랑귀 (&lt;b&gt;That's red, red&lt;/b&gt;)&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;눈치나 살피기 (&lt;b&gt;That's red, red&lt;/b&gt;)&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;도가니 사리기 (&lt;b&gt;That's red, red&lt;/b&gt;)&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;넘어가 울타리 &lt;span style=&quot;color: #409d00;&quot;&gt;green, green&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;내일은 더욱 좋은 글을 써보도록 노력하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;봐주셔서 감사합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;☺️&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>minsoungdev</author>
      <guid isPermaLink="true">https://minsoungdev.tistory.com/61</guid>
      <comments>https://minsoungdev.tistory.com/61#entry61comment</comments>
      <pubDate>Tue, 11 Aug 2026 19:59:01 +0900</pubDate>
    </item>
    <item>
      <title>  C# ^와 ..   </title>
      <link>https://minsoungdev.tistory.com/60</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;안녕하세요. 박민성입니다.&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;☺️&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;오늘은 C#의 ^와&amp;nbsp;..에 대해서 글을 쓰고자 합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;최근 Unity에 대해서 글을 많이 썼는데여 오늘으 C# 문법으로 돌아오게 되었습니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;^와 ..은 인덱스을 사용할때 유용하게 사용될 듯 싶어서 글로 남기고자 합니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;1. 기존 인덱스 접근 방식&lt;/h2&gt;
&lt;pre id=&quot;code_1786366966099&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int[] numbers = { 10, 20, 30, 40, 50 };

int last = numbers[numbers.Length - 1];&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;배열 길이가 5라면 Length는 5고 마지막 인덱스가 4이니 Length - 1를 사용하면 마지막 원소를 뽑을 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. ^ 인덱스란?&lt;/h2&gt;
&lt;pre id=&quot;code_1786371224141&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int[] numbers = { 10, 20, 30, 40, 50 };

int last = numbers[^1];       // 50
int secondLast = numbers[^2]; // 40&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;numbers&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;numbers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&amp;nbsp; 기존 방식과 비교하면 &lt;span&gt;numbers&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;^1&lt;/span&gt;&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;size16&quot;&gt;&lt;span&gt;여기서 중요한 점은 ^0이 마지막 요소가 아닌 ^1이 마지막 요소인 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뒤에서부터 세는 인덱스 개념이 아닌 N번째 느낌이라서 ^0이 마지막 요소가 아닌 ^1이 마지막 요소인 것입니다.&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;만약 ^0을 사용하게 된다면 배열의 끝 바로 다음 위치를 의미하기 때문에 사용할 수 없습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1786372475172&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int val = numbers[^0]; // IndexOutOfRangeException&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용하면 IndexOutOfRangeException 오류가 납니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. .. 범위란?&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot;&gt;&lt;code&gt;int[] numbers = { 10, 20, 30, 40, 50 };

int[] part = numbers[1..4]; // 20, 30, 40&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;..는 배열이나 문자열에서 특정 구간을 선택하는 Range 문법입니다.&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;Range가 그렇듯이 ..도 시작은 값은 포함하고 끝 값은 제외합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 1..4는 인덱스 1부터 인덱스 4 앞까지 이라는 말입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 방식을 끝 인덱스 제외(exclusive end)이라고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 시작 인덱스 값이나 끝을 생략할 수도 있습니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot;&gt;&lt;code&gt;int[] first = numbers[..3]; // 10, 20, 30&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음부터 인덱스 3 앞까지라는 의미입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1786374381789&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int[] last = numbers[2..]; // 30, 40, 50&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인덱스 2부터 끝까지입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1786374431456&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int[] copy = numbers[..]; // 10, 20, 30, 40, 50&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. ^와 ..를 같이 사용하기&lt;/h2&gt;
&lt;pre id=&quot;code_1786374754341&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int[] numbers = { 10, 20, 30, 40, 50 };

int[] part = numbers[1..^1];&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인덱스 1부터 뒤에서 첫 번째 위치 직전까지입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 마지막 두 개만 가져오고 싶다면&lt;/p&gt;
&lt;pre id=&quot;code_1786374965469&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int[] part = numbers[^2..];&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. ^와 ..는 실제로 타입이 있습니다.&lt;/h2&gt;
&lt;pre id=&quot;code_1786375471689&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Index index = ^1;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;^는 내부적으로 System.Index와 연결되고&lt;/p&gt;
&lt;pre id=&quot;code_1786375482346&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Range range = 1..4;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 ..는 System.Range와 연결됩니다.&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&gt;System&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Index와&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;System&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Range를 편리하게 사용하기 위한 문법인 것입니다.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1786376262960&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Index index = new Index(1, fromEnd: true);

Index index = ^1; // 둘이 똑같음&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;오늘은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;C#에 ^와&amp;nbsp;..에&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;대해서 알아보았는데요~!&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;배열뿐만 아니라 string에서도 사용할 수 있기 때문에 알고리즘을 풀 때에도 유용하게 사용할 수 있을 것 같습니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 모든 배열이 그렇듯이 배열이 생성되면 메모리가 할당되고 GC가 일을 해야 하기 때문에 Update나 그런 반복문에서는 사용을 피하는 것이 좋을 것 같습니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;오늘의 노래 추천은&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://youtu.be/0OQIqjvOzXg?si=Dp58uU46sQBOd8Fp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;QUEEN - I We Are The Champions&lt;/a&gt; 이라는 곡입니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;힘을 많이 받는 곡입니다.&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;But I've come through~!&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;내일은 더욱 좋은 글을 써보도록 노력하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;봐주셔서 감사합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;☺️&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>minsoungdev</author>
      <guid isPermaLink="true">https://minsoungdev.tistory.com/60</guid>
      <comments>https://minsoungdev.tistory.com/60#entry60comment</comments>
      <pubDate>Mon, 10 Aug 2026 23:13:19 +0900</pubDate>
    </item>
    <item>
      <title>  Unity의 Inspector Attribute들    </title>
      <link>https://minsoungdev.tistory.com/59</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;안녕하세요. 박민성입니다.&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;☺️&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;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;오늘은 Unity의 Inspector&amp;nbsp;Attribute&amp;nbsp;묶음&amp;nbsp;에 대해서 글을 쓰고자 합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;유니티 인스펙터 창을 [Header], [TextArea] 등으로 꾸밀 수 가 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;오늘은 그냥 패키지 느낌으로다가 한꺼번에 소개하고자 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. Inspector Attribute란? &lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Unity에서는 필드 위에 Attribute를 붙여서 Inspector에서 어떻게 보일지를 바꿀 수 있습니다.&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;a href=&quot;https://docs.unity3d.com/6000.5/Documentation/Manual/unity-attributes.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt; Attribute가 변수의 자료형 자체를 바꾸는 것은 아니고 Unity Editor가 해당 필드를 어떻게 보여주고 편집할지에 대한 추가 정보를 제공하는 것입니다.&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. [ Tooltip ]&amp;nbsp;&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot;&gt;&lt;code&gt;[Tooltip(&quot;플레이어의 최대 체력&quot;)]
[SerializeField] private int maxHealth = 100;&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;126&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tYCHF/dJMcacxmau9/z5YVrvzFcss3e09KtTCfm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tYCHF/dJMcacxmau9/z5YVrvzFcss3e09KtTCfm0/img.png&quot; data-alt=&quot;Max Health에 마우스를 올렸을때&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tYCHF/dJMcacxmau9/z5YVrvzFcss3e09KtTCfm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtYCHF%2FdJMcacxmau9%2Fz5YVrvzFcss3e09KtTCfm0%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;331&quot; height=&quot;91&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;126&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Max Health에 마우스를 올렸을때&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Inspector에서 필드 이름 위에 마우스를 올렸을 때 설명을 보여줍니다.&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;변수 이름만으로 의미가 애매할 때?&amp;nbsp;값의 단위나 제한사항 설명할 때? 사용할 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. [ Header ]&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;[Header(&quot;Player Stats&quot;)]

[SerializeField]
private int health;

[SerializeField]
private int attack;&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;453&quot; data-origin-height=&quot;144&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmDaRW/dJMcaafgNh4/BPq2ktEtoKztyfs1a1dNlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmDaRW/dJMcaafgNh4/BPq2ktEtoKztyfs1a1dNlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmDaRW/dJMcaafgNh4/BPq2ktEtoKztyfs1a1dNlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmDaRW%2FdJMcaafgNh4%2FBPq2ktEtoKztyfs1a1dNlk%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;453&quot; height=&quot;144&quot; data-origin-width=&quot;453&quot; data-origin-height=&quot;144&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Inspector에 제목을 추가해서 필드를 구역별로 나눌 수 있습니다.&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;pre id=&quot;code_1786272969208&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[Header(&quot;Movement&quot;)]
[SerializeField] private float moveSpeed;

[Header(&quot;Combat&quot;)]
[SerializeField] private int attack;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;180&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RIMXc/dJMcadJHEUp/yygFMjERH0L1Z771idHHT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RIMXc/dJMcadJHEUp/yygFMjERH0L1Z771idHHT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RIMXc/dJMcadJHEUp/yygFMjERH0L1Z771idHHT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRIMXc%2FdJMcadJHEUp%2FyygFMjERH0L1Z771idHHT0%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;457&quot; height=&quot;180&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;180&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;h2 data-ke-size=&quot;size26&quot;&gt;4. [ Space ]&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot;&gt;&lt;code&gt;[SerializeField] private int health;

[Space]

[SerializeField] private int attack;&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;456&quot; data-origin-height=&quot;123&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mnUca/dJMcaalU4yx/2oWmXA108FVTQWz47zQxak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mnUca/dJMcaalU4yx/2oWmXA108FVTQWz47zQxak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mnUca/dJMcaalU4yx/2oWmXA108FVTQWz47zQxak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmnUca%2FdJMcaalU4yx%2F2oWmXA108FVTQWz47zQxak%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;456&quot; height=&quot;123&quot; data-origin-width=&quot;456&quot; data-origin-height=&quot;123&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Inspector 필드 사이에 공백을 추가합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1786273816760&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[Space(50)]&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;461&quot; data-origin-height=&quot;176&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pfeoL/dJMcabL414t/DO379bqtuNClHK4gciiYcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pfeoL/dJMcabL414t/DO379bqtuNClHK4gciiYcK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pfeoL/dJMcabL414t/DO379bqtuNClHK4gciiYcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpfeoL%2FdJMcabL414t%2FDO379bqtuNClHK4gciiYcK%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;461&quot; height=&quot;176&quot; data-origin-width=&quot;461&quot; data-origin-height=&quot;176&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공백 크기를 직접 지정해줄 수도 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용하면 서로 다른 설정 그룹을 시각적으로 구분과 Inspector 가독성 향상시킬 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. [ Range ]&lt;/h2&gt;
&lt;pre id=&quot;code_1786280189135&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[Range(0, 100)]
[SerializeField] private int health = 100;&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;455&quot; data-origin-height=&quot;89&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4kXIx/dJMcad31Rxz/YRbBb0SL50UZvEfiiWDZQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4kXIx/dJMcad31Rxz/YRbBb0SL50UZvEfiiWDZQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4kXIx/dJMcad31Rxz/YRbBb0SL50UZvEfiiWDZQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4kXIx%2FdJMcad31Rxz%2FYRbBb0SL50UZvEfiiWDZQk%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;455&quot; height=&quot;89&quot; data-origin-width=&quot;455&quot; data-origin-height=&quot;89&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;1702&quot; data-start=&quot;1670&quot; data-ke-size=&quot;size16&quot;&gt;숫자 필드를 &lt;b&gt;슬라이더 형태&lt;/b&gt;로 바꾸고 범위를 제한하게 됩니다.&lt;/p&gt;
&lt;p data-end=&quot;1702&quot; data-start=&quot;1670&quot; data-ke-size=&quot;size16&quot;&gt;int형 float형 둘 다 가능합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1786280241713&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[Range(0f, 1f)]
[SerializeField] private float volume = 1f;&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;453&quot; data-origin-height=&quot;88&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgk6Mx/dJMcaiqLwI9/mNp2LKTKNKqdpVVzRpLuL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgk6Mx/dJMcaiqLwI9/mNp2LKTKNKqdpVVzRpLuL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgk6Mx/dJMcaiqLwI9/mNp2LKTKNKqdpVVzRpLuL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbgk6Mx%2FdJMcaiqLwI9%2FmNp2LKTKNKqdpVVzRpLuL0%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;453&quot; height=&quot;88&quot; data-origin-width=&quot;453&quot; data-origin-height=&quot;88&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;여기서 중요한 점은 Range는 &lt;b&gt;Inspector에서 값을 입력할 때의 제한입니다!!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기 때문에 값을 입력할 때는 값 제한이 되지만 코드로 막 Volume = 100 하는 것은 따로 코드로 막아야 합니다... (ex. &lt;span&gt;Mathf&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Clamp?)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt; 6. [ Min ]&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1786281464337&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[Min(0)]
[SerializeField] private int gold;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Min은 최솟값만 제한합니다. 이렇게 코드를 작성하면 최소값은 0으로 하고 최대값은 제한 없이 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;455&quot; data-origin-height=&quot;81&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBIwK2/dJMcagGA83F/FoU9H7hFFktjEKkU4mV8bK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBIwK2/dJMcagGA83F/FoU9H7hFFktjEKkU4mV8bK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBIwK2/dJMcagGA83F/FoU9H7hFFktjEKkU4mV8bK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBIwK2%2FdJMcagGA83F%2FFoU9H7hFFktjEKkU4mV8bK%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;455&quot; height=&quot;81&quot; data-origin-width=&quot;455&quot; data-origin-height=&quot;81&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;465&quot; data-origin-height=&quot;85&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TmEO5/dJMcabL447p/dKG1DvyTLS4DTYXJOSu5UK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TmEO5/dJMcabL447p/dKG1DvyTLS4DTYXJOSu5UK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TmEO5/dJMcabL447p/dKG1DvyTLS4DTYXJOSu5UK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTmEO5%2FdJMcabL447p%2FdKG1DvyTLS4DTYXJOSu5UK%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;465&quot; height=&quot;85&quot; data-origin-width=&quot;465&quot; data-origin-height=&quot;85&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마이너스를 입력하려고 해도 0으로 제정되게 됩니다.&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;Range는 최소값, 최대값 2개 다 제한하지만 Min은 최소값만 제한하는 것이 둘의 차이점입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;7. [ TextArea ]&lt;/h2&gt;
&lt;pre id=&quot;code_1786281851610&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[TextArea]
[SerializeField] private string description;&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;452&quot; data-origin-height=&quot;148&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpPFcR/dJMb991JiuD/wka5Z9TAIPLRtqh9kY7kdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpPFcR/dJMb991JiuD/wka5Z9TAIPLRtqh9kY7kdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpPFcR/dJMb991JiuD/wka5Z9TAIPLRtqh9kY7kdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpPFcR%2FdJMb991JiuD%2Fwka5Z9TAIPLRtqh9kY7kdK%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;354&quot; height=&quot;116&quot; data-origin-width=&quot;452&quot; data-origin-height=&quot;148&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;string 필드를 여러 줄 입력창으로 바꿔줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반 문자열 필드는 한 줄 입력인데여 TextArea를 사용하면 여러 줄 입력이 가능하게 해줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1786281987228&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[TextArea(3, 10)]
[SerializeField] private string description;&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;8. [ HideInInspector ]&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;public 필드지만 Inspector에서는 숨기고 싶을 때 사용합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1786282520628&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public int health;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 이렇게 public을 사용하면&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;454&quot; data-origin-height=&quot;81&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qAKBF/dJMcaf1QXlA/THJQUUG1TtEyj9xh2WRiWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qAKBF/dJMcaf1QXlA/THJQUUG1TtEyj9xh2WRiWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qAKBF/dJMcaf1QXlA/THJQUUG1TtEyj9xh2WRiWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqAKBF%2FdJMcaf1QXlA%2FTHJQUUG1TtEyj9xh2WRiWK%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;454&quot; height=&quot;81&quot; data-origin-width=&quot;454&quot; data-origin-height=&quot;81&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런식으로 인스펙터 창에 보이기 마련입니다. 하지만.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;cs&quot;&gt;&lt;code&gt;[HideInInspector]
public int health;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;HideInInspector를 사용하면&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;456&quot; data-origin-height=&quot;61&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WcFPR/dJMcadbQ3hF/NlEeLdFH9wENM6BivLOUK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WcFPR/dJMcadbQ3hF/NlEeLdFH9wENM6BivLOUK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WcFPR/dJMcadbQ3hF/NlEeLdFH9wENM6BivLOUK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWcFPR%2FdJMcadbQ3hF%2FNlEeLdFH9wENM6BivLOUK1%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;456&quot; height=&quot;61&quot; data-origin-width=&quot;456&quot; data-origin-height=&quot;61&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이름 그대로 인스펙터 창에서 안 보이게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;9. 내부적으로 어떻게 Inspector가 바뀔까요~?&lt;/h2&gt;
&lt;pre id=&quot;code_1786282823090&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[Range(0, 100)]
[SerializeField] private int health;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;health라는 필드에 &lt;b&gt;추가 메타데이터&lt;/b&gt;가 붙는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래는 health라는 필드에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자료형: int 직렬화: O 이라는 정보가 있었다고 하면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;거기서 추가로 Range(0, 100)이라는 정보를 필드가 담게 됩니다.&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;Unity Editor는 Inspector를 그릴 때 이 필드의 정보를 확인하고 그리게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기 때문에 어트리뷰트는 그 필드에 추가 메타데이터를 담아서 Unity가 그것을 읽고&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;오늘은 이상으로 Unity의 Inspector Attribute들을 알아보았습니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;내부적으로 어떻게 동작하는지와 여러 가지 어트리뷰트들을 알게 되어..?&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;리마인드하게 되어 꽤 알찬 시간이었다고 생각합니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;흠... 실무에서는&amp;nbsp; 이런 어트리뷰트를 많이 사용할까? 조금 생각이 들기도 합니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;오늘의 노래 추천은&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://youtu.be/QJO3ROT-A4E?si=KGcZkEyF2RUKJ3Sd&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;One Direction - What Makes You Beautiful&lt;/a&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;이&lt;/span&gt;라는 노래입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;참... 노래가 풋풋하고 좋습니다 ㅎㅎ&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;내일은 더욱 알차게 보내고 작성해 보도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;봐주셔서 감사합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;☺️&lt;/span&gt;&lt;/p&gt;</description>
      <author>minsoungdev</author>
      <guid isPermaLink="true">https://minsoungdev.tistory.com/59</guid>
      <comments>https://minsoungdev.tistory.com/59#entry59comment</comments>
      <pubDate>Sun, 9 Aug 2026 22:52:34 +0900</pubDate>
    </item>
  </channel>
</rss>