소스코드 수정을 가하고 테스트 코드를 많이 추가 함