Iām going to try to provide a pseudo-example for ya, since I also questioned this method of design at first as well. Hopefully this can clear things up a bit
As you stated, a magazine component would likely be pointless in your scenario as is, that being just guns.
Where benefits start arising is if you have anything more.
In standard OOP design, youād have a gun, melee, and grenade classes.
That can result in a lot of, even if minor, overlapping functions/code/etc., and in the end running slower and/or being less organized and, in turn, harder to debug
With ECS designs, you could just have some components that combine to make the 3 aforementioned classes:
HasLimitedUses: Can be used to define how many uses an item has, reload time, use rate, capacity, and if you have some system like Apocalypse Rising games where ammo type matters per tool, this can take care of that too.
HasAttack: Takes care of all throwables and ranged projectiles alike. You can define projectile velocity, accuracy, range, etc. here
You can also use the above attributes for melee as well, its as simple as tuning projectile speed down, projectile size up, and then the rest to your hearts desire.
Explodes: (IDK what to name this, trying to speedrun this reply) Defines fuse time/impact, explosion range, dmg, etc.
Now, on top of what the OOP option would have given, you can have pretty much any thrown item without making a new class, guns with explosive rounds without having to bog down the base gun class or make a new one- this also applies to explosive melee if youāre into that- and anything else you can think of with that simple collection of 3 components.
In the end, this is little more functional than the OOP example, difference being it lets you expand more, easier, and with less need for optimizations.
If you have any more specific questions I can try to answer them, but I myself am new to using these (I want to make a factorio esque game, so performance and expandability is of HIGH priority)