2022.04.22 오늘의 공부

찬찬잉·2022년 4월 22일
0
post-thumbnail

참고 자료

클래스(Class) 란

  • 객체를 만들어 내기 위한 설계도 혹은 틀
  • 연관되어 있는 변수와 메서드의 집합

객체(Object) 란

  • 소프트웨어 세계에 구현할 대상

  • 클래스에 선언된 모양 그대로 생성된 실체

  • ‘클래스의 인스턴스(instance)’ 라고도 부른다.

  • 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖는다.

  • oop의 관점에서 클래스의 타입으로 선언되었을 때 ‘객체’라고 부른다.

인스턴스(Instance) 란

  • 설계도를 바탕으로 소프트웨어 세계에 구현된 구체적인 실체 즉, 객체를 소프트웨어에 실체화 하면 그것을 ‘인스턴스’라고 부른다.
  • 실체화된 인스턴스는 메모리에 할당된다.
    인스턴스는 객체에 포함된다고 볼 수 있다.
  • oop의 관점에서 객체가 메모리에 할당되어 실제 사용될 때 ‘인스턴스’라고 부른다.
  • 추상적인 개념(또는 명세)과 구체적인 객체 사이의 관계 에 초점을 맞출 경우에 사용한다.
  • ‘~의 인스턴스’ 의 형태로 사용된다.
  • 객체는 클래스의 인스턴스다.
  • 객체 간의 링크는 클래스 간의 연관 관계의 인스턴스다.
  • 실행 프로세스는 프로그램의 인스턴스다.

this란?

  • this란 이것 이란 뜻이다.
  • this란 javascript 예약어다.

this는?

  • this는 자신이 속한 객체 또는 자신이 생성할 인스턴스를 가리키는 자기 참조 변수(self-reference variable)이다.
  • this를 통해 자신이 속한 객체 또는 자신이 생성할 인스턴스의 프로퍼티나 메서드를 참조할 수 있다.
  • this는 자바스크립트 엔진에 의해 암묵적으로 생성된다.
  • this는 코드 어디서든 참조할 수 있다.
  • 하지만 this는 객체의 프로퍼티나 메서드를 참조하기 위한 자기 참조 변수이므로 일반적으로 객체의 메서드 내부 또는 생성자 함수 내부에서만 의미가 있다.
  • 함수를 호출하면 인자와 this가 암묵적으로 함수 내부에 전달된다.
  • 단, this가 가리키는 값, 즉 this 바인딩은 함수 호출 방식에 의해 동적으로 결정된다.
  • 크게 전역에서 사용할 때와 함수안에서 사용할 때로 나눌 수 있다.

바인딩이란?

  • 식별자와 값을 연결하는 과정을 말한다.
  • 변수선언은 변수 이름과 확보된 메모리 공간의 주소를 바인딩하는 것이다.
  • this 바인딩 this(키워드로 분류되지만 식별자의 역할을 한다.)와 this가 가리킬 객체 바인딩하는 것이다.

this를 전역에서 사용한 경우

  • 브라우저라는 자바스크립트 런타임 경우에 this는 항상 window라는 전역 객체를 참조한다.
  • 전역 객체란 전역 범위에 항상 존재하는 객체를 의미한다. (Node.js에서 전역 객체는 global이다.)
  • 브라우저라는 자바스크립트 런타임에서 모든 변수, 함수는 window라는 객체의 프로퍼티와 메소드이다.

  • 브라우저의 전역 객체 window
  • Node.js의 전역 객체 global
  • Node.js의 REPL에 this와 global 키워드를 각각 입력한 결과가 동일한 것을 확인 할 수 있다.

this를 함수 내부에서 사용한 경우

  • 함수는 전역에 선언된 일반 함수와 객체 안에 메소드로 크게 구분할 수 있다.
  • 객체안에 선언된 함수를 전역에 선언된 함수와 구분하기 위해 메소드라고한다.
  • 그런데 전역에 선언된 일반 함수도 결국 window 전역 객체의 메소드다.
  • 즉, 모든 함수는 객체 내부에 있다.
  • 이때 this는 현재 함수를 실행하고 있는 그 객체를 참조한다.
  • 정리하면 함수 내부에서 this의 값은 함수를 호출하는 방법에 의해 바뀐다.
  • 그리고 또한 엄격모드 여부에 따라 참조 값이 달라진다.
  • 엄격 모드에서 일반 함수 내부의 this는 undefinded가 바인딩된다.

👉 this 유튭 참고

this = 객체 = 호출한 놈
호출한 놈이 없을 경우 window 객체이다.

profile
디자이너, 기획자 출신의 개발자

0개의 댓글