C# 상속 부모 클래스와 파생(자식) 클래스 C#에서 상속이란 부모의 기능과 속성을 특정 클래스가 물려받게 하는 것. 상속받은 파생 클래스는 부모 클래스 데이터 및 메서드들에 접근할 수 있다.(만약 접근 지정자가 public 또는 protected 라면) 사용 예시 몬스터라는 클래스를 상속받아 다양한 타입의 몬스터 (고블린, 슬라임, 골렘 등등)을 만드려는 상황이라고 가정해보겠다.먼저 기본이 되는 BaseMonster 클래스를 만들고 이곳에 필요한 다양한 전역변수들을 생성한다.BaseMonster를 상속받을 Goblin, Slime 클래스를 만들고 BaseMonster를 상속받는다.BaseMonster의 변수와 메서드에 접근할 수 있게 된다. public class BaseMonster : MonoBeh..
C#
[SerializeField] int age;private void Start(){ Debug.Log(age);} 직렬화된 int 변수 age를 가지고 있는 스크립트를 하나 만들고, 유니티 Hierachy에서 세개의 컴포넌트를 만들어주고 값을 달리 준 다음 실행하면 각기 다른 값이 나온다. 메모리를 나타낸 그림을 보면Test 클래스를 프로젝트에 만들었고 이 자체로는 메모리 할당이 일어나지 않지만게임오브젝트에 스크립트를 드래그 해서 넣을 때 서로 다른 메모리 공간에 할당이 되어 객체가 생성된다. One의 age값을 바꿔도 자신의 age 값만 바뀌지, Two와 Three의 값이 같이 바뀌진 않는 것이다. (서로 영향 X) 그렇다면 모든 객체의 나이의 값이 모두 똑같아야 한다면 어떻게 해야 할까? s..
Collection이란? 같은 성격을 띈 데이터들을 담는 자료구조로, ICollection 인터페이스를 상속받는다.배열 또한 컬렉션의 일종이다.using System.Collections를 사용하여 바로 접근 가능하다. ArrayList배열과 가장 비슷한 컬렉션그러나 배열은 크기가 정해져있는 반면 ArrayList는 크기가 가변적으로 변한다.List와 비슷한 역할을 하지만, List는 특정 타입만 담을 수 있고, ArrayList는 여러 타입을전부 리스트에 넣어주는 것이 가능하다. 다 때려넣을 수 있다는게 장점. 사용예시ArrayList arrayList = new ArrayList();arrayList.Add("Hello");arrayList.Add(10f);for(int i = 0; i 결과값 근..
https://wonseok1112.tistory.com/7 [C#] 값 형식과 참조 형식C#에서는 데이터를 메모리에 저장하는 방식이 두가지로 나뉜다. 값 형식과 참조 형식이다. 값 형식은 데이터를 저장할 때 스택(stack) 메모리에 저장하고 참조 형식은 데이터를 저장할 때 힙(heap)wonseok1112.tistory.com값 형식과 참조 형식에 대한 글 참고 C#에서 메소드를 호출 할 때 필요한 값을 전달해주기 위해 매개변수에 값을 넣어 전달해준다.그러나 값 형식은 전에 알아봤듯이 메모리 저장 방식이 달라서 원본값을 바꾸지 못한다. 매개변수로 전달 시에 해당 인자의 값을 복사하여 전달하기 때문.이것을 값의 의한 호출이라고 하고,원본을 바꾸기 위해선 참조 형식만 할 수 있는 참조에 의한 호출을 ..
C#에서는 데이터를 메모리에 저장하는 방식이 두가지로 나뉜다. 값 형식과 참조 형식이다. 값 형식은 데이터를 저장할 때 스택(stack) 메모리에 저장하고 참조 형식은 데이터를 저장할 때 힙(heap) 메모리에 저장한다. 값 형식 예시 값 형식의 자료형 중 하나인 int 변수 num을 생성하고 6을 할당한다. int 변수 num2을 생성하고 num2에 num을 할당한다. 마지막으로 num2에 10을 추가로 할당하고 num1, num2을 출력했다. num2값만 바꿨으니 예상대로 6이 출력이 된다. 참조 형식 예시 int 변수 대신 참조 형식의 자료형 중 하나인 array(배열) 변수를 사용하여 위와 똑같이 코드를 구성하고 실행해보았다. 위의 값 형식과 똑같이 코드를 구성하고 실행했는데 결과가 다르다. ar..
C# / Unity에서 일반화란 특수한 개념으로부터 공통되는 개념을 찾아 묶어 일반화 시키는 것이다.일반화 하는 대상은 데이터 형식(type)이다. 일반화를 할 때 object 형식을 쓰는 것이 편리하다.object 데이터 형식을 이용하면 여러 데이터를 한 변수에 저장 가능하기 때문. 위와 같이 int형 배열에는 string타입을 넣을 수 없다.하지만 위에서 설명한 object 형식으로 배열 타입을 지정해준다면 다양한 타입을 다 넣을 수 있다. 이때 내부적으로 박싱 / 언박싱이 일어나게 된다.하지만 object 형식은 박싱 / 언박싱을 할 때의 속도 저하로 인해 쓰이지 않는다.또한 데이터 형식을 명확하게 알 수 없다는 단점도 있다. int num1 = 1;object obj = num1; //박싱i..
일반 싱글톤으로 매니저급 클래스를 만들 때 public class GameManager : MonoBehaviour { public static GameManager Instance; private void Awake() { if (Instance == null) { Instance = this; } } } 이런식으로 인스턴스를 만들어 다른 스크립트에서도 사용할 수 있게 하였다. 하지만 GameManager, SoundManager, UIManager 등등 씬에 여러개의 싱글톤이 존재할 때 위의 코드를 각각 작성해야 하는 번거로움이 생긴다. 이 문제를 해결해주는 방법이 모노 싱글톤을 사용하는 것이다. 아래는 제네릭을 사용하여 만든 모노 싱글톤 코드이다. public class MonoSingleton :..
public class PropertyTest : MonoBehaviour { private int age; public int GetAge() { return age; } public void SetAge(int num) { this.age = num; } } private으로 설정되어있는 변수 age를 다른 스크립트에서 접근하기 위해서는 값을 가져오는 GetAge 함수, 값을 넘겨주어 대입시키는(설정해주는) SetAge 함수를 만들어야 했다. public class PropertyExample : MonoBehaviour { public PropertyTest test; private void Start() { int age = test.GetAge(); //새로운 int형 변수 age에 test의 ..