function, struct, contract 를 구분하는 이유가 뭐야?? 함수생성 방식에 차이가있나???