<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>로드 투 게임개발</title>
    <link>https://swudimi22.tistory.com/</link>
    <description>제가 만든, 만들고 싶은 게임을 소개하는 블로그입니다.</description>
    <language>ko</language>
    <pubDate>Fri, 17 Apr 2026 00:31:53 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>suachosuacho</managingEditor>
    <image>
      <title>로드 투 게임개발</title>
      <url>https://tistory1.daumcdn.net/tistory/5980210/attach/80d69baf89684a03b4eec3750acf77fd</url>
      <link>https://swudimi22.tistory.com</link>
    </image>
    <item>
      <title>선택 정렬이란 말이죠</title>
      <link>https://swudimi22.tistory.com/19</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;선택 정렬(Selection Sorting)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삽입 정렬의 많은 데이터 이동량을 보완해 줄 정렬 알고리즘이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 번에 하나의 자료를 &lt;b&gt;선택&lt;/b&gt;해 해당 위치에 배정하는 정렬 방식을 사용한다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게임에 필요한 카드가 모두 손에 있는 상황에서, 카드를 크기 순으로 정렬하려 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 카드를 전부 살펴보고 가장 큰 값을 가장 오른쪽에 배치한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 그 다음 큰 값을 그 다음 오른쪽에 배치한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 과정을 모든 카드가 정렬될 때까지 수행한다. (반대의 경우는 작은 값부터 왼 쪽에 정렬한다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 선택 정렬의 수행 과정은 데이터 A[i], ..., A[n] 중 가장 작은 키 값을 갖는 데이터를 선택해 A[i]과 교환한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 단계를 계속하면 최종적으로 정렬된 리스트를 얻을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 방법에선 최소(최대)의 데이터를 반복적으로 선택하므로 선택 정렬이라는 이름이 부여되었다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;1. 최대값(최소값) 찾아&lt;br /&gt;2. 찾은 데이터와 맨 뒤(앞)에 데이터와 바꿈&lt;br /&gt;3. 최대값(최소값) 찾아&lt;br /&gt;4. 찾은 데이터와 맨 뒤(앞)에서 두 번째 데이터와 바꿈&lt;br /&gt;...&lt;br /&gt;n. 데이터 정렬 완료&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;작성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 입력 데이터 크기가 n인 경우에 선택 정렬 알고리즘을 구현하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1부터 n-1까지의 모든 i에 대하여 A[i], ..., A[n] 중의 최소 데이터와 A[i]를 교환한다&lt;/p&gt;
&lt;pre id=&quot;code_1729007871608&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void selction_sort()
{
	int i, j, min;
    int temp;
    
    for (int i = 0; i &amp;lt; SIZE; i++)
    {
    	// 1. 최소값 찾기
        min = i;
        
        for (int j = i+1; j &amp;lt; SIZE; j++)
        {
        	if (L[j] &amp;lt; L[min]) min = j;
        }
        
        // 2. L[i], L[min] 교환
        temp = L[min];
        L[min] = L[i];
        L[i] = temp;
    }
}&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;인덱스 i가 입력 데이터를 따라 왼쪽에서 오른쪽으로 이동할 때, 인덱스 i의 왼쪽에 위치한 데이터들은 완전히 정렬된 상태가 된다.&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;h3 data-ke-size=&quot;size23&quot;&gt;특징&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 번 선택되어 이동한 자료는 재이동 없음 (삽입 정렬의 단점 보완)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수행 시간(On^2): 최상/최악/평균 모두 동일&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;비교 횟수&lt;/b&gt;&lt;br /&gt;입력 데이터에서 최소값을 찾기 위해 (n-1)번 원소 값을 비교하게 된다.&lt;br /&gt;따라서 총 비교 횟수는 (n-1) + (n-2) + ... + 1 = n(n-1)/2이며, 비교의 수행 시간은 O(n^2)이 된다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <category>정렬의 정렬</category>
      <author>suachosuacho</author>
      <guid isPermaLink="true">https://swudimi22.tistory.com/19</guid>
      <comments>https://swudimi22.tistory.com/19#entry19comment</comments>
      <pubDate>Wed, 16 Oct 2024 00:59:18 +0900</pubDate>
    </item>
    <item>
      <title>[UI] 스크롤뷰(Scroll View)에 관하여</title>
      <link>https://swudimi22.tistory.com/18</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;UI를 구성할 때, 스크롤바를 이용해 영역이 넘어가는 내용을 다루는 스크롤뷰를 살펴보자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;구성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Hierarchy 창에서 Scroll View 컴포넌트를 생성한다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;422&quot; data-origin-height=&quot;185&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/E1sIO/btsJ4dV0az2/yQo2WdJzYdnS2qCu7vhCW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/E1sIO/btsJ4dV0az2/yQo2WdJzYdnS2qCu7vhCW1/img.png&quot; data-alt=&quot;Scroll View 오브젝트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/E1sIO/btsJ4dV0az2/yQo2WdJzYdnS2qCu7vhCW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FE1sIO%2FbtsJ4dV0az2%2FyQo2WdJzYdnS2qCu7vhCW1%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;422&quot; height=&quot;185&quot; data-origin-width=&quot;422&quot; data-origin-height=&quot;185&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Scroll View 오브젝트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 77.0931%; height: 298px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.6209%;&quot;&gt;Viewport&lt;/td&gt;
