I use what I am assuming is a "hard coded" address
Yes. "Hardcoding" means putting the information directly in your code, instead of using some indirect means (such as DNS or simple config file). This is a general term and not limited to IP, or even networking.
If your connect() calls refer directly to an IP address – then yes, you are hardcoding the address. If the address ever changes, you will have to recompile the program.
Are IPV6 addresses always dynamic?
No. Both IPv4 and IPv6 follow the same general rules:
Whether your ISP provides you with static or dynamic addresses depends entirely on what contract you sign with them (including what plan you choose, etc.)
For residential and smaller business connections, addresses are allocated by the ISP according to the ISP's policies. You might get one public IPv4 address or a dozen, you might get an IPv6 /64 or a /48, these allocations might be static or they might change every day – all depends on the contract that you've signed with the ISP.
How you assign addresses to your servers and other computers within your LAN depends entirely on you. If you want a device's address to remain static, you can do that.
It's true that dynamic assignment via SLAAC in IPv6 is a bit more common than DHCP in IPv4. However, 'dynamic' does not mean that the address will change. Indeed, with IPv6 SLAAC, the same device will usually keep picking the same address forever.
Finally, nothing prevents you from manually configuring a fixed address for the device. Doing so is perfectly normal in IPv6.
Or to switch to an IPV6 network would I need to get a static IPV6 address to hardcode into my application?
You shouldn't hardcode specific addresses in your application in the first place.
I guess I was more asking about how to avoid hard coding an address into an application
Put them somewhere outside the application. The two most common methods are:
using DNS – that is, configuring a domain name to point to your server;
providing a configuration mechanism – such as an .ini file, or the Registry, or something else entirely.
I'm thinking I would need to get a domain name... and then "hard code" a DNS IPV6 name into my application
Yes. You're still hardcoding something (the domain name), but at least the domain name is much less likely to change – whereas a server's IP address may have many reasons to be changed. (For example, the server might be moved to another location, or its whole network might be restructured, or switched to a different ISP.)
Although I would say that there isn't such a thing as "DNS IPv6 names". A domain name may refer to both IPv4 and IPv6 addresses at the same time, and it might even have multiple addresses of the same type.
A well written program will try all addreses it finds (e.g. with help of the getaddrinfo() function). This allows it to work in both IPv4-only and IPv6-only networks, as well as mixed ones.