These are great for doing a little heavy lifting with a microcontroller. Most micros can only source or sink about 20mA of current with each pin. If you’re trying to do something like drive a high-power multi-segment LED display, the current from a microcontroller pin just won’t cut it. You could run the micro outputs in parallel for more current, but then you lose pins for other purposes. Using an external array for the switching lets each pin drive a unique load at higher current, with the added benefit of offloading some of the heat from the microcontroller.
The ULN2003/4 and ULN2803/4 are 7- and 8-element Darlington arrays which can switch up to 500mA (MAX!) per channel at up to 50 volts. Channels can be combined to switch higher current loads (still 50V though). Take note of that “500mA MAX”: while the 2×03’s can switch that much current, they can’t do it forever, because they can’t dissipate the heat. The total amount of switchable current will depend on the number of channels you’re driving at the same time, and the duty cycle of the input signal. See the datasheet (PDF) for more information.
The 2xx3 chips have 2.7k input resistors, so they can be driven from a 5V TTL/CMOS line — if you’re using an Arduino, you should get the ULN2003/2803. The 2xx4 chips have 10.5k resistors for inputs of 6-15 volts.
These are great for driving multiple RGB lines with lots of LEDs, or a bank of relays or motors (they have clamp diodes built in!). The following illustrates how to properly connect the ULN for driving an inductive load like a DC motor.
Purchasing note: these chips were originally (and still are) made by TI. The TI chips are great, but recently I noticed Mouser has begun carrying the Toshiba versions for about 30% less cost. I’ve used both, and they perform equally well.