&lt;td style=&quot;width: 96.3442%;&quot;&gt;표시하고자 하는 컨텐츠가 보여질 영역&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.6209%;&quot;&gt;Content&lt;/td&gt;
&lt;td style=&quot;width: 96.3442%;&quot;&gt;표시하고자 하는 내용물들이 자식으로 들어가는 게임 오브젝트&lt;br /&gt;스크롤링 되는 영역은 Content 영역의 크기에 따라 정해짐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.6209%;&quot;&gt;Scrollbar Horizontal&lt;/td&gt;
&lt;td style=&quot;width: 96.3442%;&quot;&gt;수평 스크롤바&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.6209%;&quot;&gt;Sliding Area&lt;/td&gt;
&lt;td style=&quot;width: 96.3442%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.6209%;&quot;&gt;Handle&lt;/td&gt;
&lt;td style=&quot;width: 96.3442%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.6209%;&quot;&gt;Scrollbar Vertical&lt;/td&gt;
&lt;td style=&quot;width: 96.3442%;&quot;&gt;수직 스크롤바&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.6209%;&quot;&gt;Sliding Area&lt;/td&gt;
&lt;td style=&quot;width: 96.3442%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.6209%;&quot;&gt;Handle&lt;/td&gt;
&lt;td style=&quot;width: 96.3442%;&quot;&gt;&amp;nbsp;&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;382&quot; data-origin-height=&quot;561&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wBEaa/btsJ3YR8vdJ/TyKVQaFyyLcdjSBFfgLTU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wBEaa/btsJ3YR8vdJ/TyKVQaFyyLcdjSBFfgLTU0/img.png&quot; data-alt=&quot;Scroll View - Scroll Rect&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wBEaa/btsJ3YR8vdJ/TyKVQaFyyLcdjSBFfgLTU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwBEaa%2FbtsJ3YR8vdJ%2FTyKVQaFyyLcdjSBFfgLTU0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;382&quot; height=&quot;561&quot; data-origin-width=&quot;382&quot; data-origin-height=&quot;561&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Scroll View - Scroll Rect&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 78.6032%; height: 85px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20.4005%; height: 17px;&quot;&gt;Horizontal&lt;br /&gt;Vertical&lt;/td&gt;
&lt;td style=&quot;width: 121.18%; height: 17px;&quot;&gt;수평/수직 방향만 스크롤 허용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20.4005%; height: 17px;&quot;&gt;Movement Type&lt;/td&gt;
&lt;td style=&quot;width: 121.18%; height: 17px;&quot;&gt;Content 영역이 Scroll View 영역을 벗어났을 때, 어떻게 동작할 지를 결정&lt;br /&gt;(Unrestricted: 아무 동작 x / Elastic: 탄성있게 복귀 / Clamped: 영역 제한)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20.4005%; height: 17px;&quot;&gt;Inertia&lt;/td&gt;
&lt;td style=&quot;width: 121.18%; height: 17px;&quot;&gt;스크롤의 관성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20.4005%; height: 17px;&quot;&gt;Horizontal&lt;br /&gt;Vertical Scrollbar&lt;/td&gt;
&lt;td style=&quot;width: 121.18%; height: 17px;&quot;&gt;스크롤바 속성, 보이게/안보이게 설정 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20.4005%; height: 17px;&quot;&gt;OnValueCanged (Vector2)&lt;/td&gt;
&lt;td style=&quot;width: 121.18%; height: 17px;&quot;&gt;스크롤뷰에서 스크롤링 되었을 때, 콜백을 받을 이벤트 등록&lt;br /&gt;스크롤이 될 때마다, 현재 스크롤바의 위치를 매개변수로 받게 됨&lt;br /&gt;(ex. 스크롤바의 끝에 도달 시 새 아이템 등록에 사용)&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Content Size Fitter 대신 스크립팅해보자&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Scroll View의 기능이 담긴 컴포넌트의 이름은 ScrollRect이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(스크립팅 시 해당 이름을 GetComponent 해오자)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만들어 둔 스크롤뷰에 컴포넌트들을 추가하기 위해, Canvas에 버튼 오브젝트를 추가하고 클릭 이벤트에 AddNewUIObject 함수를 등록해준다.&lt;/p&gt;
&lt;pre id=&quot;code_1728896264250&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using UnityEngine.UI ;

public class ScrollViewController : MonoBehaviour
{
    private ScrollRect scrollRect;

    public float space = 50;

    public GameObject uiPrefab;

    public List&amp;lt;RectTransform&amp;gt; uiObjects = new List&amp;lt;RectTransform&amp;gt;();

    void Start()
    {
        scrollRect = GetComponent&amp;lt;ScrollRect&amp;gt;();
    }

