I wouldn't buy a domain until I knew where I would host it (assuming you're actually going to put something on it) - because:a) they may provide a deal to rent/host at the same place, andb) it is so much easier to pay one bill than keep track of separate hosting and domain accounts.
I always use Google Domains. Easy to use interface, cheap, no up-selling, and includes private registration.