728x90
반응형

C# 44

Polymorphism, 다형성 [Unity]

OOP의 큰 특징 중 하나인 다형성에 대해 알아보려고 한다. 상속에 그치지 않고 다양하게 활용될 수 있는 것은 얘 때문이다. 알아보자 상속의 의미를 안다면 바로 예를 들어서 보자 사실 다형성은 한가지의 클래스가 여러 자식클래스를 가질 때 거기서 의미가 생긴다. 예를 들어 자동차 밑에는 버스, 택시, 트럭이 있는 것처럼 바퀴가 공통적으로 가지고 있고 다른 것도 공통적으로 가지고 있을 것이다. 그렇다면 굳이 버스, 택시. 트럭에 공통된 부분을 3번이나 쓰는 대신 부모클래스인 자동차에 넣어 효율을 추구하고자 함이다. 다시 말해서 상속은 받되 부모클래스에서 받은 내용은 공통적으로 가지고 때론 필요에 따라 부모에게 받은 것들도 오버라이딩을 통해 활용하자. 부모 클래스를 만들어보자 using UnityEngine;..

Object Pooling, 오브젝트 풀링, 디자인 패턴 [Game Development]

게임을 조금 더 개발자의 입장에서 용이하게 만들어주는 디자인 패턴인 오브젝트 풀링에 대해서 알아보자 **딱히 어떠한 게임엔진에 국한된 패턴은 아니다. 그냥 ~한 개념이다. 우선 오브젝트 풀링이란 것이 무엇인가? 오브젝트 풀링이란 오브젝트를 재활용하기 위한 디자인 패턴을 의미한다. **여기서 재활용이란 정말 다시 활용하는 것을 의미한다. 예를 들자면 총알, bullet이 가장 대표적이다. 우리가 흔히 총을 쏠 때 버튼을 누르면 총알이 생기고 날아가게끔 만든다. 근데 미니건 쏜다고 생각해보자. 1분에 600발이었나 K-2가? 우습지 미니건 쏘면 1분에 몇천 발 쓸건데.. 그렇게 되면 몇천개의 총알을 만들어야 한다. 여기서 생각한 것이 ... 좀 아까운데..? 아니 쏠 때마다 오브젝트 만들면... 몇천 발이 ..

상속, Inheritance, C# [Unity]

OOP의 특징 중 하나인 상속을 배워보기로 하자. 상속이란 것이 정말 코드 수를 많이 줄여준 공헌을 하지 않았나 싶다. 알아보자 상속은 클래스를 2가지 종류로 나눈다. 1. Parent or base class, 부모 클래스 2. Child or derived class, 자식 클래스 부모는 자식에게 상속을 하는 주체고 자식은 부모에게 상속을 받는 주체다. 이러한 관계를 Is-A Relationship이라고도 한다. 뜻은 Child class is a Parent class 라는 뜻이다. 상속이 된다면 Parent에 있는 변수, 메서드 등의 아이템들이 Child도 쓸 수 있게 바뀌는 것이다. 예를 들어보자 먼저 부모클래스다. using UnityEngine; using System.Collections;..

제너릭, Generics [Unity]