    public void AddNewUIObject()
    {
        // ui 오브젝트 생성 및 위치 설정
        var newUI = Instantiate(uiPrefab, scrollRect.content).GetComponent&amp;lt;RectTransform&amp;gt;();
        uiObjects.Add(newUI);

        float y = 0f;
        for (int i = 0; i &amp;lt; uiObjects.Count; i++)
        {
            uiObjects[i].anchoredPosition = new Vector2(0f, -y);
            y += uiObjects[i].sizeDelta.y + space;
        }

        // 설정된 오브젝트 위치 기반 Content 크기 조정
        scrollRect.content.sizeDelta = new Vector2(scrollRect.content.sizeDelta.x, 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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;적당한 여백을 두고 스크롤뷰 내 내용들이 추가된다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크롤뷰.gif&quot; data-origin-width=&quot;426&quot; data-origin-height=&quot;240&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qjwy1/btsJ42MWUEQ/m8Jf3yJwY1SaryP1W5XFe0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qjwy1/btsJ42MWUEQ/m8Jf3yJwY1SaryP1W5XFe0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qjwy1/btsJ42MWUEQ/m8Jf3yJwY1SaryP1W5XFe0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/qjwy1/btsJ42MWUEQ/m8Jf3yJwY1SaryP1W5XFe0/img.gif&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;426&quot; height=&quot;240&quot; data-filename=&quot;스크롤뷰.gif&quot; data-origin-width=&quot;426&quot; data-origin-height=&quot;240&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Unity</category>
      <category>UI</category>
      <author>suachosuacho</author>
      <guid isPermaLink="true">https://swudimi22.tistory.com/18</guid>
      <comments>https://swudimi22.tistory.com/18#entry18comment</comments>
      <pubDate>Mon, 14 Oct 2024 18:06:31 +0900</pubDate>
    </item>
    <item>
      <title>삽입 정렬..이란 말이죠...</title>
      <link>https://swudimi22.tistory.com/17</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;삽입 정렬(Insertion Sorting)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리되지 않은 리스트(list)의 데이터 하나를 정렬 순서에 맞게 삽입하는 방법이며&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맨 처음 한 개의 데이터가 정렬되어 있는 것으로 간주하여 수행된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;손에 이미 정렬된 카드를 들고, 새 카드를 적절한 위치에 삽입하는 카드 놀이와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;특징&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 알고리즘은 i번째 데이터 A[i]를 이미 정렬된 배열 A[1], A[2], ... , A[i-1]의 알맞은 위치를 찾아 '삽입'하는 방식으로 정렬을 수행한다. (하나씩 삽입하며 정렬)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 여기서 앞의 i-1번째 데이터는 이미 정렬된 상태이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 올바른 위치를 찾기 위해 수행되는 연산은 A[1], A[2], ... , A[i-1]들을 A[i]와 비교하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비교는 A[1]부터 시작하는 경우와 A[i-1]부터 시작하는 경우로 나뉘어진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(우린 A[i-1]부터 비교해보자)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 삽입 과정을 계속하고 나면 배열 A[1], A[2], ... , A[i-1]은 정렬된 리스트가 된다. (정렬 끝!-&amp;gt;취향껏 데이터 쓰면 됨)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삽입 정렬 알고리즘은 다음과 같으며 &lt;b&gt;2부터 n까지의 모든 i에 대하여 A[i]는 A[1]에서 A[i-1] 내의 적절한 위치&lt;/b&gt;에&lt;b&gt; 삽입&lt;/b&gt;된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(위 내용이 코드 쓸 때 흐름을 이해하기 좋다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728586970655&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 원소 이동: temp = A[i], A[j] = temp
// 원소 비교(주요 연산): A[j-1] &amp;gt; temp

void insertion(int A[], int n)
{
	int i, j;
    int temp;
    
    for(int = 1; i &amp;lt;= n; i++)
    {
    	temp = A[i];
        j = i;
        
        while(j &amp;gt; 0 &amp;amp;&amp;amp; A[j-1] &amp;gt; temp)
        {
        	A[j] = A[j-1];
            j--;
        }
        A[j] = temp;
    }
}&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;n을 전체 데이터 수라고 할 때, 삽입 정렬 알고리즘은 수행 시간이 O(n^2)이며, 여분의 메모리가 일정한 크기 만큼만 요구되기 때문에 적절한 알고리즘이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 정렬을 위해 기본적으로 키의 비교가 기본 연산이 되는 경우의 알고리즘들은 성능 차이가 내측 루프의 길이나 입력의 특수성에 의해 의존한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;원소 비교 횟수&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삽입 정렬의 연산 수행 시간은 주요 연산의 수행 시간으로 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삽입 정렬의 주요 연산은 원소 비교 연산이므로, 연산 비교 회수를 분석해 수행시간을 O(n)으로 나타내보자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최악의 경우이던, 최상의 경우이던 원소 비교는 이뤄진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 그게 1번으로 끝나냐..(n-1)번까지 비교해야 끝나냐에 따라 달렸지만은...(while문에서 뺑뺑이 도는 시점)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;최악의 경우&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력 데이터 (n-1)개가 역으로 정렬되어 있는 경우&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;1+2+...+(n-1) = n(n-1)/2 = &lt;b&gt;O(n^2)&lt;/b&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1275&quot; data-origin-height=&quot;1076&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pbbcV/btsJ7O1xA5R/0uoKGjx5k4jWfhG6wGaxvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pbbcV/btsJ7O1xA5R/0uoKGjx5k4jWfhG6wGaxvK/img.png&quot; data-alt=&quot;증명&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pbbcV/btsJ7O1xA5R/0uoKGjx5k4jWfhG6wGaxvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpbbcV%2FbtsJ7O1xA5R%2F0uoKGjx5k4jWfhG6wGaxvK%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;395&quot; data-origin-width=&quot;1275&quot; data-origin-height=&quot;1076&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;증명&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;최상의 경우&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력 데이터가 정렬하고자 하는 순서대로 배열되어 있는 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 비교 횟수: (n-1)번&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수행 복잡도: O(n)&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;n-1 = &lt;b&gt;O(n) &lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;평균의 경우&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;O((m+1)n)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- m: 순서에 벗어난 데이터 개수 (m=0일 경우, 정렬된 데이터를 의미하므로 최상의 경우라 할 수 있다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;O(n^2)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 최악의 경우 알고리즘 복잡도는 O(n^2)이 되며 평균의 경우의 알고리즘 복잡도 역시 O(n^2)이 된다&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;O(n^2)&lt;/b&gt; or &lt;b&gt;O((m+1)n)&lt;/b&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;원소 비교 횟수 vs 원소 이동 횟수 분석&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;971&quot; data-origin-height=&quot;185&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cVp7q0/btsJ7ezzhFs/KQkV2TUPCQhBEyBtRvOQuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cVp7q0/btsJ7ezzhFs/KQkV2TUPCQhBEyBtRvOQuk/img.png&quot; data-alt=&quot;두 연산 모두 O(n^2)의 작업량을 가진다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cVp7q0/btsJ7ezzhFs/KQkV2TUPCQhBEyBtRvOQuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcVp7q0%2FbtsJ7ezzhFs%2FKQkV2TUPCQhBEyBtRvOQuk%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;971&quot; height=&quot;185&quot; data-origin-width=&quot;971&quot; data-origin-height=&quot;185&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;두 연산 모두 O(n^2)의 작업량을 가진다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;장단점&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순서가 틀린 자료(m)가 적을 때 유리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;20~25개 이하 정렬에 효과적&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이동량 증가(앞서 이동한 데이터들이 또 이동하는 경우 o)&lt;/p&gt;</description>
      <category>알고리즘</category>
      <category>정렬의 정렬</category>
      <author>suachosuacho</author>
      <guid isPermaLink="true">https://swudimi22.tistory.com/17</guid>
      <comments>https://swudimi22.tistory.com/17#entry17comment</comments>
      <pubDate>Fri, 11 Oct 2024 04:40:39 +0900</pubDate>
    </item>
    <item>
      <title>정렬..이란 말이죠...</title>
      <link>https://swudimi22.tistory.com/16</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;정렬&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정렬이란 주어진 데이터를 원하는 순서대로 재배열하는 연산이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜 정렬을 하느냐. 왜 가만있는 데이터를 재배열하느냐.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 1000개의 데이터가 있을 때 정렬되지 않은 데이터 집단은 특정 데이터를 찾을 때 일일히 샅샅히 순차적으로 뒤져야 할 것이다. 꽤 중노동의 일이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 데이터가 예쁘게 정렬된 집단인 경우 여러 탐색 방법을 통해 빨리 해당 데이터를 찾을 수 있을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터를 원하는대로 이용하기 쉽게하기 위해, 정렬이 필요한 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정렬 시 요구되는 탐색 방법들을 알맞게, 똑똑하게 사용하는 것이 개발자의 역량이라 생각한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;데이터 정렬 방법: 2가지&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;내부 정렬(internal sorting)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정렬한 데이터 집단 크기가 적당해 주기억 장치에서 정렬이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삽입 정렬, 선택 정렬, 버블 정렬, 쉘 정렬, 퀵 정렬, 2-원 합병 정렬, 히프 정렬, 기수 정렬 등&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(교수님 왈, 히프 정렬은 가장 완벽한 정렬 알고리즘이라 하셨음)(왜인지는 힙 정렬 배울 때 알아보자)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;외부 정렬(external sorting)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 집단이 매우 클 때 보조 기억 장치(디스크, 자기 테이프 등)를 이용해 정렬하는 벙법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자원 2-원 합병, 균형 2-원 합병, 균형 2-원 합병, 균형 m-원 합병, 다단계 합병 등 주로 합병에 대해 설명한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;내부 정렬&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력 자료: 입력 데이터는 대부분 배열에 저장(일부는 연결리스트 사용)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A[1], A[2], ... , A[n]을 입력으로 봄 (간혹, 경우에 따라 A[0]를 포함하기도 함)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <category>정렬의 정렬</category>
      <author>suachosuacho</author>
      <guid isPermaLink="true">https://swudimi22.tistory.com/16</guid>
      <comments>https://swudimi22.tistory.com/16#entry16comment</comments>
      <pubDate>Fri, 11 Oct 2024 03:27:57 +0900</pubDate>
    </item>
    <item>
      <title>알고리즘이란..말이죠...</title>
      <link>https://swudimi22.tistory.com/15</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;내가 생각한 알고리즘을 배우는 이유는 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 특정 기능을 구현할 때 어떤 알고리즘을 선택할 것인가에 대한 안목을 높이기 위해서이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(지금의 나로썬..높이기 보다 기본적인 안목을 기르기 위해에 가까운 듯)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <author>suachosuacho</author>
      <guid isPermaLink="true">https://swudimi22.tistory.com/15</guid>
      <comments>https://swudimi22.tistory.com/15#entry15comment</comments>
      <pubDate>Fri, 11 Oct 2024 02:46:48 +0900</pubDate>
    </item>
    <item>
      <title>[혼공컴운] 2주차 | CPU</title>
      <link>https://swudimi22.tistory.com/14</link>
      <description>&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;과제&lt;/b&gt;&lt;br /&gt;p125 확인 문제 2번&lt;br /&gt;p155 확인 문제 4번&lt;br /&gt;&lt;br /&gt;&lt;b&gt;개념 정리&lt;/b&gt;&lt;br /&gt;04 CPU의 작동 원리&lt;br /&gt;05 CPU 성능 향상 기법&lt;/blockquote&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;과제&lt;/h2&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot;&gt;p125 확인 문제 2번&lt;/span&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;( 플래스 레지스터 ): 연산 결과 혹은 CPU 상태에 대한 부가 정보를 저장하는 레지스터&lt;br /&gt;( 프로그램 카운터 ): 메모리에서 가져올 명령어의 주소를 저장하는 레지스터터&lt;br /&gt;( 범용 레지스터 ): 데이터와 주소를 모두 저장할 수 있는 레지스터&lt;br /&gt;( 명령어 레지스터 ): 해석할 명령어를 저장하는 레지스터&lt;/blockquote&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot;&gt;p155 확인 문제 4번&lt;/span&gt;&lt;/h4&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;코어&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style3&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;04 CPU의 작동 원리&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;0. CPU&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 메모리에 저장된 명령어를 읽기 / 해석 / 실행하는 장치&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;CPU 구성 부품&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- ALU(산술논리연산장치): 계산 담당&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 제어장치: 명령어를 읽어 들이고 해석함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 레지스터: 임시 저장 장치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. ALU&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CPU의 부품 1: 계산하는 부품&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ALU의 계산에 필요한 필요조건&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1) 피연산자, (2) 수행할 연산&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 연산 과정이 그러하듯, ALU의 연산에도 피연산자와 수행할 연산이 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ALU의 연산 수행 로직&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ALU는 레지스터에게 피연산자를 받고, 제어장치로 부터 제어 신호를 받아 산술/논리 연산 등 다양한 연산을 수행함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(제어 신호: 수행할 연산을 알려줌)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ALU는 연산한 결과값과 플래그를 내보낸다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-07-14 183643.png&quot; data-origin-width=&quot;890&quot; data-origin-height=&quot;470&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEWmbQ/btsIzeVmKHw/yXZYJuKUPDdD8wdpT5MKl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEWmbQ/btsIzeVmKHw/yXZYJuKUPDdD8wdpT5MKl0/img.png&quot; data-alt=&quot;ALU의 연산 수행 로직&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEWmbQ/btsIzeVmKHw/yXZYJuKUPDdD8wdpT5MKl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEWmbQ%2FbtsIzeVmKHw%2FyXZYJuKUPDdD8wdpT5MKl0%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;724&quot; height=&quot;470&quot; data-filename=&quot;스크린샷 2024-07-14 183643.png&quot; data-origin-width=&quot;890&quot; data-origin-height=&quot;470&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ALU의 연산 수행 로직&lt;/figcaption&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;b&gt;ALU가 내보내는 정보&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1) 결과값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;형식: 숫자 ot 문자 or 메모리 주소&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;연산 결과 저장 위치: &lt;i&gt;레지스터&lt;/i&gt;(일시적으로 저장됨)&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연산한 결과값을 메모리가 아닌 레지스터에 임시 저장하는 이유!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CPU가 메모리에 접근하는 속도보다 레지스터에 접근하는 속도가 더 빨라서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(매 연산마다 결과값을 메모리에 저장하면 메모리에 더더욱 많이 접근하게됨 &amp;rarr; 프로그램 실행 속도 저하)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2) 플래그: ALU 연산(결과값)에 대한 추가적인 상태 정보&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(CPU가 프로그램을 실행하는 도중 반드시 기억해야 하는 참고 정보임)&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;i&gt;플래그 레지스터&lt;/i&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 93.3721%; height: 123px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style3&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 24.031%; text-align: center; height: 19px;&quot;&gt;플래그 종류&lt;/td&gt;
&lt;td style=&quot;width: 32.6357%; text-align: center; height: 19px;&quot;&gt;역할&lt;/td&gt;
&lt;td style=&quot;width: 36.7053%; text-align: center; height: 19px;&quot;&gt;예시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 24.031%; height: 17px; text-align: center;&quot;&gt;부호 플래그&lt;/td&gt;
&lt;td style=&quot;width: 32.6357%; height: 17px;&quot;&gt;연산 결과의 부호를 나타냄&lt;/td&gt;
&lt;td style=&quot;width: 36.7053%; height: 17px;&quot;&gt;1: 음수&lt;br /&gt;0: 양수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 24.031%; height: 17px; text-align: center;&quot;&gt;제로 플래그&lt;/td&gt;
&lt;td style=&quot;width: 32.6357%; height: 17px;&quot;&gt;연산 결과가 0인지 여부&lt;/td&gt;
&lt;td style=&quot;width: 36.7053%; height: 17px;&quot;&gt;1: 연산 결과가 0&lt;br /&gt;0: 결과가 0이 아님&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 24.031%; height: 17px; text-align: center;&quot;&gt;캐리 플래그&lt;/td&gt;
&lt;td style=&quot;width: 32.6357%; height: 17px;&quot;&gt;올림수나 빌림수의 발생 여부&lt;/td&gt;
&lt;td style=&quot;width: 36.7053%; height: 17px;&quot;&gt;1: 올림수 or 빌림수가 발생했음&lt;br /&gt;0: 발생하지 않았음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 24.031%; height: 17px; text-align: center;&quot;&gt;오버플로우 플래그&lt;/td&gt;
&lt;td style=&quot;width: 32.6357%; height: 17px;&quot;&gt;오버플로우 발생 여부&lt;/td&gt;
&lt;td style=&quot;width: 36.7053%; height: 17px;&quot;&gt;1: 오버플로우 발생&lt;br /&gt;0: 발생하지 않았음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 24.031%; height: 17px; text-align: center;&quot;&gt;인터럽트 플래그&lt;/td&gt;
&lt;td style=&quot;width: 32.6357%; height: 17px;&quot;&gt;인터럽트가 가능한지 여부&lt;/td&gt;
&lt;td style=&quot;width: 36.7053%; height: 17px;&quot;&gt;1: 인터럽트 가능&lt;br /&gt;0: 불가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 24.031%; text-align: center; height: 19px;&quot;&gt;슈퍼바이저 플래그&lt;/td&gt;
&lt;td style=&quot;width: 32.6357%; height: 19px;&quot;&gt;커널 모드로 실행중인지, 사용자 모드로 실행 중인지 여부&lt;/td&gt;
&lt;td style=&quot;width: 36.7053%; height: 19px;&quot;&gt;1: 커널 모드로 실행 중임&lt;br /&gt;0: 사용자 모드로 실행 중임&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연산 수행 직후, 플래그 레지스터의 상태값으로 결과값을 유추할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;974&quot; data-origin-height=&quot;229&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zRx12/btsIzquyhTZ/ISEKsgyVHhkvkH85i9v3BK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zRx12/btsIzquyhTZ/ISEKsgyVHhkvkH85i9v3BK/img.png&quot; data-alt=&quot;결과값은 음수이며 0이 아니다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zRx12/btsIzquyhTZ/ISEKsgyVHhkvkH85i9v3BK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzRx12%2FbtsIzquyhTZ%2FISEKsgyVHhkvkH85i9v3BK%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;442&quot; height=&quot;104&quot; data-origin-width=&quot;974&quot; data-origin-height=&quot;229&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;결과값은 음수이며 0이 아니다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 제어장치&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;# 2.1 제어장치가 받는 정보들&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 클럭 신호&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 해석해야 할 명령어(in 명령어 레지스터)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 플래그값(in 플래그 레지스터)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 제어버스로 전달된 제어 신호&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1141&quot; data-origin-height=&quot;637&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tZ6sU/btsIyBRaj95/wqawN8GnN5Dy6Z2cIkIfNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tZ6sU/btsIyBRaj95/wqawN8GnN5Dy6Z2cIkIfNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tZ6sU/btsIyBRaj95/wqawN8GnN5Dy6Z2cIkIfNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtZ6sU%2FbtsIyBRaj95%2FwqawN8GnN5Dy6Z2cIkIfNk%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;706&quot; height=&quot;394&quot; data-origin-width=&quot;1141&quot; data-origin-height=&quot;637&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;클럭&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴퓨터의 모든 부품의 시간 단위&lt;br /&gt;컴퓨터의 모든 부품은 클럭 신호에 맞춰 작동한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(but 주기는 각자 다름. 아래 그림처럼 하나의 명령어가 여러 클럭에 걸쳐 실행될 수 있다)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;142&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lIzND/btsIz8tpk5L/mIHcxLSdW7JK4uuxqA4tZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lIzND/btsIz8tpk5L/mIHcxLSdW7JK4uuxqA4tZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lIzND/btsIz8tpk5L/mIHcxLSdW7JK4uuxqA4tZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlIzND%2FbtsIz8tpk5L%2FmIHcxLSdW7JK4uuxqA4tZ1%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;462&quot; height=&quot;114&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;142&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;h4 data-ke-size=&quot;size20&quot;&gt;명령어 레지스터&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CPU가 해석해야하는 명령어들이 저장되어 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제어장치는 명령어 레지스터로부터 해석할 명령어를 받아 해석한 뒤, 제어신호를 발생시킴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제어신호 발생 &amp;rarr; to 컴퓨터 부품들(각 부품들이 수행할 내용을 알려줌)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;플래그값&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제어장치는 연산에 대한 추가 정보가 담긴 플래그값 또한 받아들인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제어신호 발생시킬 때 플래그값을 참고한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;제어 신호&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제어신호는 CPU뿐 아니라 입출력장치를 비롯한 CPU 외부장치도 발생시킬 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제어장치는 제어 버스를 통해 외부에서 전달된 제어 신호도 받아들인다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;# 2.2 제어장치가 내보내는 정보들&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;① CPU 외부에 전달하는 제어 신호&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;② CPU 내부에 전달하는 제어 신호&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;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;CPU 외부에 전달하는 제어 신호&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;제어 버스로 제어 신호를 내보냄&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.9927%; height: 67px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;width: 28.9535%; height: 33px;&quot; rowspan=&quot;2&quot;&gt;CPU 외부에 전달하는 제어 신호&lt;/td&gt;
&lt;td style=&quot;width: 29.494%; height: 16px;&quot;&gt;&lt;i&gt;&lt;b&gt;메모리 &lt;/b&gt;&lt;/i&gt;에 전달하는 제어 신호&lt;/td&gt;
&lt;td style=&quot;width: 54.8061%; height: 16px;&quot;&gt;메모리에 저장된 값 읽기 / 새로운 값 쓰기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 29.494%; height: 17px;&quot;&gt;&lt;i&gt;&lt;b&gt;입출력장치 &lt;/b&gt;&lt;/i&gt;에 전달하는 제어 신호&lt;/td&gt;
&lt;td style=&quot;width: 54.8061%; height: 17px;&quot;&gt;입출력장치에 저장된 값 읽기 / 새로운 값 쓰기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 28.9535%; height: 34px;&quot; rowspan=&quot;2&quot;&gt;CPU 내부에 전달하는 제어 신호&lt;/td&gt;
&lt;td style=&quot;width: 29.494%; height: 17px;&quot;&gt;&lt;i&gt;&lt;b&gt;ALU &lt;/b&gt;&lt;/i&gt;에 전달하는 제어 신호&lt;/td&gt;
&lt;td style=&quot;width: 54.8061%; height: 17px;&quot;&gt;ALU에 수행할 연산을 지시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 29.494%; height: 17px;&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;b&gt;레지스터 &lt;/b&gt;&lt;/i&gt;에 전달하는 제어 신호&lt;/td&gt;
&lt;td style=&quot;width: 54.8061%; height: 17px;&quot;&gt;레지스터 간 데이터를 이동시키거나,&lt;br /&gt;레지스터에 저장된 명령어를 해석&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2. 레지스터&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;프로그램 속 명령어와 데이터는 실행 전후로 반드시 레지스터에 저장된다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 레지스터 값 관찰을 통해 프로그램 실행 시 CPU 내에서 어떤 명령어가 어떻게 수행되는지 알 수 있다.&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>혼공_컴구+운체</category>
      <author>suachosuacho</author>
      <guid isPermaLink="true">https://swudimi22.tistory.com/14</guid>
      <comments>https://swudimi22.tistory.com/14#entry14comment</comments>
      <pubDate>Sun, 14 Jul 2024 18:01:54 +0900</pubDate>
    </item>
    <item>
      <title>Scriptable Object를 사용한 플레이어 위치 제어</title>
      <link>https://swudimi22.tistory.com/13</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;기본 로직&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 플레이어의 위치를 저장할 ScriptableObject를 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. PlayerController 스크립트에서 플레이어의 위치를 ScriptableObejct에 저장하고, 씬 전환 후 해당 위치로 이동시킨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 해당 기능을 작동시키는 트리거를 설정한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;참고문헌&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Unity에서도 장면 간 데이터를 유지하는 방법으로 Scriptable Object를 사용하는것을 제안한다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유니티 내 커뮤니티 게시판에서의 대화를 참고했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;플레이어 위치 뿐 아니라 상태값, 즉 체력 등 또한 관리할 수 있을 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://forum.unity.com/threads/scriptable-objects-pattern-for-players-position.1008790/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://forum.unity.com/threads/scriptable-objects-pattern-for-players-position.1008790/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1720898220369&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignLeft&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Scriptable Objects pattern for player's position&quot; data-og-description=&quot;I've just watched the &amp;quot;Game Architecture with Scriptable Objects&amp;quot; Unite talk 2017. In my game, a lot of time I just need the position of the player so...&quot; data-og-host=&quot;forum.unity.com&quot; data-og-source-url=&quot;https://forum.unity.com/threads/scriptable-objects-pattern-for-players-position.1008790/&quot; data-og-url=&quot;https://forum.unity.com/threads/scriptable-objects-pattern-for-players-position.1008790/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/AiLvT/hyWzDz7vFV/9OEnTHgE7hcZK47K5OuvY1/img.jpg?width=480&amp;amp;height=360&amp;amp;face=43_116_67_142&quot;&gt;&lt;a href=&quot;https://forum.unity.com/threads/scriptable-objects-pattern-for-players-position.1008790/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://forum.unity.com/threads/scriptable-objects-pattern-for-players-position.1008790/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/AiLvT/hyWzDz7vFV/9OEnTHgE7hcZK47K5OuvY1/img.jpg?width=480&amp;amp;height=360&amp;amp;face=43_116_67_142');&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;Scriptable Objects pattern for player's position&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I've just watched the &quot;Game Architecture with Scriptable Objects&quot; Unite talk 2017. In my game, a lot of time I just need the position of the player so...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;forum.unity.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;</description>
      <category>Unity</category>
      <category>ScriptableObject</category>
      <author>suachosuacho</author>
      <guid isPermaLink="true">https://swudimi22.tistory.com/13</guid>
      <comments>https://swudimi22.tistory.com/13#entry13comment</comments>
      <pubDate>Sun, 14 Jul 2024 05:14:17 +0900</pubDate>
    </item>
    <item>
      <title>[혼공컴운] 1주차 | 컴퓨터 구조 시작하기</title>
      <link>https://swudimi22.tistory.com/12</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;과제&lt;/b&gt;&lt;br /&gt;p51 확인 문제 3번&lt;br /&gt;p65 확인 문제 3번&lt;br /&gt;&lt;br /&gt;&lt;b&gt;개념 정리&lt;/b&gt;&lt;br /&gt;01 컴퓨터 구조 시작하기&lt;br /&gt;02 데이터&lt;br /&gt;03 명령어&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;과제&lt;/h2&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot;&gt;p51 확인 문제 3번&lt;/span&gt;&lt;/h4&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;프로그램이 실행되려면 반드시 ( 메모리 )에 저장되어 있어야 합니다.&lt;/blockquote&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot;&gt;p65 확인 문제 3번&lt;/span&gt;&lt;/h4&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;1101(2)을 음수로 표현한 값은 ( 0011 )입니다.&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;01 컴퓨터 구조 시작하기&lt;/h2&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;컴퓨터 구조 공부를 해야하는 이유&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발한 프로그램이 어떤 환경에서 어떻게 작동하는지 이해하고, 프로그램을 위한 최적의 컴퓨터 환경을 스스로 판단할 수 있는 개발자가 될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴퓨터 구조를 이해하면 입출력에만 집중하는 개발을 넘어 성능, 용량, 비용까지 고려하며 개발하는 개발자가 될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(위의 내용을 읽고 컴구 공부를 왜 해야하는지에 대한 의문이 풀렸다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;컴퓨터 구조&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴퓨터 구조는 크게 두 가지로 나뉜다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 컴퓨터가 이해하는 정보, 2) 컴퓨터의 4가지 핵심 부품&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선, 컴퓨터가 무엇을 이해할 수 있는지부터 알아야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴퓨터는 0과 1로 표현된 정보만을 이해한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 0과 1로 표현되는 정보는 데이터와 명령어, 두 종류로 구성된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴퓨터의 4가지 핵심부품이 작동하는 원리를 공부하며 컴퓨터가 1)의 정보들을 어떻게 다루는지 알아보자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-07-07 224205.png&quot; data-origin-width=&quot;1437&quot; data-origin-height=&quot;566&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxfwzJ/btsIpJPKKdn/KYH5rbCmNt5kchCSpDOVa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxfwzJ/btsIpJPKKdn/KYH5rbCmNt5kchCSpDOVa0/img.png&quot; data-alt=&quot;컴퓨터 구조 트리&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxfwzJ/btsIpJPKKdn/KYH5rbCmNt5kchCSpDOVa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxfwzJ%2FbtsIpJPKKdn%2FKYH5rbCmNt5kchCSpDOVa0%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;1437&quot; height=&quot;566&quot; data-filename=&quot;스크린샷 2024-07-07 224205.png&quot; data-origin-width=&quot;1437&quot; data-origin-height=&quot;566&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;컴퓨터 구조 트리&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;주요 개념&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;CPU의 내부 구성 요소&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull;&amp;nbsp; 산술논리연산장치(ALU): 컴퓨터 내부에서 수행되는 대부분의 연산 담당(like 계산기)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt;&amp;nbsp; 레지스터: CPU 내부의 작은 임시 저장 장치, 프로그램을 실행하는 데 필요한 값들을 임시로 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;bull;&lt;span&gt;&amp;nbsp; 제어장치: 제어 신호를 보내고, 명령어를 해석하는 장치&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;메모리&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull;&amp;nbsp; 프로그램 실행 조건: 프로그램이 실행되려면, 반드시 메모리에 저장되어 있어야 한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull;&amp;nbsp; 메모리는 현재 실행되는 프로그램의 명령어와 데이터를 저장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull;&amp;nbsp; 메모리에 저장된 값의 위치는 주소로 알 수 있다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;메인 메모리 vs 보조기억장치&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull;&amp;nbsp; 메모리: &lt;i&gt;현재 실행되는&lt;/i&gt; 프로그램 저장(휘발성)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull;&amp;nbsp; 보조기억장치: &lt;i&gt;보관할&lt;/i&gt; 프로그램 저장(비휘발성)&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;보조기억장치 vs 입출력 장치&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공: 컴퓨터 외부에 연결되어 컴퓨터 내부와 정보 교환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;차: 보조기억장치는 &lt;i&gt;메모리를 보조&lt;/i&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;h4 data-ke-size=&quot;size20&quot;&gt;핵심 부품들의 구성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴퓨터의 핵심 부품들은 모두 &lt;b&gt;메인보드(main board)&lt;/b&gt;라는 판에 연결된다(= 마더보드).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인보드에는 핵심 부품들과 여러 컴퓨터 부품을 부착할 수 있는 슬롯과 연결 단자가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인보드에 연결된 부품들은 &lt;b&gt;버스(Bus)&lt;/b&gt;를 통해 서로 정보를 주고 받을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴퓨터의 네 가지 핵심 부품을 연결하는 가장 중요한 버스를 &lt;b&gt;시스템 버스(system bus)&lt;/b&gt;라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;(시스템 버스: 컴퓨터의 네 가지 핵심 부품이 서로 정보를 주고받는 통로)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-07-07 231747.png&quot; data-origin-width=&quot;920&quot; data-origin-height=&quot;584&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zSxep/btsIrbdbat8/45zmNp8Umuoc5xYm6zSvN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zSxep/btsIrbdbat8/45zmNp8Umuoc5xYm6zSvN0/img.png&quot; data-alt=&quot;구조를 직접 그려보며 객체간 구조를 이해한다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zSxep/btsIrbdbat8/45zmNp8Umuoc5xYm6zSvN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzSxep%2FbtsIrbdbat8%2F45zmNp8Umuoc5xYm6zSvN0%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;920&quot; height=&quot;584&quot; data-filename=&quot;스크린샷 2024-07-07 231747.png&quot; data-origin-width=&quot;920&quot; data-origin-height=&quot;584&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;구조를 직접 그려보며 객체간 구조를 이해한다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;02 데이터&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴퓨터가 이해하는 정보 중, 정적인 정보인 &lt;b&gt;데이터&lt;/b&gt;에 대해 알아보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽게 말하자면 컴퓨터가 이해하는 숫자, 문자, 이미지, 동영상과 같은 정적인 정보를 데이터라고 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-07-07 233940.png&quot; data-origin-width=&quot;1322&quot; data-origin-height=&quot;199&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3EppZ/btsIqx8TuJL/etuE768GZCk1ToSyiLHbjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3EppZ/btsIqx8TuJL/etuE768GZCk1ToSyiLHbjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3EppZ/btsIqx8TuJL/etuE768GZCk1ToSyiLHbjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3EppZ%2FbtsIqx8TuJL%2FetuE768GZCk1ToSyiLHbjK%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;1322&quot; height=&quot;199&quot; data-filename=&quot;스크린샷 2024-07-07 233940.png&quot; data-origin-width=&quot;1322&quot; data-origin-height=&quot;199&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;03 명령어&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴퓨터를 실질적으로 작동시키는 정보인&lt;b&gt; 명령어&lt;/b&gt;에 대해 알아보자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-07-07 234234.png&quot; data-origin-width=&quot;1319&quot; data-origin-height=&quot;199&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqKi6Q/btsIrPtYP4s/R6aTU11QBjc5BwzcgaBeH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqKi6Q/btsIrPtYP4s/R6aTU11QBjc5BwzcgaBeH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqKi6Q/btsIrPtYP4s/R6aTU11QBjc5BwzcgaBeH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqKi6Q%2FbtsIrPtYP4s%2FR6aTU11QBjc5BwzcgaBeH0%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;1319&quot; height=&quot;199&quot; data-filename=&quot;스크린샷 2024-07-07 234234.png&quot; data-origin-width=&quot;1319&quot; data-origin-height=&quot;199&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>suachosuacho</author>
      <guid isPermaLink="true">https://swudimi22.tistory.com/12</guid>
      <comments>https://swudimi22.tistory.com/12#entry12comment</comments>
      <pubDate>Sun, 7 Jul 2024 23:35:15 +0900</pubDate>
    </item>
    <item>
      <title>[디자인 패턴] 0. 디자인 패턴</title>
      <link>https://swudimi22.tistory.com/11</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;개요&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디자인 패턴은 아키텍처를 사용하고 코드를 더 깔끔하고 확장 가능 하며 유지 관리하기 쉬운 방식으로 구성하는 데 도움이 된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소프트웨어 개발에서의 디자인 패턴은 다운로드하거나 코드에 복사하여 붙여넣을 수 있는 것이 아닌,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소프트웨어 개발의 일반적인 문제에 대한 해결책으로 모든 개발자들이 자주 직면하는 문제에 대한 해결책으로 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디자인 패턴은 시간이 지남에 따라 일종의 표준이 된 모범 사례로, 소프트웨어 업계에서 널리 알려져 있으며 각자 고유한 이름이 있다.(싱글톤, 전략, 파사드 등)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 패턴을 익혀두면 팀을 옮기거나 회사에 입사할 때 어떤 패턴이 사용되고 있는지 파악하고 코드 베이스를 더 빨리 이해할 수 있다. 또는 새 프로젝트를 시작할 때 견고한 구조를 설계하며 프로젝트를 구축할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;디자인 패턴 유형&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;935&quot; data-origin-height=&quot;300&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crUfzl/btsFRc0Kkk7/Z7eSW1wYy4kix054nz9NQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crUfzl/btsFRc0Kkk7/Z7eSW1wYy4kix054nz9NQ1/img.png&quot; data-alt=&quot;생성, 구조, 행동&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crUfzl/btsFRc0Kkk7/Z7eSW1wYy4kix054nz9NQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrUfzl%2FbtsFRc0Kkk7%2FZ7eSW1wYy4kix054nz9NQ1%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;935&quot; height=&quot;300&quot; data-origin-width=&quot;935&quot; data-origin-height=&quot;300&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;생성, 구조, 행동&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;I. 생성 패턴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;객체 인스턴스 생성에 관여, 클래스 정의와 객체 생성 방식을 구조화, 캡슐화를 수행하는 패턴&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&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;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이는 객체가 생성되는 방식에 독립적인 시스템을 만드는 방법이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;397&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yFW8J/btsFRt2cRCF/71sAC1E6uM2yeFBcB08WCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yFW8J/btsFRt2cRCF/71sAC1E6uM2yeFBcB08WCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yFW8J/btsFRt2cRCF/71sAC1E6uM2yeFBcB08WCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyFW8J%2FbtsFRt2cRCF%2F71sAC1E6uM2yeFBcB08WCk%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;658&quot; height=&quot;397&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;397&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;II. 구조 패턴&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;i&gt;더 큰 구조 형성 목적으로 클래스나 객체의 조합을 다루는 패턴&lt;/i&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;663&quot; data-origin-height=&quot;407&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/euujjJ/btsFRb8A92I/zKOAn0ogvRJBw8Gvb46P2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/euujjJ/btsFRb8A92I/zKOAn0ogvRJBw8Gvb46P2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/euujjJ/btsFRb8A92I/zKOAn0ogvRJBw8Gvb46P2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeuujjJ%2FbtsFRb8A92I%2FzKOAn0ogvRJBw8Gvb46P2K%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;663&quot; height=&quot;407&quot; data-origin-width=&quot;663&quot; data-origin-height=&quot;407&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;III. 행동 패턴&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;i&gt;클래스나 객제들이 상호작용하는 방법과 역할 분담을 다루는 패턴&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서로 다른 객체가 서로 통식하는 방식에 관한 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객체와 클래스가 서로 어떻게 통신하고 동작해야 하는지에 대한 지침을 제공한다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;383&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tmqVy/btsFRAmUu6e/reaZidVdZ9Ks1dtEE43QKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tmqVy/btsFRAmUu6e/reaZidVdZ9Ks1dtEE43QKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tmqVy/btsFRAmUu6e/reaZidVdZ9Ks1dtEE43QKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtmqVy%2FbtsFRAmUu6e%2FreaZidVdZ9Ks1dtEE43QKk%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;666&quot; height=&quot;383&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;383&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>디자인패턴</category>
      <author>suachosuacho</author>
      <guid isPermaLink="true">https://swudimi22.tistory.com/11</guid>
      <comments>https://swudimi22.tistory.com/11#entry11comment</comments>
      <pubDate>Mon, 18 Mar 2024 15:38:30 +0900</pubDate>
    </item>
    <item>
      <title>[C#] 값 형식과 참조 형식의 메모리 저장 방식 차이</title>
      <link>https://swudimi22.tistory.com/9</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;값 형식과 참조 형식은 메모리가 저장되는 방식에서 기본적으로 스택(Stack)과 힙(Heap)의 차이를 나타낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 형식이 메모리에 어떻게 저장되는지 봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 값 형식 (Value Types)&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;스택 (Stack)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;값 형식의 변수는 주로 스택에 저장된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스택은 빠르게 데이터를 할당하고 해제할 수 있는 메모리 영역이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;값 형식의 변수는 변수의 크기에 따라 스택 프레임에 직접 저장된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스택에 저장된 값 형식 변수는 해당 변수의 스코프(영역)을 벗어나면 자동으로 제거된다 (스택 메모리의 특성 때문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스택은 함수 호출 시 로컬 변수 및 함수 호출 정보를 저장하는 데 사용되는 메모리 영역이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수의 실행이 끝나면 해당 함수의 스택 프레임이 제거된다. (**)&lt;/p&gt;
&lt;pre id=&quot;code_1709234104409&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// &amp;lt; 값 형식의 변수 할당 예시 &amp;gt;

int x = 10;		// x는 스택에 직접 값 10을 저장&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;** 추가 설명&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 exampleFunction()이 호출되면 'x'라는 값 형식의 변수가 exampleFunction() 의 스택 프레임에 할당된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 exampleFunction()이 실행을 완료하면 해당 스택 프레임이 제거된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 'x'도 함께 제거되어 메모리에서 사라지게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스택의 특성은 함수 호출의 재귀적 성질과도 관련이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 함수 호출은 새로운 스택 프레임을 만들며, 함수가 종료되면 해당 스택 프레임이 제거되어 이전 스택 프레임으로 돌아간다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 '값 형식 변수가 스코프를 벗어나 자동으로 제거된다'는 것은 해당 변수의 스택 프레임이 소멸되면서 변수도 함께 제거되어 메모리에서 해제됨을 의미한다.&lt;/p&gt;
&lt;pre id=&quot;code_1709234962403&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System;

class Program
{
	static void Main()
    {
    	exampleFunction();
        Console.WriteLine(&quot;Main Function Ends.&quot;);
    }
    
    static void exampleFunction()
    {
    	int x = 10;		// x는 exampleFunction의 스택 프레임에 저장됨
        Console.WritLine(&quot;Inside exampleFunction: &quot; + x);
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 참조 형식 (Reference Types)&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;힙 (Heap)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참조 형식의 객체는 힙에 저장된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;힙은 더 큰 데이터를 저장할 수 있는, 생명주기가 더 긴 메모리 영역이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참조 형식의 변수는 스택에는 해당 객체의 참조(메모리 주소)만 저장하고, 실제 객체는 힙에 생성된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;힙에 저장된 객체는 명시적으로 제거되지 않는 한 유지된다.&lt;/p&gt;
&lt;pre id=&quot;code_1709234448615&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// &amp;lt; 참조 형식의 변수 할당 &amp;gt;

// obj는 스택에 참조(힙의 메모리 주소)를 저장하고, MyClass 객체는 힙에 생성
MyClass obj = new MyClass();&lt;/code&gt;&lt;/pre&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;&amp;nbsp;&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;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 요약&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;값 형식 : 실제 값을 스택에 저장&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&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;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&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;/p&gt;</description>
      <category>C#</category>
      <author>suachosuacho</author>
      <guid isPermaLink="true">https://swudimi22.tistory.com/9</guid>
      <comments>https://swudimi22.tistory.com/9#entry9comment</comments>
      <pubDate>Fri, 1 Mar 2024 05:00:56 +0900</pubDate>
    </item>
  </channel>
</rss>