Dal punto di vista logico e semantico hanno due usi completamente diversi.

Un id identifica un oggetto HTML in maniera univoca: e` "un'identita`" che viene data all'oggetto (<div> o qualsiasi altro tipo). Ne consegue che non vi possono esserci due id uguali nella stessa pagina, come non vi possono essere due persone con lo stesso nome nella stessa famiglia.

Una classe, invece attribuisce alcune caratteristiche all'oggetto, tant'e` che ad un oggetto si possono attribuire piu` classi, e la stessa classe si puo` attribuire a piu` di un oggetto.

Un id viene usato anche dal JS quando si vuole identificare un oggetto (getElementById() ) per leggerlo o modificarlo, cosa che non ha senso fare con le classi.


Dal punto di vista pratico e se si parla solo di attributi CSS, in alcuni casi id e class possono essere equivalenti (ma non sempre!).