반응형

최근에 유니티공부를 시작하고 플래시는 이제 안만질 것 같아서 기록겸 추억겸 복습겸 만들던거 올림.

 

 

무려 5년 전에 만들었던 플래시 던파 모작이다..... 현생 살다 보니 플래시가 망했다 ㅠ

저 때 플래시로 던파 그대로 카피하는게 꿈이었는데 실력이 안돼서 포기했었다.

그러다 퇴사하고 프로그래밍 공부를 다시 해보려고 마음먹고 공부하다보니 다시금 이 모작이 생각났다.

예전에 막혔던 상당부분들의 파훼법이 막 생각이 나서 다시 만들어 보기로 했다.

2024.01.19 ~ 02.05 정도? 약 2주 정도 전력을 다해서 다시 빡세게 만들어보았다.


 

작업 환경_1

 

작업 환경_2

 

이건 몬스터 처치 시 아이템 드롭 액션(코드)중 일부

 

이건 몬스터 액션중 일부


 

어쨌든 3주간의 결과


던파를 5년 전부터 지금까지 모작해보면서 느낀 점이 참 많다. 던파가 옛날 게임인데도 불구하고 정말 심오한 부분이 많았음.

 

1. 일단 오브젝트보다 뒤에 있으면 캐릭터가 오브젝트보다 뒤로 가고, 앞에 있으면 다시 캐릭터가 오브젝트보다 앞으로 오고... 이걸 플래시로 구현하려면 "swapDepth"라는 심도를 조절해 주는 명령어를 써야 하는데, 인게임에 같은 심도 값을 가진 무비클립(객체)들이 하나라도 존재한다면 객체가 사라져 버리는 치명적인 약점이 있어서 충돌하지 않게 하려고 머리를 진짜 많이 썼다...

 

2. 그리고 2D게임인데 x(양 옆), y(점프하는 축), z(위 아래)축이 구현돼있어서Hit판정을 구현하는데 참 애먹었다. 공격할 때 HitBox에 몬스터가 닿더라도 캐릭터와 피격자의 Y축이 일정 범위 안에 닿았는지도 판정해야 하고... 몬스터가 다운 중에도 때릴 수 있는 공격이 있고, 아닌 공격이 있고.... 생각할게 참 많았다.

 

3. 플래시로 인벤토리같은 슬롯 시스템과 Drag&Drop을 처음 도전해 본 건데, 나름 문제없이 상상대로 잘 구현돼서 뿌듯했다. 특히 이거 덕분에 배열공부에 은근히 도움 된듯. (슬롯마다 [아이템 넘버, 강화 수치, 부가 효과 ... 등등])

 

4. 플래시로 공격속도를 완전하게 구현은 불가능한 줄 알았는데... 이것도 머리를 꽁꽁 싸매고 잔머리 막 굴리니까 어떻게든 구현이 됨...

 - 5년전에 만들던 공격속도 구현방식

공격모션의 프레임이 5틱마다 넘어간다고 할 때, 공격속도(1~4)의 변수 값만큼 틱을 뺌. 이 방식은 메이플처럼 공격속도를 단계식으로 구현하는 방식으론 채택할만은 한데 던파처럼 %값만큼 오르게는 못함.

 - 그래서 현재 채용한 공격속도 구현방식

공격모션의 프레임이 5틱마다 넘어간다고 할 때, 틱을 1에서 추가로 공격속도/100만큼을 더 뺀다. 공격속도가 70%라면 틱은 1이 아니라 1+0.7=1.7의 값만큼 계산된다. 초과된 틱은 다음 모션의 틱에서 추가로 뺀다. (예를들어 1.7씩 틱이 깎이다 보면 5.1이 되어서 잉여 값이 남아버리는데 다음 모션에서 이 값을 추가로 빼줘서 다음 모션은 4.9틱 후에 넘어가는 식으로) 이러면 공격속도를 %만큼 온전히 구현할 수 있다....

 

5. 그리고 은근 어려웠던 것 >> Hp, Mp_Bar와 같이 동그란 모양의 Bar는 Scale값을 조절하면 타원형이 돼서 평범한 사각형 모양의 Bar처럼 Scale로 날먹처리를 할 수가 없었다. 머리 꽁꽁 싸매다가 Layer Mask로 이미지를 덮는 방식을 채용했다. (이거 말곤 답이 없는듯?)

