Just to add an alternate opinion on object pooling, I don’t do it at all in my games and I have never had performance issues related to them so I would recommend keeping the code as simple as possible and only optimizing based on performance profile data from your game. You can always add object pools later for things that need a performance boost.
Personally I would have a bullet class with it’s own update and draw BUT the important part is to reduce code duplication and complexity so if you have the same bullet drawing code in the player and enemy maybe figure out a way of just having it in one place.