when to use Classes vs Objects vs Case Classes vs Traits : <p>This is what I understood so far.</p>

<p>Classes should be used when we need to instantialte objects</p>

<p>We use "Objects" only when we have a singleton requirement meaning no need for multiple instances of "objects". I am thinking when we are building common library functions or utility functions in a project, we can use "objects" that way we need to instantiate each time we use methods/functions in that Object.</p>

<p>Case classes can be used when we want to save boilerplate code. Say we have "Stock" class. Each stock in general has hundreds of member variables. Instead of developer writing code for setters and getters, if we case class, it generates lot of default code.</p>

<p>Traits: don't know when to use. Both Traits and Objects don't take parameters during initialization.</p>

<p>Any more thoughts and ideas kindly share.</p>