(네모칸에 닿은 이미지만 보임. 100 프레임으로 나눠서 Hp를 백분율로 나눴을 때, 해당 프레임으로 가도록 설정.)

 

5개만 말했지만 이 외에도 이것저것 공부가 정말 많이 되었다. 일단 안 쓰는 엔진으로 게임 만들었다고 시간낭비한 기분은 안 들었다.

아무리 플래시가 망했다곤 하지만 이런거 알아두면 나중에 다른 게임엔진에서도 잘 써먹을 수 있을듯. 

최근엔 유니티를 공부해 봤는데, 너무 쉬워서 좀 허무한 느낌도 받았다. 아니면 초반단계라 쉬운 건가?

당연한거지만 유니티가 기능면에서 압도적으로 좋다. 렉도 압도적으로 적다.

이제 플래시는 보내줄 때 인가보다...

반응형
반응형

 

어도비 플래시 뜨문뜨문 만지던 거 합쳐서 5년 남짓 했던 내가 드디어 2024.02.09부터 유니티공부를 하기 시작했다.

게임엔진이란게 겉보기에 너무 어려워 보여서 겁먹고 도전해보질 못했다.

플래시 서비스종료한지가 언젠데 고집 피우지 말고 큰맘먹고 유니티를 배워보기로 했다.

겁먹은 것과 달리 실상은 너무 쉬웠다. 일단 양질의 강좌가 너무 많았다.

유니티를 공부한지 4일 만에 게임 하나를 만들어냈다.

이렇게 쉬울줄 알았으면 좀 더 빨리 공부할걸... 참 후회된다...

지난 시간이 너무 아깝다...


 

-소스 출처

Life Bar - Power Bar - Exp Bar | OpenGameArt.org

Space Parallax Background | OpenGameArt.org

Aircrafts | OpenGameArt.org

반응형
반응형

이 글은 도서 "C++ 기초플러스 6판"과 작성자의 공부 내용을 토대로 작성했습니다.
코드는 Visual Studio Community 2022 프로그램을 통해 작성했습니다.
오타나 지적은 저에게 많은 공부가 됩니다.

변수

변수... 프로그래밍을 시작할 때 변수라는 단어를 지긋지긋하게 많이 듣게 된다.....

그만큼 변수는 프로그래밍을 할 때 필수요소 중 하나다.

쉽게 설명하기 위해 단어를 직역해 보면 알 수 있듯이 "변할 수 있는 값"이라고 생각하면 편하다.

이번 회차에선 변수란 무엇인지, 변수를 어떻게 쓰는지, 마지막으로 변수를 왜 사용하는지에 대해 이해해 보자.

필수요소지만 사실 매우 쉬운 개념이니 급하신 분들은 1번 항목은 넘어가도 될 것 같다!

 

1. 그래서 그게 뭔데

앞서 간단하게 설명했지만, 뭔가 있어 보이게 설명을 해보자면, "변할 수 있는 데이터값을 저장하기 위한 이름을 가진 메모리 공간"이다. 

 

???:그래서 데이터값이 뭐고 이름은 왜 가지고 메모리 공간은 뭔데?

ㄴ그렇다. 아무것도 모르는 사람에겐 너무나도 추상적인 설명이다... 그러므로 하나씩 알아보자.

 

데이터값에는 무슨 값들이 저장되는 것일까?

-해당 변수가 지정한 타입(ex int, char, float 등)에 맞는 값을 할당받을 수 있다.

 

이름은 왜 가지는 것일까?

-변수에 이름을 지어주는 이유는 당연하게도 다른 변수와 구분할 수 있기 위함이다.

우리가 가전제품을 살 때도 같은 모델끼리 구분하기 위해 모델번호가 있듯이, 변수도 구분을 해줄 필요가 있다.

 

메모리 공간은 뭐임?

-우리가 잘 아는 컴퓨터의 RAM(주기억장치)의 저장공간을 메모리공간이라고 한다!!

우리가 할당한 변수의 값은 즉 RAM에 저장된다는 것인데, 중요하진 않다 그냥 넘어가자!

 

 

 

 

2. 그래서 어떻게 쓰는데

우리가 변수를 사용할 때 알아야 할 용어가 있다. 바로 "선언"과 "초기화"다.

우린 변수를 사용하기 위해 메모리 공간에 해당 변수의 공간을 할당받아야 한다. 그리고 할당받은 공간에 값을 넣어야 한다.

