C++ 언어를 배워온, 배우고 있는 입장에서 C++ 언어에 대한 이해를 위해 작성합니다. 아래의 내용은 대학교 실습강의 조교로서 작성한 내용을 일부 포함하고 있기에 상업적 목적으로의 이용을 금지합니다.
프로그래밍 언어는 함수를 기본으로 합니다. 함수란 블록 (중괄호 { }로 표현된 부분) 내부에 정의된 문장들을 실행시키는 프로그램 조각입니다.
main() 함수 또한 함수이기에 C++도 Hello World부터(굉장히 기네요... 줄여서 씨헬이라 하겠습니다.)
씨헬 1번에서 작성한 HelloWorld 프로그램에선 출력하는 문장을 실행시켰었죠.
함수는 호출됨으로써 실행이 됩니다. 100번 호출하면 100번 실행이 됩니다. 따라서 다음과 같은 경우 함수를 작성하는 것을 권장합니다.
1. 문장이 많은 구간이 반복해서 실행될 때
2. 특정 구간이 변수의 값만 바뀌면서 반복해서 실행될 때
3. 특정 구간이 논리적으로 분리해서 생각하는 것이 편할 때
이러한 내용은 소프트웨어 설계의 측면에서 생각해야 하기 때문에 여러 가지 고려해야 할 부분이 많지만, 극단적인 예로 main() 함수에 몇 천줄의 코드를 넣는 것보다는 함수를 여러 개로 쪼개는 것이 낫다는 것입니다.
DepositCalculator
/**
* << 예적금 계산기 >>
* NAVER, DAUM 등에서 간편하게 제공하는 예적금에 대한 만기지급액을 계산하는 프로그램을
* 기능적으로 동일하게 구현한 프로그램
*
* @개발자 레브데브
* @작성일시 2015.05.05
*/
// pow(x,y) 함수를 이용하기 위한 헤더파일 포함
#include <cmath>
/** 단리식 보통예금에 대한 원리합계를 구하는 함수
* @deposit 예치금액 (원)
* @month 예치기간 (개월)
* @interestPerYear 예금금리 (연 %)
* @return 만기지급액 (원)
*/
const long double calcSimpleOrdinaryDeposit(
const unsigned long deposit,
const unsigned short month,
const double interestPerYear) {
// interestPerMonth = interestPerYear(%) / (12(month) * 100)
// amount = deposit * (1 + interestPerMonth * month)
long double amount = deposit * (1 + interestPerYear / 1200.0 * month);
return amount;
}
/** 복리식 보통예금에 대한 원리합계를 구하는 함수
* @deposit 예치금액 (원)
* @month 예치기간 (개월)
* @interestPerYear 예금금리 (연 %)
* @return 만기지급액 (원)
*/
const long double calcCompoundOrdinaryDeposit(
const unsigned long deposit,
const unsigned short month,
const double interestPerYear) {
// interestPerMonth = interestPerYear(%) / (12(month) * 100)
// amount = deposit * (1 + interestPerMonth)^month
long double amount = deposit * pow(1 + interestPerYear / 1200.0, month);
return amount;
}
/** 단리식 정기적금에 대한 원리합계를 구하는 함수
* @deposit 예치금액 (원)
* @month 예치기간 (개월)
* @interestPerYear 예금금리 (연 %)
* @return 만기지급액 (원)
*/
const long double calcSimpleInstallmentDeposit(
const unsigned long deposit,
const unsigned short month,
const double interestPerYear) {
// total_amount = total( deposit * (1 + interestPerMonth * month) )
long double total = 0.0;
for (int m = 1; m <= month; m++)
total += calcSimpleOrdinaryDeposit(deposit, m, interestPerYear);
return total;
}
/** 복리식 정기적금에 대한 원리합계를 구하는 함수
* @deposit 예치금액 (원)
* @month 예치기간 (개월)
* @interestPerYear 예금금리 (연 %)
* @return 만기지급액 (원)
*/
const long double calcCompoundInstallmentDeposit(
const unsigned long deposit,
const unsigned short month,
const double interestPerYear) {
// total_amount = total( deposit * (1 + interestPerMonth)^month )
long double total = 0.0;
for (int m = 1; m <= month; m++)
total += calcCompoundOrdinaryDeposit(deposit, m, interestPerYear);
return total;
}
// 입출력 객체를 사용하기 위한 헤더파일 포함
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
// 프로그램은 main() 함수를 실행합니다.
int main(void)
{
cout << "<< 예적금 계산기 >>" << endl << endl;
// 예치금액을 입력받습니다.
cout << "예치금액(원) : ";
unsigned long deposit = 0; // 예치금액 (원)
cin >> deposit;
// 예치기간을 입력받습니다.
cout << "예치기간(개월) : ";
unsigned short month = 0; // 예치기간 (개월)
cin >> month;
// 연이율을 입력받습니다.
cout << "예금금리(연 %) : ";
double interest = 0; // 연이율 (%)
cin >> interest;
cout << endl;
unsigned long long maturedAmount = 0; // 만기지급액
// 단리식 보통예금의 만기지급액을 출력합니다.
maturedAmount = calcSimpleOrdinaryDeposit(deposit, month, interest);
cout << "단리식 보통예금 만기지급액 : " << maturedAmount << endl;
// 복리식 보통예금의 만기지급액을 출력합니다.
maturedAmount = calcCompoundOrdinaryDeposit(deposit, month, interest);
cout << "복리식 보통예금 만기지급액 : " << maturedAmount << endl;
// 단리식 정기적금의 만기지급액을 출력합니다.
maturedAmount = calcSimpleInstallmentDeposit(deposit, month, interest);
cout << "단리식 정기적금 만기지급액 : " << maturedAmount << endl;
// 복리식 정기적금의 만기지급액을 출력합니다.
maturedAmount = calcCompoundInstallmentDeposit(deposit, month, interest);
cout << "복리식 정기적금 만기지급액 : " << maturedAmount << endl;
cout << endl;
return 0;
}
C++언어를 처음 배울 때 자주 사용하지 않는 키워드들(unsigned, short, const)을 사용해서 그렇지, 프로그램 자체는 복잡하지 않습니다. 어쨌든 프로그램의 논리적으로 구분되는 부분을 함수로 만들면 언제든지 호출하여 사용할 수 있습니다.
이 다음에는 DepositCalculator를 class로 캡슐화하는 코드를 올리겠습니다.
- C++을 처음 배우는 분들을 위한 조언
const는 변수에 상수 속성을 부여합니다. 즉, 바꿀 수 없게 한다는 거죠. 프로그램이 길어지고 보기에 불편해지더라도, 실수로나 고의적으로나 예측할 수 없는 방법으로 프로그램이 오작동하는 것을 막기 위해선 가능한 모든 곳에 const를 지정하는 것이 필요합니다.