Clolent

CLASS 와 STRUCT 차이

SRUCT 는 깊은 복사

CLASS 는 얕은 복사 ( 참조 )


객체지향

있는그대로 알아서 돌아면 된다 그것이 객체지향

어떠한 형태가 있고 이를 이제 가져가서 사용

일종의 부품을 만든다라고 생각 할 수도 있음 만들어 놨으면 그 부품을 가져다 쓰면 될 뿐 

서로 엉켜서 연관되서 돌아가지 않아도 되게 만드는 것을 목표로 함.


Namespace

이름이 주어진 공간이라고 생각하면 된다. 


예를 들어 내가만든 class A  

A가 만든 class A 가 있다면 class 이름이 중복이되어 문제가 된다.

이를 구분하기 위한것이 namespace 

MySpace.A

MadeByA.A


namespace MySpace{

class A{

불라불라불라불라

}

}


namespace YourSpace{

classs A{

불라불라

}

}

Class 상속

public class 자식이름 : 부모이름


class Child : Parent

{

}




Class 오버라이딩

public class Parent

{

public void Print() { Debug.Log("Parent"); }

}

public class Child

{

public new void Print() { Debug.Log("Child"); }

}


Class 다형성

다양한 형태를 가지는 성질로 모든 자식은 부모처럼 취급될 수 있다. !

이때 어디서 Pring() 를 호출하던 Garand Parent 가 호출된다 !! 

Parent 를 상속받는 모든 자식 class 는 Parent 형태로 관리가가능하다. 즉


Parent[ ] 을 통해 어떤 형태의 자식이든, 몇 단계 밑에 자식들 모두를 담을수 있다. 

위의 메모리 구조를 보면 이유를 알수있다.

Child 를 선언해도 GrandParent Parent 등이 다 만들어져 있다는 것.


    Private : 안방 / 엄마아빠만 갈수있음

  Protected : 우리집 / 우리 가족만 올수있음

 Public : 아파트 / 누구든 접근은 가능


가상 함수 ( Virtual ) ( Virtual 파괴자와 묶어서 회사면접 100% ?! ) 

기본 형태를 선언만 하고 자식이 각자 구현을해서 자식이 부를때 알맞은 함수를 불러옴


public class GrandParent

{

public virtual void Print()

{ Debug.Log(“Grand Parent"); }

}

public class Parent

{

public override void Print()

{ Debug.Log(“Parent"); }

}

public class Child

{

public override void Print()

{ Debug.Log(“Child"); }

}


이러한 형태로 되어있고 

GrandParent  grandParent = null;

grandParent = new Parent();

grandParent.Print();

grandParent = new Child();

grandParent.Print();

이렇게 쓰면 결과값이 어떻게 될까 ??

Parent

Child

순으로 출력 된다.


GrandParent 로 만들어진 grandParent 는 메모리에서 GrandParent 까지밖에 못봄 만약 Parent 단계에만 있는 새로운 함수가 있다면 그것은 호출할수 없다.

모든 자식은 부모가 될수 있지만, 부모가 자식이 될순 없는것


GrandParent 로 만들어져서 override 된 print 함수들은 호출된거에 따라 다르게 호출된다. 하지만 다른형태 Parent , Child 만의 무언가에는 접근이 불가능

애가 커서 할아버지가 될순 있지만 할아버지가 어려져서 애가될순없다.


추가적으로 Parent p = (Parent)gp ;

p.Print() 를 하면 뭐가 호출될까??

Child 가 호출 된다.




※ MonoBehaviour 을 상속받는 class 의 이름이 파일이름과 같아야하는것 나머지는 상관 없다.


※ using System.Collections.Generic          List, Dictionary 사용을 위해 추가해줘야한다.


List


배열의 단점인 정적인 것을해결한 것 List 는 동적 배열이라고 할수 있다.


List 는 System.Collections.Generic 네임 스페이스에 선언도어있다. 


초기화

List < 자료형 > listName = new List < 자료형 >( );


사용법

Add( Value ) : 뒤에다가 자료 추가 Push_back 이라고 봐도 무방

Insert( Index , Value )  : 자료를 Index 위치에 끼워넣는다.

Remove( Value ) 해당 값을 삭제

RemoveAt ( Index ) Index 위치에 값을 삭제

Contains( Value ) 해당 값을 가지고 있다면 true
Clear( ) 안에 요소 다 삭제
Count 안에 요소 갯수 반환


Dictionary

키와 Value 쌍으로 관리하는 자료형 ( map 을 생각해보자 ) 

중복 Key 값은 허용되지 않는다 ! 

초기화

Dictionary < key_type , value_type > dicName = new Dictionary < key_type ,value_type > ( ) ;


사용법

Add( Key, Value )    추가인데 만약 같은 key 값에 대해 Add를 또 실행할경우 덮어 쓰게 된다.

Remove( Key )    Key에 해당하는 값을 삭제

ContainsKey( Key )    Key 있다면 반환

ContainsValue( Value ) 있으면 True

Count 요소 갯수 ( 키 값이 string 이라면 사용 불가능한다 그리고 0에서부터 순차적으로 key값을 사용했을때 성립한다. )

Clear( ) 위와 동일


숙제 : Boxing Unboxing 조사 해오기 !!

댓글 로드 중…

블로그 정보

Clolent - 커피물조절달인

최근에 게시된 글