인포메이트 7주차 공유(알고리즘)
인포메이트 7주차 공유(알고리즘) 모음입니다.
CSS 프로퍼티에 숨겨진 레이아웃 알고리즘 - 곽승주
Heap 메모리와 GC 알고리즘 - 윤해진
React reconciliation 알고리즘을 초간단하게 알아보자! - 김민재
재미와 이익을 위한 자바스크립트 전문화 - 김하나
CSS 프로퍼티에 숨겨진 레이아웃 알고리즘 - 곽승주
Intro
자주 사용했었던 CSS 코드가 예상치 못한 다른 결과를 낳은 적이 있었을 것입니다. 그 이유는 프로퍼티가 복잡한 시스템에서 작동하고, 프로퍼티의 작동 방식을 변경시키는 미묘한 컨텍스트가 있기 때문입니다. 이는 레이아웃 알고리즘과 연관되어 있습니다.
레이아웃 알고리즘
레이아웃 알고리즘이 뭘까요? 브라우저가 HTML을 렌더링할 때, 모든 요소는 기본 레이아웃 알고리즘을 사용하여 계산된 레이아웃을 갖습니다. 레이아웃 알고리즘에는 아래와 같은 것들이 포함됩니다.
- Flexbox
- Positioned
- Grid
- Table
- Flow
z-index를 예로 설명드리겠습니다. z-index는 보통 position과 함께 중첩 순서를 제어하는 데 사용되며, 겹쳐졌을 때 어느 요소가 위에 표시될지 결정하는 속성입니다. 이를 position없이 사용하면 당연히 제대로된 동작을 하지 않겠죠? 이는 레이아웃 알고리즘 중 Flow 레이아웃을 사용했기 때문입니다. Flow 레이아웃은 다른 레이아웃으로 특정짓지 않는 이상 default로 사용됩니다.
하지만, 위 예시를 보면 position을 사용하지 않고, flex를 사용하는 것으로도 z-index가 동작하는 것을 확인할 수 있습니다. 이것은 레이아웃 알고리즘 중 Flexbox 알고리즘이 z-index를 구현하기 때문입니다. 이처럼 각 레이아웃 알고리즘에 어떠한 프로퍼티를 구현할 수 있게 정의할 수 있고, 또한 일반적인 기본 동작을 재정의할 수도 있습니다. width로 그 예를 설명하겠습니다.
첫 div 태그는 Flow 레이아웃을 사용하여 렌더링되며, 실제로 2000px