책에 대한 문의나 의견은 아래 댓글란에 남겨주세요. 🙂
사라진 개발자들
캐시 클라이먼 | 한빛미디어 | 2023.08.21
에니악(ENIAC)이라는 거대한 성과에 기여했고 사진 기록도 존재하지만 아무도 이름을 알지 못했던 6인의 여성 프로그래머에 관한 이야기입니다. 그렇게 사라지기에는 너무 대단한 일을 하신 분들이라서, 출판사로부터 소개를 들었을 때 꼭 번역에 참여하고 싶다고 욕심을 내었던 책입니다. 출간에 대한 감상은 "사라진 개발자들" 출간을 맞이하여에 적어두었습니다.
복붙 개발자의 벼락 성공기
아이리스 클라슨 | 한빛미디어 | 2023.05.30
소프트 스킬
존 손메즈 저 | 길벗 | 2015.11.27
누구나 쉽게 배우는 자바스크립트
닉 모건 저 | 비제이퍼블릭 | 2015.9.16
거침없이 배우는 자바스크립트 & 제이쿼리
데이비드 소이어 맥파랜드 저 | 지앤선 | 2015.4.30
자바스크립트를 처음 시작하려는 분들이 읽으면 좋은 책입니다. 언어 자체에 대해서는 깊이 다루고 있지 않기 때문에 본격적으로 언어를 공부하려는 사람보다는 자바스크립트나 jQuery를 처음 접하면서 이들이 웹 페이지에서 어떻게 동작하는지 느껴보고 사용해보고 싶은 사람에게 좋습니다.
이 책의 예제는 https://github.com/taggon/missing-manual-kr2에서 볼 수 있으며, 해당 페이지 상단의 "ZIP" 버튼을 클릭하면 실습 파일을 압축 파일로 한꺼번에 내려받을 수 있습니다.
객체지향 자바스크립트의 원리
니콜라스 C. 자카스 저 | 비제이퍼블릭 | 2015.3.26
피들러 완벽 가이드
에릭 로렌스 저 | 지앤선 | 2013.9.24
자바스크립트를 깨우치다
코디 린들리 저 | BJ퍼블릭 | 2013.7.22
자바스크립트라는 언어 자체에 대해 살펴보는 책입니다. 언어의 개념을 알려주기 보다는 객체, 함수에 대해 깊이 있게 다루는 내용이 주를 이루기 때문에 초보자가 보기에는 살짝 어렵게 느껴질 수 있습니다. 하지만, 자바스크립트의 기초적인 문법을 떼었다고 생각한다면 읽어보아도 좋습니다. 전체 200페이지 정도로 다른 프로그래밍 서적에 비하면 몹시 얇아서 부담없이 볼 수 있으며, 책에 있는 모든 코드는 온라인 상에서 바로 실행해 볼 수 있는 라이브코드(예. http://jsfiddle.net/jsenlighten/tNj7d/) 형태로 제공되기 때문에 타이핑의 번거로움도 줄였습니다.
고성능 자바스크립트 그래픽스
라파엘레 체코 저 | BJ퍼블릭 | 2012.8.16
자바스크립트 쿡북 JavaScript Cookbook
셸리 파워즈 저 | 한빛미디어 | 2011.12.26
거침없이 배우는 자바스크립트
데이비드 소이어 맥파랜드 저 | 지앤선 | 2010.10.04
처음 번역했던 책입니다. 번역이 만만하지 않음을 깨닫게 해준 책이고, 그래서 더 기억에 남는 책이기도 합니다.제목에서 느껴지는 것과는 조금 달리 자바스크립트보다는 jQuery를 많이 다루고 있고, 초보자들에게 어려울 수 있는 자바스크립트의 문법이나 기본기에 대해서는 간단히 짚고 있어 자바스크립트에 막 입문한 사람들이 보기에 적합합니다.
이 책의 예제는 https://github.com/taggon/missing-manual-kr에서 볼 수 있으며, 해당 페이지 상단의 "ZIP" 버튼을 클릭하면 압축파일로 한꺼번에 내려받을 수도 있습니다.
자바스크립트 쿡북
독자로부터 받은 질문입니다.
-------------------------------------------
안녕하세요
답변 감사드립니다.
말씀하신대로 전역 플래그를 빼고 실행시켜보니 무한루프에 빠지는 걸 확인했습니다.
감사합니다.
정규 표현식의 결과에 대해서는 아직도 의문이 많아 추가 질문드리고자 합니다.
1. 정규 표현식 결과의 input이나 index같은 property는 어디서 나오는지 의문입니다. 그 속성들은 배열과는 상관없는 속성 아닌지요?
2. 해당 예제를 테스트해보면 length가 늘 1입니다. length가 1인 배열을 반환할거라면 배열을 반환하는 이유를 이해하기 어렵습니다.
3. exec 메소드의 결과물이 aaa라면 aaa[0], aaa[1] 이런 식으로 접근해야 배열의 값을 가져올수 있다고 저는 생각하는데 그냥 aaa를 찍어도 aaa[0]의 값과 동일한 결과를 보여줍니다.
제가 자바스크립트의 배열을 잘못 알고 있어서 그런 건지는 모르지만 참 이해하기 어렵습니다. 그래서 정규표현식의 결과물은 배열이 아니라 특정한 객체가 아닌가 하는 의문이 드는 겁니다.
자꾸 번거롭게 해서 죄송합니다.
제가 테스트한 소스입니다.
function aaa() {
var searchString = "Now is the time and this is the time and that is the time";
var pattern = /tw*e/g;
var matchArray;
var str = "";
while( (matchArray = pattern.exec(searchString)) != null)
{
alert(typeof matchArray);
alert(matchArray.input);
alert(matchArray.length);
alert(matchArray[0]);
alert(matchArray[1]); // undefined
alert(matchArray);
str += "at " + matchArray.index + " we found " + matchArray + ".";
}
alert(str);
}
window.onload = aaa();
1. 기본 배열 속성은 아니지만, 아마도 exec 메소드 안에서 배열 객체에 추가한 속성인 듯 합니다. 언어와 상관없이 대부분의 정규표현식 사용법에는 index와 length 등을 구하는 방법이 있는데, 자바스크립트에서는 이런 방법을 사용했을 뿐입니다.
자바스크립트는 자료형 대부분이 객체입니다. 심지어 원시 타입인 숫자와 부울값, 문자열 등도 이에 해당하는 객체가 있습니다. 그리고 이 객체는 상당히 유연해서 객체에 새로운 메소드나 속성을 추가하거나 혹은 기존의 메소드와 속성을 제거하거나 수정하는 것도 대부분 가능합니다.
var newArray = new Array();
newArray['myProperty'] = "myValue";
위와 같은 코드를 실행한 후에는 newArray.myProperty에 접근하여 이 값을 수정하거나 가져올 수 있다는 뜻입니다.
2. length가 1일 때는 배열이 아니라 값을 직접 반환하는게 좋지 않냐는 뜻으로 이해했습니다. 하지만 함수의 정의는 가능하다면 통일성 있는 편이 좋습니다. exec 함수에서 반환하는 값이 "배열 또는 문자열 또는 null"인 것 보다는 "배열 또는 null"인 편이 훨씬 단순하고 일관성있는 규칙일 것입니다. 특히 C, C++ 등의 전통적인 언어에서는 배열 대신 null pointer을 반환할 수 있으므로 많은 개발자들에게 후자의 선언은 사실상 한 종류의 자료형으로 인식되곤 합니다.
3. 이 부분은 배열의 특성을 오해하신 듯 합니다. 대부분의 내장 자바스크립트 객체는 문자열로 자동 변환할 때 호출하는 toString() 메소드가 있습니다. 그래서 문자열이 필요한 상황에서는 이 메소드를 자동으로 호출해 문자열로 변환을 시도합니다.
alert() 함수에는 '문자열만' 인수로 사용할 수 있습니다. 따라서 인수가 문자열이 아니면 toString() 메소드가 있는지 찾아보고 문자열로 변환을 시도합니다. alert(matchArray)를 통해 화면에 출력한 메시지는 toString() 메소드를 통해 변환된 문자열인 것입니다.
그런데, 배열의 toString() 메소드는 "내용을 모두 출력하되 내용 사이는 쉼표(,)로 구분하도록" 동작합니다. 배열의 값이 2개였다면 "첫번째,두번째" 이렇게 출력이 되겠지만 값이 1개라면 "첫번째"라고만 출력됩니다. 그렇다고 해서 matchArray의 값이 갑자기 문자열이 되지는 않습니다.
값이 몇 개이든 matchArray의 자료형은 배열입니다.
matchArary.toString() === matchArray[0] 인 것을 보고 혼동하시면 안됩니다.
크롬이나 파이어폭스 브라우저를 사용하시고 alert 대신 console.log를 사용해보는 것도 이런 혼동을 막는데 도움이 될 수 있습니다.
제 질문에 대한 상세한 답변, 대단히 감사합니다.
김경수님//
도움이 되셨으면 좋겠습니다. 다른 문의사항이 있으면 언제라도 남겨주세요!