
가장 중요한 함수를 가장 늦게 다루게 되었다. 잠시 옆길로 새서 '함수'라는 용어에 대해 생각해 본다. 프로그래밍 언어의 '함수(函數)' 는 수학의 '유리수'와 더불어, 이공계 용어를 번역하면서 발생한 대표적인 오역의 사례이다. 영어 사전을 보면 function 은 '기능(동작)'의 뜻이 먼저 등장하고 다음으로 수학 용어로서의 '함수'가 등장한다. 그런데 수학의 함수는 (1) 정의역의 원소인 입력값이 반드시 주어지고 (2) 그에 대응되는 공역의 원소인 유일한 결과값이 반드시 있어야 한다. 그에 반해 프로그래밍 언어의 함수는 위의 조건 중 어떤 것도 충족시킬 이유가 없다. 그럼에도 최초에 C 언어에서 'function'을 번역한 사람이 이공계 전공자였을 테니, 아마도 '기능(동작)'으로 번역되는 편이 자연..

1. JSON 이란? JSON 은 JavaScript Object Notation 의 약어이고 Object Literal 을 스트링으로 표현한 것이다. 따옴표로 둘러싸인 JSON 의 표현과 일반적인 Object Literal 과의 차이점을 알아 보자. 1. 속성명은 반드시 큰 따옴표를 사용해야한다. (must be double-quoted) 2. 함수는 값으로 인정되지 않는다. 또한 값으로 사용된 스트링도 큰 따옴표만 허용된다. 주의하자. 다른 곳에서는 작은 따옴표와 큰 따옴표를 구별하지 않는 JavaScript 특성상 자주 실수를 하곤 했다. 현재는 아예 모든 스트링은 큰 따옴표를 사용하고 있다. 간단한 예를 하나 보자. const test='{ "name" : "mathtrauma", "age" : ..

1. 속성 존재 확인 객체는 여러 가지 정보를 모아둔 container 역할을 기본으로 한다. 따라서 내부에 어떤 정보가 있는지 확인할 수 있어야 한다. let obj = { id : 'trauma', test(){ console.log('Hi!'); } }; 1. 객체에 속성이 정의되지 않았다면 undefined 일 것이다. 이를 이용해서 특정 속성이 객체에 존재하는지 확인할 수 있다. 2. 우아하게 ' in ' 연산자를 이용해서 같은 일을 할 수 있다. obj.id !== undefined //true 'id' in obj; // true obj.address !== undefined //false 'address' in obj; //false 2. Object.hasOwnProperty( ) 'ha..

JavaScript에는 7 가지 자료형(data type) 이 있고 Object 를 제외한 6 가지는 primitive type 임을 언급했었다. 현재 얼렁뚱땅 6 가지 primitive 는 살펴보았고 Object 의 일종이지만 독립적으로 Array 도 다루었다. 이제 Object 에 대해서 기초적인 내용들을 정리해 보자. 1. 생성 앞서 다른 모든 타입처럼 constructor 를 이용한 생성과 literal 생성이 있다. 다음의 두 코드는 모두 빈 Object 를 생성한다. let obj = new Object(); let obj = { }; 사실 문법 공부할 때를 제외하면 constructor 로 생성해 본 적이 없고, 권장되지도 않는 듯하다. 이 글의 제목에서 알 수 있듯이 여기서는 Object ..

정리할 내용은 배열의 원소를 순회하는 메서드들이다. 1. forEach( ) 간단한 사용례는 다음과 같다. Array 메서드 forEach 는 콜백 함수(callback function)를 인자로 받는다. 그리고 배열의 각 원소의 값이 콜백 함수의 인자로 넘겨져 처리된다. 위 코드의 실행 결과를 콘솔에서 확인하면 다음과 같다. 마지막 행을 눈여겨 보길 바란다. forEach 나 map 은 원래의 배열을 변화시키지 않는다. 궁금한 점이 생겼다. 위에서 forEach 에 넘겨지는 콜백은 원소의 값을 다룬다고 했는데... 만약 인덱스를 다루고 싶다면 어떻게 해야하나? forEach 에 넘겨지는 콜백은 최대 3 개의 인자를 다룰 수 있다. 일단 원소의 값과 원소의 인덱스를 넘긴 경우를 보자. forEach 에 ..

자바스크립트는 C\C++ 처럼 container 가 세분화되어 있지 않다. 예를 양방향으로 원소가 추가되고 빼낼 수 있는 deque 같은 자료구조가 따로 제공되지 않고 배열이 이를 대신한다. 시간과 관련된 성능 문제는 잘 모르겠고, 하여간 이런 사정으로 원소 추가와 제거 관련된 메서드만 해도 엄청 많다. 먼저 index 를 이용하여 제거하는 것부터 시작하자. 1. delete '배열의 3 번째 항을 제거해줘!' delete arr[3]; 여기까진 쉽다. 기억해야할 것은 지금부터다. delete 는 배열에서만 사용될까? 직전 글의 마지막에서 javascript 배열의 인덱스는 일종의 객체 속성임을 말했다. 이제는 짐작 가능하겠지만 delete 는 객체에서 속성을 제거할 때 사용되는 것이다. 또한 속성을 제..

자바 스크립트에서는 primitive type 을 제외하면 모두 object 임을 말한 바 있다. 배열(array)은 primitive type 이 아니므로 object 이다. 미리 정의된 많은 메서드가 제공되는 built-in object 이다. 어라! 근데 아직 object 가 뭔지 얘기하지 않은 것 같은데? object 는 key, value 쌍들을 중괄호 { } 로 감싼것이다!? const obj ={ key1 : value1, ... keyn : valuen }; 뭔가 허전하지만 일단 배열 얘기를 하던 중이니 배열로 돌아간다. 빈 배열을 미리 만들어 놓고 쓰는 일은 흔하다. const numbers=[] // const numbers = new Array(); 위와 같은 코드 배열의 원소를 몇 ..

명시적인 형변환은 크게 문제될 것이 없다. 알아보는 것도 사용하는 것도 쉽다. 기본적으로 생성자를 이용하여 형변환을 할 수 있고 추가적인 방법들이 있다. 1. String 으로 임의의 타입에 대해 .toString 메서드를 쓰거나 String 생성자를 사용하면 스트링으로 변환된다. 앞서 number를 string 으로 바꿀 때 주의가 필요하다고 언급한 바 있다. 첫 줄에서 . (dot)을 소숫점인지 메서드 호출인지 구분하지 못하고 있음을 확인하게 된다. 생성자나 toString 으로 형변환은 여기까지... 이번에는 암시적(Implicit)으로 형변환이 일어나는 경우다. string 과 + 연산자가 만나면 전체가 string 으로 바뀐다. 2. Number 로 생성자를 이용하는 것은 건너 뛰고 바로 암시적..
- Total
- Today
- Yesterday
- Aho-Corasick
- dynamic programming
- Shell Programming
- Vim
- 다익스트라
- max flow
- RUBY
- bash script
- bash
- map
- C++ big number
- python3
- math font
- JavaScript
- javascript array
- segment tree
- nearest common ancestor
- shell
- fenwick tree
- BOJ
- stack
- Reference
- 정수론
- 세그먼트 트리
- Dijkstra
- persistent segment tree
- 백준
- lazy propagation
- script
- number theory
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |