You can do a few things. You can break your class into multiple .cpp files such as MyCharacter.cpp, MyCharacter-Movement.cpp, MyCharacter-SomeComponent.cpp. You can utilize OOP by making Inheritance Classes such as MyCharacter, MyMobileCharacter, MyComponentBasedCharacter. Finally my personal choice is to compartmentalize special functionality into ActorComponents. ActorComponents always have a reference to the Actor they are attached to so they can call public functions of your Character, they can be ticked for frame updates or not. You can also initialize them from your Character in the constructor (if they are not optional), you can also use the C++ function FindComponentByClass if it is optional and may or may not exist for C++ sake. All of these strategies can be utilized just make sure no matter what you do you pick and stick with it, if you change your strategy make sure you go all the way with the changes.
I personally utilize Components. I have
All of these things are design with a specific purpose, some may rely on each other, some may be independent. My PlayerController handles input which calls functions on the possessed Character Class. My CharacterClass is responsible for Actions not Input, that I feel is an important distinction, I like to stick to a Brain to Body sort of idea where the Controller is the Brain which tells the Body how to function. I Also utilize a Custom Movement Component for all Movement Related actions such as switching between Walking, Running, Sprinting, etc. Camera Systems also do not Exist ON my Character Class/Blueprint my PlayerController is responsible for Creating the Third Person Camera System which attaches and Detaches to from the Pawn, this allows me to utilize any Character Class for my PlayerController and not have to alter it for an AIController. If I need Access to the Inventory on the Character the PlayerController can call a function such as GetInventoryComponent() or I can use the FindComponentByClass if it is optional. HUD and User Widgets have a reference to the PlayerController directly so HUD Actions all go through my Player Controller. Say You have an InventoryItemWidget where you double click on it to use or equip the item. The Widget simply calls PlayerController->UseItem(inventoryIndex) and the Player Controller is responsible for triggering the Use Operation on that item. I like this approach because it is applicable to the same functionally being called using an AIController who does not receive input from the user to perform actions like use an item.