객체지향에서는 모든 것을 객체로 받자!!! no value!
age=23 → new Age(23)
값을 쓸 수 있는 건 생성자밖에 없는거야
결론
⇒ 객체지향은 value context를 지향하지 않기로 하는 것
⇒ 둘 중 하나의 컨텍스트만 사용하렴
🤯그럼 함수형은??
🤯연산을 통해서 새로운 값을 만들어내니까 ??함수형이 나옴??
// 코드 넣기
자식이 부모를 대체할 수 있는것
const worker = class{
run(){ console.log("working")}
print(){ this.run() }
}
const hardworker = class{
run(){ console.log("hard working")}
}
const worker = new hardworker(); // new 로 생성된 객체가 바인딩 되기 때문에
worker.print() // hard working
⇒ 내적일관성 : 원본 class를 유지하려는 속성
js가 이 규칙을 따르는 것 뿐이지. js가 이렇게 하기로 한 게 아님
객체지향 언어는 이런 약속을 지킬꺼라고 생각하는 것
js에서 다형성을 구현하는 방식
[ prototype 그림]
내적일관성은
대체가능성 instanceOf
proto가 는 cunstructor가 해당하는지 확인하는것
처음에 확인했는데 실패하면 그다음 워커를확인
👏🏻 js는 객체지향언어인가요?
ㅇㅇ. Polymorphism이 언어 차원에서 지원되니까. 객체지향언어를 쓴다고 객체지향을 하는건 아니다
// code
객체지향하려면 여유와 바른마음이 필요합니다! ㅎㅎㅎ
위의 조건을 가져야지 변화에 대해서 격리할 수 있는 것
SRP 단일책임
OCP 개방폐쇄
LSP 업캐스팅
ISP 인터페이스 분리 [추가]
DIP : 의존성역전 다운캐스팅 금지
DI to 최소 용어 정리하기
책임 이상의 업무일때 내가하거나 다른 객체에게 의뢰해야 함
의뢰 = 메세지!
메세지의 구성
⇒ 동적바인딩이 있는 언어에서는 오퍼레이션과 메소드는 다를 수 있음
⇒ 오퍼레이션과 메소드를 분리해서 런타임에서 원하는걸
오퍼레이터가 어떤 메소드가 실행될지 런타임에 결정하는 것
영구적인 연관
규칙
코드
const worker = class{
run(){ console.log("working")}
print(){ this.run() }
}
const hardworker = class{
run(){ console.log("hard working")}
}
const worker = new hardworker(); // new 로 생성된 객체가 바인딩 되기 때문에
worker.print() // hard workin
Manager class는 확장된 쪽이 아니라 추상화 된 쪽을 가지고 수행함으로서 의존성을 역전 된다
왜냐하면 run은 worker의 확장이므로
=> DIP와 OCP는 주로 한번에 해결됨
전략 템플릿 < 컴포짓 < 비지터
그런데 이런 코드로는 뷰를 조작 할 수는 없음
원하는 것을 적당한것을 끼워넣고 싶을 때는?
⇒ 비지터 + 추상팩토리메소드 패턴 로 구현가능
// 뷰 제어역전 코드
프레임워크는 제어의 역전을 해주는 것 ⇒ 그래서 생명주기가 있는 것
ioc framework
ㅋㅋㅋ정리하셨었군요