If you look at those words deeply, they are distinguished from each other. 고맙다, 감사하다 botn can be used for any situation but deep inside, 고맙다 is for someone helps you. 감사하다 is for just thanking someone even someone dosen't help you now. F.Y.I you thanks your father, he is not helping you now but when u think of him. You just thank him for what he already has done before. You are happy and thank him when you just think of him. 감사하다 has that kind of "thank you".