여기서 "선언"이 메모리 공간을 할당받는 행위를 가리키는 말이고, "초기화" 가 할당받은 메모리 공간에 값을 넣는 것을 가리킨다.

사실 웅장하게 설명한 것에 비해 사용법은 간단하다. 아래 문법부터 보자.

데이터타입 변수이름 ;  //변수 선언
변수이름 데이터값 ;  //변수 초기화

이게 사실 끝이다. 정말로...

 

하지만 변수 선언과 초기화 시 주의해야 할 점이 한 가지 있다.

바로 선언한 변수의 데이터 타입과 초기화하고자 하는 값의 데이터 타입이 같아야 한다. 만약 데이터 값이 서로 다르다면 에러가 뜨거나, 오차가 발생할 수 있다. 아래 예제에서 다뤄보겠다.

 

기본적인 변수의 문법은 저러하지만, 사실 변수의 선언과 초기화에는 여러 가지 팁이 있다.

//변수 선언과 초기화를 동시에 하는 법
1. 데이터타입 변수이름 = 데이터값 ;
2. 데이터타입 변수이름 (데이터값) ; // 이 방식은 잘 채용하지 않는다.

3. 데이터타입 변수이름1, 변수이름2, ... ;  //같은 데이터타입이면 묶어서 선언할 수 있다.
   변수이름1 = 데이터값 ;
   변수이름2 = 데이터값 ;

// 위에 것들을 응용하면 이렇게도 쓸 수 있다.
4. 데이터타입 변수이름1 = 데이터값, 변수이름2 = 데이터값, ... ;  //선언과 초기화를 동시에

2번 방식은 주석문에도 적었듯이, 대부분의 프로그래머들이 사용하지 않는 방식이다. 개인적으로 1번 방식이 보기에 직관적이기도 하고, 2번은 함수와 형식이 비슷해서 헷갈리니까 안 쓰는 것이라고 생각한다..(물론 "{}"를 쓰지 않으므로 함수는 아님.)

 

아래 예제는 변수를 사용해 간단한 덧셈을 하는 프로그램이다.

#include <iostream>

int main() 
{
	int a, b;  // int(정수형)타입의 변수 a와 b를 선언
	a = 1;  // a를 1로 초기화(대입)
	b = 2;  // b를 2로 초기화(대입)
	std::cout << a + b;  // a + b 의 결과값을 출력
	return 0;
}
// 출력은 3이 나온다.

설명할 필요가 없는 당연하고도 간단한 프로그램이다.

 

그리고 앞서 설명했던 선언한 데이터 타입에 맞지 않는 데이터 값이 초기화했을 때를 가정해 보자. (더보기 클릭)

더보기
더보기

아래 예제를 보자.

#include <iostream>

int main()
{
	int a;  // int(정수형)타입의 변수 a를 선언
	char b;  // char(문자형)타입의 변수 b를 선언
	a = 1;  // a를 1로 초기화
	b = 2;  // b를 2로 초기화
	std::cout << a + b;  // a + b 의 결과값을 출력
	return 0;
}
// 출력은 몇이 나올까?

앞서 호들갑을 떨면서 주의했지만? 결과값은 올바르게도 3이다.

C++은 친절하게도 웬만하면 받은 데이터 값의 타입이 해당 변수의 타입과 달라도 자동으로 타입을 변환해 준다.

하지만? char형은 홑따옴표 ' ' 을 사용해 변수를 선언하는게 일반적이다.

 

아래 예제를 보자.

#include <iostream>

int main()
{
	int a;  // int(정수형)타입의 변수 a를 선언
	char b;  // char(문자형)타입의 변수 b를 선언
	a = 1;  // a를 1로 초기화
	b = '2';  // b를 2로 초기화
	std::cout << a + b;  // a + b 의 결과값을 출력
	return 0;
}
// 출력은 몇이 나올까?

이번에는 3이나오지 않고 51이 나온다.

엥? 홑따옴표만 추가한 것인데 어떻게 값이 이렇게 달라질 수 있을까?

그 이유는 바로 "아스키코드" 때문이다.

자세한 설명은 여기서 못하지만, 간단하게 설명하자면 이렇다. 이해만 하고 넘어가자.

 

1. char형 데이터값에 홑따옴표를 붙여 줌으로써 변수 b의 값 '2'가 문자상수가 된다.

2. b만 출력하면 겉은 2로 보이지만 실질적인 b의 값은 2의 아스키 코드 값인 50이 초기화되어있다.

