C#과 JAVA는 비슷한 부분이 매우 많다. 그 중 배우지않았거나 몰랐거나 다르다고 생각하는 부분을 정리할 생각이다. 물론 JAVA에도 이런 내용이 있을 수 있지만, 일단 내가 몰랐기에 정리하는 글이 되겠다.
1. 재귀 호출
재귀 호출이라고 하면 자기자신을 호출하는 것을 말하며, 이는 호출 스택에 호출된 메서드들을 순차적으로 쌓고, 메서드가 반환되면서 스택에서 순차적으로 제거되는 방식으로 동작한다.
코드는 다음과 같다.
namespace _7_2Recursive
{
internal class Program
{
//재귀 호출 기초
static void CountDown(int n)
{
if (n <= 0)
{
Console.WriteLine("Done");
}
else
{
Console.WriteLine(n);
CountDown(n - 1); // 자기 자신을 호출
}
}
static void Main(string[] args)
{
// 메서드 호출
CountDown(5);
}
}
}
언뜻 보면 재귀호출이 반복문과 비슷한 느낌이지만 메서드를 쌓아놓고 순차적으로 반환하는 점이 차이점이다. 아래는 동작 방식이다.
보면 반복이 돌아가고 있고, 메서드가 순차적으로 쌓인것이 보인다. 이는 디버깅 했을 때 나타나는데 이후 다 쌓이고 나면 countDown(n - 1)을 타고 하나씩 빠져나간다.
이런식으로 작동하는 것이 재귀 호출이다.
재귀호출의 활용과 주의점
재귀호출은 복잡한 문제를 단순한 방식으로 해결할 수 있다는 장점이 있으나, 종료 조건을 명확하게 정의해주지 않는다면 While문의 무한루프와 같이 무한히 재귀 호출이 되면서 오버플로우가 되어 다운될 수 있으니 유의하도록 하자.
2. 구조체(Struct)
구조체는 여러개의 값을 데이터로 묶어서 하나의 사용자 정의 형식으로 만들기 위한 방법이다. 즉, 변수나 메서드를 담은 클래스와 비슷한데 커스텀하여 사용할 수 있다.
구조체 키워드는 struct키워드를 사용하여 선언한다.
사용 방법은 아래와 같다.
namespace _7_3Struct
{
internal class Program
{
//구조체
struct Person
{
public String name;
public int age;
public void PrintInfo()
{
Console.WriteLine($"이름: {name}, 나이: {age}");
}
}
static void Main(string[] args)
{
Person person;
person.name = "john";
person.age = 15;
person.PrintInfo();
}
}
}
3. 구조체와 클래스의 차이점
대표적인 차이점은 구조체는 new를 사용하지 않아도 호출할 수 있다는 점이고 클래스는 아래 코드와 같이 호출해야 한다.
Person person = new Person();
그리고 구조체는 값(Value Type)형식이고 클래스는 참조 형식이다. 이는 구조체를 가져올 때는 값을 가져오지만, 클래스는 주소를 가져온다고 생각하면된다.
구조체는 변수 또는 비사용자 이벤트 요소가 하나 이상 있어야 하며, 클래스는 완전히 비어도 상관없다.
구조체는 상속할 수 없으며 클래스는 가능하다.
구조체는 매개 변수를 사용하는 경우에만 공유되지 않은 생성자를 가질 수 있다. 클래스에는 매개 변수가 있거나 없는 클래스가 있을 수 있다.
'Unity' 카테고리의 다른 글
SelectMany 를 이용한 다중 배열 (0) | 2023.11.08 |
---|---|
[Unity] 2주차 틱택토 구현 (0) | 2023.11.07 |
[Unity] 카드 매칭 게임 프로젝트 마무리 (0) | 2023.11.03 |
[Unity] TimeScale 사용시 유의할 점 (2) | 2023.11.02 |
Unity Scene 불러오는 법 SceneManager.GetActiveScene() (1) | 2023.11.01 |