- 주제
1. 조건문(중첩 조건문, switch, 3항 연산자)
2. 반복문(for vs. while, do-while, foreach, 이차원 반복문, break & continue)
3. 배열(1차원 배열, 다차원 배열)
4. 컬렉션(List, Dictionary)
5. 메서드(선언 및 호출, 매개변수와 반환값)
6. 오버로딩
7. 구조체
- 공부내용
1. 조건문
1-1. 중첩 조건문
if절 안에 다른 if절
int itemLevel = 3; // 아이템 레벨
string itemType = "Weapon"; // 아이템 종류
if (itemType == "Weapon")
{
if (itemLevel == 1)
{
// 레벨 1 무기 효과
Console.WriteLine("공격력이 10 증가했습니다.");
}
else if (itemLevel == 2)
{
// 레벨 2 무기 효과
Console.WriteLine("공격력이 20 증가했습니다.");
}
else
{
// 그 외 무기 레벨
Console.WriteLine("잘못된 아이템 레벨입니다.");
}
}
else
{
// 그 외 아이템 종류
Console.WriteLine("잘못된 아이템 종류입니다.");
}
1-2. switch
(카드 뒤집기 게임에서, 매칭에 성공한 카드 번호(값)에 따라 다른 값을 도출하는데 쓰였음)
자료형 변수 = Console.ReadLine(); //사용자가 입력한 값을 변수에 저장
switch (변수나 식)
{
case 값1:
// 값1이 나온 경우 실행되는 코드
break;
case 값2:
// 값2가 나온 경우 실행되는 코드
break;
// ...
default:
// 모든 case문에 해당하지 않는 경우 실행되는 코드
break;
}
1-3. 3항 연산자
if문에 작성하면 긴 코드(if... else...)를 간단하게 바꿀 수 있는 연산자.
다만, 출력 가능한 내용은 2가지 밖에 없음.
// A가 B보다 크거나 같으면, "레벨업 가능" 출력
// A가 B보다 작으면, "레벨업 불가능" 출력
string result = (A >= B) ? "레벨업 가능" : "레벨업 불가능";
Console.WriteLine(result);
2. 반복문
2-1. for vs. while
-for문
(반복 조건들을 한 눈에 확인 가능)
for (int i = 0; i < 3; i++) //for (초기식; 조건식; 증감식)
{
Console.WriteLine(i); //조건식이 참인 경우 실행되는 코드
}
//초기식: 반복문이 시작될 때 단 한 번 실행
//조건식: 반복분이 실행될 때마다 평가, 참(true)인 경우 계속 실행
//증감식: 반복문이 실행될 때마다 실행
-while문
(반복 조건에 따라 for문 보다 코드가 더 간결해질 수 있음)
int i = 0; //초기식
while (i < 3) //while (조건식)
{
Console.WriteLine(i); //조건식이 참인 경우 실행되는 코드
i++; //증감식
}
[출력]
0
1
2
2-2. do-while
(while문의 중괄호 부분이 do 부분으로 옴)
int sum = 0;
int num;
do
{
Console.Write("숫자를 입력하세요 (0 입력 시 종료): ");
num = int.Parse(Console.ReadLine());
sum += num;
} while (num != 0);
Console.WriteLine("합계: " + sum);
[출력]
숫자를 입력하세요 (0 입력 시 종료): 5
숫자를 입력하세요 (0 입력 시 종료): 2
숫자를 입력하세요 (0 입력 시 종료): 3
숫자를 입력하세요 (0 입력 시 종료): 0
합계: 10
2-3. foreach
-배열이나 컬렉션에 대한 반복문을 작성할 때 사용
(카드뒤집기 게임에서 매칭 실패시마다 3단계로 색상변경하는 기능을 List를 사용하여 구현하였는데, if절을 써서 코드가 너무 길어지고 복잡했었다. foreach를 사용하면 코드가 간결해질 것 같다.)
2024.04.17 - [유니티] - Day 3 - 카드 색상 3단계로 변경(매개변수&리스트 활용)
string[] inventory = { "검", "방패", "활", "화살"}; //배열
foreach (string item in inventory) //foreach (자료형 변수 in 배열 또는 컬렉션)
{
Console.WriteLine(item); //배열 또는 컬렉션의 모든 요소에 대해 반복적으로 실행되는 코드
}
[출력]
검
방패
활
화살
- Dictionary value값을 List에 추가할 때도 사용 가능
Dictionary<int, string> items = new Dictionary<int, string>(); //items 딕셔너리
List<string> valueList = new List<string>(); //valueList 리스트
foreach (KeyValuePair<int, string> item in items)
{
if (item.Key != null) //딕셔너리에 key값이 존재하면,
{
valueList.Add(item.Value); //value값을 리스트에 추가
}
}
2-4. 이차원 반복문(=중첩 for 반복문)
(배열과 함께 사용하여 2차원 게임맵과 틱택토 게임화면 등을 구현할 수 있다.)
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 3; j++)
{
Console.WriteLine("i: {0}, j: {1}", i, j);
}
}
2-5. break & continue
break: 반복문을 중지시키는 역할
continue: 현재 반복을 중지하고 다음 반복으로 진행시키는(조건을 다시 검토시키는) 역할
for (int i = 1; i <= 10; i++)
{
if (i % 3 == 0)
{
continue; // 3의 배수인 경우 다음 숫자로 넘어감
}
Console.WriteLine(i);
if (i == 5)
{
break; // 5이 출력된 이후에는 반복문을 빠져나감
}
}
[출력]
1
2
4
5
3. 배열
3-1. 1차원 배열
-동일한 데이터 유형을 가지는 요소들을 한 번에 모아서 다룰 수 있음.
-인덱스 [숫자] 를 사용하여 각 요소에 접근
-선언된 크기만큼 저장 가능
int[] numbers = new int[]{1,2,3,4}; //int형 배열 선언 및 초기화
int[] numbers = {1, 2, 3, 4};
// 캐릭터 능력치 배열 만들기
int[] playerStats = new int[4]; //선언된 크기가 4인 int형 배열 선언
Random rand = new Random(); //Random형 rand 변수 선언
for (int i = 0; i < playerStats.Length; i++) //playerStats.Length = 4
{
playerStats[i] = rand.Next(1, 11); //1~11 사이의 숫자 중 랜덤으로 각 배열의 인덱스에 저장
}
// 능력치 출력
Console.WriteLine("플레이어의 공격력: " + playerStats[0]);
Console.WriteLine("플레이어의 방어력: " + playerStats[1]);
Console.WriteLine("플레이어의 체력: " + playerStats[2]);
Console.WriteLine("플레이어의 스피드: " + playerStats[3]);
[출력]
플레이어의 공격력: 4
플레이어의 방어력: 6
플레이어의 체력: 3
플레이어의 스피드: 6
3-2. 다차원 배열(표 형식)
-여러 개의 배열을 하나로 묶어 놓은 배열
-다차원 배열 선언 시, 각 차원의 크기를 지정(int[a, b])하여 생성
// 선언과 함께 초기화
int[,] array2D = new int[3, 4] //3행 4열의 int형 2차원 배열
{
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 }
};
4. 컬렉션
4-1. List
List<int> numbers = new List<int>(); // 빈 리스트 생성(int형)
numbers.Add(1); // 리스트에 데이터 추가
numbers.Add(2);
numbers.Add(3);
numbers.Remove(2); // 리스트에서 데이터 삭제
foreach(int number in numbers) // 리스트 데이터 출력
{
Console.WriteLine(number);
}
[출력]
1
3
4-2. Dictionary
-키와 값으로 구성된 데이터를 저장
-중복된 키를 가질 수 없으며, 키와 값의 쌍을 이루어 데이터를 저장
using System.Collections.Generic;
Dictionary<string, int> scores = new Dictionary<string, int>(); // 빈 딕셔너리 생성
scores.Add("Alice", 100); // 딕셔너리에 데이터 추가
scores.Add("Bob", 80);
scores.Add("Charlie", 90);
scores.Remove("Bob"); // 딕셔너리에서 데이터 삭제
foreach(KeyValuePair<string, int> pair in scores) // 딕셔너리 데이터 출력
{
Console.WriteLine(pair.Key + ": " + pair.Value);
}
5. 메서드
-접근 제한자(보안 강도: public < protected < private)
public: 누구나 / protected: 같은 클래스 내부, 상속받은 클래스만 / private: 같은 클래스 내부만
-리턴 타입
반환값(return)이 있을 경우: 자료형(int, string, bool)
반환값이 없을 경우: void
-메서드 이름(함수 이름) ex) Matched
-호출 방법: [메서드 이름]([전달할 매개변수]);
[접근 제한자] [리턴 타입] [메서드 이름]([매개변수])
{
// 메서드 실행 코드
}
public bool Matched(int a, int b) //Matched 메서드 선언
{
bool isMatched = a == b;
return isMatched;
}
Console.WriteLine(Matched(5, 3)); //Matched 호출방법 1
bool result = Matched(5, 3); //Matched 호출방법 2
Console.WriteLine(result);
[결과]
false
false
6. 오버로딩
함수이름은 유지(AddNumbers)한 채, 매개변수만을 바꾸어서 함수를 실행하는 방법
int AddNumbers(int a, int b)
{
return a + b;
}
int AddNumbers(int a, int b, int c)
{
return a + b + c;
}
// 메서드 호출
int sum1 = AddNumbers(10, 20); // 두 개의 정수 매개변수를 가진 메서드 호출
int sum2 = AddNumbers(10, 20, 30); // 세 개의 정수 매개변수를 가진 메서드 호출
7. 구조체
-여러 자료형의 데이터(변수)나 메서드를 한 데 모아 나만의 형식으로 만드는 방법(클래스와 공통)
-struct 키워드를 사용하여 선언(클래스는 class를 사용해 선언)
-상속 불가능(반면 클래스는 상속 가능)
-적은 데이터 저장 또는 단순한 데이터 구조에 적합(반면 클래스는 복잡한 데이터 구조)
-간단한 변수선언방식
//구조체 선언
struct Person
{
public string Name;
public int Age;
public void PrintInfo()
{
Console.WriteLine($"Name: {Name}, Age: {Age}");
}
}
//구조체 실행
static void Main(string[] args)
{
Person person1; //변수 선언 방식: 구조체 이름 변수명;
person1.Name = "John"; //.을 통해 구조체 내 변수 값에 접근 가능
person1.Age = 25;
person1.PrintInfo(); //구조체 출력
}
[출력]
Name: John, Age: 25
'🌐 유니티 (Unity)' 카테고리의 다른 글
Day 10 - 텍스트 게임 만들기(오류 해결 과정) (2) | 2024.04.25 |
---|---|
Day 9 - C# 문법(클래스, 상속, 가상메서드 및 오버라이딩, 추상클래스) (0) | 2024.04.24 |
Day 7 - C# 문법(WriteLine, 이스케이프 시퀀스, 자료형, 변수, 연산자 등) (0) | 2024.04.22 |
Day 6 - 게임 이펙트 코드 수정(위치 이동) (0) | 2024.04.20 |
Day 5 - 부정 방지 기능(Invoke & null 활용) 및 발표 피드백 정리 (2) | 2024.04.19 |