The amount of a fee depends on the size of transaction (in kilobytes).
Actually the fee depends on (1) the fee rate in sat/B and (2) the
weight of the transaction.
Moreover, if you just send your funds to the same BTC-address, you will pay the transaction fee to the miners.
You always pay the transaction fees to the miner who mines a block including your transaction.
This feature is used when you want to get a change back.
A change is simply just a second output (besides the first-/main- output which is the actual balance you want to transfer).
E.g. You have received 1 BTC and want to send 0.3 BTC.
You make a transaction with one input (1 BTC) and two outputs (0.3 BTC and 0.7 BTC(your change), ignoring fees).