본문 바로가기
  • Seizure But Okay Developer
FrontEnd/CodeSpitz 강의 정리

코드스피츠 80 layering

by Sky_Developer 2019. 2. 19.

프로시저와 함수의 차이


프로시저 : 가리키는 데이터가 있다

함수 : 인자나 지역변수를 데이터로 사용


프로시저의 단점 : 데이터의 변화와 데이터를 처리하는 함수의 변화가 동시에 이뤄지지 않는다


역할을 분리하는 법 중 가장 중요한 거 : 변화율


프로그램을 짜면서 염두해야 할 것은


- '복잡성을 최소화' 해서 '복잡성 폭발'이 일어나지 않게 하는 것.


- '엔트로피 증가'를 줄이는 것.


추상화 하는 방법들 :

[카테고라이징(두 개 이상의 카테고리에 소속된 데이터는 카테고리를 정해주는게 어려움), 모델링(기억해야 만 할것은 정리한 것, 유지보수가 힘들고 변화가 자주 일어난다), 그룹핑(그룹 지어주는 것. 클래스의 인스턴스를 만들어 사용하는 것고 그룹화의 일종)]


천재(폰 노이만, 튜링)들은 초기에 프로시저로만 구성하여도 이들의 부작용을 잘 제어하면서 사용할 수 있지만

일반적인 사람들은 데이터의 변화와 함수의 변화가 밀접하게 이뤄진 객체같은 구조체를 사용하거나

데이터라는 상태를 아예 안쓰는 함수형 프로그래밍을 사용 해야 함


=> 이러한 추상화 툴들을 이용하면 역할들이 무수히 많아서 각각을 인식하기 어려움. 이 때 레이어 라는 분리를 사용함.

레이어는 일종의 카테고라이징과 비슷함.


레이어 -> 카테고리 와 비슷하다


레이어링 -> 크게 분리한다. 사용할 때 층을 정확하게 나눠야 함


가치가 있는 것은 호스트코드이다. 그러므로 호스트 코드를 먼저 짜고 구상 클래스 등 이하를 작성해야 한다.


베이스 클래스의 기반 : Model, Controller, View


네이티브 분리를 위해서 View의 역할을 Controller에 위임하지 않는다. (인메모리 와 네이티브는 꼭 구분해야 하기 때문)


컨트롤러가 네이티브 지식을 배제시키기 위해 메시지 란 매게체를 이용해서 뷰와 통신한다.


베이스 클래스에는 인메모리 객체만 존재하고 구상클래스에는 네이티브 객체만 존재한다.


구상 클래스를 만드는 가장 큰 이유는(= 레이어구조를 사용한 이유) (뷰에서)

구상 클래스가 네이티브 지식을 가지게 하고 베이스 클래스는 순수 인메모리 객체만 두게 하기 위해서임.


그래서 베이스 클래스의 뷰 와 서브뷰는 인메모리를 받아들일 수 있는 그릇을 만든 것이고

네이티브 지식은 구상 클래스 층에서 처리할 것임.


첫 시간 프로그래밍의 문제는 제왕 역할을 하는 data 변수가 있었던 것.

이번 시간에는 객체지향 프로그래밍을 하면서 객체마다 역할과 책임을 분배할 것임.


권한과 책임을 축소하면 연산이 늘어난다(하지만 컴퓨터는 빠르기 때문에 연산이 늘어나는 것 때문에 걱정할 필요 없다)


통합된 자료구조를 사용하지 않기 때문에 연산으로 구성된 자료구조를 사용하게 됨


메모리와 연산은 교환할 수 있다.


메모리를 연산으로 치환하면


1. 메모리가 절감됨

2. 권한을 축소할 수 있는 방법이 생김


javascript 의 prototype은 연산을 통해 메모리를 줄이는 시스템이다


prototype chain은 객체를 타고 가서 키를 가져오는 방식.

나는 없지만 __proto에 그 키가 있는지를 hash 함수라는 연산을 통해서 거기 있는지를 확인하여 내 것 처럼 사용하는 것 (prototype chain의 골자)


이러한 방식으로 사용하는 이유?

netscape 4.0이 486 dx 시대에 만들어짐. 이 때의 최대 메모리가 4MB 였고 netscape를 띄울 메모리가 없었음. 고로 대규모 javascript 객체를 만들 수 X

이때 PowerBuilder, CBuilder 같은 프로그램으로 XML parser를 javascript에 올리고 싶은 의도가 있었고 이렇게 객체마다 메소드를 할당할 시 프로그램이 죽게됨.

이에 프로토 타입 객체를 만들어 체이닝으로 접근해 해당 기능을 사용하는 방법을 함. 이러므로 메모리상에선 메소드가 한번씩만 존재하면 되게 됨.

(연산을 통해서 메모리를 줄인 예)


요즘에 들어선 메모리를 많이 사용할 수 있기 때문에 모든 prototype chain에 있는 것을 다 copy해와서

cash table이라는 것을 만들고 여기서 읽음. 더 이상 prototype chain을 타고 가서 가져오지 않음.

이것이 Chrome에서 javascript가 브라우저에서 빠른 이유. (연산을 메모리로 치환하여 속도를 증가시킴)


객체지향에서 역할은 권한과 책임이다. 그래서 그 역할을 잘 수행하는지를 봐야한다


2000

업계에선 1나노초가 함수 하나의 수행시간이라고 한다.


프로미스는 반제어권을 준다. then을 원할데 호출할 수 있게 된 것. -> then의 연쇄가 생겨남.

리턴값을 주는 함수를 가지게 됨.


promise는 자바스크립트에 포함된 코어객체이자 인메모리 객체 이다.


물어봤던 것들 정리 :


첫번째 수업의 코드 중 isNext에서 some 을 사용하는데 만약 false 를 return 하면 어떻게 처리되는가?

=> 사실 로직이 수행되면서 some에서 false 가 return 될 일이 없다, 동작이 무조건 true를 리턴한다고 보면 됨.



const { ... , ..., ...} = this


this.a=3

this.b=5

const {a,b} = this


const k = {}

k.a = 3

k.b = 5

const {a,b} = k


const  {a,b} = {a:3, b:5}



'FrontEnd > CodeSpitz 강의 정리' 카테고리의 다른 글

80 layering 복습 정리  (0) 2019.03.03
80 layering 복습한 것 정리  (0) 2019.02.26
코드스피츠 80 디자인패턴 스터디 - 1  (0) 2019.02.12
6주차  (0) 2018.12.12
4주차  (0) 2018.11.28

댓글