<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>shine의 개발 노트</title>
    <link>https://shine94.tistory.com/</link>
    <description>게임 서버 개발자, 샤인의 IT 공부 노트</description>
    <language>ko</language>
    <pubDate>Sun, 14 Jun 2026 19:52:03 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>shine94</managingEditor>
    <image>
      <title>shine의 개발 노트</title>
      <url>https://tistory1.daumcdn.net/tistory/3519881/attach/06b9d4fd89f14c0abf3ee857494cc20d</url>
      <link>https://shine94.tistory.com</link>
    </image>
    <item>
      <title>[Rider] 여러 개의 프로젝트를 동시에 실행하는 방법</title>
      <link>https://shine94.tistory.com/468</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;u&gt;&lt;b&gt;1. 실행/디버그 구성 편집&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;[방법 1] 실행 버튼 드롭다운 &amp;gt; 목록 하단의 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;구성 편집&lt;/span&gt; 선택&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;[방법 2] 상단 메뉴 실행 &amp;gt; &lt;span style=&quot;background-color: #f6e199;&quot;&gt;구성 편집&lt;/span&gt;&amp;nbsp;선택&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2210&quot; data-origin-height=&quot;1147&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Y580e/dJMcaaKxix2/PpFCKBKue9QDhUsnNZu1kK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Y580e/dJMcaaKxix2/PpFCKBKue9QDhUsnNZu1kK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Y580e/dJMcaaKxix2/PpFCKBKue9QDhUsnNZu1kK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FY580e%2FdJMcaaKxix2%2FPpFCKBKue9QDhUsnNZu1kK%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;2210&quot; height=&quot;1147&quot; data-origin-width=&quot;2210&quot; data-origin-height=&quot;1147&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;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;u&gt;&lt;b&gt;2. 복합 실행 구성 추가&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;실행/디버그 구성 창에서 + 버튼 &amp;gt; &lt;span style=&quot;background-color: #f6e199;&quot;&gt;복합&lt;/span&gt; 선택&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1392&quot; data-origin-height=&quot;1254&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WLztS/dJMcaihu9Js/amuxiiWmNcPeLeX4UlFNK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WLztS/dJMcaihu9Js/amuxiiWmNcPeLeX4UlFNK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WLztS/dJMcaihu9Js/amuxiiWmNcPeLeX4UlFNK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWLztS%2FdJMcaihu9Js%2FamuxiiWmNcPeLeX4UlFNK0%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;1392&quot; height=&quot;1254&quot; data-origin-width=&quot;1392&quot; data-origin-height=&quot;1254&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;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;u&gt;&lt;b&gt;3. 복합 실행 구성 설정&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;이름 설정 &amp;gt; + 버튼을 눌러 함께 실행할 프로젝트 추가 &amp;gt; 확인&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1380&quot; data-origin-height=&quot;1282&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UiA6m/dJMcadf8Pzw/OhQ9xKhvMnFe6V9VkXtnC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UiA6m/dJMcadf8Pzw/OhQ9xKhvMnFe6V9VkXtnC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UiA6m/dJMcadf8Pzw/OhQ9xKhvMnFe6V9VkXtnC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUiA6m%2FdJMcadf8Pzw%2FOhQ9xKhvMnFe6V9VkXtnC1%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;1380&quot; height=&quot;1282&quot; data-origin-width=&quot;1380&quot; data-origin-height=&quot;1282&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;</description>
      <category>업무_메모</category>
      <author>shine94</author>
      <guid isPermaLink="true">https://shine94.tistory.com/468</guid>
      <comments>https://shine94.tistory.com/468#entry468comment</comments>
      <pubDate>Wed, 3 Dec 2025 14:54:57 +0900</pubDate>
    </item>
    <item>
      <title>[MMORPG 게임 개발(C#, Unity)] Part 4. 네트워크 프로그래밍</title>
      <link>https://shine94.tistory.com/467</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; 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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://www.inflearn.com/roadmaps/355#introduce&quot;&gt;https://www.inflearn.com/roadmaps/355#introduce&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1748330105916&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;MMORPG 게임 개발, 켠김에 끝판왕까지! (유니티 + C#) 로드맵 - 인프런&quot; data-og-description=&quot;C#, Unity 스킬을 학습할 수 있는 게임 개발 로드맵을 인프런에서 만나보세요.&quot; data-og-host=&quot;www.inflearn.com&quot; data-og-source-url=&quot;https://www.inflearn.com/roadmaps/355#introduce&quot; data-og-url=&quot;https://www.inflearn.com/roadmaps/355&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/JFj0m/hyY1k48yk3/hkFVvRvDAmpODC3fkIwti1/img.png?width=600&amp;amp;height=314&amp;amp;face=0_0_600_314,https://scrap.kakaocdn.net/dn/bR9fuM/hyY0peza50/ZiMLCCaOUj6mbBwnk1KY5k/img.png?width=600&amp;amp;height=314&amp;amp;face=0_0_600_314,https://scrap.kakaocdn.net/dn/r25te/hyY06FPujw/Me1USceq10inrUKQwdMSJ0/img.jpg?width=1100&amp;amp;height=1329&amp;amp;face=0_0_1100_1329&quot;&gt;&lt;a href=&quot;https://www.inflearn.com/roadmaps/355#introduce&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.inflearn.com/roadmaps/355#introduce&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/JFj0m/hyY1k48yk3/hkFVvRvDAmpODC3fkIwti1/img.png?width=600&amp;amp;height=314&amp;amp;face=0_0_600_314,https://scrap.kakaocdn.net/dn/bR9fuM/hyY0peza50/ZiMLCCaOUj6mbBwnk1KY5k/img.png?width=600&amp;amp;height=314&amp;amp;face=0_0_600_314,https://scrap.kakaocdn.net/dn/r25te/hyY06FPujw/Me1USceq10inrUKQwdMSJ0/img.jpg?width=1100&amp;amp;height=1329&amp;amp;face=0_0_1100_1329');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MMORPG 게임 개발, 켠김에 끝판왕까지! (유니티 + C#) 로드맵 - 인프런&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;C#, Unity 스킬을 학습할 수 있는 게임 개발 로드맵을 인프런에서 만나보세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.inflearn.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&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;&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;소켓 프로그래밍&lt;/b&gt;&lt;/u&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;(1) Listener 소켓 준비&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;(2) Bind (서버 주소/Port를 소켓에 연동)&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;(3) Listen&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;(4) Accept&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;TCP&lt;/b&gt;&lt;/u&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;분실이 일어나면 책임지고 다시 전송한다 &amp;rarr; 신뢰성이 좋다&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;고려할 것이 많다보니 속도는 UDP보다 느리다&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;UDP&lt;/b&gt;&lt;/u&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;분실에 대한 책임이 없다 &lt;span style=&quot;text-align: start;&quot;&gt;&amp;rarr; 신뢰성이 나쁘다&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;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;전송 순서가 보장되지 않는다&lt;/span&gt;&lt;span style=&quot;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;&lt;span style=&quot;color: #333333; text-align: start; font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp; &amp;nbsp;단순하기 때문에 속도는 TCP보다 빠르다&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>
      <category>게임프로그래밍/Unity_C#</category>
      <category>c#과 유니티로 만드는 mmorpg 게임 개발</category>
      <author>shine94</author>
      <guid isPermaLink="true">https://shine94.tistory.com/467</guid>
      <comments>https://shine94.tistory.com/467#entry467comment</comments>
      <pubDate>Fri, 10 Oct 2025 01:11:31 +0900</pubDate>
    </item>
    <item>
      <title>[헤드퍼스트 C#] Chapter 5. 데이터 기밀 유지하기</title>
      <link>https://shine94.tistory.com/466</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* 해당 글은 시작하세요! 헤드퍼스트 C# 도서를 읽고 정리한 글입니다.&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://product.kyobobook.co.kr/detail/S000211338172&quot;&gt;https://product.kyobobook.co.kr/detail/S000211338172&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1751245834678&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;헤드 퍼스트 C# | 앤드류 스텔만 - 교보문고&quot; data-og-description=&quot;헤드 퍼스트 C# | 상상을 초월하는 객체지향 C# 학습법 직관적인 설명과 다채로운 구성으로 생생하게 체험하는 C# 프로그래밍재치 넘치는 설명과 틀에 박히지 않은 구성으로 복잡한 개념도 쉽게 &quot; data-og-host=&quot;product.kyobobook.co.kr&quot; data-og-source-url=&quot;https://product.kyobobook.co.kr/detail/S000211338172&quot; data-og-url=&quot;https://product.kyobobook.co.kr/detail/S000211338172&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dpAwW3/hyZfsPBlWd/AWfJGxbhvaXC74K0BebKnK/img.jpg?width=458&amp;amp;height=553&amp;amp;face=290_58_369_145,https://scrap.kakaocdn.net/dn/bgxWH1/hyZf8csUfN/UDiY4YXLkLgWtvYUhjlsDK/img.jpg?width=458&amp;amp;height=553&amp;amp;face=290_58_369_145,https://scrap.kakaocdn.net/dn/lkExc/hyZbnWII9g/aBUs0K8K920qnEoGuIrmzK/img.png?width=335&amp;amp;height=335&amp;amp;face=0_0_335_335&quot;&gt;&lt;a href=&quot;https://product.kyobobook.co.kr/detail/S000211338172&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://product.kyobobook.co.kr/detail/S000211338172&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dpAwW3/hyZfsPBlWd/AWfJGxbhvaXC74K0BebKnK/img.jpg?width=458&amp;amp;height=553&amp;amp;face=290_58_369_145,https://scrap.kakaocdn.net/dn/bgxWH1/hyZf8csUfN/UDiY4YXLkLgWtvYUhjlsDK/img.jpg?width=458&amp;amp;height=553&amp;amp;face=290_58_369_145,https://scrap.kakaocdn.net/dn/lkExc/hyZbnWII9g/aBUs0K8K920qnEoGuIrmzK/img.png?width=335&amp;amp;height=335&amp;amp;face=0_0_335_335');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;헤드 퍼스트 C# | 앤드류 스텔만 - 교보문고&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;헤드 퍼스트 C# | 상상을 초월하는 객체지향 C# 학습법 직관적인 설명과 다채로운 구성으로 생생하게 체험하는 C# 프로그래밍재치 넘치는 설명과 틀에 박히지 않은 구성으로 복잡한 개념도 쉽게&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;product.kyobobook.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://github.com/head-first-csharp/fourth-edition&quot;&gt;https://github.com/head-first-csharp/fourth-edition&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1751245836121&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - head-first-csharp/fourth-edition: Code and graphics for the projects in the 4th edition of Head First C#&quot; data-og-description=&quot;Code and graphics for the projects in the 4th edition of Head First C# - head-first-csharp/fourth-edition&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/head-first-csharp/fourth-edition&quot; data-og-url=&quot;https://github.com/head-first-csharp/fourth-edition&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/UR66Q/hyZchoy4Zu/AfofyPNmgXljGNKE97kpvk/img.png?width=1280&amp;amp;height=640&amp;amp;face=828_118_1088_402,https://scrap.kakaocdn.net/dn/efc7FG/hyZgbG1niY/RSQ6bJTRoyKTKaFfoZPiaK/img.png?width=1280&amp;amp;height=640&amp;amp;face=828_118_1088_402&quot;&gt;&lt;a href=&quot;https://github.com/head-first-csharp/fourth-edition&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/head-first-csharp/fourth-edition&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/UR66Q/hyZchoy4Zu/AfofyPNmgXljGNKE97kpvk/img.png?width=1280&amp;amp;height=640&amp;amp;face=828_118_1088_402,https://scrap.kakaocdn.net/dn/efc7FG/hyZgbG1niY/RSQ6bJTRoyKTKaFfoZPiaK/img.png?width=1280&amp;amp;height=640&amp;amp;face=828_118_1088_402');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - head-first-csharp/fourth-edition: Code and graphics for the projects in the 4th edition of Head First C#&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Code and graphics for the projects in the 4th edition of Head First C# - head-first-csharp/fourth-edition&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&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;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;*&amp;nbsp;&lt;u&gt;&lt;b&gt;캡슐화(encapsulation)&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;다른 클래스가 의도와는 다르게 값을 변경하거나 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;다른 클래스의 멤버를 잘못 사용하는 상황을 방지해서 코드를 안전하게 지켜준다&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;속성(property)&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;사용할 때는 필드처럼 보이고 내부 실행은 메서드처럼 작동하는 클래스 멤버이다&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;문자열 보간(string interpolation)&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;문자열 결합을 더 읽기 쉽게 해준다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;이 기능을 사용하려면 문자열 앞에 $ 기호를 붙인 다음 중괄호 안에 출력할 값을 넣으면 된다&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;클래스의 모든 메서드는 유일한 시그니처(signature)를 가진다&lt;/b&gt;&lt;/u&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;객체 이니셜라이저에서 속성을 초기화할 수 있다&lt;/b&gt;&lt;/u&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;개발자가 정의하지 않아도 모든 클래스에는 생성자가 있다&lt;/b&gt;&lt;/u&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;private 생성자를 추가해서 다른 클래스가 클래스를 인스턴스화하는 것을 막을 수 있다&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT공부/IT서적</category>
      <category>헤드퍼스트 c#</category>
      <author>shine94</author>
      <guid isPermaLink="true">https://shine94.tistory.com/466</guid>
      <comments>https://shine94.tistory.com/466#entry466comment</comments>
      <pubDate>Mon, 7 Jul 2025 08:55:01 +0900</pubDate>
    </item>
    <item>
      <title>[Unity] 벡터의 내적(Dot Product)</title>
      <link>https://shine94.tistory.com/465</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://www.youtube.com/watch?v=4-76jesTq2I&quot;&gt;https://www.youtube.com/watch?v=4-76jesTq2I&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=4-76jesTq2I&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/YtbaN/hyZf5OckoJ/C3Cxu1tqMdZJtanIpv1jn0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=786_118_930_274,https://scrap.kakaocdn.net/dn/x3kCJ/hyZfYhebpw/IUsCFVKTZSEjcNZ6lXzHkK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=786_118_930_274&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;수많은 의미가 생략된 &quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/4-76jesTq2I&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&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;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;이 블로그는 두 벡터가 모두 정규화(normalized)된 경우, 즉 길이가 1인 단위 벡터일 때의 내적 결과를 기준으로 한다&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;ㄴ 일반적인 벡터끼리의 내적은 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;a &amp;middot; b = |a| * |b| * cos(&amp;theta;)&lt;/span&gt;이다&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;ㄴ 따라서 벡터 길이가 1일 때만 내적 값이 -1 ~ 1 사이가 된다&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;벡터의 내적(Dot Product)&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;두 방향 벡터가 얼마나 같은 방향을 향하고 있는지를 숫자로 표현해주는 도구이다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;두 벡터가 같은 방향일 수록 1에 가까워지고, 반대일수록 -1에 가까워진다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;letter-spacing: 0px; border-collapse: collapse; width: 60.5821%; height: 221px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 14.3156%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;b&gt; 각도(&amp;theta;) &lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.5424%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;b&gt;내적 값(dot) &lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 34.7466%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;b&gt; 방향 관계 설명 &lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 14.3156%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;0&amp;deg;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.5424%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;1.0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 34.7466%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;완전히 같은 방향&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 14.3156%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;90&amp;deg;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.5424%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;0.0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 34.7466%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;수직(측면)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 14.3156%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;180&amp;deg;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.5424%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;-1.0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 34.7466%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;완전히 반대 방향&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1073&quot; data-origin-height=&quot;784&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bE4UeD/btsO2l8K6PK/sqr0hXyNlcfbe9WNxgtQYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bE4UeD/btsO2l8K6PK/sqr0hXyNlcfbe9WNxgtQYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bE4UeD/btsO2l8K6PK/sqr0hXyNlcfbe9WNxgtQYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbE4UeD%2FbtsO2l8K6PK%2Fsqr0hXyNlcfbe9WNxgtQYK%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;1073&quot; height=&quot;784&quot; data-origin-width=&quot;1073&quot; data-origin-height=&quot;784&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;647&quot; data-origin-height=&quot;937&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SlVeD/btsO1zfFLDF/cKEZziZOafumhV6UaRtqkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SlVeD/btsO1zfFLDF/cKEZziZOafumhV6UaRtqkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SlVeD/btsO1zfFLDF/cKEZziZOafumhV6UaRtqkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSlVeD%2FbtsO1zfFLDF%2FcKEZziZOafumhV6UaRtqkK%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;647&quot; height=&quot;937&quot; data-origin-width=&quot;647&quot; data-origin-height=&quot;937&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;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;내적은 벡터의 길이가 아닌, 두 방향이 얼마나 유사한지를 수치로 판단하는 도구임을 명심하자!!&lt;/b&gt;&lt;/u&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;[예를 들어, 거리를 구하고 싶다면]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;두 위치 백터의 차를 구하면, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;방향 벡터&lt;/span&gt;를 얻을 수 있다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;(이 벡터는 거리와 방향 정보를 모두 포함하고 있다)&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;구한 거리의 벡터의 크기(magnitude)&lt;/span&gt;를 구하면 두 위치 간의 실제 거리이고,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;구한 거리의 벡터를 정규화(normalized vector)&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 style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;transform.forward&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;길이가 1인 단위 벡터(normalized vector)&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;magnitude는 항상 양수이고, 방향은 부호를 가진다&lt;/b&gt;&lt;/u&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;실제 사용 예제&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1751523047784&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Vector3 toTarget = (target.position - transform.position).normalized;
float dot = Vector3.Dot(transform.forward, toTarget);
if (dot &amp;gt; 0.7f)
    Debug.Log(&quot;바라보고 있음&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT공부/개념</category>
      <author>shine94</author>
      <guid isPermaLink="true">https://shine94.tistory.com/465</guid>
      <comments>https://shine94.tistory.com/465#entry465comment</comments>
      <pubDate>Thu, 3 Jul 2025 15:11:09 +0900</pubDate>
    </item>
    <item>
      <title>[Unity] 사인 곡선을 활용한 진동 표현 이해하기</title>
      <link>https://shine94.tistory.com/464</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;진동&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;어떤 물체가 중심값을 기준으로 좌우 또는 위아래로 반복적으로 움직이는 현상을 의미한다&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;[유니티에서 진동은 언제 쓰일까?]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #c0d1e7;&quot;&gt;오브젝트 좌우로 흔들기&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;ㄴ x = base + sin(theta)&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #c0d1e7;&quot;&gt;위아래로 둥둥 뜨게 하기&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;ㄴ y = base + sin(theta)&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #c0d1e7;&quot;&gt;크기나 색 등을 부드럽게 바꾸기&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;ㄴ scale = 1 + sin(theta) * 0.2f&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;delta(델타)&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;변화량&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;수학, 물리, 프로그래밍에서 델타는 값이 얼마나 변했는지(차이)를 뜻한다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;변화된 값 또는 이전 값과의 차이를 의미하는 접두어로 많이 사용한다&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;[예]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #c0d1e7;&quot;&gt;deltaTime&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;시간의 변화량, 한 프레임 동안 흐른 시간(초)&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #c0d1e7;&quot;&gt;deltaPosition&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;위치의 변화량&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #c0d1e7;&quot;&gt;deltaAngle&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;회전각의 변화량&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;왜 삼각함수가 진동과 연관이 있을까?&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;sin, cos는 삼각형에서 시작했지만, 원 위에서 점이 움직이는 패턴이다&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;시간에 따라&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;sin(&amp;theta;) &amp;rarr; 아래에서 시작 &amp;rarr; 올라갔다 내려가고를 반복&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;cos(&amp;theta;) &amp;rarr; 위에서 시작 &amp;rarr; 내려갔다가 올라가고를 반복&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;[그럼 탄젠트는!?]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;tan(&amp;theta;) = sin(&amp;theta;) / cos(&amp;theta;) &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;기울기(= 기울어진 정도)를 나타내며, 진동 표현에는 일반적으로 사용되지 않는다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;회전각, 시야 각도 계산, 카메라 시선 처리 등에 더 많이 쓰인다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;(+) tan(&amp;theta;)는 &amp;pi;/2와 같은 특정 각도에서 값이 무한대로 발산하기 때문에, 진동 표현에는 부적합하다&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;탄젠트와 사인과 코사인의 차이는 명확한데 사인과 코사인은 헷갈린다!&lt;/b&gt;&lt;/u&gt;  &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;둘 다 주기 함수고 -1 ~ 1 사이의 값을 주기적으로 반복한다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;둘 다 진동 구현에 똑같이 쓸 수 있다&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;[차이점은 위상 차이다(phase difference)]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;사인은 0에서 시작해서 위로 올라가고&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;코사인은 1에서 시작해서 내려간다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 54.8837%; height: 102px;&quot; border=&quot;1&quot; data-end=&quot;518&quot; data-start=&quot;317&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;text-align: center; height: 17px; width: 13.2558%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;b&gt;&amp;theta;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 17px; width: 21.7442%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;b&gt;sin(&amp;theta;)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 17px; width: 19.8837%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;b&gt;cos(&amp;theta;)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot; data-end=&quot;402&quot; data-start=&quot;374&quot;&gt;
&lt;td style=&quot;height: 17px; text-align: center; width: 13.2558%;&quot; data-col-size=&quot;sm&quot; data-end=&quot;379&quot; data-start=&quot;374&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;b&gt;0&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 21.7442%; text-align: center;&quot; data-end=&quot;390&quot; data-start=&quot;379&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 19.8837%; text-align: center;&quot; data-end=&quot;402&quot; data-start=&quot;390&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot; data-end=&quot;431&quot; data-start=&quot;403&quot;&gt;
&lt;td style=&quot;height: 17px; text-align: center; width: 13.2558%;&quot; data-col-size=&quot;sm&quot; data-end=&quot;409&quot; data-start=&quot;403&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;b&gt;&amp;pi;/2&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 21.7442%; text-align: center;&quot; data-end=&quot;419&quot; data-start=&quot;409&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 19.8837%; text-align: center;&quot; data-end=&quot;431&quot; data-start=&quot;419&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot; data-end=&quot;460&quot; data-start=&quot;432&quot;&gt;
&lt;td style=&quot;height: 17px; text-align: center; width: 13.2558%;&quot; data-col-size=&quot;sm&quot; data-end=&quot;438&quot; data-start=&quot;432&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;b&gt;&amp;pi;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 21.7442%; text-align: center;&quot; data-end=&quot;448&quot; data-start=&quot;438&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 19.8837%; text-align: center;&quot; data-end=&quot;460&quot; data-start=&quot;448&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;-1&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot; data-end=&quot;489&quot; data-start=&quot;461&quot;&gt;
&lt;td style=&quot;height: 17px; text-align: center; width: 13.2558%;&quot; data-col-size=&quot;sm&quot; data-end=&quot;468&quot; data-start=&quot;461&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;b&gt;3&amp;pi;/2&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 21.7442%; text-align: center;&quot; data-end=&quot;477&quot; data-start=&quot;468&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;-1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 19.8837%; text-align: center;&quot; data-end=&quot;489&quot; data-start=&quot;477&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot; data-end=&quot;518&quot; data-start=&quot;490&quot;&gt;
&lt;td style=&quot;height: 17px; text-align: center; width: 13.2558%;&quot; data-col-size=&quot;sm&quot; data-end=&quot;496&quot; data-start=&quot;490&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;b&gt;2&amp;pi;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 21.7442%; text-align: center;&quot; data-end=&quot;506&quot; data-start=&quot;496&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 19.8837%; text-align: center;&quot; data-end=&quot;518&quot; data-start=&quot;506&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;[따라서]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;사인과 코사인은 본질적으로 동일한 형태의 함수이며, 단지 시작 시점(위상)이 다르다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;크게 다르다라고 느껴질 상황은 &lt;span style=&quot;background-color: #f6e199;&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;[그래도 굳이 실전에서 차이를 느끼고 싶다면......?]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;(1) 움직임의 시작 위치를 명확하게 연출할 때&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;등장하자마자 위에서부터 떨어져야 한다면 &lt;span style=&quot;text-align: start;&quot;&gt;&amp;rarr; 코사인&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;중앙에서 부드럽게 시작해야 한다면 &lt;span style=&quot;text-align: start;&quot;&gt;&amp;rarr; 사인&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;이럴 때는 시각적으로 차이가 느껴질 수 있다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;(2) 두 개의 파형(시간에 따라 값이 변화하는 모양)을 조합해서 움직임을 만들 때&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;사인과 코사인을 함께 쓸 때는 위상 차이가 움직임에 영향을 준다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;하지만 단독으로 진동만 구현할 때는 거의 차이가 없다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;</description>
      <category>IT공부/개념</category>
      <author>shine94</author>
      <guid isPermaLink="true">https://shine94.tistory.com/464</guid>
      <comments>https://shine94.tistory.com/464#entry464comment</comments>
      <pubDate>Tue, 1 Jul 2025 20:33:44 +0900</pubDate>
    </item>
    <item>
      <title>[멋쟁이사자처럼부트캠프] 유니티 게임 개발 5기(2025.06.23-2025.06.27)</title>
      <link>https://shine94.tistory.com/463</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;*&amp;nbsp;&lt;span style=&quot;text-align: start;&quot;&gt;해당 글은 유니티 게임 개발 수업 후&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;정리한 글입니다&lt;/span&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;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://bootcamp.likelion.net/school/kdt-ugm-5th&quot;&gt;https://bootcamp.likelion.net/school/kdt-ugm-5th&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1751110296860&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;유니티 게임 개발 5기 : 멋사 부트캠프&quot; data-og-description=&quot;개발부터 출시까지! 나만의 게임을 세상에 선보이는 유니티 부트캠프&quot; data-og-host=&quot;bootcamp.likelion.net&quot; data-og-source-url=&quot;https://bootcamp.likelion.net/school/kdt-ugm-5th&quot; data-og-url=&quot;https://bootcamp.likelion.net/school/kdt-ugm-5th&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cp8Wdb/hyZbvtu2XO/B2xdVFrOLjXgXkk0h0asp1/img.png?width=752&amp;amp;height=376&amp;amp;face=0_0_752_376,https://scrap.kakaocdn.net/dn/dlC6zb/hyZf1jTWaF/JnVk7I7Hx1bAC7zTcdSNA0/img.png?width=752&amp;amp;height=376&amp;amp;face=0_0_752_376&quot;&gt;&lt;a href=&quot;https://bootcamp.likelion.net/school/kdt-ugm-5th&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bootcamp.likelion.net/school/kdt-ugm-5th&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cp8Wdb/hyZbvtu2XO/B2xdVFrOLjXgXkk0h0asp1/img.png?width=752&amp;amp;height=376&amp;amp;face=0_0_752_376,https://scrap.kakaocdn.net/dn/dlC6zb/hyZf1jTWaF/JnVk7I7Hx1bAC7zTcdSNA0/img.png?width=752&amp;amp;height=376&amp;amp;face=0_0_752_376');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;유니티 게임 개발 5기 : 멋사 부트캠프&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;개발부터 출시까지! 나만의 게임을 세상에 선보이는 유니티 부트캠프&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;bootcamp.likelion.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; 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;&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;Update()&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;일반적인 작업용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;이동 작업을 transform으로 직접 조작할 경우 여기서 처리하나,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;이 방식은 프레임 스킵이 발생하면 그만큼 렌더링이 지연되어 지연되고, &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;지연된 만큼 한 번에 이동되기 때문에 &lt;span style=&quot;text-align: start;&quot;&gt;순간이동처럼 보일 수 있다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;또, transform으로 이동하는 경우, 물리 엔진을 거치지 않아 충돌 감지가 발생하지 않는다&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;[  그럼 여기서 물리엔진 계산하면 되잖아]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;물리 엔진은 고정된 시간 간격(Fixed Timestep)으로 계산&lt;/span&gt;된다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;대부분 Update 속도가 훨씬 빠르며,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;프레임마다 속도를 갱신하지만, 물리 엔진이 아직 계산을 반영하기 전 상태에서 덮어쓰게 되므로&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;이로 인해 &lt;span style=&quot;text-align: start;&quot;&gt;이동 타이밍과 충돌 판정 타이밍이 엇갈리면서, &lt;/span&gt;불안정한 움직임, 충돌 처리 누락, 끊김 등이 발생할 수 있다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;FixedUpdate()&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;물리 연산 작업용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;Rigidbody를 이용한 물리 기반 작업은 여기서 처리하지 않으면 연산 타이밍이 꼬일 수 있다&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;[❓ Why]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;물리 엔진은 고정된 시간 간격으로 계산하기 때문이다&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;최종적인 결론&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;입력은 Update에서&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;물리 엔진을 이용한 이동은 FixedUpdate에서&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1751112286465&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;float input;

void Update()
{
	// 입력은 Update에서
	input = Input.GetAxisRaw(&quot;Horizontal&quot;);
}

void FixedUpdate()
{
	// 이동은 FixedUpdate에서
	rb.velocity = new Vector2(input * speed, rb.velocity.y);
}&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;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;타일맵(Tilemap)&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;이미지를 작은 타일로 나눠 격자 형태로 배치&lt;/span&gt;해서, 큰 배경이나 맵을 효율적으로 구성하는 방식&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;큰 배경 이미지를 통째로 가져가면 메모리 부담이 크지만, &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;작은 이미지를 반복해서 배치하면 동일한 리소스를 재사용하게 되므로 빌드 용량이 훨씬 가벼워진다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;그 결과, 컴파일과 빌드 시간도 줄일 수 있다&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;타일 팔레트(Tile Palette)&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;타일맵 작업을 위해, 타일 이미지를 마치 물감을 팔레트에 올려두듯 정리해 놓는 도구&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;필요한 타일을 여기서 선택해서 씬에 배치할 수 있도록 도와준다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;Window &amp;gt; 2D &amp;gt; Tile Palette&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;901&quot; data-origin-height=&quot;664&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eeCBxp/btsOXG5fNKT/6tsZcapN7pkmc5Ps2wO9V0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eeCBxp/btsOXG5fNKT/6tsZcapN7pkmc5Ps2wO9V0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eeCBxp/btsOXG5fNKT/6tsZcapN7pkmc5Ps2wO9V0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeeCBxp%2FbtsOXG5fNKT%2F6tsZcapN7pkmc5Ps2wO9V0%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;901&quot; height=&quot;664&quot; data-origin-width=&quot;901&quot; data-origin-height=&quot;664&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;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;Tilemap Collider 2D&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;타일맵마다 개별적인 Collider를 자동 생성해주는 컨포넌트&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;타일 하나마다 Collider가 생성되므로 경계선이 많아지고, 그로 인해 물리 연산이 비효율적이다&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;Composite Collider 2D&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;여러 개의 Collider를 하나의 커다란 콜라이더로 합쳐주는 최적화 도구&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;성능 향상과 충돌 경계 단순화를 위해 자주 사용되며, Tilemap Collider 2D와 함께 쓰인다&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;[Edge Radius]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;Collider 외곽선의 가장자리를 부드럽게 둥글리는 정도를 나타낸다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;값이 클수록 둥글게 처리되어, 이동 가능한 영역이 그만큼 줄어든다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1382&quot; data-origin-height=&quot;1175&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpEt9T/btsOVZ6b4lv/YqK2p2SjTgp52wiZbxQOaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpEt9T/btsOVZ6b4lv/YqK2p2SjTgp52wiZbxQOaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpEt9T/btsOVZ6b4lv/YqK2p2SjTgp52wiZbxQOaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpEt9T%2FbtsOVZ6b4lv%2FYqK2p2SjTgp52wiZbxQOaK%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;1382&quot; height=&quot;1175&quot; data-origin-width=&quot;1382&quot; data-origin-height=&quot;1175&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;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;Rigidbody 2D(Static 설정)&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;정적인 지형용으로 적절한 설정이며, 물리 시뮬레이션 전에 Collider를 미리 생성해두는 방식&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;즉, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;런타임 중에 계산하지 않고, 씬 실행 시점에 이미 계산돼 있어서 성능에 유리&lt;/span&gt;하다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;Composite Collider를 쓰려면 반드시 Rigidbody 2D가 필요하며, 이때는 Static 설정을 쓰는 게 일반적이다&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;지금 공부하고 있는 방식은 상하좌우 이동만 가능한 2D 캐릭터 조작 게임으로, 중력이나 회전이 필요하지 않음&lt;/b&gt;&lt;/u&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;[따라서]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;물리 엔진에서 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;중력을 0&lt;/span&gt;으로, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Freeze Rotation의 Z축을 체크&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;[만약 중력과 회전이 있다면]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;중력에 의해 콜라이더의 둥근 곡면을 따라 미끄러지거나, 충돌 시 회전이 발생해 구르는 듯한 동작이 나타난다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;둥근 곡면이 없더라도 충돌 시 물리 회전이 적용되어 기울어지거나 옆으로 눕는다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;468&quot; data-origin-height=&quot;649&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dfYSsw/btsOXiDtJoV/mESEDeJfonRCi4iHCh6lz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dfYSsw/btsOXiDtJoV/mESEDeJfonRCi4iHCh6lz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dfYSsw/btsOXiDtJoV/mESEDeJfonRCi4iHCh6lz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdfYSsw%2FbtsOXiDtJoV%2FmESEDeJfonRCi4iHCh6lz1%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;468&quot; height=&quot;649&quot; data-origin-width=&quot;468&quot; data-origin-height=&quot;649&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;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;유니티의 UI 이벤트 시스템 인터페이스&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;UI 오브젝트나 Collider가 붙은 GameObject에서만 이벤트가 발생하며,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;반드시 EventSystem과 &lt;span style=&quot;text-align: start;&quot;&gt;Raycaster 구성 필요&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;[정리]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;UI 오브젝트인 경우&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;- EventSystem&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;- Canvas + GraphicRaycaster &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 style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;Collider가 붙은 GameObject(2D 기준)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt; &amp;nbsp; &amp;nbsp;- EventSystem &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;- Physics2DRaycaster &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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;(1) &lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;IPointerDownHandler &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;마우스 버튼 또는 터치가 눌렸을 때 호출됨&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1751115121316&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void OnPointerDown(PointerEventData eventData)&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;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;(2) &lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;IDragHandler&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;마우스 또는 터치를 누르고 움직일 때(= 드래그) 호출됨&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1751115157341&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void OnDrag(PointerEventData eventData)&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;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;(3) &lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;IPointerUpHandler &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;마우스 버튼 또는 터치가 떼어졌을 때 호출됨&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1751115185289&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void OnPointerUp(PointerEventData eventData)&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;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;조이스틱 방향 벡터 코드&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #262626; color: #d0d0d0;&quot;&gt;
&lt;pre class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot;&gt;&lt;code&gt;// direction1(방향 + 거리 포함) &amp;rarr; 정규화 안된 상태
var dragDirection = _currPosition - _startPosition;&lt;/code&gt;&lt;/pre&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;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://shine94.tistory.com/462&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://shine94.tistory.com/462&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1751122319251&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Unity] 수학과 Unity 관점에서 벡터와 스칼라 정리&quot; data-og-description=&quot;* 수학에서의 백터와 스칼라 (1) 스칼라(Scalar) 크기만 갖는 값 (예) 5m, 섭씨 20도, 256바이트, 4000 칼로리 (2) 벡터(Vector) 크기 + 방향을 갖는 값 (예) 30m/초 동쪽, 약 5마일 북쪽, 힘, 가속도 [정리하자면&quot; data-og-host=&quot;shine94.tistory.com&quot; data-og-source-url=&quot;https://shine94.tistory.com/462&quot; data-og-url=&quot;https://shine94.tistory.com/462&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cov8Yy/hyZf8XEtvf/eQcvG7VTsCXx313zAtK6HK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/n0Edb/hyZbyjpI2J/NDT2xxnUBdAulhgACXK2F0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/Cv78q/hyZciARVm9/4xVxaW9DJZRhHUYEgbddfK/img.jpg?width=300&amp;amp;height=300&amp;amp;face=0_0_300_300&quot;&gt;&lt;a href=&quot;https://shine94.tistory.com/462&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://shine94.tistory.com/462&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cov8Yy/hyZf8XEtvf/eQcvG7VTsCXx313zAtK6HK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/n0Edb/hyZbyjpI2J/NDT2xxnUBdAulhgACXK2F0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/Cv78q/hyZciARVm9/4xVxaW9DJZRhHUYEgbddfK/img.jpg?width=300&amp;amp;height=300&amp;amp;face=0_0_300_300');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Unity] 수학과 Unity 관점에서 벡터와 스칼라 정리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;* 수학에서의 백터와 스칼라 (1) 스칼라(Scalar) 크기만 갖는 값 (예) 5m, 섭씨 20도, 256바이트, 4000 칼로리 (2) 벡터(Vector) 크기 + 방향을 갖는 값 (예) 30m/초 동쪽, 약 5마일 북쪽, 힘, 가속도 [정리하자면&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;shine94.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;magnitude&amp;nbsp;&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;벡터의 길이(방향은 무시됨)&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;normalized&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;방향만 유지하고 길이를 1로 만든 벡터&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;조이스틱 드래그 방향 처리 코드&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1751123162069&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public void OnPointerDown(PointerEventData eventData)
{
    _startPosition = eventData.position;
}

public void OnDrag(PointerEventData eventData)
{
    _currPosition = eventData.position;
    var dragDirection = _currPosition - _startPosition;

    // distance : 거리
    // +75f, -75f : X/Y축 조이스틱 입력의 최대값(조이스틱 범위 제한)
    var maxDistance = Mathf.Min(dragDirection.magnitude, 75f);

    // _startPosition : 조이스틱 원래 위치
    // dragDirection.normalized * maxDistance : 드래그 방향값 * 최대 거리 75f
    handlerUI.transform.position = _startPosition + dragDirection.normalized * maxDistance;
}

public void OnPointerUp(PointerEventData eventData)
{
    // 드래그 종료 시 조이스틱 핸들 위치 초기화
    handlerUI.transform.position = Vector2.zero;
}&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;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;*&amp;nbsp; &lt;u&gt;&lt;b&gt;조이스틱&amp;nbsp;UI&amp;nbsp;구성&amp;nbsp;및&amp;nbsp;설정&amp;nbsp;경로&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;Canvas &amp;gt; Joystick(빈 오브젝트) &amp;gt; Background(조이스틱 배경) &amp;gt; Handle(방향 표시 이미지)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;ㄴ Joystick(빈&amp;nbsp;오브젝트)의&amp;nbsp;Image&amp;nbsp;컴포넌트는&amp;nbsp;투명도&amp;nbsp;0으로&amp;nbsp;설정해야&amp;nbsp;함&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;ForceMode2D &lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;(1) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Force&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;지속적으로 작용하는 힘(Continuous Force)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;FixedUpdate마다 누적 적용되어 속도를 점점 증가시키는 가속도&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; (예) 바람, 물살처럼 꾸준히 밀어내는 힘&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1751218274026&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;rigidbody2D.AddForce(Vector2.right * 10f, ForceMode2D.Force);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;이 경우, FixedUpdate마다 &lt;span style=&quot;background-color: #c1bef9;&quot;&gt;10만큼의 가속도&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;(2) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Impulse&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;순간적인 충격(Instantaneous Impulse)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;한 순간에 속도를 즉시 변화시키는 힘&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;점프, 충돌, 폭발처럼 짧고 강한 충격을 줄 때 사용&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1751218291238&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;rigidbody2D.AddForce(Vector2.up * 10f, ForceMode2D.Impulse);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;이 경우, 한 번만 힘이 적용되며 질량에 따라 속도 변화량이 결정된다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FixedUpdate 마다 반복 적용되지 않고, &lt;span style=&quot;background-color: #c1bef9;&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;애니메이션 블렌딩 시 실수했던 점&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;처음에 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;2D Simple Directional&lt;/span&gt;을 선택했는데, 이 블렌드 타입은 &lt;span style=&quot;background-color: #c1bef9;&quot;&gt;방향 값이 180도 이상인 경우를 처리할 수 없다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;수업에서 사용했던 방향 값(예: -1, 0, 1)처럼 양방향 입력이 필요한 경우에는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;2D Freeform Directional&lt;/span&gt;을 선택해야 했다&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;514&quot; data-origin-height=&quot;245&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQnCNO/btsOVZee572/D0Xa2BWPPCvmBj26Mwxvk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQnCNO/btsOVZee572/D0Xa2BWPPCvmBj26Mwxvk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQnCNO/btsOVZee572/D0Xa2BWPPCvmBj26Mwxvk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQnCNO%2FbtsOVZee572%2FD0Xa2BWPPCvmBj26Mwxvk0%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;514&quot; height=&quot;245&quot; data-origin-width=&quot;514&quot; data-origin-height=&quot;245&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;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;AudioSound&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp; &amp;nbsp;동시에 여러 개의 사운드를 재생할 수 없기 때문에, &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;효과음을 겹쳐 재생하려면 각각 AudioSound가 필요하다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp; &amp;nbsp;ㄴ 소리를 중첩시킬 때, 애니메이션의 이벤트와 연결하여 트리거로 활용하기도 한다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;636&quot; data-origin-height=&quot;596&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c1ZGoC/btsOWHDLeCW/7EHms4SejjJkSEfzWjt5w1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c1ZGoC/btsOWHDLeCW/7EHms4SejjJkSEfzWjt5w1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c1ZGoC/btsOWHDLeCW/7EHms4SejjJkSEfzWjt5w1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc1ZGoC%2FbtsOWHDLeCW%2F7EHms4SejjJkSEfzWjt5w1%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;636&quot; height=&quot;596&quot; data-origin-width=&quot;636&quot; data-origin-height=&quot;596&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;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;Time.timeScale(영상 재생 시 배속 조절과 유사한 개념)&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;유니티의 시간의 흐름 속도를 조절할 수 있는 속성이다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;기본 값은 1f이며, 이는 정상적인 시간 흐름이다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;값을 0f으로 설정하면 시간이 완전히 정지되며, 애니메이션, 이동, 물리 처리 등 모두 멈춘다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>게임프로그래밍/Unity_C#</category>
      <category>멋쟁이사자처럼 유니티 게임 개발 5기</category>
      <category>씨샵</category>
      <category>유니티</category>
      <author>shine94</author>
      <guid isPermaLink="true">https://shine94.tistory.com/463</guid>
      <comments>https://shine94.tistory.com/463#entry463comment</comments>
      <pubDate>Mon, 30 Jun 2025 05:39:09 +0900</pubDate>
    </item>
    <item>
      <title>[Unity] 수학과 Unity 관점에서 벡터와 스칼라 정리</title>
      <link>https://shine94.tistory.com/462</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;* &lt;u&gt;&lt;b&gt;수학에서의 백터와 스칼라&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp; &amp;nbsp;(1) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;스칼라(Scalar)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 크기만 갖는 값&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (예) &lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;&amp;nbsp;5m, &lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;섭씨 20도, &lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;256바이트, &lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;4000 칼로리&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp; &amp;nbsp;(2) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;벡터(Vector) &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 크기 + 방향을 갖는 값&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (예) &lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;30m/초 동쪽, &lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;약 5마일 북쪽, 힘, 가속도&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 style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;[정리하자면]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp; &amp;nbsp;핵심 차이는 방향의 존재 여부다&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: #333333; font-family: 'Nanum Gothic';&quot;&gt;* &lt;u&gt;&lt;b&gt;유니티에서의 Vector3&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp; &amp;nbsp;유니티의 Vector3 구조체는 수학적 벡터 개념을 기반으로 한 자료형이지만,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp; &amp;nbsp;실제 의미는 어떻게 사용하느냐에 따라 달라진다&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1751120213790&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 위치
transform.position = new Vector3(0, 3, 0);

// 방향(this &amp;rarr; target)
Vector3 direction1 = target.position - transform.position;		// 두 위치 차이 벡터
Vector3 direction2 = (target.position - transform.position).normalized;	// 길이를 1로 만들어, 방향만 남긴 단위 벡터(normalized vector)

// 속도 또는 힘의 방향과 크기를 적용할 때(반드시 방향 벡터를 정규화해서 사용)
rigidbody.velocity = direction2 * 3f;
rigidbody.AddForce(direction2 * force);&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;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; background-color: #99cefa;&quot;&gt;direction1(이동 벡터)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;방향 + &lt;span style=&quot;background-color: #f6e199;&quot;&gt;시작 위치로부터의 거리&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;이동해야 할 거리(크기)가 중요한 경우&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;(예) 목표까지 얼마나 멀리 가야하는지를 중요한 경우, 총알이 목표물까지 날아가는 방향과 거리&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic'; background-color: #99cefa;&quot;&gt;direction2(방향 벡터)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;방향만&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;정규화된 단위 벡터(길이 1)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;* &lt;u&gt;&lt;b&gt;참고한 문서들&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://www.physicsclassroom.com/class/1dkin/lesson-1/scalars-and-vectors?utm_source=chatgpt.com&quot;&gt;https://www.physicsclassroom.com/class/1dkin/lesson-1/scalars-and-vectors?utm_source=chatgpt.com&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1751121563653&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Scalars and Vectors&quot; data-og-description=&quot;Scalars and Vectors Hold down the T key for 3 seconds to activate the audio accessibility mode, at which point you can click the K key to pause and resume audio. Useful for the Check Your Understanding and See Answers. Physics is a mathematical science. Th&quot; data-og-host=&quot;www.physicsclassroom.com&quot; data-og-source-url=&quot;https://www.physicsclassroom.com/class/1dkin/lesson-1/scalars-and-vectors?utm_source=chatgpt.com&quot; data-og-url=&quot;https://www.physicsclassroom.com/class/1dkin/lesson-1/scalars-and-vectors?utm_source=chatgpt.com&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/blF1oe/hyZbB1AZlw/IIPxi8R0DpBRGUG21M7kxK/img.jpg?width=2000&amp;amp;height=242&amp;amp;face=0_0_2000_242&quot;&gt;&lt;a href=&quot;https://www.physicsclassroom.com/class/1dkin/lesson-1/scalars-and-vectors?utm_source=chatgpt.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.physicsclassroom.com/class/1dkin/lesson-1/scalars-and-vectors?utm_source=chatgpt.com&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/blF1oe/hyZbB1AZlw/IIPxi8R0DpBRGUG21M7kxK/img.jpg?width=2000&amp;amp;height=242&amp;amp;face=0_0_2000_242');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Scalars and Vectors&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Scalars and Vectors Hold down the T key for 3 seconds to activate the audio accessibility mode, at which point you can click the K key to pause and resume audio. Useful for the Check Your Understanding and See Answers. Physics is a mathematical science. Th&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.physicsclassroom.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://mathinsight.org/vector_introduction?utm_source=chatgpt.com&quot;&gt;https://mathinsight.org/vector_introduction?utm_source=chatgpt.com&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1751121565562&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;An introduction to vectors - Math Insight&quot; data-og-description=&quot;Definition of a vector A vector is an object that has both a magnitude and a direction. Geometrically, we can picture a vector as a directed line segment, whose length is the magnitude of the vector and with an arrow indicating the direction. The direction&quot; data-og-host=&quot;mathinsight.org&quot; data-og-source-url=&quot;https://mathinsight.org/vector_introduction?utm_source=chatgpt.com&quot; data-og-url=&quot;https://mathinsight.org/vector_introduction?utm_source=chatgpt.com&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://mathinsight.org/vector_introduction?utm_source=chatgpt.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://mathinsight.org/vector_introduction?utm_source=chatgpt.com&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;An introduction to vectors - Math Insight&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Definition of a vector A vector is an object that has both a magnitude and a direction. Geometrically, we can picture a vector as a directed line segment, whose length is the magnitude of the vector and with an arrow indicating the direction. The direction&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;mathinsight.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://docs.unity3d.com/ScriptReference/Vector3-normalized.html?utm_source=chatgpt.com&quot;&gt;https://docs.unity3d.com/ScriptReference/Vector3-normalized.html?utm_source=chatgpt.com&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT공부/개념</category>
      <author>shine94</author>
      <guid isPermaLink="true">https://shine94.tistory.com/462</guid>
      <comments>https://shine94.tistory.com/462#entry462comment</comments>
      <pubDate>Sat, 28 Jun 2025 23:50:25 +0900</pubDate>
    </item>
    <item>
      <title>[멋쟁이사자처럼부트캠프] 유니티 게임 개발 5기(2025.06.16-2025.06.19)</title>
      <link>https://shine94.tistory.com/461</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;*&amp;nbsp;&lt;span style=&quot;text-align: start;&quot;&gt;해당 글은 유니티 게임 개발 수업 후&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;정리한 글입니다&lt;/span&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;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://bootcamp.likelion.net/school/kdt-ugm-5th&quot;&gt;https://bootcamp.likelion.net/school/kdt-ugm-5th&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1751019784556&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;유니티 게임 개발 5기 : 멋사 부트캠프&quot; data-og-description=&quot;개발부터 출시까지! 나만의 게임을 세상에 선보이는 유니티 부트캠프&quot; data-og-host=&quot;bootcamp.likelion.net&quot; data-og-source-url=&quot;https://bootcamp.likelion.net/school/kdt-ugm-5th&quot; data-og-url=&quot;https://bootcamp.likelion.net/school/kdt-ugm-5th&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/9AA3c/hyZboufzSm/lUGmOOQNk7Ja2bu4p6wK4K/img.png?width=752&amp;amp;height=376&amp;amp;face=0_0_752_376,https://scrap.kakaocdn.net/dn/ckPjZJ/hyZfBSZhBl/Tr774EtQG4QKmJwFVKqenK/img.png?width=752&amp;amp;height=376&amp;amp;face=0_0_752_376&quot;&gt;&lt;a href=&quot;https://bootcamp.likelion.net/school/kdt-ugm-5th&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bootcamp.likelion.net/school/kdt-ugm-5th&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/9AA3c/hyZboufzSm/lUGmOOQNk7Ja2bu4p6wK4K/img.png?width=752&amp;amp;height=376&amp;amp;face=0_0_752_376,https://scrap.kakaocdn.net/dn/ckPjZJ/hyZfBSZhBl/Tr774EtQG4QKmJwFVKqenK/img.png?width=752&amp;amp;height=376&amp;amp;face=0_0_752_376');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;유니티 게임 개발 5기 : 멋사 부트캠프&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;개발부터 출시까지! 나만의 게임을 세상에 선보이는 유니티 부트캠프&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;bootcamp.likelion.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;형 변환(Type Casting)&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;다른 데이터 타입으로 변환하는 것&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;객체지향 프로그래밍(OOP, Object-Oriented Programming)&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;객체(데이터 + 동작) 단위로 프로그램을 구성하는 방식&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;캡슐화, 상속, 다형성, 추상화가 핵심 개념&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;오버로딩(Overloading)&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;같은 이름의 메서드를 매개변수만 다르게 여러 개 정의하는 것&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt; * &lt;u&gt;&lt;b&gt;상속(Inheritance)&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;부모 클래스의 속성과 기능을 자식 클래스가 물려받는 것&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;가상화(Virtualization)&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;부모 클래스의 메서드를 자식 클래스에서 재정의(override) 할 수 있게 하는 것&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;추상화(Abstraction)&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;공통된 개념만 뽑아 핵심적인 인터페이스만 정의하는 것&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;인터페이스(Interface)&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;메서드 시그니처만 정의하고, 구현은 상속받는 클래스가 담당하는 구조&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;캡슐화(Encapsulation)&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;데이터와 기능을 하나의 객체 안에 묶고 외부에서는 접근을 제한하는 것&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>게임프로그래밍/Unity_C#</category>
      <category>멋쟁이사자처럼 유니티 게임 개발 5기</category>
      <category>씨샵</category>
      <category>유니티</category>
      <author>shine94</author>
      <guid isPermaLink="true">https://shine94.tistory.com/461</guid>
      <comments>https://shine94.tistory.com/461#entry461comment</comments>
      <pubDate>Fri, 27 Jun 2025 19:28:44 +0900</pubDate>
    </item>
    <item>
      <title>[멋쟁이사자처럼부트캠프] 유니티 게임 개발 5기(2025.06.09-2025.06.13)</title>
      <link>https://shine94.tistory.com/460</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;*&amp;nbsp;&lt;span style=&quot;text-align: start;&quot;&gt;해당 글은 유니티 게임 개발 수업 후&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;정리한 글입니다&lt;/span&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;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://bootcamp.likelion.net/school/kdt-ugm-5th&quot;&gt;https://bootcamp.likelion.net/school/kdt-ugm-5th&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1751012575090&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;유니티 게임 개발 5기 : 멋사 부트캠프&quot; data-og-description=&quot;개발부터 출시까지! 나만의 게임을 세상에 선보이는 유니티 부트캠프&quot; data-og-host=&quot;bootcamp.likelion.net&quot; data-og-source-url=&quot;https://bootcamp.likelion.net/school/kdt-ugm-5th&quot; data-og-url=&quot;https://bootcamp.likelion.net/school/kdt-ugm-5th&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/9AA3c/hyZboufzSm/lUGmOOQNk7Ja2bu4p6wK4K/img.png?width=752&amp;amp;height=376&amp;amp;face=0_0_752_376,https://scrap.kakaocdn.net/dn/ckPjZJ/hyZfBSZhBl/Tr774EtQG4QKmJwFVKqenK/img.png?width=752&amp;amp;height=376&amp;amp;face=0_0_752_376&quot;&gt;&lt;a href=&quot;https://bootcamp.likelion.net/school/kdt-ugm-5th&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bootcamp.likelion.net/school/kdt-ugm-5th&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/9AA3c/hyZboufzSm/lUGmOOQNk7Ja2bu4p6wK4K/img.png?width=752&amp;amp;height=376&amp;amp;face=0_0_752_376,https://scrap.kakaocdn.net/dn/ckPjZJ/hyZfBSZhBl/Tr774EtQG4QKmJwFVKqenK/img.png?width=752&amp;amp;height=376&amp;amp;face=0_0_752_376');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;유니티 게임 개발 5기 : 멋사 부트캠프&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;개발부터 출시까지! 나만의 게임을 세상에 선보이는 유니티 부트캠프&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;bootcamp.likelion.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&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;&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;u&gt;&lt;b&gt;캐릭터 이동 3가지&lt;/b&gt;&lt;/u&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;(1) &lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;Transform 이동&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;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Rigidbody가 있을 경우, 충돌 처리 이상이 발생할 수 있다(예 : 관통, 튕김 무시)&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;UI, 배경, 단순 애니메이션 등 &lt;span style=&quot;background-color: #f6e199;&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;(2) &lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;Rigidbody 이동&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;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &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;&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;[velocity]&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;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &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;&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;[AddForce]&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;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &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;&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;(3) &lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;Character Controller 이동&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;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;충돌 처리는 자동으로 되지만, 물리 엔진(Rigidbody 등)과는 별도&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;중력은 직업 구현해야 하며, controller&lt;/span&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;.Move()에 직접 중력 반영 필요&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;/span&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;Invoke, Coroutine&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&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;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;Invoke&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;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;Coroutine&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;</description>
      <category>게임프로그래밍/Unity_C#</category>
      <category>멋쟁이사자처럼 유니티 게임 개발 5기</category>
      <category>씨샵</category>
      <category>유니티</category>
      <author>shine94</author>
      <guid isPermaLink="true">https://shine94.tistory.com/460</guid>
      <comments>https://shine94.tistory.com/460#entry460comment</comments>
      <pubDate>Fri, 27 Jun 2025 18:05:31 +0900</pubDate>
    </item>
    <item>
      <title>[C#] .NET 가비지 컬렉션(GC, Garbage collection) 둘러보기</title>
      <link>https://shine94.tistory.com/459</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;*&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;u&gt;&lt;b&gt;참고한 공식 문서&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://learn.microsoft.com/ko-kr/dotnet/standard/garbage-collection/fundamentals&quot;&gt;https://learn.microsoft.com/ko-kr/dotnet/standard/garbage-collection/fundamentals&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1750673496471&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;가비지 컬렉션 기본 사항 - .NET&quot; data-og-description=&quot;가비지 수집기의 작동 원리와 최적 성능으로 구성하는 방법에 대해 알아봅니다.&quot; data-og-host=&quot;learn.microsoft.com&quot; data-og-source-url=&quot;https://learn.microsoft.com/ko-kr/dotnet/standard/garbage-collection/fundamentals&quot; data-og-url=&quot;https://learn.microsoft.com/ko-kr/dotnet/standard/garbage-collection/fundamentals&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/UnDG2/hyZcjZHcFw/Equ1K3y7hR83NOcVToxjy1/img.png?width=636&amp;amp;height=300&amp;amp;face=0_0_636_300&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/dotnet/standard/garbage-collection/fundamentals&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://learn.microsoft.com/ko-kr/dotnet/standard/garbage-collection/fundamentals&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/UnDG2/hyZcjZHcFw/Equ1K3y7hR83NOcVToxjy1/img.png?width=636&amp;amp;height=300&amp;amp;face=0_0_636_300');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;가비지 컬렉션 기본 사항 - .NET&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;가비지 수집기의 작동 원리와 최적 성능으로 구성하는 방법에 대해 알아봅니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;learn.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://learn.microsoft.com/ko-kr/dotnet/standard/garbage-collection/large-object-heap&quot;&gt;https://learn.microsoft.com/ko-kr/dotnet/standard/garbage-collection/large-object-heap&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1750233024351&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Windows의 큰 개체 힙 (LOH) - .NET&quot; data-og-description=&quot;이 문서에서는 큰 개체, .NET 가비지 수집기에서 관리하는 방법 및 큰 개체를 사용하는 성능에 미치는 영향에 대해 설명합니다.&quot; data-og-host=&quot;learn.microsoft.com&quot; data-og-source-url=&quot;https://learn.microsoft.com/ko-kr/dotnet/standard/garbage-collection/large-object-heap&quot; data-og-url=&quot;https://learn.microsoft.com/ko-kr/dotnet/standard/garbage-collection/large-object-heap&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/uDbs6/hyY76Ann1J/8eAVo6Kf3kqxiRCWW6a4y0/img.png?width=636&amp;amp;height=300&amp;amp;face=0_0_636_300,https://scrap.kakaocdn.net/dn/oqUI3/hyZbvSORnj/wRZ5mbkTrbCuFprxYnd0YK/img.png?width=1428&amp;amp;height=975&amp;amp;face=0_0_1428_975,https://scrap.kakaocdn.net/dn/NIwNQ/hyZbrJDLQt/UeEI93QwYshArPxZTtP4H0/img.png?width=1060&amp;amp;height=851&amp;amp;face=0_0_1060_851&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/dotnet/standard/garbage-collection/large-object-heap&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://learn.microsoft.com/ko-kr/dotnet/standard/garbage-collection/large-object-heap&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/uDbs6/hyY76Ann1J/8eAVo6Kf3kqxiRCWW6a4y0/img.png?width=636&amp;amp;height=300&amp;amp;face=0_0_636_300,https://scrap.kakaocdn.net/dn/oqUI3/hyZbvSORnj/wRZ5mbkTrbCuFprxYnd0YK/img.png?width=1428&amp;amp;height=975&amp;amp;face=0_0_1428_975,https://scrap.kakaocdn.net/dn/NIwNQ/hyZbrJDLQt/UeEI93QwYshArPxZTtP4H0/img.png?width=1060&amp;amp;height=851&amp;amp;face=0_0_1060_851');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Windows의 큰 개체 힙 (LOH) - .NET&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이 문서에서는 큰 개체, .NET 가비지 수집기에서 관리하는 방법 및 큰 개체를 사용하는 성능에 미치는 영향에 대해 설명합니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;learn.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://learn.microsoft.com/ko-kr/dotnet/standard/garbage-collection/background-gc?utm_source=chatgpt.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://learn.microsoft.com/ko-kr/dotnet/standard/garbage-collection/background-gc?utm_source=chatgpt.com&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1750673609728&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;백그라운드 가비지 수집 - .NET&quot; data-og-description=&quot;.NET의 백그라운드 가비지 수집 및 워크스테이션 및 서버 가비지 수집의 차이점에 대해 알아봅니다.&quot; data-og-host=&quot;learn.microsoft.com&quot; data-og-source-url=&quot;https://learn.microsoft.com/ko-kr/dotnet/standard/garbage-collection/background-gc?utm_source=chatgpt.com&quot; data-og-url=&quot;https://learn.microsoft.com/ko-kr/dotnet/standard/garbage-collection/background-gc&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/c1jFT5/hyY8TIlEtc/m74eZqFMvJcltp37K5Ln8K/img.png?width=636&amp;amp;height=300&amp;amp;face=0_0_636_300,https://scrap.kakaocdn.net/dn/bKwDxz/hyY8NH68wV/I2Kx8KI9HPnrLTG3ScYxp1/img.png?width=590&amp;amp;height=294&amp;amp;face=0_0_590_294,https://scrap.kakaocdn.net/dn/bpLEir/hyZbAgftsl/UUEcTyCNlRQMZ8RZ2L3eyk/img.png?width=590&amp;amp;height=294&amp;amp;face=0_0_590_294&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/dotnet/standard/garbage-collection/background-gc?utm_source=chatgpt.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://learn.microsoft.com/ko-kr/dotnet/standard/garbage-collection/background-gc?utm_source=chatgpt.com&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/c1jFT5/hyY8TIlEtc/m74eZqFMvJcltp37K5Ln8K/img.png?width=636&amp;amp;height=300&amp;amp;face=0_0_636_300,https://scrap.kakaocdn.net/dn/bKwDxz/hyY8NH68wV/I2Kx8KI9HPnrLTG3ScYxp1/img.png?width=590&amp;amp;height=294&amp;amp;face=0_0_590_294,https://scrap.kakaocdn.net/dn/bpLEir/hyZbAgftsl/UUEcTyCNlRQMZ8RZ2L3eyk/img.png?width=590&amp;amp;height=294&amp;amp;face=0_0_590_294');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;백그라운드 가비지 수집 - .NET&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;.NET의 백그라운드 가비지 수집 및 워크스테이션 및 서버 가비지 수집의 차이점에 대해 알아봅니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;learn.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://docs.unity3d.com/Manual/performance-reference-types.html#Garbage-collector&quot;&gt;https://docs.unity3d.com/Manual/performance-reference-types.html#Garbage-collector&lt;/a&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://docs.unity3d.com/2023.1/Documentation/Manual/performance-incremental-garbage-collection.html?utm_source=chatgpt.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.unity3d.com/2023.1/Documentation/Manual/performance-incremental-garbage-collection.html?utm_source=chatgpt.com&lt;/a&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: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://docs.unity3d.com/Manual/scripting-backends-il2cpp.html&quot;&gt;https://docs.unity3d.com/Manual/scripting-backends-il2cpp.html&lt;/a&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: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://www.hboehm.info/gc/&quot;&gt;https://www.hboehm.info/gc/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1750789302343&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;A garbage collector for C and C++&quot; data-og-description=&quot;A garbage collector for C and C++ [ This is an updated version of the page formerly at http://www.hpl.hp.com/personal/Hans_Boehm/gc, and before that at http://reality.sgi.com/boehm/gc.html and before that at ftp://parcftp.xerox.com/pub/gc/gc.html. ] The Bo&quot; data-og-host=&quot;www.hboehm.info&quot; data-og-source-url=&quot;https://www.hboehm.info/gc/&quot; data-og-url=&quot;https://www.hboehm.info/gc/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.hboehm.info/gc/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.hboehm.info/gc/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;A garbage collector for C and C++&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;A garbage collector for C and C++ [ This is an updated version of the page formerly at http://www.hpl.hp.com/personal/Hans_Boehm/gc, and before that at http://reality.sgi.com/boehm/gc.html and before that at ftp://parcftp.xerox.com/pub/gc/gc.html. ] The Bo&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.hboehm.info&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html&quot;&gt;https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1750791163560&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Java Garbage Collection Basics&quot; data-og-description=&quot;Java Overview Java is a programming language and computing platform first released by Sun Microsystems in 1995. It is the underlying technology that powers Java programs including utilities, games, and business applications. Java runs on more than 850 mill&quot; data-og-host=&quot;www.oracle.com&quot; data-og-source-url=&quot;https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html&quot; data-og-url=&quot;https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cEwbQd/hyZbpF9jxH/d5foep6Vuk6ZReqIA1foc1/img.png?width=960&amp;amp;height=720&amp;amp;face=0_0_960_720,https://scrap.kakaocdn.net/dn/bqgNs1/hyZcd6CANr/Oiio2iLf65eKqpDJ3cYwS0/img.png?width=960&amp;amp;height=720&amp;amp;face=0_0_960_720,https://scrap.kakaocdn.net/dn/bIQFVP/hyZbAOsfp0/CmbGwaxykH3rOceazy4a6K/img.png?width=960&amp;amp;height=720&amp;amp;face=0_0_960_720&quot;&gt;&lt;a href=&quot;https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cEwbQd/hyZbpF9jxH/d5foep6Vuk6ZReqIA1foc1/img.png?width=960&amp;amp;height=720&amp;amp;face=0_0_960_720,https://scrap.kakaocdn.net/dn/bqgNs1/hyZcd6CANr/Oiio2iLf65eKqpDJ3cYwS0/img.png?width=960&amp;amp;height=720&amp;amp;face=0_0_960_720,https://scrap.kakaocdn.net/dn/bIQFVP/hyZbAOsfp0/CmbGwaxykH3rOceazy4a6K/img.png?width=960&amp;amp;height=720&amp;amp;face=0_0_960_720');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Java Garbage Collection Basics&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Java Overview Java is a programming language and computing platform first released by Sun Microsystems in 1995. It is the underlying technology that powers Java programs including utilities, games, and business applications. Java runs on more than 850 mill&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.oracle.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://docs.oracle.com/en/java/javase/17/gctuning/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.oracle.com/en/java/javase/17/gctuning/index.html&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1750791171903&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;HotSpot Virtual Machine Garbage Collection Tuning Guide&quot; data-og-description=&quot;This guide describes the garbage collection methods included in the Java HotSpot Virtual Machine (Java HotSpot VM) and helps you determine which one is the best for your needs.&quot; data-og-host=&quot;docs.oracle.com&quot; data-og-source-url=&quot;https://docs.oracle.com/en/java/javase/17/gctuning/index.html&quot; data-og-url=&quot;https://docs.oracle.com/en/java/javase/17/gctuning/index.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.oracle.com/en/java/javase/17/gctuning/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.oracle.com/en/java/javase/17/gctuning/index.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;HotSpot Virtual Machine Garbage Collection Tuning Guide&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;This guide describes the garbage collection methods included in the Java HotSpot Virtual Machine (Java HotSpot VM) and helps you determine which one is the best for your needs.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.oracle.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&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;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;u&gt;&lt;b&gt;Garbage Collector(GC)&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;[핵심 목표] 더 이상 사용하지 않는 객체의 메모리를 자동으로 찾아서 해제한다&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: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;*&amp;nbsp;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;u&gt;&lt;b&gt;동작 단계&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;.NET의 GC는 기본적으로&amp;nbsp;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;Mark&amp;nbsp;&amp;rarr; Sweep&amp;nbsp;&amp;rarr; Compact 패턴&lt;/span&gt;을 따른다&lt;/span&gt;&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;(1) &lt;span style=&quot;background-color: #99cefa;&quot;&gt;Mark 단계&lt;/span&gt; - 사용중인 객체를 표시&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 실행 중인 애플리케이션의 루트(Root) 객체부터 시작해 참조 체인을 따라 살아있는 객체(alive)로 표시한다&lt;/span&gt;&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;(2) &lt;span style=&quot;background-color: #99cefa;&quot;&gt;Sweep 단계&lt;/span&gt; - 사용하지 않는 객체를 제거&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Mark 단계에서 표시되지 않는 객체를 가비지(쓰레기)로 간주하고, 그 메모리를 해제한다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; [단어 뜻] 쓸다, 청소하다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;(3) &lt;span style=&quot;background-color: #99cefa;&quot;&gt;Compact 단계&lt;/span&gt; - 살아 남은 객체를 모아 연속된 공간을 만든다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Sweep 후 생긴 메모리 빈 공간을 정리하고,&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 살아남은 객체들을 한쪽으로 모아 재배치(compaction)해 메모리 파편화를 줄인다&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;u&gt;&lt;b&gt;.NET GC는 비용 절감을 위해 세대별로 나눠서 효율적으로 관리한다&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;[구현 요점] 일반적으로&amp;nbsp;젊은&amp;nbsp;객체는&amp;nbsp;빨리&amp;nbsp;수집되고,&amp;nbsp;오래&amp;nbsp;살아남은&amp;nbsp;객체는&amp;nbsp;높은&amp;nbsp;세대로&amp;nbsp;승격되어&amp;nbsp;더&amp;nbsp;오래&amp;nbsp;유지된다&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 93.6047%; height: 105px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; width: 20.1352%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;b&gt;이름&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 26.4061%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 30.9995%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;b&gt;대상&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 15.8442%; text-align: center; height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;b&gt;청소 빈도&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; width: 20.1352%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;b&gt; Generation0&lt;br /&gt;( = Gen0)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 26.4061%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;새로 만들어진 &amp;lsquo;젊은&amp;rsquo; 객체&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 30.9995%; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;단기 객체&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;(대부분&amp;nbsp;메서드&amp;nbsp;로컬&amp;nbsp;변수&amp;nbsp;등&amp;nbsp;임시&amp;nbsp;객체)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 15.8442%; text-align: center; height: 21px;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;가장 자주 수집&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; width: 20.1352%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;b&gt; Generation1&lt;br /&gt;&lt;b&gt;( = Gen1)&lt;/b&gt; &lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 26.4061%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;Gen0에서 살아남은 객체&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 30.9995%; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;중간 생존 객체&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 15.8442%; text-align: center; height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;중간 빈도로 수집&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; width: 20.1352%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;b&gt; Generation2&lt;br /&gt;&lt;b&gt;( = Gen2)&lt;/b&gt; &lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 26.4061%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt; Gen1에서 살아남은 객체&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 30.9995%; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;장기 생존 객체 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;(싱글턴, 앱 캐시 등 장기 리소스)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 15.8442%; text-align: center; height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;비용이 가장 크고 &lt;br /&gt;가장 늦게 수집&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; width: 20.1352%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;b&gt;LOH&lt;br /&gt;(Large Object Heap)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 26.4061%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;85,000바이트&lt;/span&gt; 이상 대규모&lt;span style=&quot;background-color: #f9f9f9; text-align: center;&quot;&gt;&amp;nbsp;객체&lt;/span&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 30.9995%; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt; Gen2에서 관리, &lt;br /&gt;단편화 발생 가능, &lt;br /&gt;기본 압축 안함 &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 15.8442%; text-align: center; height: 21px;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;Gen2 수집 시&lt;br /&gt;함께 수집&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;u&gt;&lt;b&gt;.NET GC에서 세대별 관리하는 동작 원리&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;(1) &lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;할당(Allocation)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;객체가 생성되면 메모리는 관리 힙(Managed Heap)에 할당되며, Gen0 영역에 배치된다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;대부분의 객체는 메서드 로컬 변수로 생성되어 짧게 사용된다&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;(2) &lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;GC 실행&lt;/span&gt;: &lt;span style=&quot;text-align: start;&quot;&gt;Mark &amp;rarr; Sweep &amp;rarr; Compact&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;[2-1] &lt;span style=&quot;background-color: #99cefa;&quot;&gt;실행되는 조건&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 89.186%; height: 284px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; width: 28.6047%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;b&gt;조건&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 51.7223%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; width: 28.6047%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;b&gt;Gen0/Gen1 힙이 꽉 참&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 51.7223%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;세대별로 설정된 최대 메모리를 모두 사용했을 때&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; width: 28.6047%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;b&gt;OS가 Low Memory 신호&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 51.7223%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;컴퓨터 메모리가 부족해졌을 때&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; width: 28.6047%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;b&gt;명시적 호출&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 51.7223%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;개발자가 GC.Collect()를 직접 호출한 경우&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; width: 28.6047%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;b&gt;Background GC 주기&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 51.7223%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;Gen2는 백그라운드 스레드가 주기적으로 검사하여 필요하면 작동&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 42px;&quot;&gt;
&lt;td style=&quot;height: 42px; width: 28.6047%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;b&gt;할당 속도가 예상보다 빠름&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;b&gt;&amp;rarr; Budget 초과 위험&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 42px; width: 51.7223%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;객체 생성 속도가 빨라 곧 메모리가 모자랄 것으로 예상될 때&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;[2-2] &lt;span style=&quot;background-color: #99cefa;&quot;&gt;Allocation Budget 원리&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;.NET은 각 세대별로 객체를 만들 수 있는 최대 용량(예산)을 정한다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;새 객체를 만들면 그만큼 공간을 차지해 예산이 줄어든다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;예산을 모두 쓰면 사용하지 않는 객체를 제거하여 공간을 비운다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;최근 객체가 만드는 속도가 너무 빨라서 곧 예산을 다 쓸 것 같으면, 미리 GC를 실행해 부족하지 않게 한다&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;[2-3] &lt;span style=&quot;background-color: #99cefa;&quot;&gt;GC 검사 순서&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;작은 영역부터 순서대로 점검(Gen0 &amp;rarr; Gen1)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;Gen0만 정리해도 충분하면 상위 세대는 건너뛰어 비용을 절감한다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;Gen2는 백그라운드에서 주기적으로 살펴보고 필요할 때 오래된 객체를 정리한다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1075&quot; data-origin-height=&quot;300&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QybBF/btsONK15AAj/JkwsSVYkMMerJS2FmHjVHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QybBF/btsONK15AAj/JkwsSVYkMMerJS2FmHjVHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QybBF/btsONK15AAj/JkwsSVYkMMerJS2FmHjVHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQybBF%2FbtsONK15AAj%2FJkwsSVYkMMerJS2FmHjVHK%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;1075&quot; height=&quot;300&quot; data-origin-width=&quot;1075&quot; data-origin-height=&quot;300&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;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;(3) &lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;승격(Promotion)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;Get0에서 살아남은 객체는 Get1으로 승격&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;Get1에서 살아남은 객체는 Get2로 승격&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;u&gt;&lt;b&gt;ChatGPT로 만들고, 간단하게 리펙토링한 GC 예제 코드&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1750675147579&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;namespace GarbageCollector
{
    // 실제 메모리에 할당된 객체를 표현하는 단위
    class GcObject
    {
        private static int _idCount = 1;
        
        private readonly List&amp;lt;GcObject&amp;gt; _references = new();     // 해당 객체가 참조하는 다른 객체 리스트, 참조하는 객체가 없으면 GC 대상이 된다

        private int _id;
        private bool _isMarked;                                 // 사용 여부 체크
        
        
        public GcObject()
        {
            _id = _idCount;
            _idCount++;
        }

        public int GetId() =&amp;gt; _id;
        
        public bool IsMarked()
        {
            return _isMarked;
        }
        
        public void Mark()
        {
            _isMarked = true;
        }
        
        public void Unmark()
        {
            _isMarked = false;
        }

        public List&amp;lt;GcObject&amp;gt; GetReferences()
        {
            return _references;
        }
        
        public void AddReferences(GcObject reference)
        {
            _references.Add(reference);
        }
        
        public void ClearReferences()
        {
            _references.Clear();
        }
    }

    class SimpleGc
    {
        private readonly List&amp;lt;GcObject&amp;gt; _roots = new();
        
        private List&amp;lt;GcObject&amp;gt; _heap = new();

        // 루트부터 연결된 객체들을 Mark
        void Mark()
        {
            // DFS(깊이 우선 탐색)으로 참조된 모든 객체까지 전부 검사 
            var stack = new Stack&amp;lt;GcObject&amp;gt;(_roots);
            while (stack.Count &amp;gt; 0)
            {
                var obj = stack.Pop();
                if (!obj.IsMarked())
                {
                    obj.Mark();
                    
                    foreach (var reference in obj.GetReferences())
                        stack.Push(reference);
                }
            }
        }
        
        // Mark 안 된 객체 제거, Sweep
        void Sweep()
        {
            _heap.RemoveAll(obj =&amp;gt;
            {
                // 힙에서 제거, true 리턴하면 제거됨
                if (!obj.IsMarked())
                {
                    Console.WriteLine($&quot;[SWEEP] Sweeping Obj#{obj.GetId()}&quot;);
                    return true;
                }

                // 힙에서 유지, false 리턴하면 유지
                obj.Unmark();        // 다음 GC를 위해 _isMarked값 초기화
                return false;
            });
        }

        // Compact
        void Compact()
        {
            // 진짜 Compact처럼 메모리 재배치하지는 않지만,
            // 리스트를 새로 만들어 정리된 것 같은 효과만 구현
            var newHeap = new List&amp;lt;GcObject&amp;gt;(_heap);
            _heap = newHeap;
            Console.WriteLine(&quot;[COMPACT] Heap compacted. Count: &quot; + _heap.Count);
        }

        // GC 한 사이클 실행
        public void RunGc()
        {
            Console.WriteLine(&quot;=== GC Start ===&quot;);
            Mark();
            Sweep();
            Compact();
            Console.WriteLine(&quot;=== GC End ===\n&quot;);
        }
        
        public void AddHeap(GcObject[] insertData)
        {
            _heap.AddRange(insertData);
        }

        public void SetRoot(GcObject root)
        {
            _roots.Add(root);
        }
    }

    internal class Program
    {
        static void Main(string[] args)
        {
            var gc = new SimpleGc();

            // 객체 생성
            var obj1 = new GcObject();
            var obj2 = new GcObject();
            var obj3 = new GcObject();
            
            // 참조 관계 생성
            // obj1 &amp;rarr; obj2 &amp;rarr; obj3
            obj1.AddReferences(obj2);
            obj2.AddReferences(obj3);
            
            gc.AddHeap(new [] { obj1, obj2, obj3 });

            // obj1만 Root에 등록 &amp;rarr; obj2, obj3는 obj1만 통해 접근됨
            gc.SetRoot(obj1);
            
            Console.WriteLine(&quot;[STEP 1] 모두 연결됨&quot;);
            gc.RunGc();
            
            // obj1에서 obj2로의 연결 끊기 &amp;rarr; obj2, obj3는 더 이상 접근 불가
            obj1.ClearReferences();
            Console.WriteLine(&quot;[STEP 2] obj1 &amp;rarr; obj2 연결 해제됨&quot;);
            gc.RunGc();
        }
    }
}&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;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;u&gt;&lt;b&gt;유니티의 GC&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;런타임(Mono,&amp;nbsp;IL2CPP)에&amp;nbsp;따라&amp;nbsp;동작&amp;nbsp;방식이&amp;nbsp;다르다&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;[Mono] &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;기본적으로 Boehm GC를 사용하며, 옵션으로 Incremental 모드를 켤 수 있다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;ㄴ &lt;span style=&quot;text-align: start; background-color: #9feec3;&quot;&gt;Boehm GC &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;세대별 구조(generational GC)와는 달리, 모든 힙 영역을 한꺼번에 탐색한다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;세대별 구조와 동일하게 Mark &amp;rarr; Sweep &amp;rarr; Compact 패턴으로 메모리 관리한다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;ㄴ &lt;span style=&quot;background-color: #9feec3;&quot;&gt;Incremental GC 옵션&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;GC 작업을 여러 프레임에 나누어 점진적으로 수행하여,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;코루틴처럼 작은 단위로 실행되어 일시적인 프레임 드롭을 줄인다&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;[IL2CPP] &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;AOT(Ahead Of Time) 컴파일 환경에 맞게 Boehm&amp;nbsp;GC를 내장하여 사용&lt;/span&gt;하며,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;Mono와 동일하게 &lt;span style=&quot;background-color: #c1bef9;&quot;&gt;기본적으로 Boehm GC 기반으로 작동&lt;/span&gt;한다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;Incremental GC는 IL2CPP에서는 직접 설정할 수 없고,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;플랫폼과 빌드 설정에 따라 내부에서 자동으로 Boehm GC가 최적화되어 동작&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;[정리하면]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;결국 Boehm GC를 사용하고, Incremental 모드를 사용할 수 있다는 점은 같다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;단, Mono는 &lt;span style=&quot;text-align: start;&quot;&gt;Incremental 모드를 선택할 수 있지만&lt;/span&gt; IL2CPP는 내부에서 자동으로 적용된다&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;u&gt;&lt;b&gt;AOT와 JIT 언급한 유니티 공식문서에서의 문구&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt; This&amp;nbsp;type&amp;nbsp;of&amp;nbsp;compilation,&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;in&amp;nbsp;which&amp;nbsp;Unity&amp;nbsp;compiles&amp;nbsp;code&amp;nbsp;specifically&amp;nbsp;for&amp;nbsp;a&amp;nbsp;target&amp;nbsp;platform&amp;nbsp;when&amp;nbsp;it&amp;nbsp;builds&amp;nbsp;the&amp;nbsp;native&amp;nbsp;binary,&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;is&amp;nbsp;called&amp;nbsp;ahead-of-time&amp;nbsp;(AOT)&amp;nbsp;compilation.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;The&amp;nbsp;Mono&amp;nbsp;backend&amp;nbsp;compiles&amp;nbsp;code&amp;nbsp;at&amp;nbsp;runtime,&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;with a technique called just-in-time compilation (JIT). &lt;/span&gt;&lt;/blockquote&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;* &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;u&gt;&lt;b&gt;자바의 GC&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;기본적으로 세대별 GC(generational GC) 구조를 사용한다&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;[기본구조]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;객체의 생존 기간에 따라 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;Young Generation, Old Generation, Permanent Generation으로 나눈다&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;ㄴ &lt;span style=&quot;background-color: #9feec3;&quot;&gt;Young Generation&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;새로 생성된 객체가 주로 할당&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;ㄴ &lt;span style=&quot;background-color: #9feec3;&quot;&gt;Old Generation&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Young Generation에서 오래 살아남은 객체가 이동&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;ㄴ &lt;span style=&quot;background-color: #9feec3;&quot;&gt;Permanent Generation(Java7까지) &amp;rarr; Metaspace(Java8부터)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;클래스 메타데이터 등을 저장&lt;/span&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;774&quot; data-origin-height=&quot;399&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TEhkz/btsOQG5FRvv/5GhKL9kzLD9uBQE2OtFa51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TEhkz/btsOQG5FRvv/5GhKL9kzLD9uBQE2OtFa51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TEhkz/btsOQG5FRvv/5GhKL9kzLD9uBQE2OtFa51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTEhkz%2FbtsOQG5FRvv%2F5GhKL9kzLD9uBQE2OtFa51%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;584&quot; height=&quot;301&quot; data-origin-width=&quot;774&quot; data-origin-height=&quot;399&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;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;Minor GC(eden + Survivor Space)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt; &amp;nbsp; &amp;nbsp;Young Generation(Eden + Survivor Space)만 대상으로 하는 부분 수집&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;짧고 자주 발생하며, &lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;살아남은 객체는 Survivor Space를 거쳐 Old Generation으로 이동&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;Old Generation이 차면 Major GC가 발생하고, 필요&amp;nbsp;시&amp;nbsp;힙&amp;nbsp;전체를&amp;nbsp;대상으로&amp;nbsp;Full&amp;nbsp;GC가&amp;nbsp;수행된다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;Major GC&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt; &amp;nbsp; &amp;nbsp;Old Generation을 대상으로 하는 큰 수집&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;필요 시&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;힙&amp;nbsp;전체를&amp;nbsp;대상으로&amp;nbsp;Full&amp;nbsp;GC가&amp;nbsp;수행된다&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;Full GC&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;JVM이 관리하는 모든 힙 전체(Young + Old + Metaspace)를 수집&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;Minor, Major보다 훨씬 무겁고 Stop-The-World(전체 멈춤) 시간도 길 수 있다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;성능 문제의 주 원인으로 꼽히므로 자주 발생하지 않도록 튜닝하는 게 중요하다&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;[HotSpot JVM이란]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;Oracle이 만든 대표적인 Java Virtual Machine(JVM) 구현체이다&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;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;[대표 GC 알고리즘] &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;HotSpot JVM에서는 여러 GC 알고리즘을 선택할 수 있다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;(1) Serial GC &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: 단일 스레드로 작동하는 단순한 GC&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;(2) Parallel GC&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: 여러 스레드로 Young Generation을 병렬로 수집&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;(3) CMS GC (Concurrent Mark-Sweep)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: Old Generation을 애플리케이션과 동시에 수집하여 Stop-The-World(STW) 시간을 줄임&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;(4) G1 GC (Garbage First)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: 힙을 작은 Region으로 나누고 우선순위가 높은 영역부터 수집&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp;(5) ZGC, Shenandoah GC&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: 매우 짧은 지연시간을 목표로 하는 최신 GC,&amp;nbsp;Java&amp;nbsp;11+에서&amp;nbsp;사용&amp;nbsp;가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT공부/개념</category>
      <author>shine94</author>
      <guid isPermaLink="true">https://shine94.tistory.com/459</guid>
      <comments>https://shine94.tistory.com/459#entry459comment</comments>
      <pubDate>Wed, 25 Jun 2025 15:20:25 +0900</pubDate>
    </item>
  </channel>
</rss>