Magento 2 based on the OOPs concept. It has classes and their constructor to initialize its member variable and function. So every time you changes on class constructor you need to recompile. Because Magento 2 generate code after every compilation and store them in generation directory. So for every single change on your custom class constructor, you need to recompile.
Yes, it seems little hard experience for development but better for the production site.