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();
      }
      
  • 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)
    • 충돌 위험