so๋กœ ์ธ๋ฒคํ† ๋ฆฌ ๋งŒ๋“ค๋ฉด ๋˜๊ฒ ์ง€ํ•˜๊ณ  ๋งŒ๋“ค๊ณ ย ๋Œ€๊ฐ€๋ฆฌ ๊นจ์กŒ๋‹ค๊ฐ€ย ๋ด‰ํ•ฉํ–ˆ๋˜ ์ฐ ํ’ˆ

๊ทธ๋ฆฌ๊ณ  ์‚ฌ์‹ค ๊ฐœ๋ฐœ์ผ์ง€๋ผ๊ณ  ๊ฒฐ๊ณผ๋ฌผ์ด ๋ง‰ ๋ณด์ด๋Š” ์ž˜๋‚˜๊ฐ€๋Š” ์‹คํ—˜์‹ค ์—ฐ๊ตฌ์ž์˜ ๋น„๋””์˜ค๋กœ ์ฐ์€ ์ผ์ง€๋ณด๋‹ค๋Š”,ย 

์ด๋ฏธ ๋ฐฑ๊ณจ์ด ๋œ ์–ด๋–ค ๋ชจํ—˜๊ฐ€์˜ ๋น„๋ง๋ก๊ฐ™์€ ์ผ์ง€๋„ ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์„œ ๋ง๋จธ๋ฆฌ ์ผ์ง€๋กœ ํ•จ.


ํ˜„์—…์— ์žˆ๊ฑฐ๋‚˜ ์ด๋ฏธ ๊ฐœ๋ฐœ์„ ์ž˜ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ๋ญ” ๋‹น์—ฐํ•œ ์†Œ๋ฆฌ๋ฅผ ํ•œ๋‹ค๊ณ  ๋ณด์ด๊ฑฐ๋‚˜,ย 

์•„์ง๋„ ์ €๋ ‡๊ฒŒ ํ•œ์‹ฌํ•œ ๋ฐฉ๋ฒ•์„ ์“ฐ๊ณ ์žˆ๋‚˜์ฒ˜๋Ÿผ ๋ณด์ด๊ฒ ์ง€๋งŒ, ์•„๋ฌดํŠผ ๋‚˜๋Š” ์ธ๋ฒคํ† ๋ฆฌ๋ž‘ ์ €์žฅ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ํŠœํ† ๋ฆฌ์–ผ์„ ๋ช‡๊ฐœ ๋ณด๊ณ  ์—์…‹์„ ์‚ฌ์„œ ๋ถ„์„ํ•ด๋ณด๊ณ ย 

๋ช‡๋ฒˆ์ด๋‚˜ ์ฝ”๋“œ๋กœ ์จ๋ณธ๋‹ค์Œ์—์•ผ ๊นจ๋‹ฌ์€ ์‚ฌ์‹ค๋“ค์ด๋‹ค.

๋‚˜์ฒ˜๋Ÿผ ์‚ฌ์‹ค์ƒ ๋…ธ๋ฒ ์ด์Šค๋กœ (์—ฐ๊ตฌ์‹ค์—์„œ ํŒŒ์ด์ฌ์ด๋‚˜ ๋งŒ์ง€์ž‘๊ฑฐ๋ฆฌ๋˜๊ฑธ ๊ฐœ๋ฐœ์ž๋ผ๊ณ  ์ฐฉ๊ฐํ•œ ๋‚˜๋Š” ์ง€๋‚œ 2๋…„๋™์•ˆ ์•„์ฃผ ๊ฐœ๊ณ ์ƒ์„ ํ–ˆ๋‹ค.)ย 

์‹œ์ž‘ํ•œ์‚ฌ๋žŒ๋“ค์ด ์ข€ ๋ณด์ด๋Š” ๊ฒƒ๊ฐ™์•„ ์“ฐ๋Š” ๊ธ€์ด๊ธฐ๋„ ํ•˜๋‹ค.

ย 


ย so๋กœ "์ €์žฅ"๋˜์–ด์•ผ ํ•  ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉด, ์ด๊ฒŒ ์—๋””ํ„ฐ์—์„œ๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•œ๋ˆˆ์— ๋ณด์ด๊ณ ย 

Vector3 position๊ฐ’๊ฐ™์€๊ฑฐ ์ €์žฅํ•  ๋•Œ, ๋ณ€ํ™˜์•ˆํ•ด์ฃผ๊ณ  ํ•ด์„œย ๊ฐœ๊ฟ€์ด๋„ค๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ so๋Š” ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์šฉ๋„๊ฐ€ ์•„๋‹ˆ๊ณ , ๋ฏธ๋ฆฌ ์ž…๋ ฅํ•ด๋‘” ๋ฐ์ดํ„ฐ๋ฅผ ๋Ÿฐํƒ€์ž„์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•จ.


