1 minute read

nil

객체지향(Object Oriented) 자체가 가진 복잡성의 원인은 뭘까? 그 원인을 찾아보고 해결할 수 있는 다른 모델을 제시한다. 발표자는 리치 히키(Rich Hickey). Clojure를 만든 사람이다.

명확하게 정의하지 않아 괴롭히는 개념이 하나 있다. 바로 시간. 객체 지향(Object Oriented)에는 시간이란 개념이 없다. 이 발표에서 가장 인상적이었다. 이 개념에 대한 설명이 주제이기도 하고.

진짜 없을까? 아예 없는 걸까? 그건 아니다. 명확한 개념 정의를 안 했을 뿐이다. 프로그램에서 공통으로 사용하는 보편적인 시간대가 있다. 바로 메인 스레드(thread)의 타임라인이다.

병행 프로그래밍(concurrent programming)에서 이 시간대가 깨진다. 시간을 구성하는 건 인과 관계를 맺은 값들. 즉 변화가 시간대를 구성하는 재료가 된다. 스레드마다 변화를 각기 주도하기 때문에 보편적인 시간대가 깨지게 된다. 계산은 상관없으나 리소스에 접근하는 게 문제다. 시간대를 맞춰줘야 한다. 하나의 시간대로 복귀하는 건 어떻게 하나? 바로 Lock 메커니즘. 시간대를 맞추는 데 사용한다.

시각을 넓힐 수 있는 좋은 발표자료. clojure 관심 여부를 떠나서 추천하고 싶다. 약점을 알게 되면 이해가 더 깊어진다. 이 발표가 객체지향이 가진 약점을 내게 알려줬다. 명확히 정의하면 주변이 명료해지는 시간이란 개념도 배웠다.

주요 슬라이드와 간단한 코멘트

nil

OO에는 시간이란 개념이 존재하지 않는다.

nil

실제 entity와 identity를 결합했다.

nil

미래는 과거로부터 만들어진다. 이런 과정을 process라고 부른다. 시간은 연속된 process 이벤트들로 만들어진다.

nil

identity는 상상의 entity이다. 인과 관계를 맺은 값들의 시리즈를 결합해서 만든다.

nil

nil

CAS (compare and swap)와 agent를 시간 건축물 관점에서 본다.

nil

nil

타임 라인이 여러 개 있을 때, STM (Software transactional memory)

참고