728x90
반응형

C# 44

Static Method, 정적 메서드 선언 [Unity]

바로 설명 들어가자 정적 메서드는 우리가 일반적으로 사용하는 인스턴스(Instance) 메서드와는 다르게 클래스로부터 객체를 생성하는 방법으로 호출하는 것이 아니다. 직접 .으로 호출한다. ex) Mathf.Sin(....) ++ 우리가 클래스로 객체의 이름을 자유롭게 바꾸는 것과 다르게 얘는 클래스니까 바꿀 수 없다고 보면 된다. ** 메서드 내부에서는 클래스의 인스턴스 객체 멤버를 참조해서는 안된다. static인 변수나 전역(global)로 선언된 변수들만 사용이 가능하다. 보통 종속적이지 않게 구현하려고 쓰는 모양이다. 가독성을 높이기 위해 namespace와 class를 묶어서 사용하기 위해 쓰기도 한다고 한다. Mathf. 같은 메서드들이 그런 용도로 쓰이고 있다.

static과 static public 의 차이, 정적 변 [Unity]

조금 궁금한 주제였다. 근데 알아볼 기회가 생겨서 바로 알아봤다. 우선 우리는 Static은 정적선언이고 Stack 영역에 저장되어 프로그램이 내려가기 전까지 계속 있을 것이란 것을 알고 있다. 그렇다면 어차피 정적인데 아무데서나 public을 붙이나 마나 불러올 수 있는 것 아니냐??? 라는 의문이 든다. 사실 그렇지 않다. 구분하는 이유가 있었다. 접근제한자를 설정하지 않으면 자동으로 protected로 암묵적으로 선언된다. 즉, 자신을 포함한 Children만 사용이 가능해진다. static으로만 선언하면 다른 클래스에서는 불러올 수 없는 것이 된다는 것이다. 이것이 static 과 static public의 차이다. 아래 글도 참고하자. [Unity, 유니티/Basic, 기본] - Static M..

Handling Event, 이벤트 활용하기 - 3, 옵저버패턴, Observer Pattern [Unity]

우리가 왜 이벤트를 활용해보았을까. 바로 옵저버 패턴이란 것을 익혀보기 위함이었다. 옵저버 패턴은 어떤 때에 쓰일까?? 다수의 클래스가 하나의 이벤트에 대해 무엇인가 해야할 때 쓰인다. 이전 글에서 플레이어가 죽거나, 적이 죽을 때처럼 많은 곳에서 참조할 때?? 그정도? 알아보자 옵저버 패턴은 이런 식으로 진행된다. 하지만 모든 Observer마다 Notify를 하긴 귀찮기에 인터페이스를 이용하기도 한다. 이번에는 목숨이 다 소모되어서 게임이 끝났을 때를 가정해보자 게임 상에 남은 Enemy와 아이템은 없어지고 점수는 0으로 초기화되고 GAME OVER 문구가 떠야한다. 여기서 옵저버 패턴을 한 번 써보자. 그럼 인터페이스 만들어보자 이제는 Subject에 Private으로 Observer 리스트 만들고..

Handling Event, 이벤트 활용하기 - 2 [Unity]

이어서 이벤트를 활용해보자 이전 글과 이어진다. 이번에는 Enemy가 죽으면 해당하는 점수를 인터페이스 보여주려고 한다. 여기선 HUD, Head Up Display로 나타난다. 총알을 맞으면 어떻게 되는지 보자 private void OnCollisionEnter2D(Collision2D collision) { Destroy(collision.gameObject); GameObject xPlosion = Instantiate(explosion, transform.position, Quaternion.identity); xPlosion.transform.localScale = new Vector2(2, 2); Destroy(gameObject); } 이번에도 이벤트를 이용하고 싶다. 이번엔 이런 식으로 ..

이벤트, Events [Unity]

이벤트하면 뭐 경험치 2배, 선물 주는 것 생각이 나는 여기선 그건 아니고 정말 이벤트다. 사건이라고... 해석하기보다 그냥 Event로 받아들이자. 알아보자 정의해보자 어떤 이벤트가 일어났으면 설정해놓은 메서드를 불러와서 실행시킨다. delegate에 메서드를 담아서 실행시키는 것과 비슷한 원리다. 다만 Event는 static으로 선언되어 객체없이도 어디서나 접근할 수 있게해놓는 것이다. 그렇게 이용한다고 한다. public delegate void ClickAction(); public static event ClickAction OnClicked; 이런 식으로 선언한다. delegate으로 먼저 선언해준다. 그 후 event 키워드를 사용하여 메서드를 써준다. ** static으로 설정하지 않아도..

어트리뷰트, Attributes [Unity]

