ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [유니티] 16강 기타(namespace, 접근제한, 속성, 참조, 추상, 가상)
    [유니티] 기본 2022. 5. 31. 01:11
    728x90

    1. namespace, using

    딱히 특별한게 없는 흔한 코드입니다.

    CodeNamespace라는 네임스페이스로 감싸고, 그 안에 Code라는 클래스를 만들었습니다.

    아래는 CodeNamespcae.Code 라고 위에서 만든 클래스에 접근하는 코드입니다.

    CodeNamespace.Code이렇게 객체를 계속 사용하기에는 코드 작성도 불편하고, 나중에 코드의 가독성이 떨어지게 됩니다. 네임스페이스가 모호해 보이지 않는이상 using 네임스페이스명; 으로 긴~ 이름을 가볍게 작성할 수 있도록 할수 있습니다.

     

    이제 유니티에서 C#코드를 만들면, 기본적으로 상단에 있는

    using System.C~;

    using UntityEn~;

    이 붙었는지 이해 했을거라 생각된다.

     

    그럼 왜? 네임스페이스를 쓰는지 생각해 봅시다.

    C#에서는 최소 클래스 단위로 프로그래밍을 구현해야 합니다. 최소 단위이다 보니, 프로그래밍이 자꾸 확장되면 동일한 클래스 이름을 피하려고 하더라도 한계에 도달하게 됩니다. 구분하기 위해서 구분자를 넣다 보면 클래스명이 끝도 없이 늘어나 버릴수 있습니다. 그것을 방지하기 위해서 클래스의 소속을 만든것이 namespace입니다.

    초보 개발자 일때는 남들이 만들어둔것을 사용하기만 하겠지만, 경력이 쌓이다 보면 자연스럽게 namespace활용도가 높아지게 될겁니다. 지금은 가볍게 생각하고 넘어가면 됩니다.

     

    2. private, protected, public

    클래스, 함수, 변수 앞에 붙을 수 있습니다.

    private은 같은 소속이면 접근 가능하고, protected는 상속 받은 클래스만 접근 가능하며, public은 제한 사항이 없습니다.

     

    혼자 모든 작업을 한다면, 접근 제한에 필요한 키워드가 필요가 없을겁니다.

    다른 개발자와 공동 작업을 하거나, 라이브러리를 배포하거나, 역으로 외부 라이브러리를 사용해야 하는 등 외부의 누군가와 작업이 겹칠 경우 필요한 부분입니다.

    연습한다고 포트폴리옷 작업할때 처음부터 억지로 집어 넣으면 코드가 난장판이 됩니다. 포트폴리오 산으로 갑니다.

    프로그래밍이 미숙하다면 전부 public으로 사용하고, 충분히 코드를 잘 다루게 되었거나, 모든 작업이 모두 마무리 된 후, 접근 권한 적용해도 늦지 않습니다.

     

    클래스 잘 만들고, 함수 잘 만들고, 변수 잘 만든 다음 최후에 권한 어떻게 할지 고민하면 됩니다. 앞서 말했지만, 이거 고민 하다고 구현하는거 방해 받지 마세요.

     

    개나소나 쉽게 알아볼 수 있는 코드가 제일 짠 코드입니다. 아무리 쉽게 짜더라도 하나씩 쌓이면 결국 복잡해집니다. 쓸데없이 가오잡고, 쓸데없는 허세 따위가 있는 코드는 쓰레기입니다.

     

    3. property

    2와 똑같이 꼭 필요한 부분만 사용하거나 코드를 단순화하는데만 사용하는 것을 추천합니다.

    hp, mp 값을 넣을때, 0보다 크거나 같은 값을 넣는 방법입니다. 어느것을 사용하더라도 상관없습니다.

    ap에서 값을 넣는건 private 접근 권한 줬습니다. dp 사용하는것처럼 혼용은 허용하지 않습니다.

    4. 참조 전달 방법

    결과는 둘다 5가 나옵니다. 고급 언어의 아쉬운 부분을 딱 보완한것 같네요. 문법은 쉐이더와 유사합니다.

    5. 일반, 추상 클래스, 인터페이스 상속, virtual 함수

    게임 제작하는데, 일반 상속과 virtual 정도만 확실히 알아도 클래스 설계 깔끔하게 마무리하는데 전혀 문제 없습니다.

    일반, 추상 클래스는 C/C++, JAVA와 차이가 없습니다.

    C/C++, JAVA에서 게임 로직에서 추상 클래스를 사용한적 한번도 없습니다.

    JAVA에서 인터페이스를 한 이유는 예전 피쳐폰 시절에 데이터관리 때문에 즐겨 사용했지, 만약 JAVA에서 구조체를 지원했더라면 사용할 일 없었을겁니다.

    인터페이스 - C/C++사용자는 인터페이스가 생소할텐데, 그냥 멀티 상속이 가능하다고 생각하면 간단합니다.

    인터페이스 - JAVA 사용자는 차이점은 인터페이스 타입으로 implements 받는 클래스명으로 생성이 안되고, 클래스명의 타입으로 선언해야 하는게 다릅니다.

    인터페이스는 안중요하니까 문법이 헷갈릴때는 그때 잠깐 살펴보면 이해가 됩니다. C#이 그냥 잡종입니다.

    virtual은 아래를 참고하세요. 사용법이 자식 클래스에서 virtual이 아닌 override를 사용하는겁니다.

    만약 C/C++처럼 Monster의  virtual void attack()=0; 로는 못합니다. 이럴 경우는 인터페이스를 쓰셔야 합니다.

    참으로 잡종의 문법 C#입니다.

     

    6. 인덱스, 네임드 매개변수

    몰라도 프로그래밍 하는데는 문제 없을거 같네요. 쓸데없이 복잡하게 만드는 문법 인거 같습니다.

    코드는 심플하고 명시적인게 가장 보기 좋고 강력합니다. 쓸데없이 공부를 해야 하는거라면 안해도 되는 문법입니다.

    다만 튜토리얼 같은데서 사용한 코드라면 조금 알아야겠네요. 근데 어차피 유니티에서 만든 남의 코드를 참고할일 별로 없을거 같습니다. 만들려면 Object C처럼 정갈하게 잘 만들든지 진짜 더럽게 만든 C#입니다.

     

    이번 챕터에서는 솔직히 1, 3을 눈여겨 보고, 나머지는 소설책 읽듯이 읽고 까먹으면 됩니다. 나중에 필요하면 찾아서 확인 하면 됩니다.

    -끗-

     

Designed by Tistory.