When you print over USB (which I do), you can't send the entire body of G-code to the printer all at once. It doesn't have enough memory to hold even the code for a tiny print. So you use a program like Prusa Control or Repetier or Pronterface or any of several other programs that reside on your computer and send lines of G-code using a "handshake" protocol so that the printer indicates it's ready for the next line of code. A few lines are "buffered" in the printer, but not many. I guess if you have a very configurable terminal emulator you could make it work that way, but the dedicated programs give you huge advantages in being able to "see" the state of the printer, the print's progress, and exert some control - even during the print.
Many people use a RPi running Octoprint; the RPi can handle large G-code files. I don't have this system, but I think it actually uses the USB port on the printer's board to send G-code to the printer; the RPi just releases your computer from any responsibility during the print.
By the way, the USB port on most 3D printers is configured to be used like a serial COM port.
Also, you can copy your G-code file to an SD memory card and plug that into your printer; that doesn't use the USB port.