When you start Bitcoin Core, it reads a file on disk called peers.dat which contain the IP addresses of all peers that is has ever connected to. It will start with 10 outgoing connections to peers and at least 10 incoming connections which grows over time as more nodes are discovered, and added to the peers.dat file appropriately.
There isn't a requirement to maintain incoming connections nor can the node decide whether other nodes should connect to it. Outgoing connections is capped at 10 but can be lower as well. Incoming connection doesn't change with the discovery of other nodes but the knowledge of your node by others. 2 of the peers are reserved as block-relay only nodes which is read from anchors.dat.