JS & TS/JavaScript
[JavaScript] 객체 지향 프로그램
Bay Im
2024. 2. 8. 10:53
- 객체 지향 프로그래밍 (Object Oriented Programming)
- 원시(primitive) 타입을 제외한 모든 것이 객체(object)
- 특정 인스턴스에 종속되지 않는 함수를 클래스(정적) 메소드라고 한다.
- 은닉성
- 캡슐화, 내부(local) 변수 및 메소드 보호(private, protected, public)
- 상속성
- 확장성(extends, mixin, prototype), superclass & subclass
- 다형성
- polymorphism, interface / super class
- 추상화
- abstract class
- 정적 필드 / 메소드 - Class(Static) Field / Method
- 특정 인스턴스와 무관하고 Class에 존재하는 함수(method)
- static 영역에 생성
- 인스턴스 프로퍼티를 참조할 수 없다.
- JavaScript는 public, private 만 있다! proctected 없음
- Singleton Pattern
- 싱글톤 패턴 클래스 가져올 때 new 사용하지 말고 const 변수 = 클래스.getInstance(); 형식으로 가져온다.
- getInstance()
static getInstace() { return this.#_instance || new this(); }
- 싱글톤 패턴 클래스 가져올 때 new 사용하지 말고 const 변수 = 클래스.getInstance(); 형식으로 가져온다.
- Overriding
- 부모(super)의 함수(method)를 재정의
- Accessor Property
- 특정 인스턴스와 무관하고 class에 존재하는 함수(method)
- Proxy object(functions) - Reflect, AOP
- 객체의 특정 동작을 가로채기(hooking)해서 추가 동작 수행
- 용도
- 객체의 작업에 대한 로깅(기록)
- 잘못된 접근에 오류 일으키기(validation check)
- 기능 제어(읽기 전용 등)
- 객체의 정보 숨기기
- const proxyObj = new Proxy(targetObject, handler);
- property 정의
- Object.defineProperties(클래스이름.prototype, {…})
- 상속(extends) - SuperClass & SubClass
- prototype chain을 통한 모든 데이터와 기능을 상속
- OOP - 상속과 다형성
- Class - Interface - Absttact
- 상속(inheritance)
- 부모의 구현체를 부여받는다.
- 구현(implements)
- 인터페이스에 정의된 함수 구햔한다.
- 추상 클래스(abstract class)
- 다중 상속(Multiple Inheritance)
- 충돌 위험