본문 바로가기
BASIC

대출이자

by 자동매매 2023. 12. 2.
만기일시상환(萬期一時償還)
약정 기간 동안 대출 원금에 대한 상환 없이 이자만 부담하는 방식이다.  전세자금대출
 
대출원금을 대출 만기일에 전부 상환하며, 대출기간 중에는 이자만 납부한다. 원리금 상환금액 부담은 가장 적으나, 대출원금이 줄어들지 않으므로 총 납부해야 하는 이자비용이 큰 편이다.
 
원리금균등상환
대출 원금과 이자를 합친 금액 즉 원리금을 만기일까지 균등하게 상환하는 대출 상환 방식이다.
휴대폰 단말기 할부금 상환
 
매달 내야 하는 납부금이 동일하기에 자금 관리 면에서 유리하다.
 
원금균등분할상환
대출한 돈을 일정 기간마다 대출 원금에 대해서는 매월 동일한 금액으로 상환하고 남은 대출 원금에 대한 이자를 상환하는 방식으로 즉 매달 갚아나가는 원금이 일정하고 이자가 변하는 상환 방식이다.
신용카드의 할부금 상환
 
남은 대출 원금에 대해서 이자 비용이 계산되어, 시간이 지날 수록 납입하는 이자 상환 금액이 점점 감소하게 되는 방식이다. 원금을 바로바로 상환하는 즉시분할상환 방식과 일정기간 동안 이자만 납부 한 후 원금을 천천히 갚아나가는 거치식 분할상환 방식이 있다. 원리금 상환에 비해 초기에 부담하는 비용은 높지만 총 이자금액 부분은 상대적으로 작기 때문에 많이 활용하고 있다. 화폐가 시간이 지나면 가치가 낮아지기 때문에 일반적으로 상환기간이 15년 이내이면 원금균등상환방식을 이용하는것이 좋으며 그 이상의 장기 대출적인 대출을 진행한다면 원리금 분할 상환방식을 활용하면 좋다.
 
거치식 상환
일정 기간 동안 원금은 갚지 않고 이자 비용만 내는 거치 기간을 설정하는 것을 의미한다.
 
  만약 거치 기간이 종료한 후 원금 전액을 갚는 경우라면 만기일시상환과 완전히 동일하게 되므로 이 경우를 가리키는 경우는 없다.  
  일반적으로 거치기간이 끝나고 나면 '원금균등분할상환' 또는 '원리금균등상환'으로 상환하게 된다. 즉, 이 두 상환 방식에 더해서 같이 사용될 수 있다.  

 

 

 

 

 

 

 

대출.xlsx
0.03MB

 

# mortgage.py
class 원금만기일시상환:
    def __init__(self, 대출원금, 대출이율, 대출기간):
        self.대출원금 = 대출원금
        self.대출이율 = 대출이율 / 100
        self.대출기간 = 대출기간
        self.월평균이자 = round(self.대출원금 * (self.대출기간 * self.대출이율) / (self.대출기간 * 12), 0)
        self.월상환금 = 0
        self.월납입원금 = 0
        self.월이자 = 0
        self.월잔금 = self.대출원금
        self.회차 = 0
        self.납입원금누계 = 0
        self.총이자 = 0
        self.총상환금 = 0

    def 상환(self):
        if self.대출기간 * 12 > self.회차 >= 0:
            self.회차 += 1
            if self.회차 == self.대출기간 * 12:
                self.월납입원금 = self.대출원금
            self.월상환금 = self.월평균이자 + self.월납입원금
            self.월이자 = self.월평균이자
            self.납입원금누계 += self.월납입원금
            self.월잔금 -= self.월납입원금
            self.총이자 = self.월평균이자 * self.회차
            self.총상환금 = self.대출원금 + self.총이자
        else:
            print("잘못된 입력")


class 원금균등상환(원금만기일시상환):
    def __init__(self, 대출원금, 대출이율, 대출기간):
        super().__init__(대출원금, 대출이율, 대출기간)
        self.월납입원금 = self.대출원금 / (self.대출기간 * 12)
        self.월평균이자 = 0

    def 상환(self):
        if self.대출기간 * 12 > self.회차 >= 0:
            self.회차 += 1
            self.월이자 = self.월잔금 * (self.대출이율 / 12)
            self.월상환금 = self.월이자 + self.월납입원금
            self.납입원금누계 += self.월납입원금
            self.월잔금 -= self.월납입원금
            self.총이자 += self.월이자
            self.총상환금 += self.월상환금
            self.월평균이자 = self.총이자 / self.회차
        else:
            print("잘못된 입력")


class 원리금균등상환(원금만기일시상환):
    def __init__(self, 대출원금, 대출이율, 대출기간):
        super().__init__(대출원금, 대출이율, 대출기간)
        self.월평균이자 = 0
        self.월상환금 = (
            self.대출원금 * (self.대출이율 / 12) * (1 + (self.대출이율 / 12)) ** (self.대출기간 * 12)
        ) / ((1 + (self.대출이율 / 12)) ** (self.대출기간 * 12) - 1)

    def 상환(self):
        if self.대출기간 * 12 > self.회차 >= 0:
            self.회차 += 1
            self.월이자 = self.월잔금 * (self.대출이율 / 12)
            self.월납입원금 = self.월상환금 - self.월이자
            self.납입원금누계 += self.월납입원금
            self.월잔금 -= self.월납입원금
            self.총이자 += self.월이자
            self.총상환금 += self.월상환금
            self.월평균이자 = self.총이자 / self.회차
        else:
            print("잘못된 입력")


if __name__ == "__main__":
    c = 원리금균등상환(10000000, 5, 5)

    for i in range(60):
        c.상환()
        print(
            f"{c.회차:2d} {c.월상환금:15.1f} {c.월납입원금:15.1f} {c.월이자:15.1f} {c.납입원금누계:15.1f} {c.월잔금:15.1f}"
        )
    print(c.월평균이자)
    print(c.총이자)
    print(c.총상환금)

'BASIC' 카테고리의 다른 글

주피터 노트북  (1) 2023.11.30
모듈과 패키지  (0) 2023.11.28
정규표현식  (0) 2023.11.28
데코레이터  (1) 2023.11.28
코루틴  (0) 2023.11.28

댓글