๊ณต์‹๋ฌธ์„œ๋ฅผ ์ž˜ ์ฝ๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ์ž‘๋™์›๋ฆฌ๋ฅผ ํŒŒ์•…ํ•ด์„œ, ์ด๊ฒŒ ๋Ÿฐํƒ€์ž„ ๋„์ค‘ ๊ฐ’์ด ์ˆ˜์ •๋˜๊ณ , ์—๋””ํ„ฐ์—์„œ ์ˆ˜์ •ํ• ๋•Œ๋งŒ ๋ญ ๊ฐ’์ด ๋ฐ˜์˜๋˜๊ณ  ์–ด์ฉŒ๊ตฌ ์ €์ฉŒ๊ตฌ ํ•˜์ง€๋งŒ

์•„๋ฌด๋ฆฌ ํŒŒ์•…ํ–ˆ๋‹ค๊ณ  ํ•œ๋“ค ๋นก๋Œ€๊ฐ€๋ฆฌ์ธย ๋‚˜๋Š” ์–ธ์  ๊ฐ€ ๊ผญ ์‹ค์ˆ˜๋ฅผ ํ•ด์„œ ์‹œ๊ฐ„๋‚ญ๋น„๋ฅผ ํ–ˆ๋˜์ ์ด ํ•œ๋‘๋ฒˆ์ด ์•„๋‹˜.


์š”๋ฆฌํ•  ๋•Œ ๊ตญ๊ฐ„์žฅ, ์–‘์กฐ๊ฐ„์žฅ, ์™œ๊ฐ„์žฅ ๋‹ค ๊ฐ™์€ ๊ฐ„์žฅ์ด๋ผ๊ณ  ์•„๋ฌด๊ฑฐ๋‚˜ ์“ฐ๋ฉด ๋ง› ๋ณ‘์‹ ๋˜๋Š”๊ฑฐ๋ž‘ ๋น„์Šทํ•˜๋‹ค ์ƒ๊ฐํ•จ.

so๋กœ ๋ญ ๋ชปํ• ๊ฑด ์—†์–ด๋ณด์ด๋Š”๋ฐ, ๊ตณ์ด ์ข‹์€ ์†”๋ฃจ์…˜์ด ์žˆ๋Š”๋ฐ ๋‹ค๋ฅธ์šฉ๋„๋กœ ๋งŒ๋“ค์–ด์ง„ ํด๋ž˜์Šค์—๋‹ค๊ฐ€ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ ๋„ฃ๊ฒ ๋‹ค๊ณ  ์ถ”๊ฐ€ ์ฝ”๋“œ ์ž‘์„ฑํ•˜๋Š”๊ฒƒ์€

๋งค์šฐ ๋น„์ƒ์‚ฐ์ ์ด๋ผ๊ณ  ํŒ๋‹จํ•จ.


๊ฒฐ๊ตญ json์œผ๋กœ ์ €์žฅํ•˜๊ธฐ๋กœ ๋ง˜๋จน๊ณ  json์„ ๊ทธ๋ƒฅ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์„ ์ผ์—ˆ๋Š”๋ฐ, ์‚ฌ์‹ค ๋˜ ๊ทธ๋ƒฅ savedata.json ์ด๋ ‡๊ฒŒ ์ €์žฅํ•ด๋‘๋ฉด ๋ญ”๊ฐ€ ์ฐœ์ฐœํ•˜๊ธฐ๋„ ํ•˜์ง€๋งŒ์„œ๋„

db๋กœ์„œ์˜ ๊ด€๋ฆฌ๊ฐ€ ์ข€ ์–ด๋ ค์šด ๊ฒƒ ๊ฐ™์•„์„œ db๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์ž ๋ง˜๋จน์Œ.


json์ด๋ฉด nosql์„ ์‚ฌ์šฉํ•ด์•ผํ•  ๊ฒƒ ๊ฐ™์•„์„œ, mongodb์ชฝ ์ฐพ์•„๋ณด๋‹ˆ realm์ด๋ผ๊ณ  ์žˆ๊ธธ๋ž˜ ์ง€๊ธˆ์€ ๊ทธ๊ฑฐ ์‚ฌ์šฉ์ค‘.

