Applied boolean modifier leaving shading artifacts with flat shading
Another way is to use the Auto Smooth option in the Mesh Context.

Set your object's shading to Smooth first to see the effect.



One advantage this has over the Edge Split modifier is that it won't cause problems if you add certain other modifiers subsequently in the stack, such as SubSurf. Another is that it doesn't increase your vertex count.

Note that any edges that have been marked as "sharp" (Edit Mode: CtrlE > Mark Sharp) will remain sharp even when the Auto Smooth angle value is at its maximum 180°. Knowing this, you can manually specify which edges should be sharp instead of relying on an automatic calculation by angle, if you need to be precise.

So you can choose between the Edge Split modifier and Auto Smooth depending on which is most appropriate for your needs.