구조체

본문 로딩 중...
댓글 0
댓글을 작성하려면 로그인이 필요합니다.
아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요.
구조체(struct)는 관련 있는 값 여러개를 묶어 하나의 형식으로 만드는 문법입니다.
데이터 단위를 묶어서 다룰 때 사용한다.
문법형식 :
public struct <구조체 이름>
{
public <자료형> <필드 이름>;
}
구조체를 만들 때 필드를 채워주는 특별한 함수입니다.
역할 : 데이터를 대입할때 한줄로 줄어들고,
사용자가 실수로 데이터를 깜박하고 누락시키는 것을 방지하기 위해서이다.
public class Program
{
public static void Main()
{
// 생성자를 사용하였을 때
UserData userData = new UserData("강성현", "전사", 28, 1) ;
// 생성자를 사용하지 않았을 때
userData.Name = "강성현";
userData.GameClass = "전사";
userData.Age = 28;
userData.Level = 1;
}
}
public struct UserData
{
public string Name;
public string GameClass;
public int Age;
public int Level;
public UserData(string name, string gameClass, int age, int level)
{
Name = name;
GameClass = gameClass;
Age = age;
Level = level;
}
}
int[] original = {10, 20, 30};
int[] copy = original;
copy[0] = 999;
Console.WriteLine(original[0]); // 999 - 원본도 바뀐다.
UserData userData = new UserData("전사", 120, 30);
UserData copy = userData;
copy.Hp = 999;
Console.WriteLine(userData.Hp); /// 120 - 원본은 그대로이다.
앞에서 언급했듯이 구조체는 값타입 이기 때문에 위와 같은 결과가 나옵니다.
| 표기 | 구조체를 넘겼을 때 | 배열을 넘겼을 때 |
|---|---|---|
| (없음) | 필드 전체가 복제됩니다. 원본은 안 바뀝니다 | 관계만 복제됩니다. 요소를 고치면 원본도 바뀝니다 |
ref | 원본을 직접 다룹니다. 고치면 밖에도 반영됩니다 | 가리키는 대상 자체를 갈아 끼울 수 있습니다 |
out | 함수 안에서 만들어 채워 돌려줍니다 | 함수 안에서 새 배열을 만들어 돌려줍니다 |
in | 복제 없이 원본을 보되 고칠 수 없습니다 | 가리키는 대상을 갈아 끼울 수 없습니다 |
public static void Main()
{
PartyMember archor = new PartyMember("궁수", 120, 30);
PartyMember warrior = new PartyMember("전사", 120, 30);
Damage(archor);
Console.WriteLine(warrior.Hp); // 출력 : 120 -> 값이 바뀌지 않음
Damage(ref warrior);
Console.WriteLine(warrior.Hp); // 출력 : 70 -> 값이 바뀜
}
static void Damage(PartyMember member)
{
member.Hp -= 50;
}
static void Damage(ref PartyMember member)
{
member.Hp -= 50;
}