realm studio๋ผ๊ณ  db๋ทฐ์–ด(?) ๋„ ๋ถˆํŽธํ•˜์ง€๋งŒ ์žˆ๊ณ , ์œ ๋‹ˆํ‹ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ๋„ ์žˆ์–ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ ํŽธํ•˜๊ธธ๋ž˜ ์ผ๋‹จ ์‚ฌ์šฉ์ค‘.

์ด๊ฑฐ ์“ฐ๋ฉด์„œ ์•„์ง ๋Œ€๊ฐ€๋ฆฌ๋Š” ์•ˆ๊นจ์กŒ๋Š”๋ฐ, ๋Œ€๊ฐ€๋ฆฌ ๊นจ์กŒ๋˜ ์‚ฌ๋žŒ์žˆ์œผ๋ฉด ๋Œ“๊ธ€๋กœ ๊ฒฝ๊ณ  ๋ถ€ํƒํ•จ.


realm์€ ์ฝ”๋“œ๋ฅผ ์งœ๋ฉด์„œ json์„ ์ง์ ‘์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์€ ์•„๋‹˜

IRealmObject, IEmbededObjectย ๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•œ partial class๋ฅผ ์ž‘์„ฑํ•ด์„œ db model์„ ์ •์˜ํ•ด์คŒ.


์˜ˆ๋ฅผ๋“ค์–ด ์ด๋Ÿฐ์‹์ž„.


public partial class GameRealmModel : IRealmObject

ย  ย  {

ย  ย  ย  ย  [PrimaryKey][MapTo("_id")]

ย  ย  ย  ย  public ObjectId Id { get; set; } = ObjectId.GenerateNewId();


ย  ย  ย  ย  public DateTimeOffset CreatedTime { get; set; }

ย  ย  ย  ย  public DateTimeOffset ModifiedTime { get; set; }

ย  ย  ย  ย ย 

ย  ย  ย  ย  public TransformRealmModel LastPosition { get; set; }

ย  ย  }


๊ฐ„๋‹จํ•˜๊ฒŒ ๊ฒŒ์ž„๋ฐ์ดํ„ฐ ์ฒซ ์ƒ์„ฑ์‹œ๊ฐ„, ์ตœ๊ทผ์ €์žฅ์‹œ๊ฐ„, ๋งˆ์ง€๋ง‰ ์œ„์น˜๋ฅผ ์ €์žฅํ•ด์คŒ.


์ €์žฅํ•˜๋Š”๊ฒƒ์€ ๊ฐ„๋‹จํ•จ.


// ์ฒ˜์Œ์ƒ์„ฑ

ย await _realmInstance.WriteAsync(() =>

ย  ย  ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  ย  ย  _realmInstance.Add(new GameRealmModel()

ย  ย  ย  ย  ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  CreatedTime = DateTimeOffset.UtcNow,

ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ModifiedTime = DateTimeOffset.UtcNow,

ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  LastPosition = new TransformRealmModel(Vector3.zero, 0)

ย  ย  ย  ย  ย  ย  ย  ย  });

ย  ย  ย  ย  ย  ย  });


// ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

var data = _realmInstance.Find<GameRealmModel>(new ObjectId(id));


// ์ˆ˜์ •ํ•˜๊ธฐ

ย await _realmInstance.WriteAsync(() =>

{

data.LastPositionย = new TransformRealmModel(new Vector3(100, 0, 100), 90);

});



๋‹น์—ฐํžˆ๋„ ์œ ๋‹ˆํ‹ฐ์˜ Transform์ด๋‚˜ Vector3, Quarternion๊ฐ™์€๊ฑธ ๋ฐ”๋กœ ์ €์žฅํ•  ์ˆ˜๋Š” ์—†์Œ.

๊ทธ๋ž˜์„œ ์œ ๋‹ˆํ‹ฐ์˜ Transform์— ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋Š”ย TransformRealmModel๋ผ๊ณ  ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์คŒ.


