SlideShare a Scribd company logo
1 of 12
HACOSA JS STUDY
#5 꼭 알아야 할 핵심 기본기
#6 사진첩 기능 개선
꼭 알아야 할 핵심 기본기
• 꼭 필요한지 철저히 검토
  ‒ 사용자 경험을 고려한 스크립트 사용


• 단계적 기능 축소
  ‒ 자바스크립트 기능이 없는 브라우저 고려
  ‒ 슈도 프로토콜 지양
  ‒ 인라인 이벤트 핸들러 지양


• 스크립트 분리


• 하위 호환성
  ‒ 객체 판별법
사진첩 기능 개선
• 1. 자바스크립트 기능이 없다면?
   ‒ <a href=“image/dad.jpg” oncilck=“showPic(this); return false;”
     title=“멋있는 아빠 사진”>아빠</a>
    →JavaScript가 동작하지 않더라도 편의성은 떨어지나 접근성은 높음


  ‒ <a href=“javascript:showPic(„image/mom.jpg‟);return false;”
    title=“멋있는 아빠 사진”>아빠</a>
    → 자바스크립트 기능을 켜야만 작동


  ‒ <a href=“#” oncilck=“showPic(this); return false;” title=“멋있는 아빠
    사진”>아빠</a>
    → 자바스크립트 기능이 없으면 아무 쓸모 없는 사진첩이 됨
사진첩 기능 개선
• 2. 자바스크립트 코드가 마크업에 포함되어 있는가?
 ‒ onclick 이벤트를 외부 자바스크립트 파일에 추가
 ‒ 어떻게?
  → 특정 링크를 인식할 수 있는 표지가 필요
    • 마크업 구조에 따라 class, id 속성 등을 이용
      (getElementByTagName, getElementById 등의 메소드 이용)
    • 예제에서는 class 속성을 추가하는 것은 각 링크마다 인라인 이벤트 핸들러를
      추가하는 것은 좋지 않다라고 소개 하였으나, 마크업 구조에 따라 불가피한 상
      황 등에는 사용 하는 것이 좋을 듯 생각 됨
    • 정리하자면, 동작을 위한 인라인 속성 추가를 최소한으로 하여 사용하는 것을
      권장
사진첩 기능 개선
• 이벤트 핸들러 추가
  ‒ 점검 사항
  → 프로그램의 안정성 점검 (DOM 메소드 처리 가능 여부 확인 등)
    • 일종의 방어적 프로그래밍
    • 다양한 환경에서 발생할 수 있는 오류를 예상하여 대처
    • getElementById 등 DOM 메소드 처리 불가능한 브라우저

     if(!document.getElementByID) return false;

    • 프로그램에서 접근할 요소가 없을 경우에 대한 대처

     if(!document.getElementById(„imagegallery‟) return false;
사진첩 기능 개선
• 변수 지정하기
  ‒ 가독성 상향
  → var gallery = document.getElementById(“imagegallery”);
  → 이후 gallery 로 호출


 ‒ 컴퓨터가 불필요한 반복 계산 하지 않도록 함
  → var gallery = document.getElementById(“imagegallery”);
  → gallery에 해당 객체를 대입시킴으로 이후 gallery를 호출 시 찾아진 객체
   를 바로 불러 들임.
  → document.getElementById(“imagegallery”) 로 계속 호출 시 브라우저는
   getElementById 함수를 계속 실행해야 함


 ‒ 주의 사항
  →변수명 지정 시 예약어 사용 불가 ex) var, if 등
사진첩 기능 개선
• 동작 변경
  ‒ onclick 이벤트에 동작 추가
   →links[i].onclick = function(){

    }


 ‒ showPic 함수를 실행하고 링크 클릭하는 기본 동작을 취소해야 하
  므로
   →links[i].onclick = function(){
        showPic(this);
        return false;
    }
사진첩 기능 개선
• 작업 나누기(?)
  ‒ 작성된 함수를 문서가 모두 읽힌 다음에 실행 되도록 처리
  →window.onload 이벤트 이용
  →window.onload = function(){
     firstFunction();
     secondFunction();
   }
   식으로 사용

  → window.onload = firstFunction;
    window.onload = secondFunction;

    으로 작성 시, 마지막 함수만 실행 됨
