🐧 들어가기 앞서

3D 심화 강의를 다 들었다.

추후에 강의를 필요한 부분만 다시 들으면 좋을 것 같다.

멀티 플레이를 구현하는 방법도 배웠는데,

아직 너무 어렵다.


후발대 강의에서는 Stack과 Heap에 대해 배웠다.

이전에 포인터에 대해 공부를 조금 했어서 이해는 쉬웠다!


🐧 오늘 배운 것

  1. Photon

  2. Stack & Heap


🐧 기억할 것 & 진행

Photon?

포톤 (Photon)은 Exit Games에서 개발한 멀티플레이어 게임 개발을 위한 네트워크 엔진이다.

특징?

  • Cross-platform: 포톤은 다양한 플랫폼 간에 통신을 지원한다.
    이는 PC, 모바일, 콘솔 게임에서 멀티플레이어를 지원한다.

  • Real-time, Multiplayer: 포톤은 실시간 멀티플레이어 게임 개발에 초점을 맞추고 있다.

  • Scalability: 포톤은 클라우드 기반 서버를 사용하여 게임의 플레이어 수에 따라 자동으로 확장되는 기능을 제공한다.

  • Reliability: 포톤은 데이터 전송에 대한 높은 신뢰성을 제공한다.

주요 메서드와 기능

  • 1. PhotonNetwork 클래스 PhotonNetwork 클래스는 포톤 네트워크의 주요 기능에 액세스하는 중심적인 클래스다.
    • 1.1. ConnectUsingSettings 메서드

      PhotonNetwork.ConnectUsingSettings();

      이 메서드를 호출하면, 앱이 포톤 클라우드에 연결된다.
      연결 상태는 PhotonNetwork.IsConnected로 확인할 수 있다.

    • 1.2. CreateRoom 및 JoinRoom 메서드

      PhotonNetwork.CreateRoom("RoomName");
      PhotonNetwork.JoinRoom("RoomName");

      CreateRoom 메서드는 새로운 방을 만들고, JoinRoom 메서드는 이미 존재하는 방에 참가한다.

    • 1.3. Instantiate 메서드

      PhotonNetwork.Instantiate("PrefabName", position, rotation);

      포톤 네트워크를 통해 새로운 게임 오브젝트를 생성한다.
      이 메서드는 Unity의 Instantiate 메서드와 유사하나, 네트워크를 통해 동기화된다.

  • 2. MonoBehaviourPunCallbacks 클래스 MonoBehaviourPunCallbacks 클래스는 포톤의 주요 이벤트에 대한 콜백 메서드를 제공한다.
    • 2.1. OnConnectedToMaster 메서드

      public override void OnConnectedToMaster() { ... }

      게임이 포톤 마스터 서버에 성공적으로 연결되면 호출된다.

    • 2.2. OnJoinedRoom 메서드

      public override void OnJoinedRoom() { ... }

      로컬 플레이어가 방에 입장하면 호출된다.

    • 2.3. OnPlayerEnteredRoom 메서드

      public override void OnPlayerEnteredRoom(Player newPlayer) { ... }

      다른 플레이어가 방에 입장하면 호출된다.


Stack & Heap

데이터 유형의 저장 위치

  • int, bool, float 등 기본 데이터 유형은 주로 스택(Stack)에 저장된다.
    스택은 메모리의 한 부분으로서 함수 호출과 관련된 지역 변수 및 임시 데이터를 저장하는 데 사용된다.

  • 클래스 인스턴스는 주로 힙(Heap)에 저장된다. (new ~ )
    힙은 동적으로 할당된 메모리 영역으로서 객체와 데이터 구조를 저장하는 데 사용된다.

코루틴에서의 동작 & Destory

  • 코루틴에서 yield return new WaitForSeconds(3);를 호출하면 3초마다 클래스 인스턴스가 힙 영역에 생성된다.
    이렇게 생성된 인스턴스들은 가비지 컬렉터(Garbage Collector)에 의해 수거되기 전까지 힙에 쌓인다.

  • Destroy 함수를 호출하여 해당 객체를 파괴하더라도 인스턴스는 즉시 사라지지 않고 가비지 컬렉터가 실행되어야 제거된다.

클래스 vs 구조체

  • Vector, Color, Quaternion과 같은 데이터 유형들은 구조체(Struct)로 정의되어 있다.
    구조체는 값 형식(Value Type)으로 분류되며 일반적으로 스택(Stack)에 저장된다.
    따라서 가비지 컬렉터의 관리 대상이 아니며 필요하지 않을 때 바로 사라진다.

  • 하지만 클래스(Class)는 참조 형식(Reference Type)이므로 힙(Heap)에 할당되고 가비지 컬렉터가 수거하기 전까지 남아있다.

언제 어떤 것을 사용할까?
구조체는 작고 단순한 값을 나타내는 경우나 값 복사가 성능상 이점을 가져다주는 경우 등 특정 상황에서 사용한다.
하지만 보통은 클래스를 더 많이 활용한다. 클래스는 객체 지향 프로그래밍 개념을 구현하는 데 필수적이며, 다양한 기능과 상태를 포함할 수 있어 유연성과 확장성이 좋다.

면접에서 개념들을 어떻게 설명할까?

면접 시 변수와 클래스 개념을 설명할 때 다음 사항들을 강조해 볼 수 있다.

  • 변수: 변수란 메모리 공간 중 하나로 값을 담아두기 위해 사용하는 것이다.
  • 클래스: 객체 지향 프로그래밍에서 중요한 개념인 클래스는 관련된 데이터와 기능을 포함하여 추상화된 모델링을 가능하게 한다.

무작정 기능의 뜻을 외우는 것 보다 자신이 이러한 개념들을 이해하고 활용해온 경험과 각각의 장단점에 대해서도 이야기하는 것이 좋다.


🐧 내일 할 일

개인 과제 기능 구상하기!

0개의 댓글