Daehyunii's Dev-blog
[데브코스] TIL-102 가비지 컬렉터, 옵셔널 체이닝, null 병합 본문
데브코스 과정이 시작되었다!!! 지난주 금요일에 ot를 통해서 전반적인 설명(?)을 들었고, 오늘부터 공부가 시작되었다. 우선 데브코스 과정에서 제공되는 DAY1 강의를 수강했다.
전반적으로 자바스크립트가 어떻게 탄생하게 된 것인지, 그리고 프론트엔드 개발은 무엇인지, 그리고 자바스크립트의 기본 문법들에 대한 내용이 오늘의 강의 주제였다. 기본적으로 모던 자바스크립트 딥 다이브라는 책을 통해서 자바스크립트의 역사, 동작 원리, 기본 문법에 대해서 정독을 한 상태여서 그런지 기초적인 내용들에 대해서는 듣는데 큰 어려움은 없었다.
다만, 나의 머리..가 문제인지,, 책이 두꺼워서 인지는,,, 정확하게 알 수는 없으나 생각보다 까먹은 내용들이 많았고 다시 강의를 통해서 기억이 되살아난 내용들도 많았다. 메모리는 1바이트(8비트)의 메모리 셀의 집합을 말하고 이러한 메모리 공간의 주소를 가리키는것이 식별자임을 책을 읽을 때는 무릎을 탁 치면서 좋아했었는데 잊어버리고 있었다..
가비지컬렉터?
오늘 강의를 들은 내용중에서 완전히 새롭게 알게된 개념도 있었다. 바로 가비지 컬렉터 관련 내용이다. 자바스크립트는 언매니지드 언어로 C와 같은 매니지드 언어와는 다르게 개발자가 직접 메모리 관리를 하지 않고 가비지 컬렉터를 통해서 메모리 관리가 이뤄지는데 이러한 가비지 컬렉터는 Mark and Sweep Algorithm을 통해서 메모리를 정리한다는 사실을 알게 되었다. 이 알고리즘은 닿을 수 없는 주소를 더 이상 필요하지 않은 주소로 정의하고 메모리에서 데이터를 지우는 알고리즘이다.
오늘 강의 자체는 그렇게 어려운 내용은 없었기 때문에 수월하게 마무리 할 수 있었다. 오전부터 강의를 최대한 빠르게 듣고, 남은 시간에는 모던 자바스크립트 Deep Dive를 다시 처음부터 복습하기 시작했다. 앞서 말했듯이 기억에서 삭제된 내용들도 굉장히 많았고, 읽기 힘들어서 그냥 읽고 넘어간 부분들도 꽤 많았기 때문에, 강의 계획에 맞춰 자바스크립트 기본기를 다시 한 번 탄탄하게 만들기 위해서다.
오늘은 변수, 표현식과 문, 데이터 타입, 연산자, 제어문, 타입 변환과 단축 평가 까지 복습할 수 있었다. 책을 읽으면서 정말 기분이 좋았던 것 같다. 책을 읽는데 큰 어려움이 없다는 생각에 가장 기분이 좋았고 잊어버린 내용도 금방 다시 습득할 수 있었다. 특히 옵셔널 체이닝 연산자와 null 병합 연산자 관련 내용을 이번에는 확실하게 알게 된 것 같다. 처음 공부할 때는 논리곱과 논리합으로 대충 알고 넘어갔었다. 머리속으로 도저히 동작 원리가 그려지지가 않았기 때문이었다. 그런데 오늘은 달랐다.
옵셔널 체이닝 연산자란?
옵셔널 체이닝 연산자(?.)는 객체를 가리키기를 기대하는 변수가 null 혹은 undefined거 아닌지 확인하고 만약 null이나 undefined인 경우에는 undefined를 반환하고 null이나 undefined가 아니라면 옵셔널 체이닝 연산자(?.)의 우항에 위치한 프로퍼티를 그대로 참조하여 변수를 한 번 확인하는 방법이다.
let tmpArr = null;
let result = tmpArr?.length;
console.log(result); // undefined
let tmpArr2 = [1,2,3];
let result2 = tmpArr2?.length;
console.log(result2); // 3
null 병합 연산자란?
null 병합 연산자(??)는 좌항의 피연산자가 null 혹은 undefined인 경우 우항의 피연산자를 반환하고 그게 아니라면 좌항의 피연산자를 반환한다. 이를 통해 변수에 기본 값을 설정하는데 유용하다.
let tmp = null;
let result = tmp ?? 'default';
console.log(result); //default
let tmp2 = 'Hello World';
let result2 = tmp2 ?? 'default';
console.log(result2); //Hello World
옵셔널 체이닝 연산자와 null 병합 연산자를 사용하기 전에는 옵셔널 체이닝 연산자 대신 논리곱(&&)을 통해서 확인하고, null 병합 연산자 대신 논리합(||)을 통해서 null이나 undefined를 확인했었다. ?. 나 ?? 가 나오기 전의 문제는 falsy로 평가되는 값들 중에는 null과 undefined만 존재하는게 아니라는 사실이다. 0, -0, false, NaN, ''(빈문자열), undefined, null 모두 falsy로 평가되어 false로 암묵적 타입 변환이 된다. 그러나 0이나 빈문자열의 경우에는 그 자체로도 의미를 지닐 수 있기 때문에 이것이 문제였고, 이것을 해결하기 위해 위의 연산자들이 추가된 것이다.
오늘은 마무리 하며
오늘 공부한 위 내용들 외의 내용들은 기억하고 있거나 다시 읽고 공부해보니 다시 기억을하게 된 내용들이다. 처음에 책을 읽을때 굉장히 답답해 하면서 읽기는 했었는데, 그때 두 번 읽을때와 세 번 읽을때 모두 느낌이 다를테니 끈기있게 끝까지 읽기만 하라던 친구의 조언이 생각났다. 그리고 그 말이 딱 들어 맞았다. 아직 어려운 뒷 부분들이 많이 있지만 그래도 즐겁게 책을 읽을 수 있을것 같다는 생각이 든다ㅎㅎ
뭔가 오늘은 새로운 경험을 많이 하게 되는것 같아서 조금 설레기도 하고 어수선하기도 하고 걱정도 많이 한 하루였지만, 그래도 같은 목표를 하는 사람들과 이야기를 공유하고 혼자 공부하는 느낌이 아니라 다 함께 공부한다는 느낌을 받았다. 그리고 그 느낌이 나를 조금 더 열심히 하라고 밀어주는 느낌이 들었다. 오늘 처음 만난 조원분들도 많은 대화를 하지는 못했지만, 굉장히 열심히 살고 있고 또 나보다 더 많은 개발 관련 지식들을 알고 있다는 생각이 들었다. 또 오늘 공부한 내용 중에서 도움이 될 만한 글들의 링크들을 적극적으로 공유해 주셨다. ㅠㅠㅠ 큰 감사함은 표현하지 못했지만 진짜 감사했다.(명재님, 동우님 정보 공유 감사드리고 주영님, 명재님, 다연님 저희 팀 노션 꾸며주시고,,ㅠㅠ,,난 근데 뭘 했지?... 앞으로 도움될 일 있으면 적극적으로 돕겠습니다...)나도 뒤쳐지지 않고 열심히 바짝 붙어서 따라가고 가끔은 뒤에서 밀어줄 수 있는 팀원이 되기 위해서 열심히 더 분발해야겠다!!🔥🔥🔥🔥
'✏️ 2022. TIL > October (데브코스)' 카테고리의 다른 글
[데브코스] TIL-104 스택 (0) | 2022.10.19 |
---|---|
[데브코스] TIL-103 HTTP, HTTPS, 함수형 프로그래밍 (1) | 2022.10.19 |
[Git / Github] TIL-101 (0) | 2022.10.08 |
[Git / Github] TIL-100 (0) | 2022.10.08 |
[Git / Github] TIL-99 (1) | 2022.10.08 |