사진첩 기능 개선
• 작업 나누기(?)
  ‒ addLoadEvent
    → 사이먼 윌리슨이 고안한 방법
    → addLoadEvent(firstFucntion);
     addLoadEvent(secondFuntion);
     과 같은 방법으로 작성
사진첩 기능 개선
• 검증 코드 작성
  ‒ 앞서 나왔던 “프로그램의 안정성 점검” 과 비슷한 내용
  ‒ 프로그램의 무결점화


 function showPic(whicpic){
         if(!document.getElementById(“placeholder”)) return false;
         var source = whicpic.getAttribute(“href”);
         var placeholder = document.getElementById(“placeholder”);
         placeholder.setAttribute(“src”,source);
         if(!document.getElementById(“description”)) return false;
         var text = whicpic.getAttribute(“title”);
         var description = document.getElementById(“description”);
         description.firstChild.nodeValue = text;
 }
사진첩 기능 개선
• DOM Core, HTML-DOM
  ‒ DOM Core :
   → DOM을 지원하는 모든 프로그래밍 언어에서 공통적으로 사용
 ‒ HTML-DOM:
   → (X)HTML 문서에 적용되는 DOM


 ‒ DOM Core VS. HTML-DOM
   document.getElementByTagName(“form”)   :   DOM Core
   document.form                          :   HTML-DOM

   Element.getAttribute(“src”)            :   DOM Core
   Element.src                            :   HTML-DOM
END

More Related Content

What's hot

React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작Taegon Kim
 
막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)연웅 조
 
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적  M-V 디자인 구현하기[DevOn 2013] Backbone.js로 능동적  M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기Gyutae Jo
 
컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기우영 주
 
자바스크립트의 또다른 발전, Backbone.js
자바스크립트의 또다른 발전, Backbone.js자바스크립트의 또다른 발전, Backbone.js
자바스크립트의 또다른 발전, Backbone.jsJinKwon Lee
 
Resource Handling in Spring MVC
Resource Handling in Spring MVCResource Handling in Spring MVC
Resource Handling in Spring MVCArawn Park
 
더 나은 웹표준을 위한 Web Components
더 나은 웹표준을 위한 Web Components더 나은 웹표준을 위한 Web Components
더 나은 웹표준을 위한 Web Components정호 전
 
레일스를 이용한 애자일 웹 개발 가이드
레일스를 이용한 애자일 웹 개발 가이드레일스를 이용한 애자일 웹 개발 가이드
레일스를 이용한 애자일 웹 개발 가이드Sukjoon Kim
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기JinKwon Lee
 
응답하라 반응형웹 - 4. angular
응답하라 반응형웹 - 4. angular응답하라 반응형웹 - 4. angular
응답하라 반응형웹 - 4. angularredribbon1307
 
나의 jQuery 실력 향상기
나의 jQuery 실력 향상기나의 jQuery 실력 향상기
나의 jQuery 실력 향상기정석 양
 
Enterprise Java web Deployment Strategy
Enterprise Java web Deployment StrategyEnterprise Java web Deployment Strategy
Enterprise Java web Deployment StrategySukjin Yun
 
Clean Front-End Development
Clean Front-End DevelopmentClean Front-End Development
Clean Front-End Development지수 윤
 
Angularjs 도입 선택 가이드
Angularjs 도입 선택 가이드Angularjs 도입 선택 가이드
Angularjs 도입 선택 가이드NAVER D2
 
하이브리드 앱 프레임워크의 구성
하이브리드 앱 프레임워크의 구성하이브리드 앱 프레임워크의 구성
하이브리드 앱 프레임워크의 구성Joonyoung Moon
 
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XpressEngine
 
Ruby on Rails와 함께 하는 애자일 웹 개발
Ruby on Rails와 함께 하는 애자일 웹 개발Ruby on Rails와 함께 하는 애자일 웹 개발
Ruby on Rails와 함께 하는 애자일 웹 개발Sukjoon Kim
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web Appsjungkees
 

What's hot (20)

React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작
 
막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)
 
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적  M-V 디자인 구현하기[DevOn 2013] Backbone.js로 능동적  M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기
 
