<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>minb_dev</title>
        <link>https://velog.io/</link>
        <description>Youtube '민바크의 게임제작'을 운영하고 있습니다.</description>
        <lastBuildDate>Sun, 20 Aug 2023 15:18:56 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>minb_dev</title>
            <url>https://velog.velcdn.com/images/minb_dev/profile/adc814ba-09cc-4fb4-a79d-8f19e2072194/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. minb_dev. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/minb_dev" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[C# 구조체와 클래스 차이]]></title>
            <link>https://velog.io/@minb_dev/C-%EA%B5%AC%EC%A1%B0%EC%B2%B4%EC%99%80-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%B0%A8%EC%9D%B4</link>
            <guid>https://velog.io/@minb_dev/C-%EA%B5%AC%EC%A1%B0%EC%B2%B4%EC%99%80-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%B0%A8%EC%9D%B4</guid>
            <pubDate>Sun, 20 Aug 2023 15:18:56 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>구조체와 클래스의 차이가 뭔가요? 비슷해 보이지만 용도의 차이를 모르겠습니다.</p>
</blockquote>
<p>객체 지향을 처음 배우다보면 위와 같은 질문을 종종 받는다.
구조체와 클래스는 둘 다 데이터를 구성하고 기능을 정의하는데 사용된다.
둘 다 비슷한 목적을 가지고 있지만 중요한 차이점이 있다.</p>
<h2 id="구조체struct">구조체(Struct)</h2>
<p>구조체는 작은 규모의 데이터 구조를 표현할 때 주로 사용된다.
데이터의 조각들을 간직하고 있으며 값 형식으로 데이터를 스택(stack)에 저장하며, 값을 복사해서 다룬다는 특징이 있다.</p>
<p>주된 예시로는 벡터, 포인트, 색상 표현 등 불변하고 가벼운 데이터 형식에 주로 사용된다.</p>
<pre><code class="language-cs">struct Point
{
    public int X;
    public int Y;

    public Point(int x, int y)
    {
        X = x;
        Y = y;
    }
}</code></pre>
<h2 id="클래스class">클래스(Class)</h2>
<p>클래스는 데이터와 기능을 묶어 표현하는 더 큰 단위라고 생각하자.
클래스는 참조 형식으로, 데이터를 힙(heap)에 저장하고 주소를 전달하는 방식으로 작동된다.
특히 클래스는 상속과 인터페이스 구현 등을 통해 더욱 확장이 가능하며 
복잡한 데이터와 기능을 표현하는데 좋다.</p>
<p>주된 예시로는 게임 내의 캐릭터, 적, 아이템 등은 복잡한 상태와 행동을 가질 수 있으며, 다른 객체와의 상호작용이 필요한 경우가 많다. 이런 경우에는 클래스를 사용하여 캡슐화, 상속, 다형성 등의 객체 지향 기법을 활용할 수 이다.</p>
<pre><code class="language-cs">class Character
{
    public int Health { get; set; }
    public Vector2 Position { get; set; }

    public void Move(Vector2 direction)
    {
        // 이동 로직
    }

    public void Attack(Character target)
    {
        // 공격 로직
    }
}</code></pre>
<p>결론적으로 구조체와 클래스의 선택은 게임 개발의 특정 상황과 요구사항에 따라 달라진다.
단순한 값 형식의 표현은 구조체로, 복잡한 객체의 관리와 확장성이 필요한 경우 클래스로 
설계하는 것이 일반적이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[C#] 델리게이트(delegate)와 이벤트(event)]]></title>
            <link>https://velog.io/@minb_dev/C-%EC%9D%B4%EB%B2%A4%ED%8A%B8Event</link>
            <guid>https://velog.io/@minb_dev/C-%EC%9D%B4%EB%B2%A4%ED%8A%B8Event</guid>
            <pubDate>Wed, 16 Aug 2023 15:30:40 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>C#에 delegate와 event가 뭔가요?</p>
</blockquote>
<p>튜터 활동을 하면서 이와 같은 질문을 받았다.
게임 개발을 하면서 델리게이트와 이벤트는 너무 중요한 개념이다.
실제로도 사용을 많이 하지만 막상 설명을 하려하니 설명하기가 쉽지 않다.</p>
<h2 id="✨추천">✨추천</h2>
<p>델리게이트와 이벤트는 개념에 대한 이해보다는 실제 적용 사례를 느껴보는게 좋다.
필자는 개인적으로 아래의 영상이 처음 공부를 할 때 도움이 많이 되었다.
<a href="https://youtu.be/m9_D0DQ4SGU">https://youtu.be/m9_D0DQ4SGU</a></p>
<h2 id="delegate란">delegate란</h2>
<p>쉽게 설명하자면 delegate는 값이 아닌 &#39;코드&#39;자체를 넘기고 싶을 때 사용할 수 있다.
C#에서 메서드에 대한 참조 형식인데 함수를 매개변수로 전달하거나 반환 값으로 사용할 수 있게 해준다.
C++에 함수 포인터와 유사하다고 생각하면 된다. 아래의 예시를 보면 좀 더 쉽게 이해할 수 있다.</p>
<pre><code class="language-cs">delegate void DelegateChain();

static void Print1()
{
    Console.WriteLine(&quot;Welcome&quot;);
}
static void Print2()
{
    Console.WriteLine(&quot;To&quot;);
}
static void Print3()
{
    Console.WriteLine(&quot;C#&quot;);
}

static void Main(string[] args)
{
    DelegateChain chaincall = new DelegateChain(Print1);
    chaincall += Print2;
    chaincall += Print3;
    chaincall();
}</code></pre>
<p>해당 코드를 보면 chaincall이라는 델리게이트에 Print1, Print2, Print3 등
여러개의 메소드를 동시에 참조하는 것을 볼 수있다.
이렇게 하면 chaincall 호출하면 참조하고 있는 Print1, Print2, Print3을 모두 호출한다.</p>
<h2 id="event란">Event란?</h2>
<p>이벤트는 특정 동작일 발생할 때 특정 기능을 실행할 수 있도록 한다.
실제로 Unity 개발을 하면서 아래와 같은 코드를 작성해줘야 하는 상황들이 많다.</p>
<pre><code class="language-cs">public class Player
{
    public delegate void PlayerDiedDelegate();
    public event PlayerDiedDelegate PlayerDied;

    public void Die()
    {
        if(PlayerDied != null)
            PlayerDied();
    }
}

public class GameManager
{
    public void OnPlayerDied()
    {
        // 플레이어가 죽었을 때 실행할 로직
    }
}

public class Main
{
    public static void Main(string[] args)
    {
        Player player = new Player();
        GameManager gameManager = new GameManager();

        player.PlayerDied += gameManager.OnPlayerDied;
        player.Die(); // OnPlayerDied 메서드가 호출됩니다.
    }
}</code></pre>
<p>player.PlayerDied 이벤트에 gameManager.OnPlayerDied 참조를 하여
PlayerDied()가 클래스 내부에서 호출되면 자동으로 gameManager.OnPlayerDied 코드가 실행이 된다.
앞서 배운 델리게이트와 쓰임새가 비슷하다. 그렇다면 둘의 차이점은 무엇일까?</p>
<h2 id="delegate와-event의-차이점">delegate와 Event의 차이점</h2>
<p>델리게이트는 외부에서 직접 호출할 수 있지만 이벤트는 해당 <strong>클래스 내부에서만 호출</strong>할 수 있다.
이것은 이벤트 기반 프로그래밍에서 안정성을 추구하는 것이며 클래스 외부에서 이벤트에 변화를 줄 수 없게 하기 위함이다.</p>
<p>또한 델리게이트는 주로 코드의 재사용성과 유연성을 높이는데 사용되며, 이벤트는 특정 액션의 발생을 다른 객체에 알리는 데 사용된다. 추후 옵저버 패턴을 공부하는데도 중요한 내용이니 잘 숙지하길 바란다.</p>
<hr>
<ul>
<li>참고 자료
<a href="https://geukggom.tistory.com/210">https://geukggom.tistory.com/210</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Unity] VSync (Game view only)]]></title>
            <link>https://velog.io/@minb_dev/Unity-VSync-Game-view-only</link>
            <guid>https://velog.io/@minb_dev/Unity-VSync-Game-view-only</guid>
            <pubDate>Tue, 15 Aug 2023 14:41:25 GMT</pubDate>
            <description><![CDATA[<p>이 글은 이 블로그에 첫 글이다.
항상 프로젝트 기반으로 뭔가를 만들다보니 개념적인 부분이 부족할 때가 많아
글을 작성하면서 내용을 정리해 볼까 한다.</p>
<h2 id="vsync-game-view-only">VSync (Game view only)</h2>
<p>VSync(수직 동기화)는 그래픽 카드와 모니터의 프레임 속도를 동기화해 티어링 현상을 줄이는 기술이다.</p>
<blockquote>
<p>티어링 현상이란? 화면이 깨지거나 물결치는 현상을 말한다.
간단하게 설명하면 모니터의 주사율과 그래픽카드의 성능이 차이가 날 때 생기는 현상이다.</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/minb_dev/post/291821b8-f52b-4be3-9918-0f00a4cccc52/image.png" alt=""></p>
<p>게임 뷰에서 저 기능을 사용할 수 있으며 이름에도 써있다시피 게임 뷰 모드에서만 작동이 되는 기능이다.</p>
<p><img src="https://velog.velcdn.com/images/minb_dev/post/af6d7c79-510d-4815-997d-2154c61b9b1d/image.png" alt=""></p>
<p>유니티에서 이 기능을 활성화하면 화면이 부드러워지지만, 때로는 오브젝트의 움직임이 빨라지는 현상이 발생한다. 이 현상의 원인은 프레임 속도와 오브젝트의 움직임이 직접 연결되어 있기 때문이다. 프레임 속도가 빨라지면 오브젝트의 움직임도 빨라진다.</p>
<p>이 문제를 해결하려면 <strong>Time.deltaTime</strong>을 사용하면 된다. 이 값은 프레임 사이의 시간 차이를 나타내며, 이를 사용하면 프레임 속도에 상관없이 일정한 속도로 오브젝트를 움직일 수 있다. 이 방법을 사용하면 VSync 활성화 상태와 무관하게 오브젝트의 움직임을 일관되게 유지할 수 있다.</p>
<hr>
<ul>
<li>참고자료
<a href="https://letitgo01.tistory.com/23">https://letitgo01.tistory.com/23</a>
<a href="https://greenchoco.tistory.com/143">https://greenchoco.tistory.com/143</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[MinbGames 개인정보 처리방침]]></title>
            <link>https://velog.io/@minb_dev/MinbGames-%EA%B0%9C%EC%9D%B8%EC%A0%95%EB%B3%B4-%EC%B2%98%EB%A6%AC%EB%B0%A9%EC%B9%A8</link>
            <guid>https://velog.io/@minb_dev/MinbGames-%EA%B0%9C%EC%9D%B8%EC%A0%95%EB%B3%B4-%EC%B2%98%EB%A6%AC%EB%B0%A9%EC%B9%A8</guid>
            <pubDate>Sat, 17 Dec 2022 15:11:02 GMT</pubDate>
            <description><![CDATA[<p>&lt; MinbGames &gt;(&#39;<a href="https://www.youtube.com/@minbgames&#39;%EC%9D%B4%ED%95%98">https://www.youtube.com/@minbgames&#39;이하</a> &#39;MinbGames&#39;)은(는) 「개인정보 보호법」 제30조에 따라 정보주체의 개인정보를 보호하고 이와 관련한 고충을 신속하고 원활하게 처리할 수 있도록 하기 위하여 다음과 같이 개인정보 처리방침을 수립·공개합니다.</p>
<p>○ 이 개인정보처리방침은 2022년 11월 20부터 적용됩니다.</p>
<p>제1조(개인정보의 처리 목적)</p>
<p>&lt; MinbGames &gt;(&#39;<a href="https://www.youtube.com/@minbgames&#39;%EC%9D%B4%ED%95%98">https://www.youtube.com/@minbgames&#39;이하</a> &#39;MinbGames&#39;)은(는) 다음의 목적을 위하여 개인정보를 처리합니다. 처리하고 있는 개인정보는 다음의 목적 이외의 용도로는 이용되지 않으며 이용 목적이 변경되는 경우에는 「개인정보 보호법」 제18조에 따라 별도의 동의를 받는 등 필요한 조치를 이행할 예정입니다.</p>
]]></description>
        </item>
    </channel>
</rss>