목록분류 전체보기 (11)
roadmap
{ } 표기법으로 빈 객체를 생성할 수도 있지만 생성자를 사용하여 객체를 생성할 수 있다 1 2 3 4 5 6 7 8 9 10 11 function Make(a,b,c) { this.a = a; a = 1111; } var z = new Make(0); console.log(z); var array = new Array(1,1,2,3); var today = new Date(); Colored by Color Scripter cs 생성자 함수는 일반적으로 반환값이 없다. 하지만 생성자 함수에서 결과값으로 객체를 반환하면 반환값을 가질 수는 있다. 이 객체는 new 문장의 결과가 된다. 그리고 생성자 안의 this가 가리키고 있던 객체는 폐기된다. 프로토타입은 객체지향적인 방법으로 프로그램을 작성하게 해준..

C언어로 다음과 같이 생긴 링크드 리스트를 구현해 보았다 리스트는 자료구조 대부분의 기본형이므로 숙지하고 있으면 여러가지를 이해하기 좋다 다른 자료구조를 익히기 쉬워지고, 객체지향 같은 패러다임들도 결국 자료구조의 확장형인 경우가 많다 이 프로그램은 리스트에 노드를 하나 추가하거나, 하나 제거한다 추가 함수는 정수인수 하나를 받아서 그것에 대한 노드를 추가하고 제거 함수는 정수인수와 같은 정수를 가진 노드를 찾아서 제거한다 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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 ..
javascript 는 메모리 할당/해제를 자동으로 해주는 가비지 컬렉터를 사용한다. 앞서 말했다시피, 더 이상 해당 데이터를 참조할 수 없는 경우, 자동으로 메모리가 해제된다. 링크에서 자세한 메모리 해제 알고리즘도 볼 수 있다. https://developer.mozilla.org/ko/docs/Web/JavaScript/Memory_Management 자바스크립트의 메모리관리 메모리 생존주기는 프로그래밍 언어와 관계없이 비슷하다. developer.mozilla.org 함수 내부에서 호출된 변수는 함수가 종료될 때, 그 메모리를 반환하고 사라진다 정적 변수는 별다른 조작이 없는 한, 계속 메모리를 차지한다 그러니 가능하면 로컬 변수를 사용하도록 하자 1 2 3 4 5 6 7 8 9 10 11 12 ..

자바스크립트에서는 런타임 에러가 나타날 때마다 예외를 발생시킨다 또한 프로그램에서 throw문을 사용하여 명시적으로 예외를 발생시킬 수도 있다 1 2 3 4 5 6 7 function factorial(x) { if (x 1; x--) { f = f*x; } return f; } Colored by Color Scripter cs try/catch/finally 문은 js의 예외 처리 기법이다. try절은 처리할 예외가 발생할지도 모를 블록을 정의한다. catch 절은 try 블록에서 예외가 발생하는 경우 호출되는 블록이다. finally 절은 try의 예외와 관계없이 항상 실행이 보장되어야 할 코드를 넣는다. 1 2 3 4 5 6 7 8 try { var n = prompt("Please enter a..
javascript의 배열은 진정한 의미의 배열이 아닌 배열처럼 다룰 수 있는 동적 자료구조이다 js에서는 배열은 추가 기능을 조금 지닌 객체이다 typeof연산자를 콘솔에 입력해보자 1 2 var array = [1,2,3,4,5,6,7,"string"]; typeof array; // 'object' cs C나 자바 같은 언어는 배열이 가질 수 있는 원소의 개수를 지정하고, 개수가 변하지 않는다 그러나 자바스크립트는 임의 개수의 원소를 가졌으며 언제든 변경(삭제,추가)할 수 있다 자바스크립트의 배열은 Array클래스의 인스턴스이며, Array 클래스의 다양한 메서드를 호출할 수 있다 이렇게 배열과 유사한 객체들은 실제 배열의 원소들에 대해 반복 작업을 하는 알고리즘을 그대로 활용할 수 있다 (배열을 ..
객체는 이름과 값으로 구성된 프로퍼티의 집합이다 리터럴이나 생성자를 이용해서 만들 수 있다 1 var obj = {1:'do', 2:'JavaScript', 3:5, 'index':'hello, world'}; // 이름:값 cs 객체의 프로퍼티에 접근하는 방법은 다른 언어와 비슷하게 식별자(.)를 이용하거나 [] 를 사용하여 배열처럼 접근 할 수 있다 1 2 3 4 var obj = {1:'do', 2:'JavaScript', 3:5, 'index':'hello, world'}; // 이름:값 console.log(obj[1]); console.log(obj['index']); console.log(obj.index); Colored by Color Scripter cs 숫자에 접근 할 수 없으므로 o..
자바스크립트는 기본타입과 참조타입을 가지고 있다 본질적으로 값, 참조 개념과 같은 것이다 먼저 C언어에서 문자열을 저장하면 그것을 수정할 수 없다 1 2 3 4 5 6 7 8 #include int main() { char* s = "why?"; s[0] = 's'; // *s과 같음 printf("%s\n", s); } cs 디버깅해보면 s[0]이 0x.... 메모리 번지수를 가리킨다고 나오며 오류가 뜬다 이유는 문자열을 저장하면 일단 그것이 텍스트 세그먼트로 저장된다 그런데 텍스트 세그먼트는 프로그래머가 수정할 수 없고 읽기만 가능하다 s[0] = "s"; 는 s 위치의 것을 문자 's'로 수정하는 것이므로 오류가 나온다 그런데 이렇게 하면 어떨까? 1 2 3 4 5 6 7 8 #include int..
cpu는 우리가 만든 코드의 데이터들을 저장할 때, 데이터마다 다른 곳으로 저장한다 스택 힙 데이터 세그먼트 텍스트 세그먼트 스택 함수, 지역변수(static변수를 제외한 모든 변수)가 저장된다 함수가 종료 될 때, 해제된다 (재귀함수가 호출 될 때, 다량의 함수와 변수가 스택에 push된 후 pop이 일어난다) 힙 프로그래머가 동적 할당하면 이 곳으로 저장되고 해제할 때 비운다 힙과 스택은 사실 같은 공간을 공유한다 스택 또는 힙이 커져서 메모리가 넘치는 것을 stack over flow, heap over flow라고 한다 데이터 세그먼트 전역변수, static변수가 저장된다 프로그램 시작 시 할당되고, 종료시 해제된다 텍스트 세그먼트 코드 세그먼트라고도 한다 소스코드가 저장된다 상수, 텍스트가 저장..