개발블로그
객체 지향 프로그래밍(OOP)에서의 클래스 개요. 변수와 프로퍼티의 차이 본문
💪 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
'Unity > 스크립팅' 카테고리의 다른 글
[유니티 C#] Action 과 Func (0) | 2021.09.04 |
---|---|
[유니티 C#] 유니티의 시간 마법사 Time.timeScale, 그리고 Time.unscaledTime (0) | 2021.08.11 |
[유니티 C#] Time.deltaTime, Application.targetFrameRate을 통한 프레임 제어 (0) | 2021.08.04 |
[유니티 C#] 함수 대리자. 델리게이트 (Delegate), 이벤트(event) (0) | 2021.08.02 |
[유니티 C#] Destroy와 DestroyImmediate 의 차이점 (0) | 2021.07.27 |