아.. 사실 속성이란 뜻인데 속성이라고 하면 property도 있어서 그냥 해석하지말고 영어 그대로를 받아들이는 것이 낫다. 알아보자 또 정의부터 하고 넘어가야겠지. 어트리뷰트란 어셈블리, 모듈, 클래스, 구조체, 열거형변수, 생성자, 메소드, 프로퍼티, 필드, 이벤트, 인터페이스, 파라미터, 반환값, 델리게이트 같은 프로그래밍 요소에 대해 메타정보를 포함 시킬수 있는 기능을 말한다. 어트리뷰트에는 아래와 같은 곳에 쓰인다. Conditional - 메서드 실행 관여 DllImport - 외부 DLL 사용 Obsolete - 메서드 설명 Transaction - 트랜잭션 관리 WebService - 웹서비스 관련 Serializable -- 클래스 직렬화 ??????? 감이 안오는데..??? 뭐야? 유니..

싱글톤의 특징, Singleton [Unity]

뭔가 소스를 작성하다 보면 어디서든지 접근할 수 있는 하나의 인스턴스만 있는 그런 경우가 있다. ** 예를 들면 데이터를 담당하는 오브젝트같이 하나의 인스턴스만 필요로 하는 Control Class 혹은 Manager Class를 만들어야 하는 일이 발생한다. 그럴 땐 거의 싱글톤 패턴이나, 정적 클래스로 많이 제작을 한다. -> 이전의 글에서 데이터를 다룰 땐, 정적 클래스로 접근했다. 그러나 싱글톤 패턴과 정적 클래스를 섞어서 쓰면 코드가 더러워진다. 그래서 차이를 알고 적절히 써야한다. 그래서 오늘 이 글을 쓴다. 알아보자 **Unity는 C#을 언어로 쓰지만 싱글톤 사용 시 방식이 조금 다르다. 일반 C#에서는 기본 생성자를 사용하지 못하게 private으로 막아야 한다. 유니티에서는 Monobe..

Interface, 인터페이스 [Unity]

인터페이스는 상속과 비슷하면서도 다른 기능이다. Java의 interface와 거의 비슷하다고 보면 된다. 보다보면 추상클래스인가? 이 느낌도 날 것이다. 알아보자 역시 정의부터 해보자. 인터페이스는 뜻을 해석해보면 알겠지만 상호간의 소통을 위한 매개체랄까 그런 것이다. 여기선 "인터페이스로 내가 정의한 것들을 너는 상속을 받아서 무조건 구현해야 한다. "는 그런 의무가 생긴다. ++ 인터페이스에 구현된 것을 상속 받은 자식클래스가 구현하지 않으면 오류가 생김 ++ 추상클래스는 다중 상속이 안되지만 인터페이스는 다중 상속 가능 상속과 비슷하지만 다른 것이 무엇이냐? 바로 클래스 간의 관계가 다르다. 밑의 그림을 보면 쉽게 알 수 있다. Implements는 여기서 구현이라고 생각하면 되겠다. 또한 int..

Overriding, 덮어쓰기, 오버라이딩 [Unity]

OOP의 큰 특징 중 하나인 오버라이딩에서 알아보자 얘 덕분에 할 일이 많이 줄어들 수 있었다. 알아보자 정의부터하자 간단하게 말하면 부모클래스에서 정의된 메서드를 자식클래스에서 재정의 하는 것이다. 즉, 부모클래스에서 받은 메서드 중 자식 클래스에서 더 자세하게 기능을 구현하고 싶다면 overriding을 통해서 구현할 수 있다. 하지만 그렇다고 부모클래스의 정보까지 잃어버리는 것은 아니다. 기본적으로 Overriding을 하기 위해서 부모클래스의 메서드는 virtual로 선언이 되어야 하고 자식클래스의 메서드는 override로 선언되어 있어야 한다. 또한 위에서 말했다시피 부모클래스의 정보를 잃어버리는 것은 아닌데 이 또한 base 키워드로 다시 오버라이딩 된 메서드가 아닌 상속 받은 메서드를 불러..

Member hiding, 하이딩, 은닉 [Unity]

이번엔 약간 처음볼 수도 있는 은닉, hiding에 대해서 알아보려고 한다. 알아보자 바로 무엇인지 정의해보자 자식의 멤버 와 부모의 멤버 간의 서로 메서드를 가리는 것을 의미한다. -> 여기선 부모클래스의 메서드가 숨겨진다. **오버라이딩, Overriding을 생각하면서 약간 조금 다르다고 생각하면 될 것 같다. 상속, 다형성에서 중복된 내용이지만 다시 따로 개념을 꺼내서 다룰 뿐이다. 즉, 부모 타입으로 자식 객체를 생성하는 경우가 잦은데 자식 메서드를 쓰고 싶어도 괜히 부모클래스의 메서드가 실행되니까 이런 기능을 이용하는 것이다. 자식 클래스에서 부모 클래스에서 정의된 이름이 같은 메서드가 정의되면서 부모 메서드를 숨기게 된다. **사실 new 안써도 부모 메서드와 자식 메서드의 이름이 겹치면 자..

728x90
반응형