cpp의 템플릿과 비슷하다고 보면 된다. 제너릭을 구현하는 경우는 내 경험이 부족해 아직 많이 못봤지만 제너릭을 가져다 쓰는 것이 보통이다. 알아보자 제너릭은 일반적으로 다양한 데이터 타입으로 같은 기능을 수행하게 하는 것이다. 어차피 기능이 같을 거라면.. 정수형, 문자열, 실수형...을 일일이 지정해주는 것은 정말 힘들다. 그래서 무슨 타입이든.. 받을 수 있게 하였는데 예를 들어보자 using UnityEngine; using System.Collections; public class SomeClass { //여기 원래 자료형이 들어가는 자리에 T라는 것이 들어가있고 //메서드 뒤에 라는 것이 나왔다. T는 어떤 자료형으로도 인식된다. //그래서 정수형, 실수형을 넣어도 알아서 인식이 된다. pub..

Method Overloading, 메서드 오버로딩 [Unity]

오버로드하면 맨날 스타크래프트가 생각난다. Overload라서.. 조금 다르지만 그래서 이걸 알아보려고 한다. 왜냐?? 맨날 Unity에서 메서드를 사용하면 자꾸 옆에 + overloaded +3 막 이런게 뜬다. 그래서 알아보기로 하였다. 원래 메서드는 유일하게 존재한다. 동일한 것이 존재하면 중복되어 오류가 생긴다. 그러나 Method Overloading이 그것을 피하게 해준다. 피하게 해준다는 뜻이. 중복되는 내용을 써도 된다! 가 아니라 이름만 같을뿐 다른 기능을 한다는 의미로 받아들여야 한다. 예시를 보자 using UnityEngine; using System.Collections; public class SomeClass { //당연히 더하는 메서드다. 정수를 // 인자로는 정수 2개를 받..

유니티에서 Static이란 [Unity]

static.. Dynamic의 반대로 알고 있다. 정적을 의미한다. 즉, 런타임 이전에 훨씬 이전에 수행되어 만들어진다는 뜻으로 알고 있다. 사실 선언했을 때 만들어진다. ** 메모리에서의 Data에 저장된다. 그럼 유니티에서 Static의 의미를 알아보자 static은 Data 영역에 저장되기 때문에 변수를 수정하거나, 읽을 때, 클래스 객체를 만들 필요가 없다. 아무리 객체를 만들더라도 static은 유일하게 존재한다. using UnityEngine; using System.Collections; public class Enemy { //Static variables 은 모든 클래스의 인스턴스와 공유된다. public static int enemyCount = 0; public Enemy() { ..

C#에서의 삼항 연산자 Ternary Operator [Unity]

많이 쓰려면 많이 쓸 수 있지만 몰라서 못쓰는 경우가 더 많은 것 같아서 알아보았다. if, else문을 하나로 합쳐서 쓰는 것과 비슷하다. "Boolean expression" + ? + "True, value" : "False, value" 만약 이렇게 쓰지 않는다면 if (Boolean condition){ "참일 때 값" } else{ "거짓일 때 값" } 이렇게 되었을 것이다. 직관적으로 이해하기 쉽게 도와주는 연산자이다. using UnityEngine; using System.Collections; public class TernaryOperator : MonoBehaviour { void Start () { int health = 10; string message; //This is an ..

C#에서 쓰이는 약간 다른 Loop 활용 [Unity]

For, While은 어디서 한 번쯤 들어봤을 것이다. 하지만 각 언어마다 특징이 있듯이 C#에도 약간 좀 다른 특징이 있다. 알아보자 1. Do, While 문 using UnityEngine; using System.Collections; public class DoWhileLoop : MonoBehaviour { void Start() { bool shouldContinue = false; do { print ("Hello World"); }while(shouldContinue == true); } } 일반적으로 While문을 돌릴 때 행동하기 전에 조건이 True인지 체크를 하는데 얘는 우선 돌리고 True인지 체크를 한다. 예를 들면 설거지를 하고 있는데 남은 접시가 0보다 크면 설거지를 해야한..

Collider에 대한 모든 것(기본) [Unity]

이번 글에서는 Collider의 종류와 쓰임 보다는 Collider가 무슨 역할을 하며 왜 필요한지.. 어떤 property를 가지고 있는지를 알아볼 것이다. 도대체 무엇인가? ++Unity.Engine 클래스에 포함되어 있다. RigidBody가 나온다면 항상 따라오는 것이 있다. 바로 Collider다 ++영어단어 뜻이 Collide with, 으로 많이 쓰이듯이 "충돌"을 의미한다. 즉, 충돌에 대해, 접촉에 대해, 모든 것을 관리한다고 볼 수 있다. 다시 말해서 물리적인 상호작용에 관여한다고 보면 된다. 어떤 속성을 가지고 있는데?? 그냥 충돌하면 그게 끝 아니야?? 사실 우리가 당연하게 여기는 모든 행동 안에는 물리적인 법칙이 끊임없이 적용되고 있다. 유니티는 조금이라도 자연스럽게 만들고자 여러..

C#, Unity에서의 접근제한자,Access modifier [Unity]

물론 C#을 이용하는 사람이 모두 Unity를 쓰는 것은 아니겠지만.. 난 Unity를 기준으로 설명하겠다. 어차피 C#도 똑같다. 종류는 4가지가 있다. private 클래스 내부에서만 접근이 가능. 즉, 동일 클래스나 구조체 내의 멤버만 접근 가능하다. public 모든 곳에서 해당 멤버로 접근이 가능. 여기서 말하는 모든 곳은 inherit class를 포함한 정말 모든 외부를 말한다. internal 같은 어셈블리에서만 접근이 가능. protected 클래스 외부에서 접근할 수 없으나 파생 클래스에서는 접근이 가능. public + private이라고 보면 된다. 약간 mixed 되어 있다. ++ protected internal( 결합) 같은 어셈블리에서만 protected으로 접근이 가능. 근..

728x90
반응형