클래스와 객체 / 인스턴스화란? / this
클래스
- 객체를 만드는 틀 , 객체를 만들기 위한 설계도
- 참조형식의 사용자 정의 타입
+) 참조형식은 힙에 저장되는 형식으로, 스택과 힙 메모리 모두를 사용한다.
=> 스택 메모리에 값이 저장되어있는 주소를 저장하기 때문이다.
클래스 정의
public class <클래스명> {
// Properties, Methods, Events, etc.
}
객체
- 속성(상태) + 기능(동작) 의 집합
- 객체의 멤버: 속성, 기능
속성(Property) : 멤버변수(member variable), 특성(attribute), 필드(field), 상태(state)
기능(function): 메서드(method), 행위(behavior),함수(function)
- new 라는 키워드를 사용해 객체 생성
using System;
class Program
{
static void Main(string[] args)
{
new Unit();
}
}
인스턴스
- 생성된 객체
- 클래스가 가지고 있는 메서드를 모두 상속 받는다.
- 인스턴스는 '값'이다. 값은 다음과 같이 변수에 할당할 수 있다.
Unit unit = new Unit();
=> unit이라는 변수의 값은 Unit 클래스의 인스턴스이므로, 변수를 통해 클래스의 멤버에 접근 가능하다.
=> 주의 : new라는 키워드 뒤에 작성된 클래스의 인스턴스가 명시적으로 만들어진다.
( => new 키워드는 2가지 역할을 한다. 1. 클래스의 인스턴스를 생성 / 2. 해당 클래스의 생성자 호출)
=> 이 경우, Unit 클래스의 인스턴스가 만들어진 것이다.
=> 어떤 클래스의 인스턴스인지 확인해두고, 상속 부분에서 이 내용을 다시 확인하자.
- 접근 제한자가 외부에서 인스턴스 멤버에 접근 가능하도록 한다.
+) 접근 제한자가 표기되어있지 않으면 private 인 것이다.
객체와 인스턴스
- 객체는 일반적으로 인스턴스를 포함한다.
-인스턴스는 어떤 클래스에 속하는 객체를 의미하므로, 인스턴스화란 클래스로부터 객체를 만드는 과정을 의미한다.
- 그렇다면 '변수를 인스턴스화한다'는 무슨 뜻인가?
=> 변수를 선언하고 실체화(메모리에 값을 할당)하는 것이다.
this
- 현재 인스턴스를 가리키는 키워드 / 확장 메서드의 첫 번째 매개 변수에 대한 한정자
- 클래스 내부에서 사용가능하다.
using System;
class Program
{
static void Main(string[] args)
{
Unit unit = new Unit(); //인스턴스 생성
unit.name = "마린"; //멤버 변수에 값 할당
unit.Move(); //메서드 호출
}
}
public void Move()
{
Console.WriteLine("{0}이 이동합니다.", this.name);
}
+) 매개변수에 사용된 변수명과 클래스 멤버 변수명이 같을 때 가독성이 떨어지는 문제를 해결하기에 좋다.
참고내용)