Handlebars
HandlebarsHandlebars
Handlebars
 
컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기
 
자바스크립트의 또다른 발전, Backbone.js
자바스크립트의 또다른 발전, Backbone.js자바스크립트의 또다른 발전, Backbone.js
자바스크립트의 또다른 발전, Backbone.js
 
Resource Handling in Spring MVC
Resource Handling in Spring MVCResource Handling in Spring MVC
Resource Handling in Spring MVC
 
더 나은 웹표준을 위한 Web Components
더 나은 웹표준을 위한 Web Components더 나은 웹표준을 위한 Web Components
더 나은 웹표준을 위한 Web Components
 
레일스를 이용한 애자일 웹 개발 가이드
레일스를 이용한 애자일 웹 개발 가이드레일스를 이용한 애자일 웹 개발 가이드
레일스를 이용한 애자일 웹 개발 가이드
 
Deview2013 track1 session7
Deview2013 track1 session7Deview2013 track1 session7
Deview2013 track1 session7
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기
 
응답하라 반응형웹 - 4. angular
응답하라 반응형웹 - 4. angular응답하라 반응형웹 - 4. angular
응답하라 반응형웹 - 4. angular
 
나의 jQuery 실력 향상기
나의 jQuery 실력 향상기나의 jQuery 실력 향상기
나의 jQuery 실력 향상기
 
Enterprise Java web Deployment Strategy
Enterprise Java web Deployment StrategyEnterprise Java web Deployment Strategy
Enterprise Java web Deployment Strategy
 
Clean Front-End Development
Clean Front-End DevelopmentClean Front-End Development
Clean Front-End Development
 
Angularjs 도입 선택 가이드
Angularjs 도입 선택 가이드Angularjs 도입 선택 가이드
Angularjs 도입 선택 가이드
 
하이브리드 앱 프레임워크의 구성
하이브리드 앱 프레임워크의 구성하이브리드 앱 프레임워크의 구성
하이브리드 앱 프레임워크의 구성
 
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
 
Ruby on Rails와 함께 하는 애자일 웹 개발
Ruby on Rails와 함께 하는 애자일 웹 개발Ruby on Rails와 함께 하는 애자일 웹 개발
Ruby on Rails와 함께 하는 애자일 웹 개발
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web Apps
 

Similar to Hacosa js study 4주차

R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁
R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁
R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁창규 김
 
다시보는 Angular js
다시보는 Angular js다시보는 Angular js
다시보는 Angular jsJeado Ko
 
Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13hungrok
 
알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web Animations알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web AnimationsChang W. Doh
 
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]WSConf.
 
Web Components 101 polymer & brick
Web Components 101 polymer & brickWeb Components 101 polymer & brick
Web Components 101 polymer & brickyongwoo Jeon
 
Web Components - Part.I, @KIG 30th
Web Components - Part.I, @KIG 30thWeb Components - Part.I, @KIG 30th
Web Components - Part.I, @KIG 30thChang W. Doh
 
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유Sang Seok Lim
 
20131217 html5
20131217 html520131217 html5
20131217 html5DK Lee
 
퍼블리셔, 프론트엔드개발을 시작하다
퍼블리셔, 프론트엔드개발을 시작하다퍼블리셔, 프론트엔드개발을 시작하다
퍼블리셔, 프론트엔드개발을 시작하다정석 양
 
Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Kyoung Up Jung
 
Polymer따라잡기
Polymer따라잡기Polymer따라잡기
Polymer따라잡기Han Jung Hyun
 
20150912 windows 10 앱 tips tricks
20150912 windows 10 앱 tips  tricks20150912 windows 10 앱 tips  tricks
20150912 windows 10 앱 tips tricks영욱 김
 
Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1Dong Chan Shin
 
Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나JeongHun Byeon
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Kim Hunmin
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초Kwangyoun Jung
 
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축Youngil Cho
 

Similar to Hacosa js study 4주차 (20)

R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁
R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁
R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁
 
다시보는 Angular js
다시보는 Angular js다시보는 Angular js
다시보는 Angular js
 
[Codelab 2017] ReactJS 기초
[Codelab 2017] ReactJS 기초[Codelab 2017] ReactJS 기초
[Codelab 2017] ReactJS 기초
 
Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13
 
