this

자바스크립트에서 this는 함수가 호출될 때, 즉 함수의 실행 문맥에 따라 결정되는 특수한 객체이다.

 

 

Global Context

전역 문맥

전역에서 this를 사용할 때 window 또는 global 객체를 가리킨다.

 

console.log(this) // this 는 window or global 객체이다

 

 

Function Context

함수 문맥

일반 함수 내부에서 this는 호출된 문맥에 따라 다르다. 

 

기본적으로 전역 문맥에서 호출된 함수의 this는 전역 객체를 가리키지만 엄격 모드에서는 this가 undefined로 설정된다.

 

"use strict";
function Func(){
	console.log(this);
}

Func(); // undefined

 

 

Method Context

메서드 문맥

객체의 메서드로 호출된 함수에서 this는 그 메서드가 속한 객체를 가리키게 된다.

const myObject = {
	name : "bak",
    say : function() {
    	console.log(this.name);
    }
};

myObject.say(); // bak 출력

 

여기서 this는 myObject 객체가 된다.

728x90
반응형

this

인스턴스 특정

현재 인스턴스를 가리키는 기능을 한다.

주로 멤버 메서드나 생성자에서 인스턴스 변수를 참조할 때 사용한다.

 

class Person {
    private string name;
    private int age;

    public Person(string name, int age) {
        this.name = name;
        this.age = age;
    }

    public void PrintInfo() {
        Console.WriteLine("Name: " + this.name);
        Console.WriteLine("Age: " + this.age);
    }
}

이와 같은 경우 this 키워드는 동일한 이름의 name과 age를 멤버와 매개변수를 구분하는 데 사용된다.

PrintInfo 내에서는 this를 사용하지 않고 호출해도 되지만 일관성을 유지하기 위해 사용하는 등 개발자의 선호도에 따라 사용여부가 다르다.

 

 

생성자 호출

다른 생성자를 호출할 때 사용할 수 있다.

class Person {
    private string name;
    private int age;

    public Person(string name, int age) {
        this.name = name;
        this.age = age;
    }

    public Person(string name) : this(name, 0) {
    }

    public void PrintInfo() {
        Console.WriteLine("Name: " + this.name);
        Console.WriteLine("Age: " + this.age);
    }
}

위와 같이 두 개의 오버로딩된 생성자가 선언되었을 때 string name 매개변수만 받는 생성자의 경우 호출될 때 Person(string name, int age) 생성자를 호출하며 이때 age 값을 0으로 호출하는 동작이 수행된다.

 

인덱서

인덱서는 클래스나 구조체 등의 객체를 배열처럼 인덱싱할 수 있게 해주는 것으로 대괄호 안에 인덱스를 전달하여 객체의 멤버 변수나 속성 값을 가져오거나 설정할 수 있다.

 

public class MyList
{
    private string[] _data = new string[10];

    public string this[int index]
    {
        get => _data[index];
        set => _data[index] = value;
    }
}

class Program
{
    static void Main(string[] args)
    {
        MyList list = new MyList();
        list[0] = "Hello";
        list[1] = "World";
        Console.WriteLine(list[0]); // "Hello" 출력
        Console.WriteLine(list[1]); // "World" 출력
    }
}

this 키워드로 정의된 인덱서는 string 형식의 배열 _data 멤버 변수를 instance [indexer]와 같이 바로 접근하여 사용할 수 있다. 

 

인덱서를 사용하지 않을 경우에는 해당 멤버에 접근하기 위해서 별도의 public 프로퍼티나 메서드 또는 _data를 public으로 선언해야 한다.

 

 

 

728x90
반응형

'Program Language > C#' 카테고리의 다른 글

C# Method Parameter 키워드  (0) 2023.04.27
C# Namespace 키워드  (0) 2023.04.27
C# 상위 멤버 접근 키워드 : base  (0) 2023.04.25
C# 구조체 키워드 : struct  (0) 2023.04.25
C# 문자열 키워드 : string  (0) 2023.04.25

+ Recent posts