a class that is responsible for formatting data
an object that arranges data into a locale-specific, user-oriented representation
an object that is responsible for encoding and serializing data into messages on one end, and deserializing and decoding messages into data on the other end