클래스와 객체 / 인스턴스화란? / this
2024. 4. 3.
클래스

- 객체를 만드는 틀 , 객체를 만들기 위한 설계도

- 참조형식의 사용자 정의 타입

+) 참조형식은 힙에 저장되는 형식으로, 스택과 힙 메모리 모두를 사용한다.

    => 스택 메모리에 값이 저장되어있는 주소를 저장하기 때문이다.

클래스 정의
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);
}

실행결과

 

+) 매개변수에 사용된 변수명과 클래스 멤버 변수명이 같을 때 가독성이 떨어지는 문제를 해결하기에 좋다.

매개변수에 사용된 변수명과 클래스 멤버 변수명이 동일한 경우

 

 

 

 

참고내용)

https://meltingmelvin.tistory.com/16

https://smilejsu.tistory.com/2122

myoskin