Q&A ::  일반 클래스 내부에


MonoBehaviour 상속 클래스


멤버 변수 저장하기


유니티에서 JSON 사용하기(Unity JSON Utility) 글에 달아주신 psj님의 질문 댓글에 대한 답변입니다. 질문의 내용은 다음과 같습니다.


안녕하세요 올려주신 글 보고 잘 공부하고 갑니다.
궁금한 게 하나 있는데요
public Class Aclass : MonoBehaviour {}
public Class Bclass
{
Aclass a;
}
이런 식으로 MonoBahaviour를 상속 받지 않은 순수 클래스 안에 멤버 변수로 MonoBehaviour를 상속 받은 클래스가 있을 경우에는
Bclass안에 Aclass를 어떤 식으로 저장해야하나요??

출처: https://wergia.tistory.com/164#comment15327425 [베르의 프로그래밍 노트]
안녕하세요 올려주신 글 보고 잘 공부하고 갑니다.
궁금한 게 하나 있는데요
public Class Aclass : MonoBehaviour {}
public Class Bclass
{
Aclass a;
}
이런 식으로 MonoBahaviour를 상속 받지 않은 순수 클래스 안에 멤버 변수로 MonoBehaviour를 상속 받은 클래스가 있을 경우에는
Bclass안에 Aclass를 어떤 식으로 저장해야하나요??

출처: https://wergia.tistory.com/164#comment15327425 [베르의 프로그래밍 노트]

안녕하세요 올려주신 글 보고 잘 공부하고 갑니다.
궁금한 게 하나 있는데요


public class Aclass : MonoBehaviour {}


public class Bclass
{
    Aclass a;
}


이런 식으로 MonoBahaviour를 상속 받지 않은 순수 클래스 안에 멤버 변수로 MonoBehaviour를 상속 받은 클래스가 있을 경우에는
Bclass안에 Aclass를 어떤 식으로 저장해야하나요??

안녕하세요 올려주신 글 보고 잘 공부하고 갑니다.
궁금한 게 하나 있는데요
public Class Aclass : MonoBehaviour {}
public Class Bclass
{
Aclass a;
}
이런 식으로 MonoBahaviour를 상속 받지 않은 순수 클래스 안에 멤버 변수로 MonoBehaviour를 상속 받은 클래스가 있을 경우에는
Bclass안에 Aclass를 어떤 식으로 저장해야하나요??

출처: https://wergia.tistory.com/164#comment15327425 [베르의 프로그래밍 노트]


모노비헤이비어 클래스를 상속받지 않은 일반 클래스인 Bclass가 모노비헤이비어 클래스를 상속받은 Aclass를 멤버 변수로서 가질 때, 이 Bclass의 멤버 변수인 a에 어떻게 Aclass의 객체를 대입/할당 할 수 있는지에 대한 질문입니다.


우선 여기서 알아두어야 할 점은, Bclass는 앞서 말했듯이 모노비헤이비어 클래스를 상속받지 않았기 때문에 Awake(), Start(), Update() 등의 함수를 가지지 못했고, 유니티 엔진에 의해서 코드가 실행되지 않는다는 것입니다. 이 클래스에 속한 함수 등의 코드를 실행시키기 위해서는 유니티 엔진에 의해서 작동하는 모노비헤이비어 클래스를 상속받는 클래스의 동작을 통해서 간접적으로 실행되어야 할 것입니다.


이렇게 Bclass를 가지고 함수를 실행하기 위한 클래스를 다음과 같이 Cclass라고 정의하겠습니다.


public class Cclass : MonoBehaviour

{

    private Bclass b;


    private void Awake()

    {

        b = new Bclass();

    }

}


그리고 다시 Bclass를 살펴보면 Bclass의 멤버 변수인 a는 private로 선언되어 있어서 접근 방법이 없음을 알 수 있습니다. 외부에서 이 a에 값을 저장하거나 볼 수 있는 경로를 제공해주어야 합니다. 이를 위한 방법은 여러가지가 있습니다.


첫 번째로는 멤버변수의 접근지정자를 public으로 선언하는 것입니다.


public class Bclass
{
    public Aclass a;
}


접근지정자를 public으로 선언하면 아래의 예시와 같이 b아래의 a에 곧바로 접근하여 값을 대입할 수 있게 됩니다.


public class Cclass : MonoBehaviour

{

    private Bclass b;


    private void Awake()

    {

        b = new Bclass();

    }


    private void Start()

    {

        b.a = FindOfObject<Aclass>();

    }

}


두 번째 방법은 private인 멤버 변수에 접근해서 값을 넣도록 해주는 기능을 가진 함수를 만드는 것입니다.


public class Bclass
{
    private Aclass a;


    public void SetA(Aclass a)

    {

        this.a = a;

    }


    public Aclass GetA()

    {

        return a;

    }

}


private인 멤버 변수에 접근해서 값을 넣도록 해주는 함수를 만듬으로써 함수를 통해서 b안에 있는 a의 값을 수정할 수 있게 됩니다.


public class Cclass : MonoBehaviour

{

    private Bclass b;


    private void Awake()

    {

        b = new Bclass();

    }


    private void Start()

    {

        b.SetA(FindOfObject<Aclass>());

    }

}


반응형

+ Recent posts