알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web Animations알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web Animations
 
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
 
Web Components 101 polymer & brick
Web Components 101 polymer & brickWeb Components 101 polymer & brick
Web Components 101 polymer & brick
 
Web Components - Part.I, @KIG 30th
Web Components - Part.I, @KIG 30thWeb Components - Part.I, @KIG 30th
Web Components - Part.I, @KIG 30th
 
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
 
20131217 html5
20131217 html520131217 html5
20131217 html5
 
퍼블리셔, 프론트엔드개발을 시작하다
퍼블리셔, 프론트엔드개발을 시작하다퍼블리셔, 프론트엔드개발을 시작하다
퍼블리셔, 프론트엔드개발을 시작하다
 
Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기
 
Polymer따라잡기
Polymer따라잡기Polymer따라잡기
Polymer따라잡기
 
20150912 windows 10 앱 tips tricks
20150912 windows 10 앱 tips  tricks20150912 windows 10 앱 tips  tricks
20150912 windows 10 앱 tips tricks
 
Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1
 
Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나
 
Hacosa j query 8th
Hacosa j query 8thHacosa j query 8th
Hacosa j query 8th
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까?
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초
 
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
 

More from Seong Bong Ji

More from Seong Bong Ji (14)

Hacosa j query 11th
Hacosa j query 11thHacosa j query 11th
Hacosa j query 11th
 
Hacosa j query 10th
Hacosa j query 10thHacosa j query 10th
Hacosa j query 10th
 
Hacosa j query 7th
Hacosa j query 7thHacosa j query 7th
Hacosa j query 7th
 
Hacosa j query 6th
Hacosa j query 6thHacosa j query 6th
Hacosa j query 6th
 
Hacosa j query 4th
Hacosa j query 4thHacosa j query 4th
Hacosa j query 4th
 
Hacosa j query 3th
Hacosa j query 3thHacosa j query 3th
Hacosa j query 3th
 
Hacosa j query 2th
Hacosa j query 2thHacosa j query 2th
Hacosa j query 2th
 
Hacosa jquery 1th
Hacosa jquery 1thHacosa jquery 1th
Hacosa jquery 1th
 
Hacosa js study 8th
Hacosa js study 8thHacosa js study 8th
Hacosa js study 8th
 
Hacosa js study 7th
Hacosa js study 7thHacosa js study 7th
Hacosa js study 7th
 
Hacosa js study 6th
Hacosa js study 6thHacosa js study 6th
Hacosa js study 6th
 
Hacosa js study 5th
Hacosa js study 5thHacosa js study 5th
Hacosa js study 5th
 
Hacosa js study 2주차
Hacosa js study 2주차Hacosa js study 2주차
Hacosa js study 2주차
 
Hacosa js study 1주차
Hacosa js study 1주차Hacosa js study 1주차
Hacosa js study 1주차
 

