본문 바로가기
게임 개발 일지/내일배움캠프 TIL

Delegate / 추상 클래스와 인터페이스

by 빛하_ 2023. 12. 29.

 

 

Collection

 

컴퓨터공학에서 흔히 '자료구조'라고 부르는 영역의 내용으로,

데이터를 특정한 방식으로 저장하는 방법이다.

데이터의 활용 방법에 따라 저장하는 방식을 다르게 한다. (효율성)

같은 성격을 띠는 자료들을 모아주는 자료구조이다.

 

Delegate 

 

(1) Comparison<T>

작으면 >0, 같으면 0, 크면 <0

int 형식으로 비교함.

 

(2) Predicate<T> 

bool 형식으로 특정 조건에 맞는 변수들을 반환

 

(3) Action<T>

행동만 하고 반환하지는 않는 delegate.

ex) OnMove

 

(4) Func<T,TResult> 

반환값이 필요한 delegate

 

(5) 람다

간단한 함수를 사용하기 위해 그것을 매번 정의하는 것이 불편하기 때문에 람다(무명함수)를 사용.

문법 : (입력) => 결과 (단, 입력이 한 개라면 소괄호 생략 가능함)

ex. 두 수를 더하는 함수 / (x,y) => x+y;   

 

* 제네릭 델리게이트를 사용하는 이유 )

delegate를 사용하기 위해 순수한 delegate를 한 번 더 정의하는 것을 방지함.

 

 

데이터 이동 시 주의 사항 (값과 참조)

 

VS 에서 C# 작성 시 텍스트 색상의 의미

값, 구조체 : 연두색

참조, 클래스 : 초록색

 

데이터를 참조할 때, 여기저기 옮겨다니면서 사용할 때 주의할 것은, 

내가 들고 있는 데이터가 값인지 참조인지 명확히 구분해야 한다는 점이다.

 

구조체를 포함한 값 형식과 String(C# 에서는 불변체로 지정했기 때문에)은 어떻게 옮겨도 문제가 없지만

참조형과 클래스의 경우 실제값은 Heap메모리에, 주소값은 Stack메모리에 저장되기 때문에 꼭 유의해야 한다.

 

 

추상 클래스와 인터페이스 

 

(1) abstract class 

= 해당 클래스를 추상화해서 new로 생성할 수 없게 함.

추상 클래스 내부에 생성한 abstract 는 상속받은 모든 자식 클래스들이 같은 함수를 구현시키도록 강제하는 역할을 한다.

상속받은 자식클래스는 override를 사용해서 해당 abstract 메서드를 가져와 반드시 구현해야한다.

 

(2) interface

= 다른 언어들의 다중 상속에서 발생하는 책임 소재의 문제점을 해결하기 위해 등장.

C#에서 다형성을 구현하는 중요한 개념. 

동일한 메서드를 가지고 있어도 다르게 동작해야 하는 여러 객체를 관리할 때 인터페이스가 효율적이다. 

인터페이스는 클래스 형태를 갖지 않고 동작의 구현에 초점을 맞춘다.

클래스가 이런 인터페이스를 구현함으로써 특정 개체 간 일관된 동작을 보장하게 된다.

 

(3) virtual 과 override

virtual : 상위 클래스에 존재, 하위에서 구현할 수 있도록 임시적으로 메서드 틀을 만들어 놓음.

override : 하위 클래스에서 virtual 형식을 받아와서 실제로 출력할 데이터를 채워 넣음.

 

abstract와 virtual의 차이

- virtual은 기본 틀을 제공할 뿐, 하위 클래스에게 실제 구현을 강요하지는 않는다.

- 하지만 abstract의 경우 하위 클래스가 반드시 부모 클래스의 함수를 가져와서 구현해야만 한다. 

 

 

 

댓글