The RS232 specification requires a signal voltage of between -3 and -30V for a logical '1', and a signal voltage of between +3V and +30V for a logical 0, input impedance is around 3k and output impedance should be around 300 ohms.
If you're going to implement a fully complient interface then yes, you will need something like the MAX232 - or an alternative, like the MAX3221 which does come in a quite small TSSOP package.
Alternatively you could utilise one of the handshaking lines from the DTE (PC or similar) to supply the negative voltage and use a simple transistor level changer to handle the signal inversion (from the MCU) and level shifting. This does however require that the DTE is configured such that it's handshaking lines are in a suitable state.
Another option is to take advantage of the fact that most equipment these days implements RS232 using something like a MAX232 device. While these are fully complient with the specification they also extend things so that the input levels are basically +2.8 to +30 for a logical '0', +1.4 to -30V for a logical zero (from memory) - in other words the receivers actually include TTL signal levels. So you can just invert the signal on the UART pins and pass it out directly to the DTE device. This technique is used on quite a few devices including many handheld GPSes. I'm not saying you be 100% compatible but you'll find this works more often than not.
You still need to invert the UART signals (unless you're bit-banging the pins yourself), two inverters should be smaller than the MAX232 plus associated circuitry, but probably not by much.