관리 메뉴

개발블로그

객체 지향 프로그래밍(OOP)에서의 클래스 개요. 변수와 프로퍼티의 차이 본문

Unity/스크립팅

객체 지향 프로그래밍(OOP)에서의 클래스 개요. 변수와 프로퍼티의 차이

dvmoo 2021. 8. 2. 18:53

💪 GOAL

객체지향 프로그래밍을 공부하다 보면 자주 마주치는 용어들이 있다.

변수, 메소드, 클래스, 인스턴스, 객체 ... 등

용어들의 뜻과 객체지향 프로그래밍에서의 클래스 개요를 이해하고 변수와 프로퍼티의 차이점까지 짚어보도록 한다.

 


 

객체 지향 프로그래밍(Oriented Object Programming-OOP)객체(Object)를 사용해서 프로그램을 처리한다.

문제를 여러 개의 객체로 나누어 독립적인 객체 단위로 분리해서 작업할 수 있기 때문에 여러 개발자가 협업해서

규모가 큰 프로젝트를 진행하기 용이하고, 유지보수 측면도 뛰어나다는 장점이 있다.

 

 

객체는 상태(State)와 행동(Behavior)을 가지는 것을 말한다.

즉, 현재 상태와 행동을 각각의 변수와 메소드로 나타낼 수 있어야 하는 것이다.

필드를 선언하고, 메소드(변수나 프로퍼티를 통해 수행할 행동들을 구현)를 사용한다.

 

객체 지향 프로그래밍은 부품 객체를 만들어서 이것들을 조립해 하나의 제품을 만든다고 생각하면 쉽다.

 

만약 게임 내에서 인벤토리를 생성한다고 할 때,

인벤토리 패널, 장착 기능, 해제 기능, 아이템을 담는 슬롯 등 이 모든 객체를 조립하여 하나의 인벤토리 객체를 완성할 수 있다.

 

 

클래스(Class)객체를 만들기 위해서 변수와 메소드로 정의한 사용자 정의 데이터형(User Define Data Type) 이다. 

즉, 객체를 만들기 위한 설계도 혹은 틀이라고 할 수 있다.

 

그리고 클래스에 의해 생성된 객체는 인스턴스(Instance)라고도 부른다.

 

클래스의 타입으로 선언되었을 때 객체 라고 부르고, 그 객체가 메모리에 할당되어 실제 사용될 때 인스턴스라고 부르는데

인스턴스와 객체의 개념이 헷갈리게 느껴질 수 있다. 하지만 이 둘을 엄격하게 다른것이라고 나누기는 어렵다.

 


 

using UnityEngine;                                  // using 지시문, MonoBehaviour 이벤트 함수 사용 위해 필요

namespace StudyOOP                                  // 네임스페이스
{
    public class StudyHard : MonoBehaviour          // 접근제한자 calss 클래스명 : 상속
    {
        public  string _strPublic  = string.Empty;  // 필드, 멤버변수
        private string _strPrivate = string.Empty;  // 필드, 멤버변수

        public  string _strProperty  { get; set; }  // 필드, 속성

        void Start()                                // Monobehaviour 이벤트 함수
        {
            PublicMethod();
            PrivateMethod();
        }

        public void PublicMethod()                  // public 메소드
        {
            Debug.Log("Public Method");
        }

        private void PrivateMethod()                // private 메소드
        {
            Debug.Log("Private Method");
        }
    }
}

 

유니티 스크립트 클래스의 구성을 간단하게 작성해보았다.

클래스는 하나의 논리 단위에 속하는 데이터 및 동작 집합을 *캡슐화 하는 데이터 구조이다.

 

 

*) 캡슐화 : 객체의 속성(데이터 필드)과 행위(메소드)를 하나로 묶고, 실제 구현 내용 일부를 외부에 감춰 은닉한다.

 

public  string _strPublic  = string.Empty;  // 필드, 멤버변수
private string _strPrivate = string.Empty;  // 필드, 멤버변수

public  string _strProperty  { get; set; }  // 필드, 속성

 

객체 지향 프로그래밍에서 필드란 클래스 내부에 선언한 변수를 뜻한다.

 

string 타입 _strPublic, _strPrivate 멤버 변수(member variable)로써 멤버 필드라고도 부른다.

멤버 변수는 클래스 내에 선언되는데, 위 클래스 내에서는 두개의 멤버 변수가 선언된 상태이다.

 

그리고 string 타입 _strProperty 가 선언되었다. 이는 프로퍼티(Property)변수의 캡슐화를 위해 속성을 설정할 수 있다.

프로퍼티는 get, set 을 사용해 변수의 읽기, 쓰기 허용 여부를 결정할 수 있다.

 

public string _strProperty  { get; private set; }

 

만약 이처럼 set 앞에 private 접근제한자를 설정해주면 _strProperty의 값을 클래스 외부에서 수정할 수 없다.

만약 속성에 접근제한자가 아무것도 붙어있지 않으면 변수 타입 앞의 접근제한자를 따라간다.

 

따라서 _strProperty는 클래스 외부에서 불러와 읽을 수는 있지만 외부에서 값을 수정하지는 못하도록 설정한 것이다.

프로퍼티의 실제 내부 기능은 함수로 이루어져 있고, 사용은 간편하지만 메소드 처럼 사용할 수 있기 때문에 아주 편리하다.

 

 

🔶변수와 프로퍼티의 차이점

변수 프로퍼티
변수 타입 앞에 접근제한자를 통해 외부에서의 접근을 제어할 수 있음.  
get, set 접근자를 통해 멤버 변수에 접근하게 함으로써 클래스 내부의 데이터를 외부 접근으로 부터 보호할 수 있다.

 

클래스에서 선언할 필드들은 객체의 목적과 쓰임에 맞게 선언해서 사용하면 된다.

 

 

 

 

 

 

* 공부하는 단계입니다. 잘못된 내용이 있다면 피드백 부탁드립니다😊

* e-mail : heehee970@naver.com