3. 따라서 1 + 50 = 51 의 값이 나오게 된다.

3-1. 추가적으로 변수 b의 값에 'a'를 넣게 되면, a의 아스키 코드 값인 97이 초기화되어 1 + 97 = 98 이 나오게 된다.

 

마지막 예제이다.

#include <iostream>

int main()
{
	int a, b;  // int(정수형)타입의 변수 a와 b를 선언
	a = 1.5;  // a를 (정수가 아닌 값) 1.5로 초기화
	b = 2.5;  // b를 (정수가 아닌 값) 2.5로 초기화
	std::cout << a + b;  // a + b 의 결과값을 출력
	return 0;
}
// 출력은 몇이 나올까?

결과값은 당연하게 4가 나오....지 않고 3이 나온다. 왜일까?

C++은 앞서 말했듯이 타입변환을 기본적으로 해준다. 하지만 타입변환은 전지전능하지 않다.

위 예제는 컴파일 에러가 발생하진 않지만, 변수 a와 b에 초기화된 수들의 변환과정에서 소수부의 숫자들을 제거하고 남은 정수부의 숫자만 반환된다.

따라서 실질적인 연산은 1 + 2 = 3 이 된 것이다.

 

타입변환은 양날의 검이라고 생각한다.

그 이유는 타입변환을 수동적으로 안 해도 컴파일 에러가 안 뜨고 변환이 된다는 편리함이 장점이라고 한다면,

반대로 컴파일 에러가 안 뜨는 것이 단점이 될 수도 있다. 위 예제처럼 자신이 의도하지 않은 이상한 값이 나왔을 때 컴파일 에러가 뜨지 않아 오류가 난 부분을 찾기 힘들기 때문이다.

 

 

 

 

 

 

 

3. 이거 왜 씀?

이제 여러분은 변수의 사용법을 알고 이해했을 것이라고 생각한다.

그럼에도?! 위 예제를 보고 누군가는 물어볼 것이다.

#include <iostream>

int main() 
{
	std::cout << 1 + 2;
	return 0;
}

???: 이렇게 쓰면 되는 거 아님? 이게 더 간단한데?

 

물론 결과값은 위 예제랑 똑같다. 하지만 예제는 예제일 뿐이다.

계산기로 비유를 해보겠다.

 

당신은 계산기를 사용해 두 숫자의 덧셈을 하려 한다.

예제처럼 1과 2의 덧셈을 한다면 당연히 결과는 3이겠지만, 당신은 1과 2의 덧셈만을 할 것인가?

두 자릿수 덧셈을 해야 할 때가 있을 수도 있고, 세 자릿수 덧셈을 해야 할 상황이 올 수도 있다.

자신이 계산하고 싶은 숫자에 따라 계산기에 입력해야 하는 두 숫자의 값은 당연히 달라지게 돼있다.

계산기에서 계산을 하기 위해 입력하는 수를 피연산자라고 한다면, 계산기의 피연산자가 변수라고 말하고싶다.

 

그 외에도 게임으로 따지면 레벨, 재화, 아이템의 개수... 더 나아가서 인벤토리마저 변수의 집약체라고 할 수 있다.

이 처럼 많은 상황 때문에 변수를 사용하곤 한다. 그만큼 변수란 프로그래밍에 있어서 필수요소 중 하나인 것이다.

 

작성자가 공부해 오면서 궁금했던 요소 +@ 로 글을 작성하다 보니 간단한 개념임에도 불구하고 글이 길어졌다. 압도적 죄송...

또한, 앞으로의 글도 이러한 이유 때문에 길게 작성될 확률이 높다. 하지만 프로그래밍을 하면서 한 번쯤은 고민해 볼 수 있는 궁금증요소들을 최대한 넣으려 하고 있으니, 처음 공부하시는 분들이라면 지나치지 말고 한 번씩 보는 것도 좋을 것 같다.

 

 

글 읽어주셔서 감사합니다.

 

반응형
반응형

이 글은 도서 "C++ 기초플러스 6판"과 작성자의 공부 내용을 토대로 작성했습니다.
코드는 Visual Studio Community 2022 프로그램을 통해 작성했습니다.
오타나 지적은 저에게 많은 공부가 됩니다.

  • 예제1)
//예제 1 (주석문)

#include <iostream>                        //전처리 지시자 및 헤더 파일

