Table views in PostgreSQL are not real tables, but nevertheless behave like them when it comes to using a
SELECT statement. Typically you'd use them to combine multiple tables, restricting access to maybe a subset of columns from each, and only having one point of contact—which is great for a GeoServer data source. Each time you query a view, the underlying query that the view consists of is also executed, so you want to make sure you have appropriate indexes in place.
The data is not stored twice: the original tables obviously take up space, but the view itself is essentially just instructions. (There are also materialised views, for which this doesn't hold.)
You haven't included much information about how you're using GeoServer (as a tile server?). Tiles will probably be cached by default, which uses space on disk. But at the database level, the view will not be noticeable in terms of additional disk space, unless your use of a view necessitates a really big index that you would not otherwise need.