c# 6

[Unity/C#] 상속과 클래스 구조

상속을 예전에 공부만 해두고 잘 활용하지 않았기 때문에 의문점이 생겼다. 더보기 1. PlayerBase를 상속하는 StagePlayer를 GameManager에서 PlayerBase 변수로 받아도 StagePlayer에서 Override한 기능이 제대로 작동하는가? 2. StagePlayer에서 override하지 않은 기능도 제 때에 같은 기능으로 수행하는가? 3. PlayerBase의 기능을 override할 때 StagePlayer와 TutorialPlayer에서 Base의 기능 수행 시점을 조절할 수 있는가? 이에 대한 답을 모르는 채로 무작정 게임에서 이 디자인을 적용하고자 하면 기능이 많이 꼬일 수도 있을 것 같아 샘플 프로젝트에서 간단히 테스트해보았다. Player에는 PlayerBase를..

SW Programming/C# 2023.03.29

배열과 리스트

배열과 리스트 공통점: 동일한 데이터를 하나로 묶을 수 있는 자료형 (Type-Safe) 차이점 배열 Array: 동적 크기 할당 불가능, 연속된 메모리 공간으로 이루어짐 -> 메모리 관리 용이 리스트 List: 동적 크기 할당 가능, 포인터를 사용해 데이터들의 주소값을 가지고 있음 -> 메모리 측면에서는 비효율적 (∵ 불필요한 메모리 추가 사용) [▲ 배열과 리스트의 메모리 공간 사용 차이] ArrayList 배열과 리스트의 중간 형태라고 볼 수 있는 자료형. 동일하지 않은 데이터들도 묶을 수 있으나, 데이터를 꺼낼 때마다 박싱과 언박싱이 이루어져 비효율적! -> List는 ArrayList를 보완한 자료형이라고 볼 수 있음. 게임에 쓴다면 무엇을 어디에 쓸까? 배열은 인벤토리에, 리스트는 퀘스트 목록..

SW Programming/C# 2022.07.04

유니티와 C#의 관계

유니티와 C#의 관계 유니티는 C#을 기본적으로 지원하는 스크립팅에 표준 Mono 런타임 구현과 유니티 게임 엔진만을 위한 여러 기능과 클래스(SceneManager, Renderers, Vectors, Rigidbody, etc.)들을 사용한다. 유니티에서는 코딩 없이 엔진만으로 게임 오브젝트를 생성할 수 있으며, 그 위에 여러 컴포넌트를 붙여 기능을 수행하게 한다. 또한 컴포넌트의 public 값은 게임 엔진 내에서 플레이 중에도 자유자재로 바꿀 수 있다. 이는 블록코딩과 유사한 형태로 게임 개발을 더 쉽게 만들어준다. 유니티를 이용하는 개발자들이 C#으로 스크립팅을 하긴 하지만 컴포넌트와 게임 오브젝트는 C++ 사용이 많은 오브젝트이므로, 개발자들이 작업하기엔 간편하지만 체계적이지 않은 방식으로 저..

게임 엔진/Unity 2022.07.04

[C#] 클래스와 구조체

구조체와 클래스 구조체 Struct 형이 다른 여러 데이터들을 하나로 통합해 관리할 수 있는 값형 데이터. 클래스와 거의 비슷하게 필드와 메소드를 가질 수 있다. 클래스와 비슷하지만, 메모리 공간에 대한 구조가 다르다. -> 객체가 스택에 할당됨 가용 메모리 크기가 작다. GC(Garbage Collector)에 의해 관리되지 않아, 성능상 이점이 있다. : 구조체는 함수가 종료될 때 자동으로 메모리가 정리됨! new연산자 없이도 인스턴스화 가능 객체를 전달할 때: 원본의 내용을 복사한 새로운 객체를 생성하여 전달! -> 자신의 크기만큼 스택 공간을 새로이 할당하므로, 크기가 클수록 메모리 사용량이 늘어남 여기서 생성된 구조체 객체는 함수가 종료되면 자동으로 메모리에서 해제됨! 다른 구조체, 클래스를 상..

SW Programming/C# 2022.06.01

[C#] 상속과 다형성

상속 다른 클래스의 멤버를 이어받는 기능으로, 기본 클래스와 파생클래스가 1:N의 관계를 갖는다. 파생클래스의 객체는 기본 클래스의 private을 제외한 멤버를 사용할 수 있다. 기본 클래스(부모 클래스): 상속하는 바탕이 되는 클래스 파생 클래스(자식 클래스): 상속하여 만든 클래스 sealed: 다른 클래스에서 상속 불가능하도록 하는 키워드. virtual메서드를 override한 메소드에도 지정 가능 base : 상속 원본에 인수를 전달하는 키워드 -> 기본 클래스의 인수가 있는 생성자를 호출 base 사용하지 않으면: 상속 원본의 인수가 없는 생성자 호출 이름의 은폐가 일어날 때, 은폐된 기본 클래스 멤버를 파생 클래스 안에서 사용할 때에도 이용 -> base.a: 기본클래스 필드의 a usin..

SW Programming/C# 2022.06.01

[C#] 인터페이스와 추상 클래스, 추상 메소드와 가상 메소드에 대하여

인터페이스와 추상 클래스, 추상 메소드와 가상 메소드에 대하여 인터페이스 Interface 동일한 개념의 기능을 하는 클래스들을 묶은 개념으로, 구현 객체의 같은 동작을 보장하기 위해 사용된다. (여러 클래스에 공통적인 기능을 추가하기 위해 사용) 특징 기본적으로 public 접근지정자를 가지며, 다른 접근지정자를 설정할 수 없다. 구체적인 구현을 기술할 수 없고, 클래스/프로퍼티 명만 지정할 수 있다. 처리 속도 면에서 추상 클래스보다 느리다. 필드를 가질 수 없으며, 함수는 추상 메소드만 가질 수 있다. 변수는 static final만 가질 수 있다. ∵ 인터페이스의 변수는 스스로 초기화될 권한이 없다. new 연산자를 통한 인스턴스(객체) 생성이 불가능하나, 참조변수로 만들 수는 있다. 장점 의도치..

SW Programming/C# 2022.05.12