public partial class TransformRealmModel : IEmbeddedObject
ย  ย  {
ย  ย  ย  ย  public float PositionX { get; set; }
ย  ย  ย  ย  public float PositionY { get; set; }
ย  ย  ย  ย  public float PositionZ { get; set; }
ย  ย  ย  ย ย 
ย  ย  ย  ย  public float Yaw { get; set; }

ย  ย  ย  ย  public TransformRealmModel(Vector3 position, float yaw = 0)
ย  ย  ย  ย  {
ย  ย  ย  ย  ย  ย  Position = position;
ย  ย  ย  ย  ย  ย  Yaw = yaw;
ย  ย  ย  ย  }
ย  ย  ย  ย ย 
ย  ย  ย  ย  public Vector3 Position
ย  ย  ย  ย  {
ย  ย  ย  ย  ย  ย  get => new Vector3(PositionX, PositionY, PositionZ);
ย  ย  ย  ย  ย  ย  set
ย  ย  ย  ย  ย  ย  {
ย  ย  ย  ย  ย  ย  ย  ย  PositionX = value.x;
ย  ย  ย  ย  ย  ย  ย  ย  PositionY = value.y;
ย  ย  ย  ย  ย  ย  ย  ย  PositionZ = value.z;
ย  ย  ย  ย  ย  ย  }
ย  ย  ย  ย  }

ย  ย  ย  ย  public Quaternion Rotation
ย  ย  ย  ย  {
ย  ย  ย  ย  ย  ย  get => Quaternion.Euler(0, Yaw, 0);
ย  ย  ย  ย  ย  ย  set => Yaw = value.eulerAngles.y;
ย  ย  ย  ย  }
ย  ย  }


๋ฐ”๋กœ๋ฐ”๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์“ธ ์ˆ˜ ์žˆ๋„๋ก ํ”„๋กœํผํ‹ฐ๋ž‘ ์ƒ์„ฑ์ž๋„ ๋งŒ๋“ค์–ด๋‘์—ˆ๋‹ค.

์•„๋ฌดํŠผ, ์ด๋ ‡๊ฒŒ ํ•„์š”ํ•œ ํด๋ž˜์Šค๋“ค์„ ์ž˜ ๋งŒ๋“ค์–ด๋‘๊ณ ๋‚˜๋ฉด


var data = _realmInstance.Find<GameRealmModel>(new ObjectId(id));

์ด๋ ‡๊ฒŒ ๋””๋น„์—์„œ ๋ถˆ๋Ÿฌ์˜ค๊ณ ๋‚˜๋ฉด, ๊ฒŒ์ž„ ๋Ÿฐํƒ€์ž„์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ ๋‹ค.

์•„๋ž˜ ์ฝ”๋“œ๋Š” ๊ทธ๋ƒฅ ์˜ˆ์ €์ฒ˜๋Ÿผ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ ์ฝ”๋“œ๋ผ์„œ,ย 

player gameObject์˜ transform์„ ์ฐธ์กฐํ•ด์˜ค๋Š” ๊ณผ์ •๋“ค์ด ์žˆ์–ด์•ผ ํ•˜์ง€๋งŒ ์ƒ๋žตํ–ˆ๋‹ค.


์œ ๋‹ˆํ‹ฐ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ธ์Šคํ„ด์‹ฑ์ด ์•ˆ๋˜๋Š” transform์„ ์—ฌ๊ธฐ์„œ new Transform ํ•˜๋Š” ๊ฒƒ์€ ์ด์ƒํ•œ๊ฒƒ ๊ฐ™์•„

๊ทธ๋ƒฅ ์ธ๊ฒŒ์ž„๋ชจ๋ธ ํด๋ž˜์Šค์— Vector3๋ž‘ Quaternion์œผ๋กœ ๋Œ€์ฒดํ–ˆ๋‹ค.ย 


๋Ÿฐํƒ€์ž„์šฉ ํด๋ž˜์Šค๋Š” ์ˆœ์ˆ˜c#์„ ์‚ฌ์šฉํ•œ๋‹ค. (์—ฌ๊ธฐ์„œ ์ˆœ์ˆ˜c#์€ ๊ทธ๋ƒฅ ์œ ๋‹ˆํ‹ฐํด๋ž˜์Šค๋ฅผ ์ƒ์†์•ˆํ•œ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.)

public class IngameModel

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  public Vector3 Position;

ย  ย  ย  ย  ย  ย  public Quaternion Rotation;

ย  ย  ย  ย  ย  ย  public DateTime CreatedTime;

ย  ย  ย  ย  ย  ย  public DateTime ModifiedTime;

ย  ย  ย  ย  }

ย  ย  ย  ย ย 

ย  ย  ย  ย  public static async UniTask<IngameModel> Convert(GameRealmModel realmModel)

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  var result = new IngameModel

ย  ย  ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  ย  ย  Position = realmModel.LastPosition.Position,

ย  ย  ย  ย  ย  ย  ย  ย  Rotation = realmModel.LastPosition.Rotation,

ย  ย  ย  ย  ย  ย  ย  ย  CreatedTime = realmModel.CreatedTime.DateTime,

ย  ย  ย  ย  ย  ย  ย  ย  ModifiedTime = realmModel.ModifiedTime.DateTime

