[ 모던 자바스크립트 스터디 ] 객체
·
Archive/Develop
객체란 무엇인가 자바스크립트는 객체 기반 프로그래밍 언어이다. 자바스크립트를 구성하는 거의 모든 것이 객체라고 해도 과언이 아닐 정도이다. 원시값이 아닌 함수, 배열, 정규 표현식 .. 기타 등등은 모두 객체이다. 객체 타입은 다양한 타입의 값을 하나의 단위로 구성한 복합적인 자료구조 이다. 만약 c 언어를 했었다면, 구조체를 떠올리면 더 이해하기 쉽지않을까 생각한다. 원시 타입 값은 변경 불가능한 값이지만 객체 타입의 값은 변경 가능한 값이다. 객체는 0 개 이상의 프로퍼티로 구성된 집합이며, 프로퍼티는 키와 값으로 구성된다. 자바스크립트 내에서 사용할 수 있는 값들은 모두 프로퍼티 값이 될 수 있다. 자바스크립트의 함수 또한 프로퍼티 값이 될 수 있다. 프로퍼티의 값이 함수일 때는 일반적인 함수들과 ..
[ 모던 자바스크립트 스터디 ] 옵셔널 체이닝 연산자 / null 병합 연산자
·
Archive/Develop
ECMAScript2020에서 도입된 옵셔널 체이닝 연산자에 대해 알아보겠다. 옵셔널 체이닝 연산자 좌항의 피연산자가 null 또는 undefiend 인 경우 undefined 를 반환하고, 그렇지 않으면 우항의 프로퍼티 참조를 이어간다. 연산자는 ?. 이다. var a = null; var aValue= a?.value; 만약 옵셔널 체이닝 연산자 없이 바로 a.value 로 좌항의 피연산자의 value 라는 프로퍼티를 참조했을 때, Uncaught TypeError: Cannot read properties of null (reading 'value') 에러를 봤을 것이다. 하지만 옵셔널 체이닝 연산자를 이용하면 에러 없이 null 또는 undefined 일때도 참조할 수 있다. 원래 이 옵셔널 체이..
[ TypeScript ] 제네릭(Generics)
·
Archive/Develop
예전에 자바배울 때 했던 것 같은데, 가물가물해서 기억도 되짚어볼 겸 포스팅을 작성한다. 제네릭이란? 타입을 함수 파라미터처럼 사용하는 것이다. function getNumber(n) { return n; } 개발자는 getNumber 라는 함수를 숫자를 넘겨주는 용도로 사용하려고 하겠지만, 실상은 어떠한 값이 와도 그대로 넘겨준다. 그 값이 string이건 boolean 이건 그냥 그대로 넘긴다. 만약 이걸 제네릭 문법을 적용을 한다면, 아래와 같이 사용 가능하다. function getNumber(n: N): N { return n; } 이제 getNumber 함수를 호출할 때, 타입도 넘겨주면 된다. getNumber(123);
[ 모던 자바스크립트 스터디 ] 단축 평가
·
Archive/Develop
논리 연산자를 이용한 단축 평가 논리 연산자 중 논리합과 논리곱 연산자 표현식의 평가 결과는 boolean 타입이 아닐수도 있다. 이걸 true 냐 false 냐를 구분짓는 연산이 아닌 2개의 피연산자 중 어느 한 쪽을 골라 평가한다는 뉘앙스로 봐야한다. 아래 예시를 보자. 논리곱 연산을 행했는데, 결과 값이 boolean 타입이 아닌 2번째 피연산자인 "치킨" 이 나온 것을 확인할 수 있다. 논리곱(&&)연산자는 두 개의 피연산자가 모두 true 일 때 true 를 반환하는 연산자 임을 기억하고 차근차근 풀어나가보자. 첫번째 피연산자인 "라면" 은 Truthy 값으로 true 로 평가된다. 아직 논리곱 연산은 끝나지 않았다. 첫번째 피연산자가 true 인 것을 확인했으니 두번째 피연산자가 true 냐,..
[ 모던 자바스크립트 스터디 ] 암묵적 타입 변환 & 명시적 타입 변환
·
Archive/Develop
지난 포스팅에서 다뤘던 암묵적 타입 변환이 행해지는 문자열, 숫자, 불리언 타입을 자세하게 하지 못했던 것 같아서 다시 포스팅해보려고 한다. 문자열 타입 변환 + 연산자는 피연산자 중 하나 이상이 문자열이라면 문자열 연결 연산자로 동작한다. 따라서 아래 코드는 문자열 '22' 를 반환한다. 2 + '2' 자바스크립트 엔진은 문자열 연결 연산자 표현식을 평가하기 위해 숫자타입 2 를 암묵적으로 문자열으로 변환 시키는 것이다. 아래는 헷갈릴 수 있는 암묵적 문자열 타입변환 케이스이다. true + '' // "true" false + '' // "false" null + '' // "null" undefined + '' // "undefined" (Symbol()) + '' // TypeError: Cann..
[ Python ] Dictionary , Set Hash 이용해보자
·
Archive/Develop
Dictionary 와 Set 은 Hash 테이블 구조를 가지고 있다. 그래서 삽입과 삭제, 탐색 하는 연산의 시간복잡도는 O(1) 이다. Set 활용 Tip ! 값을 찾기 위해 list 에서 in 을 사용하게 된다면, 해당 연산의 시간 복잡도는 O(n) 일 것이다. 하나의 데이터를 찾기 위해 최대 데이터 개수 n 만큼 순회를 해야한다는 것인데, 이를 set 을 이용하면 좋다! 간단한 테스트를 위해 주피터노트북을 활용했다. 아래 예시는 list 를 하나하나 순회하면서 데이터를 찾는 것이다. 아래 예제는 총 7초의 실행시간을 가졌다. 반면 set 을 이용한 아래의 예제는 약 4초의 실행시간을 가졌다. 이렇게 단순한 예제에서도 시간 차이가 꽤 나는 것을 확인할 수 있다. 앞으로 리스트 내에서 in 연산을 통..