Hacosa js study 4주차

  • 1. HACOSA JS STUDY #5 꼭 알아야 할 핵심 기본기 #6 사진첩 기능 개선
  • 2. 꼭 알아야 할 핵심 기본기 • 꼭 필요한지 철저히 검토 ‒ 사용자 경험을 고려한 스크립트 사용 • 단계적 기능 축소 ‒ 자바스크립트 기능이 없는 브라우저 고려 ‒ 슈도 프로토콜 지양 ‒ 인라인 이벤트 핸들러 지양 • 스크립트 분리 • 하위 호환성 ‒ 객체 판별법
  • 3. 사진첩 기능 개선 • 1. 자바스크립트 기능이 없다면? ‒ <a href=“image/dad.jpg” oncilck=“showPic(this); return false;” title=“멋있는 아빠 사진”>아빠</a> →JavaScript가 동작하지 않더라도 편의성은 떨어지나 접근성은 높음 ‒ <a href=“javascript:showPic(„image/mom.jpg‟);return false;” title=“멋있는 아빠 사진”>아빠</a> → 자바스크립트 기능을 켜야만 작동 ‒ <a href=“#” oncilck=“showPic(this); return false;” title=“멋있는 아빠 사진”>아빠</a> → 자바스크립트 기능이 없으면 아무 쓸모 없는 사진첩이 됨
  • 4. 사진첩 기능 개선 • 2. 자바스크립트 코드가 마크업에 포함되어 있는가? ‒ onclick 이벤트를 외부 자바스크립트 파일에 추가 ‒ 어떻게? → 특정 링크를 인식할 수 있는 표지가 필요 • 마크업 구조에 따라 class, id 속성 등을 이용 (getElementByTagName, getElementById 등의 메소드 이용) • 예제에서는 class 속성을 추가하는 것은 각 링크마다 인라인 이벤트 핸들러를 추가하는 것은 좋지 않다라고 소개 하였으나, 마크업 구조에 따라 불가피한 상 황 등에는 사용 하는 것이 좋을 듯 생각 됨 • 정리하자면, 동작을 위한 인라인 속성 추가를 최소한으로 하여 사용하는 것을 권장
  • 5. 사진첩 기능 개선 • 이벤트 핸들러 추가 ‒ 점검 사항 → 프로그램의 안정성 점검 (DOM 메소드 처리 가능 여부 확인 등) • 일종의 방어적 프로그래밍 • 다양한 환경에서 발생할 수 있는 오류를 예상하여 대처 • getElementById 등 DOM 메소드 처리 불가능한 브라우저 if(!document.getElementByID) return false; • 프로그램에서 접근할 요소가 없을 경우에 대한 대처 if(!document.getElementById(„imagegallery‟) return false;
  • 6. 사진첩 기능 개선 • 변수 지정하기 ‒ 가독성 상향 → var gallery = document.getElementById(“imagegallery”); → 이후 gallery 로 호출 ‒ 컴퓨터가 불필요한 반복 계산 하지 않도록 함 → var gallery = document.getElementById(“imagegallery”); → gallery에 해당 객체를 대입시킴으로 이후 gallery를 호출 시 찾아진 객체 를 바로 불러 들임. → document.getElementById(“imagegallery”) 로 계속 호출 시 브라우저는 getElementById 함수를 계속 실행해야 함 ‒ 주의 사항 →변수명 지정 시 예약어 사용 불가 ex) var, if 등
  • 7. 사진첩 기능 개선 • 동작 변경 ‒ onclick 이벤트에 동작 추가 →links[i].onclick = function(){ } ‒ showPic 함수를 실행하고 링크 클릭하는 기본 동작을 취소해야 하 므로 →links[i].onclick = function(){ showPic(this); return false; }
  • 8. 사진첩 기능 개선 • 작업 나누기(?) ‒ 작성된 함수를 문서가 모두 읽힌 다음에 실행 되도록 처리 →window.onload 이벤트 이용 →window.onload = function(){ firstFunction(); secondFunction(); } 식으로 사용 → window.onload = firstFunction; window.onload = secondFunction; 으로 작성 시, 마지막 함수만 실행 됨
  • 9. 사진첩 기능 개선 • 작업 나누기(?) ‒ addLoadEvent → 사이먼 윌리슨이 고안한 방법 → addLoadEvent(firstFucntion); addLoadEvent(secondFuntion); 과 같은 방법으로 작성
  • 10. 사진첩 기능 개선 • 검증 코드 작성 ‒ 앞서 나왔던 “프로그램의 안정성 점검” 과 비슷한 내용 ‒ 프로그램의 무결점화 function showPic(whicpic){ if(!document.getElementById(“placeholder”)) return false; var source = whicpic.getAttribute(“href”); var placeholder = document.getElementById(“placeholder”); placeholder.setAttribute(“src”,source); if(!document.getElementById(“description”)) return false; var text = whicpic.getAttribute(“title”); var description = document.getElementById(“description”); description.firstChild.nodeValue = text; }
  • 11. 사진첩 기능 개선 • DOM Core, HTML-DOM ‒ DOM Core : → DOM을 지원하는 모든 프로그래밍 언어에서 공통적으로 사용 ‒ HTML-DOM: → (X)HTML 문서에 적용되는 DOM ‒ DOM Core VS. HTML-DOM document.getElementByTagName(“form”) : DOM Core document.form : HTML-DOM Element.getAttribute(“src”) : DOM Core Element.src : HTML-DOM
  • 12. END