Where is the best place to host a class that is not intended to be a MonoBehaviour or Component?

I am having trouble wrapping my head around this ordinary class versus MonoBehaviour. I understand that a MonoBehaviour is-a class and that defining a class such as public class Weapon{...} is valid code. I also understand that MonoBehaviour enables the automatic process of function calls such as Update( ), FixedUpdate( ), etc.

However, my problem lies in where do I put that script such that the type is recognized by multiple Components.

Ex: I have two turret types

public class MountedTurret : MonoBehaviour{}
public class MovingTurret : MonoBehavior{}

Both of these I want to have an instance of class Inventory() What I don’t want to do is define two versions of Inventory.

public class MountedTurret : MonoBehaviour{
  public class Inventory{}
  private Inventory inventory;
}
public class MovingTurret : MonoBehavior{
  public class Inventory{}
  private Inventory inventory;
}

If I just define in an Inventory.cs, where do I put that script so that both my turrets can recognize that script? Is it sufficient to just sit in my project folder? Do I have to put it in some lib directory? Do I have to attach it to a GameObject?

public class MountedTurret : MonoBehaviour{
public Inventory inventory;

}

[Serializable]
public class Inventory{
//properties ...
//Methods ...
}

With Serialization it shows up in the Inspector. Asuming you use C#.

You can also let your Inventory extend from MonoBehaviour that will do it. you can then get the Component with GetComponent(); but make sure it is on the same GameObject.

Scripts in Genral a recognized from Every location in your Asset Folder and sub Folder so put it where you want.