
객체 지향 프로그래밍(OOP, Object-Oriented Programming)은 객체를 사용하여 데이터를 구조화하고 이를 처리하는 프로그래밍 패러다임입니다.
객체는 속성과 메서드의 집합으로, 속성은 객체의 상태를 나타내는 변수이고, 메서드는 객체의 동작을 정의하는 함수입니다.
클래스는 객체를 생성하기 위한 청사진(템플릿)으로 ES6(ECMAScript 2015)에서 도입되었습니다.
상속은 기존 클래스의 기능을 재사용하여 새로운 클래스를 만드는 방법으로 extends 키워드를 사용하여 구현할 수 있습니다.
super는 상속 관계에서 부모 클래스의constructor(생성자)와 메서드를 호출하는 데 사용됩니다. 자식 클래스의 생성자에서super를 호출하기 전에는this를 사용할 수 없습니다.
(매우 중요)
다형성은 같은 메서드가 다른 객체에서 다르게 동작할 수 있도록 하는 능력입니다. 예를 들어, greet 메서드는 Person 클래스와 Employee 클래스에서 각각 다르게 동작할 수 있습니다.
this는 함수가 호출되는 방식에 따라 다르게 정의되며, 객체 내에서 현재 객체를 참조하는 데 사용됩니다. this는 객체 지향 프로그래밍(OOP)에서 중요한 역할을 하며, 상황에 따라 다른 값을 가질 수 있습니다.
전역 컨텍스트에서 this는 전역 객체를 가리킵니다. 브라우저 환경에서는 전역 객체가 window이고, Node.js에서는 global입니다.
객체의 메서드 내부에서 this는 해당 메서드를 소유한 객체를 가리킵니다.
생성자 함수 내부에서 this는 새로 생성된 인스턴스 객체를 가리킵니다.
call, apply, bind 메서드를 사용하여 this를 명시적으로 설정할 수 있습니다.
화살표 함수는 자신만의 this 바인딩을 가지지 않고, 주변 컨텍스트의 this를 사용합니다. (중요)
함수가 호출되는 방식에 따라
this의 값이 달라질 수 있습니다. 예를 들어, 객체의 메서드로 호출될 때 (메서드를 호출한 객체 참조)와 일반 함수로 호출될 때 (전역 객체를 참조)this는 다르게 바인딩됩니다.
콜백 함수 내에서
this는 일반적으로 기대하는 객체를 참조하지 않을 수 있습니다. 이 경우 화살표 함수나bind()메서드를 사용하여this를 바인딩할 수 있습니다.
엄격 모드에서는
this가undefined로 바인딩될 수 있으므로 주의해야 합니다.