ย  ย  ย  ย  ย  ย  };

ย  ย  ย  ย  ย  ย  return result;

ย  ย  ย  ย  }


์•„๋ฌดํŠผ ์ฃผ์š” ์š”์ง€๋Š”

์„ธ์ด๋ธŒ ์‹œ์Šคํ…œ ์„ค๊ณ„์— ์žˆ์–ด์„œย 

๋””๋น„์šฉ ํด๋ž˜์Šค์™€, ๋Ÿฐํƒ€์ž„์šฉ ํด๋ž˜์Šค๊ฐ€ ๋”ฐ๋กœ ์žˆ์œผ๋ฉด ํŽธ๋ฆฌํ•˜๊ณ , ๊ทธ ๋‘˜์„ ์ค‘๊ฐœํ•ด์ฃผ๋Š” ์ˆ˜๋‹จ์ด ์ ์ ˆํ•˜๊ฒŒ ์žˆ์œผ๋ฉด ๋งค์šฐ ํŽธ๋ฆฌํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.


๊ทธ๋Ÿฐ๋ฐ ํ…Œ์ŠคํŠธ ๊ณผ์ •์—์„œ db์˜ ๋ฐ์ดํ„ฐ๋Š” ์กฐ์ž‘ํ•˜๊ธฐ๊ฐ€ so์— ๋น„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ๋ถˆํŽธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ์šฉ ๋”๋ฏธ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์‚ฐํ•˜๋Š”๋ฐ๋Š”

์—ญ์‹œ so๊ฐ€ ์ตœ๊ณ ๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๊ทธ๋ž˜์„œ so๋กœ๋„ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ๋”๋ฏธ์šฉ soํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•ด์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  so ํด๋ž˜์Šค๋ฅผ ๋Ÿฐํƒ€์ž„์šฉ ํด๋ž˜์Šค๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.

๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ๋ฅผ so๋กœ ๋ณ€ํ™˜ํ•  ํ•„์š”๋Š” ์—†์œผ๋‹ˆ, ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๋ฉด ๋˜๋‹ˆ ๊ฐ„๋‹จํ•˜๋‹ค.


๊ทผ๋ฐ ๊ทธ๋Ÿด๊ฑฐ๋ฉด ๊ตณ์ด soํด๋ž˜์Šค๋ž‘ ๋Ÿฐํƒ€์ž„ํด๋ž˜์Šค๋ฅผ ๋ถ„๋ฆฌํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š”๊ฐ€๋ผ๊ณ  ํ•˜๋ฉด,

so๋Š” ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ธ์Šคํ„ด์‹ฑํ•  ๋•Œ, ๊ทธ๋ƒฅ new๋กœ ์ธ์Šคํ„ด์‹ฑ ํ•˜๋ฉด ๋ญ”๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

๊ทธ๋ฆฌ๊ณ  so๋ฅผ ์ด์šฉํ•ด์„œ ๋Ÿฐํƒ€์ž„ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š”๊ฒƒ์€ ์œ ๋‹ˆํ‹ฐ ์—๋””ํ„ฐ์—์„œ ๋˜๋Š” ํ…Œ์ŠคํŠธ๋‹จ๊ณ„์˜ ๋นŒ๋“œ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ๋ฐย 

์ด๋Ÿฐ๊ฒƒ์€ ์•„์˜ˆ ๋ถ„๋ฆฌ๋ฅผ ํ•˜๋Š”๊ฒŒ ๋งž๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.



์š”์•ฝํ•˜์ž๋ฉด ๋‹ค์Œ์˜ 3๊ฐ€์ง€ ๋ ˆ์ด์–ด(?)๊ฐ€ ์žˆ๊ณ , ํ™”์‚ดํ‘œ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ๋ณ€ํ™˜๋˜๋Š” ํ•จ์ˆ˜๊ฐ€ ์žˆ์Œ ๋.

realm layer <->ย runtime layer <-ย so layer


์•„์ด๊ณ  ์ด ๊ฐ„๋‹จํ•œ๊ฑธ ์˜ค๋žซ๋™์•ˆ ํ—ค๋งธ๋‹ค.

๋‹ค๋ฅธ ์ดˆ๋ณด ์ธ๋ถ•์ด๋“ค์€ ์‚ฝ์งˆํ•˜์ง€ ๋ง๋„๋ก.


ํƒœํด ๋ฐ ์ธ์‹ ๊ณต๊ฒฉ๊ธ‰ ์กฐ์–ธย ๋งค์šฐํ™˜์˜.