C++ 함수, 구조체, 배열 응용
함수(Function)
함수의 기본 개념
함수는 특정 기능을 수행하는 코드 블록을 재사용 가능하게 만든 것입니다. 코드의 중복을 줄이고 가독성을 높여줍니다.
함수 정의와 호출
#include <iostream>
using namespace std;
void BBQ()
{
cout << "#" << endl;
cout << "@@@" << endl;
}
int main()
{
int x;
for (x = 0; x < 5; x++)
{
if (x == 3)
{
BBQ();
}
}
return 0;
}
C++
복사
조건문과 함수 응용
배열의 원소를 검사하여 조건에 따라 다른 함수를 호출하는 예제입니다.
#include <iostream>
using namespace std;
void print()
{
cout << "###" << endl;
}
int main()
{
int x;
int vect[5] = { 4, 5, 1, 2, 1 };
for (x = 0; x < 5; x++)
{
if (vect[x] % 2 == 1)
{
print();
}
else
{
print();
print();
}
}
return 0;
}
C++
복사
동작 설명:
•
vect[x]가 홀수면 print 함수 한 번 호출
•
vect[x]가 짝수면 print 함수 두 번 호출
함수의 매개변수와 지역변수
지역변수의 독립성
중요! 이름만 같을 뿐 서로 다른 변수입니다.
main 함수에서 만들어지는 변수 x와 BBQ 함수에서 만들어지는 변수 x는 서로 다른 번수입니다.
#include <iostream>
using namespace std;
void BBQ(int x)
{
cout << x;
x = 10;
}
int main()
{
int x = 5;
BBQ(x);
cout << x;
return 0;
}
C++
복사
출력 결과: 5 5
설명:
•
BBQ 함수에서 x 변수에 값을 고쳐도 main함수의 변수 x의 값은 수정되지 않음
•
main함수의 변수 x와 BBQ함수 안의 변수 x는 다르기 때문
Call by Value (값에 의한 전달)
기본적으로 전달인자는 다른 지역변수, 다른공간에 선언된 변수이기 때문에 값이 전달되는 과정에 원본이아닌 값이 복사가 되어서 다른 함수로 전달이 됩니다. 이를 Call by Value라고 합니다.
#include <iostream>
using namespace std;
void test(int a, int b)
{
cout << a << b << endl;
}
int main()
{
int a = 5;
int b = 6;
test(a, b); // 값이 복사되어 전달됨
return 0;
}
C++
복사
Data Swap (데이터 교환)
두개의 변수를 교체하는 것을 SWAP이라고 합니다.
#include <iostream>
using namespace std;
int main()
{
int a = 5;
int b = 10;
int temp = a; // 임시 변수에 a 값 저장
a = b; // a에 b 값 대입
b = temp; // b에 원래 a 값(temp) 대입
cout << "a = " << a << ", b = " << b << endl; // a = 10, b = 5
return 0;
}
C++
복사
SWAP 과정:
1.
임시 변수 temp에 a 값 저장
2.
a에 b 값 대입
3.
b에 temp(원래 a) 값 대입
구조체 (Structure)
구조체의 필요성
새로운 데이터(상태)를 추가할 때마다 새로운 변수 또는 배열을 계속 추가해줘야 하는 단점이 존재합니다. 그것을 보완하기 위해서 하나 이상의 변수를 묶어 그룹화하는 사용자 정의 자료형을 구조체라고 합니다.
구조체 정의와 사용
#include <iostream>
using namespace std;
struct Player
{
int hp;
int mp;
int exp;
};
int main()
{
Player p1{ 100, 100, 0 };
// Player p1 = { 100, 100, 0 }; // 이것도 가능
// . 을 사용해서 객체의 멤버 변수를 사용한다
p1.hp = 200;
cout << p1.hp << endl;
// hp, mp, exp 를 기본으로 가진 객체를 여러 개 만들 수 있다.
Player p2;
Player p3;
return 0;
}
C++
복사
구조체의 장점:
•
관련된 데이터를 하나로 묶어서 관리
•
코드의 가독성과 유지보수성 향상
•
동일한 구조의 여러 객체 생성 가능
Counting 응용 (2차원 배열)
2차원 배열에서 특정 값이 몇 개 있는지 세는 프로그램입니다.
#include <iostream>
using namespace std;
int main()
{
int vect[3][3] =
{
{1, 2, 3},
{4, 5, 6},
{7, 8, 5}
};
int count = 0;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (vect[i][j] == 5)
{
count++;
}
}
}
if (count > 0)
{
cout << "5 is in the array" << endl;
}
else
{
cout << "5 is not in the array" << endl;
}
return 0;
}
C++
복사
동작 과정:
1.
2차원 배열의 모든 원소를 순회
2.
각 원소가 5인지 확인
3.
5를 찾을 때마다 count 증가
4.
최종적으로 5가 배열에 있는지 여부 출력
이 예제에서: 5가 2개 있으므로 "5 is in the array" 출력
“강의는 많은데, 왜 나는 아직도 코드를 못 짤까?”
혼자 공부하다 보면 누구나 이런 고민을 하게 됩니다.
•
강의는 다 들었지만 막상 손이 안 움직이고,
•
복습을 하려 해도 무엇을 다시 봐야 할지 모르겠고,
•
질문할 곳도 없고,
•
유튜브는 결국 정답을 따라 치는 것밖에 안 되는 것 같고.
문제는 ‘연습’이 빠졌기 때문입니다.
단순히 강의를 듣는 것만으로는 실력이 늘지 않습니다.
실제 문제를 풀고, 고민하고, 직접 구현해보는 시간이 반드시 필요합니다.
그래서, 얌얌코딩 코칭은 다릅니다.
그냥 가르치지 않습니다.
스스로 설계하고, 코딩할 수 있게 만듭니다.
얌얌코딩 코칭에서는 단순한 예제가 아닌,
스스로 문제를 분석하고 구현해야 하는 연습문제를 제공합니다.
이 연습문제들은 다음과 같은 역량을 키우기 위해 설계되어 있습니다:
•
문제를 스스로 쪼개고 설계하는 힘
•
다양한 조건을 만족시키는 실제 구현 능력
•
기능 단위가 아닌, 프로그램 단위로 사고하는 습관
•
마침내 자신의 힘으로 코드를 끝까지 작성하는 경험
지금 필요한 건 더 많은 강의가 아닙니다.
코드를 스스로 완성해 나가는 훈련,
그것이 지금 실력을 끌어올릴 가장 현실적인 방법입니다.