Danny Henricks, 35, told the ABC he was on holidays in Queensland on a spearfishing expedition, but was separated from the group when the incident occurred.
"I was going to go for a deep dive, got halfway down ... I seen him [the shark] on edge of the channel deep down," Mr Henricks said.
"He didn't worry me at all, he didn't care about me, then he saw me, turned and came towards me half-pace ... I sort of stopped in the middle of the water.
"I thought he was going to come towards me half-pace ... I thought he was going to suss me out so I was just going to poke him away to show I wasn't food. I just wanted him to keep me at a distance.
"The last five to six metres he just went full charge.
"I lunged forward with the gun a little bit just before he got there but most of it was his force."
The shark was impaled on the speargun through the mouth, and thrashed around before Mr Henricks let go and swam for the surface.
"I thought about getting it [the gun] back but thought it wasn't worth it ... I was miles from anywhere and I didn't know what was happening and why it was happening, so to be on the safe side I let it go and went back to the boat."