PPK 자바스크립트 [뛰어난 웹 접근성의 실용 자바스크립트]
- 원서명ppk on JavaScript (ISBN 9780321423306)
- 지은이피터 폴 콕
- 옮긴이전정환, 정문식
- ISBN : 9788960770447
- 35,000원
- 2008년 06월 03일 펴냄 (절판)
- 페이퍼백 | 552쪽 | 188*235mm
- 시리즈 : 웹 프로페셔널
판매처
- 현재 이 도서는 구매할 수 없습니다.
책 소개
8가지 실전 프로젝트로 모던하고 구조적인 실용 자바스크립트를 배우자. 브라우저 비호환성 처리, 웹 접근성, 스크립트 분리 등 기존 자바스크립트 책에서는 볼 수 없었던 새로운 내용이 가득 담겨있다. W3C DOM 브라우저 호환성 테이블로 유명한 웹 개발자의 바이블 quirksmode.org의 피터 폴 콕(일명 PPK)이 저술했다.
[ 소개 ]
이 책은 자바스크립트의 역할과 컨텍스트를 정의하면서 시작된다. 자바스크립트가 사용되기에 가장 적합한 작업들을 정의하며, 디버깅, 복잡한 브라우저 문자열과 사이트의 HTML 구조에 스크립트를 붙이는 것에 관해 설명한다. 그리고 이 책의 핵심적인 부분으로, 자바스크립트 코어 언어, 브라우저 객체 모델(BOM), 이벤트 핸들링, 문서 객체 모델(DOM), CSS 변경과 데이터 얻어오기에 대해 설명한다. 전체적으로 이론적인 설명과 함께 관련된 예제 스크립트들을 분석하고 있다.
다른 책들이 자바스크립트를 예제 스크립트를 통해 설명하면서도 전문적인 경험에 비중을 적게 두는 반면, 이 책은 고객에게 실제로 제공되었던 8개의 스크립트를 보여준다. 여러분은 이와 같은 유용한 스크립트를 접할 수 있을 것이다.
[ 이 책에서 다루는 내용 ]
■ 드롭다운 메뉴 만들기
■ CSS 스타일 시트 편집
■ 폼 검증을 위한 프레임워크
■ 사용자가 긴 리스트의 데이터를 쉽게 검색할 수 있게 하기
■ Ajax를 이용해 서버에서 데이터를 가져와서 애니메이션을 갱신하기
[ 소개 ]
이 책은 자바스크립트의 역할과 컨텍스트를 정의하면서 시작된다. 자바스크립트가 사용되기에 가장 적합한 작업들을 정의하며, 디버깅, 복잡한 브라우저 문자열과 사이트의 HTML 구조에 스크립트를 붙이는 것에 관해 설명한다. 그리고 이 책의 핵심적인 부분으로, 자바스크립트 코어 언어, 브라우저 객체 모델(BOM), 이벤트 핸들링, 문서 객체 모델(DOM), CSS 변경과 데이터 얻어오기에 대해 설명한다. 전체적으로 이론적인 설명과 함께 관련된 예제 스크립트들을 분석하고 있다.
다른 책들이 자바스크립트를 예제 스크립트를 통해 설명하면서도 전문적인 경험에 비중을 적게 두는 반면, 이 책은 고객에게 실제로 제공되었던 8개의 스크립트를 보여준다. 여러분은 이와 같은 유용한 스크립트를 접할 수 있을 것이다.
[ 이 책에서 다루는 내용 ]
■ 드롭다운 메뉴 만들기
■ CSS 스타일 시트 편집
■ 폼 검증을 위한 프레임워크
■ 사용자가 긴 리스트의 데이터를 쉽게 검색할 수 있게 하기
■ Ajax를 이용해 서버에서 데이터를 가져와서 애니메이션을 갱신하기
목차
목차
- 1장 역할
- 1.1 개념 잡기 2
- 브라우저에서 상호작용 다루기 2
- 팻 클라이언트와 씬 클라이언트 5
- 자바스크립트의 역할 7
- 1.2 기술 관점에서의 개요 8
- 표준화 9
- 버전 12
- 보안 14
- 1.3 자바스크립트의 역사 16
- 잘못된 출발 17
- 사실상의 표준 17
- 브라우저 전쟁 18
- CSS 표준준수운동 22
- 새 출발 23
- 다음엔 무엇이 올까? 25
- 1.1 개념 잡기 2
- 2장 자바스크립트가 쓰이는 곳
- 2.1 CSS 표준준수운동 28
- 눈에 띄지 않는 스크립트 29
- 세 개의 계층 30
- 관심의 분리 32
- 2.2 표현과 구조의 분리 33
- CSS 수정 33
- 구조를 변경할 것인가 표현을 변경할 것인가? 34
- 2.3 동작과 구조의 분리 36
- 함수를 다른 파일로 분리 36
- HTML에서 이벤트 핸들러의 제거 37
- 2.4 동작과 표현의 분리 39
- 드롭다운 메뉴 - :hover를 쓸 것인가 mouseover/out을 쓸 것인가? 39
- 똑같은 효과와 비슷한 효과 42
- 2.5 접근성에 대한 개괄 45
- 접근성이란 무엇인가? 45
- 스크립트가 지원되지 않을 때도 45
- 마우스가 없을 때도 46
- 스크린리더 47
- 접근성과 사용성 50
- 2.6 접근성 규칙 52
- 논리적인 HTML 52
- 하드코딩된 링크는 href 속성이 있어야 한다 52
- 자바스크립트 사용자를 위한 내용 자동생성 53
- 사용자를 적당한 페이지로 리다이렉트하기 55
- 키보드 사용자 57
- noscript 태그 57
- 2.7 예제 스크립트 58
- 텍스트영역 최대값(Textarea Maxlength) 59
- 유저블 폼(Usable Forms) 60
- 폼 검증(Form Validation) 61
- 드롭다운 메뉴(Dropdown Menu) 61
- 스타일시트 편집(Edit Style Sheets) 62
- 샌드위치 선택기(Sandwich Picker) 62
- XMLHTTP 속도계(XMLHTTP Speed Meter) 65
- 사이트 설문(Site Survey) 66
- 2.1 CSS 표준준수운동 28
- 3장 브라우저
- 3.1 브라우저 68
- 모질라 패밀리 68
- 윈도우 익스플로러 69
- 사파리 70
- 오페라 70
- 그 밖의 그래픽 데스크톱 브라우저 70
- 모바일 폰 71
- 스크린리더 72
- 3.2 비호환성 73
- 문제 73
- 해결책 75
- 3.3 객체 탐지 79
- 객체 탐지 작동원리 79
- 얼마나 멀리 가야 하나? 82
- 3.4 브라우저 탐지 83
- 브라우저 탐지가 제대로 되지 않는 이유 84
- 브라우저 탐지 경쟁 85
- 브라우저 문자열 풀어보기 87
- 브라우저 탐지의 올바른 사용 92
- 3.5 디버깅 93
- 오류 메시지 93
- 브라우저 버그 97
- 예제 100
- 브라우저 버그 리포팅 103
- 3.1 브라우저 68
- 4장 준비
- 4.1 HTML과 CSS 구조 106
- HTML 구조 106
- CSS 구조 107
- 4.2 훅 108
- 아이디 109
- 클래스 110
- 커스텀 속성 112
- 이름/값 쌍 113
- 4.3 페이지 준비 116
- 이벤트 핸들러 설정 116
- 방문객의 상태 결정 117
- 참조 설정 117
- 내용 생성 118
- 관계 정의 118
- 문서 구조 변경 120
- 4.4 script 태그 120
- 문법 121
- 여러 개의 스크립트 파일 사용 123
- 4.5 초기화 124
- load 이벤트 125
- 여러 번의 초기화 126
- 눈에 띄지 않는 초기화 127
- load 이벤트 기다리기 127
- 가장 좋은 방법? 129
- 4.6 예제 스크립트 129
- 텍스트영역 최대값 129
- 유저블 폼 130
- 폼 검증 132
- 드롭다운 메뉴 134
- 스타일시트 편집 135
- 샌드위치 선택기 136
- XMLHTTP 속도계 138
- 사이트 설문 139
- 세부사항 결정 140
- 4.1 HTML과 CSS 구조 106
- 5장 코어
- 5.1 기초 144
- 대소문자 구별 144
- 문장과 세미콜론 144
- 주석 146
- 코드 블록: {} 147
- 연산자 149
- 값 151
- 5.2 데이터 타입 152
- 여섯 가지 데이터 타입 152
- 데이터 타입 변환 156
- + 문제 158
- 불리언 값으로의 변환 160
- 명시적 데이터 타입 변환 160
- 5.3 일반 연산자 161
- 산술 연산자 161
- ++와 -- 162
- =, ==, === 163
- !=, <, >, <=, >= 165
- 조건 연산자 ? : 167
- 5.4 변수 168
- 변수 이름 168
- var 키워드 169
- 변수 범위 170
- 5.5 숫자로 작업하기 172
- 8진수와 16진수 173
- toFixed() 176
- parseInt() 와 parseFloat() 177
- 5.6 문자열로 작업하기 177
- 인용부호 177
- 접합: + 179
- 문자열 객체 179
- 5.7 불리언 값 185
- 불리언 변수 185
- 불리언 연산자 186
- 객체의 존재 테스트 188
- 불리언 연산자의 고급 사용법 189
- 5.8 제어 구조 192
- if 문장 192
- switch 197
- for, while, do/while 201
- break와 continue 207
- try/catch 209
- 5.9 함수 210
- 기본 함수 문법 210
- 인자 212
- return 212
- 값으로서의 함수 215
- 포함된 함수와 변수 범위 217
- 5.10 객체 219
- 도트 221
- 객체의 정의 221
- 메소드와 프로퍼티로 작업하기 223
- this 키워드 226
- 전역 객체 227
- 5.11 연관 배열 227
- 각괄호 표기법과 도트 표기법 229
- 연관 배열 230
- for in 문장 231
- 5.12 배열 233
- 다차원 배열 233
- 배열 표기법 234
- 배열의 사용 235
- length 236
- push, pop, shift, unshift 237
- 5.1 기초 144
- 6장 브라우저 객체 모델(BOM)
- 6.1 window 객체 241
- 전역 객체로서의 window 241
- 새 페이지, 새 window 객체 242
- 새 전역 객체로서 동작하는 새 window 243
- window의 프로퍼티 246
- 6.2 윈도우 간 통신 248
- 팝업창 열기 249
- 다른 창을 가리키는 참조 만들기 250
- 통신채널 다시 만들기 251
- 팝업창 방지 프로그램 257
- 6.3 내비게이션 259
- location 객체 259
- history 객체 261
- 6.4 창 위치 알아내기 262
- screen 객체 262
- 창의 크기 263
- 창 이동, 크기 조정, 스크롤 263
- 포커스 주기와 포커스 뺏기 264
- 6.5 기타 265
- navigator 객체 265
- alert, confirm, prompt 265
- 타임아웃과 인터벌 267
- 6.6 document 객체 269
- lastModified 269
- referrer 270
- domain 270
- write() 270
- open()과 close() 272
- 6.7 쿠키 274
- 이름/값 275
- 만료날짜 276
- 도메인과 경로 276
- 쿠키 설정 277
- document.cookie 278
- 쿠키 읽기 278
- 쿠키 지우기 279
- 쿠키의 사용 예 279
- 사용자 쿠키 설정 281
- 쿠키 지원 여부의 확인 281
- 6.1 window 객체 241
- 7장 이벤트
- 7.1 브라우저 비호환성 284
- 상황별 해결법 285
- 개요 285
- 7.2 이벤트 286
- 마우스 이벤트 286
- 키보드 이벤트 290
- 인터페이스 이벤트 291
- W3C 이벤트 295
- 마이크로소프트 이벤트 296
- 기본 동작 296
- 이벤트 시뮬레이션 299
- 7.3 이벤트 핸들러 등록 300
- 인라인 이벤트 핸들러 300
- 전통 모델 301
- W3C와 마이크로소프트 모델 305
- 최선의 방법 309
- 7.4 이벤트 버블링과 캡처링 310
- W3C 모델 311
- 전통 모델과 마이크로소프트 모델 313
- 이벤트 버블링의 실제 사용 예 313
- 7.5 이벤트 객체와 그 프로퍼티 316
- 이벤트 객체 316
- 타입 317
- 타깃팅 317
- 마우스 위치 318
- 마우스 버튼 322
- 키 프로퍼티 323
- 7.6 타깃팅 323
- 차이점 323
- this 324
- 타깃 327
- this를 쓸 것인가 이벤트 타깃을 쓸 것인가? 331
- 7.7 예제 스크립트 334
- 텍스트영역 최대값 335
- 유저블 폼 336
- 폼 검증 337
- 드롭다운 메뉴 338
- 스타일시트 편집 340
- 샌드위치 선택기 341
- XMLHTTP 속도계 342
- 사이트 설문 342
- 7.8 드롭다운 메뉴, mouseout과 relatedTarget 343
- mouseover 344
- mouseout과 그 문제점 345
- 해결책 346
- relatedTarget, fromElement, toElement 347
- 7.1 브라우저 비호환성 284
- 8장 문서 객체 모델(DOM)
- 8.1 개념 351
- 노드 351
- 가계도 353
- 8.2 요소 찾기 355
- 장거리 여행 355
- 단거리 여행 358
- 루트 노드 362
- 8.3 노드 정보 362
- nodeName 362
- nodeValue 363
- nodeType 364
- tagName 365
- 8.4 문서 트리 변경 365
- 일반 규칙 365
- appendChild() 367
- insertBefore() 368
- removeChild() 370
- replaceChild() 371
- 모든 자식 노드의 제거 372
- 8.5 요소의 생성 및 복제 373
- createElement()와 createTextNode() 373
- cloneNode() 376
- 테이블 및 폼 필드의 생성 378
- 8.6 innerHTML 380
- 쓰레기가 들어가면 쓰레기가 나올 뿐 381
- 속도 382
- 예제 383
- innerHTML과 순수 DOM의 협동작업 384
- outerHTML, innerText, outerText 384
- innerHTML과 DOM 386
- 8.7 속성 388
- 속성 얻기와 설정하기 389
- HTML 속성과 자바스크립트 프로퍼티 390
- 속성을 얻고 설정하는 최선의 방법 393
- 8.8 텍스트 노드 393
- nodeValue 393
- 빈 텍스트 노드 394
- 8.9 노드리스트 398
- 위험 400
- 도우미 배열 402
- 8.10 폼과 레벨 0 DOM 403
- 레벨 0 DOM 노드리스트 403
- 폼 필드 405
- 8.11 DOM 하이퍼스페이스 412
- 하이퍼스페이스에 요소 보관하기 413
- 하이퍼스페이스와 innerHTML 416
- 요소는 하이퍼스페이스에? 416
- 8.12 마커 417
- 8.1 개념 351
- 9장 CSS 수정
- 9.1 style 프로퍼티 420
- 대시 422
- 단위 422
- 스타일 얻기 423
- 축약 스타일 425
- 9.2 클래스와 아이디의 변경 426
- 클래스 추가 428
- 클래스 제거 430
- 9.3 CSS를 페이지 안에 쓰기 430
- 즉각적인 적용 433
- 9.4 전체 스타일시트 변경 434
- 이론 435
- document.styleSheets 435
- cssRules[]와 rules[] 437
- selectorText 438
- style 438
- cssText와 스타일시트 전송 439
- 룰 삽입과 삭제 441
- 9.5 비교 443
- 예제 444
- 9.6 요소 보여주기/숨기기 445
- 간단한 보여주기/숨기기 스크립트 446
- 테이블의 행 보여주기/숨기기 448
- 9.7 애니메이션 450
- 애니메이션 작동원리 450
- setTimeout과 setInterval 452
- 9.8 요소의 치수와 위치 457
- 요소의 치수 457
- 요소의 위치 460
- 9.1 style 프로퍼티 420
- 10장 데이터 전송
- 10.1 요청 보내기 464
- XMLHttpRequest 객체 464
- 열기 466
- readystatechange 467
- setRequestHeader 469
- sendRequest 함수 470
- abort 472
- 10.2 응답 처리하기 472
- status 472
- 콜백 함수 474
- responseText와 responseXML 474
- getResponseHeader 476
- getAllResponseHeaders 476
- 10.3 응답 포맷 476
- XML 477
- HTML 479
- JSON 480
- CSV 482
- 최선의 포맷은? 483
- 10.4 접근성 483
- HTML의 접근성 484
- 기타 응답 포맷의 접근성 487
- 10.1 요청 보내기 464
관련 블로그 글
색다른 자바스크립트 책이 출간됩니다
『PPK 자바스크립트』
뛰어난 웹 접근성의 실용 자바스크립트
피터 폴 콕 지음 | 전정환 정문식 옮김 | 에이콘 웹 프로페셔널 시리즈 17
552쪽 | 35,000원 | 2008년 6월 2일 출간예정 | 9788960770447
뛰어난 웹 접근성의 실용 자바스크립트
피터 폴 콕 지음 | 전정환 정문식 옮김 | 에이콘 웹 프로페셔널 시리즈 17
552쪽 | 35,000원 | 2008년 6월 2일 출간예정 | 9788960770447
W3C DOM 브라우저 호환성 테이블로 유명한 웹 개발자의 바이블 quirksmode.org의 피터 폴 콕(Peter Paul Koch, 일명 PPK)이 저술한 책.
저자의 경험이 녹아있는 8가지 실전 프로젝트로 배우는 모던하고 구조적인 실용 자바스크립트!!! 브라우저 비호환성 처리, 웹 접근성, 스크립트 분리 등 새로운 내용이 가득 담겨있다.
이 책 ppk on JavaScript를 처음 기획했을 때 몇 분들의 엄청난 탄성이 쏟아졌더랬습니다. "quirksmode의 그 ppk 말이죠?" "그 블로그 너무 좋아해요~"
이 책에서는 자바스크립트의 역할과 컨텍스트를 정의하면서 시작합니다. 자바스크립트를 사용하기에 가장 적합한 작업들과 함께, 디버깅, 복잡한 브라우저 문자열과 사이트의 HTML 구조에 스크립트를 붙이는 것에 관해 설명을 펼쳐 나갑니다. 그리고 가장 핵심적인 부분으로서, 자바스크립트 코어 언어, 브라우저 객체 모델(BOM), 이벤트 핸들링, 문서 객체 모델(DOM), CSS 변경과 데이터 얻어오기에 대해 설명합니다.
『PPK 자바스크립트』는 자바스크립트의 바이블은 아닙니다. 하지만 기존 책들이 예제 스크립트를 들어 자바스크립트를 설명하면서도 전문적인 경험에 비중을 적게 두었던 반면에, 이 책은 저자가 8개 고객사 프로젝트를 수행하면서 실제로 사용했던 8개의 예제 스크립트를 중심으로 책을 풀어 나갑니다.
모던하고 접근성이 높은 구조적인 실용 자바스크립트를 배우고 싶은 분들, 그래서 초보 스크립트로서 자신의 실력을 한 갑자 높이고 싶은 개발자라면 꼭 읽어야 할 책입니다.
『PPK 자바스크립트』는 모두가 알고 있는 기능을 낱낱이 짚어주거나 총정리해주는 책은 아닙니다. 그보다는 자바스크립트의 우리가 모르고 있거나 간과했던 기능과 새로운 미래를 짚어주고 있습니다.
바쁘신 와중에 이 책 번역하시느라 근 1년 간을 고생하신 다음 커뮤니케이션의 전정환 팀장님과 정문식 님께 진심으로 감사의 말씀 전합니다. 힘든 작업 하시느라 많이 고생하셔서 아마도 당분간 이분들께는 번역의 ㅂ도 꺼내지 못할 것 같은 분위기지만 첫 책 훌륭히 끝내주셔서 감사합니다. ^^*
마지막으로, 이 책을 마치면서 저자는 자바스크립트의 미래를 점쳐보기도 합니다. 어떤 이야기를 하고 있는지 다음 글을 읽어보세요.
가장 중요한 것은 Ajax 맹신의 종말입니다. 언제인지 정확히 알 수 없지만 반드시 일어날 일이라는 사실은 분명합니다. 유행은 사라지기 마련입니다. 한때 멋지고 진보적이었던 것이 이제는 구식이고 따분합니다.
Ajax 맹신은 비록 나쁜 예로 들었을지라도 많은 것을 가르쳐줬습니다. 성공적인 Ajax 애플리케이션과 그렇지 못한 애플리케이션을 비교해보면, 복잡한 인터페이스에 대한 사용자 이해의 한계에 대한 통찰을 얻을 수 있습니다. 그리고 자바스크립트의 목적을 이해할 수 있습니다. 다음 몇 번의 팻과 씬 단계의 반복에도 살아남을 수 있는 목적을 정의할 수 있을 것입니다.
장기적인 장점 외에도 맹신이 사라지면 장점과 단점이 동시에 존재하는 단기적인 변화도 함께 발생할 것입니다. '어려운' 프로그래밍 세계에서 넘어온 많은 개발자는 자바스크립트가 더 이상 쿨하지 않다고 생각하면 다시 그들의 언어로 돌아갈 것입니다. 단기 변화의 단점은 일반적인 웹 개발자는 모르는 고급 프로그래밍 구조를 많이 알고 있는 이들이 사라진 후에 애플리케이션 디자인을 우리에게 설명해줄 사람이 없다는 것입니다. 소수라도 남아서 가르쳐줬으면 하는 바람입니다.
한편 '어려운' 언어 개발자가 사라지면, 자바스크립트 개발자가 지금보다 더 접근성에 집중할 수 있다는 장점도 있습니다. 자바스크립트 측면에서 생기는 접근성 이슈 중 큰 문제는 Ajax 애플리케이션을 만드는 많은 프로그래머가 접근성을 인식하지 못한다는 점입니다. 접근성은 웹 개발자가 '어려운' 언어 개발자보다 더 잘 알고 있는 분야입니다. 그리고 맹신의 종말은 웹 개발자에게 접근성을 개선할 수 있는 기회를 줄 것입니다.
두 번째로 중요한 사건은 코어(Core) 2.0 표준의 출현입니다. 이는 자바스크립트를 그밖의 프로그래밍 언어와 비슷한 수준으로 끌어올릴 것입니다. 지금은 Ajax 개발자를 돕기에 너무 늦은 것처럼 보이지만 그럼에도 코어 2.0은 자바스크립트를 좀 더 진지하게 받아들이는 개발자를 도와줄 것입니다. 이 사실이 언어와 그 사용자에게 이익이 될 것입니다.
세 번째로 중요한 사건은 마이크로소프트를 포함한 모든 브라우저 벤더가, 웹표준을 준수하려고 노력하고 있다는 것입니다. 아직 브라우저 비호환성이 해결되지는 않았지만 범위로 보나 심각성으로 보나 점차 줄고 있습니다. 프로그래머의 실수로 발생하는 문제를 제외하면 그렇습니다. 이 부분은 없어지지 않을 겁니다.
정리하면, 자바스크립트의 목적에 대한 좀 더 나은(스크립팅 절차에 접근성을 통합하는 진지한 시도를 포함할 수 있는) 정의를 내리게 될 것이고, 코어 2.0 덕택에 더 나은 프로그래밍 스타일이 출현할 것이고, '어려운' 언어를 쓰는 프로그래머로부터 배울 게 있을 것이고, 브라우저 문제가 더 적어질 것이라는 희망을 품고 있습니다.
자바스크립트는 변하는 중입니다. 더 나은 세상이 올 것입니다. _M#]
다음의 윤석찬님이 옮기신 『DOM 스크립트』, NHN의 장정환님이 옮기신『방탄 Ajax』에 이은 웹 접근성을 고려한 자바스크립트 연작 세 번째 책인 『PPK 자바스크립트』는 지금 YES24, 교보문고, 강컴, 알라딘, 인터파크 등에서 예약 판매 중입니다.
뽀너스로, 지난 주말 출간된 『크노픽스: 초보 시스템 관리자를 위한』신간 인증샷입니다.
크리에이티브 커먼즈 라이센스 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
도서 오류 신고
정오표
[ p182 박스 안 1행 ]
length(), indexofOf(), charAt()의 사용 예 → length(), indexOf(), charAt()의 사용 예
[ p194 두 번째 코드 2행 ]
var tg = [target of event] → var evtTarget = [target of event]
[ p196 아래에서 3행 ]
따라서 첫 번째 코드 블록이 수행된다. → 따라서 첫 번째 코드 블록이 수행되지 않는다.
[ p206 2행 ]
또는 1) → 또는 -1)
length(), indexofOf(), charAt()의 사용 예 → length(), indexOf(), charAt()의 사용 예
[ p194 두 번째 코드 2행 ]
var tg = [target of event] → var evtTarget = [target of event]
[ p196 아래에서 3행 ]
따라서 첫 번째 코드 블록이 수행된다. → 따라서 첫 번째 코드 블록이 수행되지 않는다.
[ p206 2행 ]
또는 1) → 또는 -1)