int main()                                      //main 함수(함수 머리)
{

    std::cout << "Hello World!" << std::endl;   //명령문 (함수 몸체)

    return 0;                                   //반환(return)문
    
}
//끝

 
예제1)은 "Hello World!"가 출력되는 간단한 코드를 작성한 C++ 프로그램이다.
이 예제를 통해 프로그램의 구조에 대해 알아보자...
 

1. 주석문

//예제 1 (주석문)

첫 줄에 작성된 이 코드는 주석문이다.
주석문은 더블슬래시(//)로 시작하며 이후에 쓰이는 해당 줄의 문자를 모두 일컫는다.
컴파일러는 모든 주석문을 무시하고 컴파일을 하게 된다.

(* 컴파일이란 어떤 언어의 코드 전체를 다른 언어로 바꿔주는 과정이다. 그리고 이것을 자동으로 수행해 주는 소프트웨어가 컴파일러.)

주석은 프로그래머들이 코드를 짜면서 기록해두는 일종의 메모로 알면 된다.
프로그램을 구분하거나 코드의 역할을 표시하는 등 다양한 용도로 사용할 수 있다.
 
/*, */ 형식으로도 나타낼 수 있다. 아래 예제를 보자.

/*
	주석 예제
*/

위 예제와 같이 쓰면 /* 부터 */까지의 줄을 모두 주석 처리 할 수 있다.
해당 예제에서 알 수 있다시피 /*, */ 형식은 한 줄 이상의 주석문을 쓰고 싶을 때 쓰면 된다.
 
코드를 쓰다 보면, 해당 코드의 역할이 뭐였는지 잊을 때가 종종 발생하기에 주석문을 쓰는 것이 중요하다.
또한, 주석을 쓰면 본인이 아닌 다른 사람이 봤을 때 이해가 더 빨리 된다.
나중에 협업할 때를 대비해서라도 주석을 쓰는 습관을 들이도록 하자.
 
 

2. 전처리 지시자 및 헤더 파일

#include <iostream>                             //전처리 지시자 및 헤더 파일

위 줄에 쓰인 코드는 전처리 지시자(#include)와 헤더 파일(<iostream>)로 구성된 코드다.
C++의 다양한 명령 기능들을 사용하기 위해선 헤더 파일을 불러와야 한다.
 

전처리 지시자 #include는 헤더 파일을 코드에 포함시킬 때 사용한다.

전처리 지시자는 #include뿐만 아니라, #으로 시작되는 모든 명령을 말한다.
전처리기에게 컴파일을 하기 전에 코드 파일에 대한 특정 명령(전처리 지시자)을 처리하기 위해 쓰인다.

(*전처리기는 프로그램을 컴파일을 하기 직전에 코드 파일에서 전처리 지시자의 명령을 수행하는 프로그램이다.)
 

헤더 파일 <iostream>은 C++의 입출력기능을 포함하고 있다.

<iostream> 헤더 파일은 입출력 함수를 포함하고 있다.
예제1에선 출력기능을 사용하기 위해 아래에서 언급할 std::cout 함수를 사용했는데, 이 함수를 사용하기 위해 <iostream> 헤더 파일을 불러 온 것이다.
 
헤더 파일을 불러올 때 <,>가 아닌 ","(쌍따옴표)를 사용하는 경우도 있다. 아래 예제를 보자.

#include <iostream>
#include "iostream"

첫 줄의 코드는 우리가 아는 일반적인 전처리 지시문이다.
하지만 두 번째 줄의 코드는 <,> 대신 ","를 사용한 것을 볼 수 있다.
무슨 차이일까?
 

#include <헤더 파일>

-컴파일러가 설치된 폴더에서 해당 헤더 파일을 찾을 때 <,>를 쓴다.
 예제에서 쓴 iostream의 헤더 파일은 컴파일러와 같은 폴더에 위치해 있기 때문에 위와 같이 작성하는 것이다.
 

#include "헤더 파일"

-사용자가 작성하는 소스가 있는 폴더, 혹은 프로젝트 폴더에서 헤더 파일을 찾으라는 표기다.
 
사용할 헤더 파일이 위치한 경로에 맞게 <,> 와 ","을 사용하도록 하자.
 
 

3.함수 머리

예제1)의 코드를 5번째 줄부터 보기 편하게 간략화하면, 아래와 같이 된다.

int main()                                      //main 함수(함수 머리)
{

    구문들;                                     //명령문 (함수 몸체)

    return 0;                                   //반환(return)문

}

주석에도 친절하게 설명되어 있지만, 첫 번째 줄은 함수 머리다.
함수 머리는 해당 함수를 프로그램의 다른 부분과 연결 해주는 연결 고리 역할을 한다.
함수의 구조는 반환(return) 타입, 함수명, 매개 변수, 함수 몸체로 이루어져 있다.
위 코드를 예로 들어 보면,
반환 타입 (int) - 함수 명 (main) - 매개 변수 ( 괄호 안 ) - 함수 몸체 ( {중괄호 안의 명령문} )
으로 이루어져 있다. 먼저 반환값부터 보자.
 
반환 타입이란, 반환(return) 되는 값의 자료형을 말한다.
앞의 예제에서 main() 함수는 int를 보고 정수값을 리턴한다는 사실을 알 수 있다.

(int는 32bit(4byte)의 정수형 자료형이다. 자료형에 관해선 이후 다룰 예정.)

 
함수 명은 자신이 쓸 함수를 구분하기 위해 지어주는 이름이다.
 
매개 변수(parameter)란, 함수 몸체에 전달받은 인수(argument)의 값을 전달하기 위해 사용되는 변수다.
여기서 인수(argument)는 함수가 호출될 때 함수의 매개변수로 전달해 주는 값을 말한다.
 
함수 몸체는 아래에서 설명을 이어나가겠다.
 
아래 예제는 사용자 정의 함수를 작성해본 예제다. 너무 무거운 주제지만 이해하면 좋으므로 한 번 봐보자.

위 코드의 출력은 몇일까?
 

 
정답은 3이다.
 
지금부터 왜 3이 나왔는지 알아보자...
아래 사진을 보자.
 

사진을 보면 알 수 있듯이, 각각의 함수 taku와 main이 정의되어 있다.
자세한 건 나중에 설명하겠지만, 간단히 설명해 보겠다.
먼저 main() 함수는 프로그램이 실행될 때 가장 먼저 호출되는 함수다.
9번째 줄의 int A = taku(1,2);를 봐보자.
main 함수의 내에서 taku(int x, int y) 함수를 호출한 것이다.
그럼 taku 함수의 매개변수는 int x와 int y는 사진과 같이 각각 1, 2의 인자 값을 받는다.
그리고 5번째 줄의 return x + y;를 통해 1+2(=3)의 값을 main() 함수 내의 int A값에 반환한다.
10번째 줄의 std::cout << A << std::endl; 출력문을 통해 출력값이 3이 된다.
사용자 정의 함수에 대해선 나중에 더 자세히 다루도록 하겠다.
 

4.함수 몸체

함수 몸체는 함수 머리 부분 이후의 { }(중괄호)로 묶여 있는 부분이다.
함수 머리는 해당 함수에게 프로그램의 다른 부분과 연결하는 고리 역할을 한다면, 함수 몸체는 해당 함수가 처리해야 할 동작을 컴퓨터에게 지시하는 역할을 한다.
컴퓨터에게 내리는 지시를 구문(statement)라고 하는데, C++의 모든 구문은 ;(세미콜론)으로 끝나야 한다.
함수 몸체에서는 다양한 구문이 쓰일 수 있는데, 예제에서 쓰인 코드를 보자.

std::cout << "Hello World!" << std::endl;   //명령문 (함수 몸체)

 
위 코드는 컴파일러에 Hello World!를 출력시킨 후 개행(ENTER)하는 역할을 한다.
그 외에 다양한 구문들이 있지만 다음에 설명하겠다.
 
 

5.반환(return)문

반환문은 함수의 끝을 의미한다.
함수를 호출한 곳으로 반환값을 반환해 준다.
아래 예시처럼 작성하면 된다.

return 반환값;

 
아래 예제는 위에  함수 머리에서 설명한 사용자 설정 함수의 예제를 다시 가져와 본 것이다.

사진에서 보다시피 taku 함수의 반환값은 x+y다.
인자값 1과 2를 받아서 A의 값에 3을 반환해 주는 것이다.
 
앞서 말했듯이, 반환문은 함수의 끝을 의미한다.
하지만 main() 함수가 반환되는 것은 프로그램이 종료된다는 것을 의미한다.
main() 함수는 나중에 자세히 다루겠다.
 
 
글 읽어주셔서 감사합니다.

반응형

+ Recent posts