SlideShare a Scribd company logo
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

PDF
혁신적인 웹컴포넌트 라이브러리 - Polymer
Jae Sung Park
 
PDF
T.D.D로 Flask API 맛보기
JIHUN KIM
 
PDF
201803 파이썬 세미나
JeongHwan Kim
 
PDF
역시 Redux
Leonardo YongUk Kim
 
PDF
AngularJS In Production
MooYeol Lee
 
PPTX
Flux 예제 분석 2
Peter YoungSik Yun
 
PDF
제 5회 DGMIT R&D 컨퍼런스: JavsScript Event Bubbling & Capturing
dgmit2009
 
PPTX
[ Pycon Korea 2017 ] Infrastructure as Code를위한 Ansible 활용
Jihyung Song
 
혁신적인 웹컴포넌트 라이브러리 - Polymer
Jae Sung Park
 
T.D.D로 Flask API 맛보기
JIHUN KIM
 
201803 파이썬 세미나
JeongHwan Kim
 
역시 Redux
Leonardo YongUk Kim
 
AngularJS In Production
MooYeol Lee
 
Flux 예제 분석 2
Peter YoungSik Yun
 
제 5회 DGMIT R&D 컨퍼런스: JavsScript Event Bubbling & Capturing
dgmit2009
 
[ Pycon Korea 2017 ] Infrastructure as Code를위한 Ansible 활용
Jihyung Song
 

What's hot (20)

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

Similar to Hacosa js study 4주차 (20)

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

More from Seong Bong Ji (14)

PPTX
Hacosa j query 11th
Seong Bong Ji
 
PPTX
Hacosa j query 10th
Seong Bong Ji
 
PPTX
Hacosa j query 7th
Seong Bong Ji
 
PPTX
Hacosa j query 6th
Seong Bong Ji
 
PPTX
Hacosa j query 4th
Seong Bong Ji
 
PPTX
Hacosa j query 3th
Seong Bong Ji
 
PPTX
Hacosa j query 2th
Seong Bong Ji
 
PPTX
Hacosa jquery 1th
Seong Bong Ji
 
PPTX
Hacosa js study 8th
Seong Bong Ji
 
PPTX
Hacosa js study 7th
Seong Bong Ji
 
PPTX
Hacosa js study 6th
Seong Bong Ji
 
PPTX
Hacosa js study 5th
Seong Bong Ji
 
PPTX
Hacosa js study 2주차
Seong Bong Ji
 
PPTX
Hacosa js study 1주차
Seong Bong Ji
 
Hacosa j query 11th
Seong Bong Ji
 
Hacosa j query 10th
Seong Bong Ji
 
Hacosa j query 7th
Seong Bong Ji
 
Hacosa j query 6th
Seong Bong Ji
 
Hacosa j query 4th
Seong Bong Ji
 
Hacosa j query 3th
Seong Bong Ji
 
Hacosa j query 2th
Seong Bong Ji
 
Hacosa jquery 1th
Seong Bong Ji
 
Hacosa js study 8th
Seong Bong Ji
 
Hacosa js study 7th
Seong Bong Ji
 
Hacosa js study 6th
Seong Bong Ji
 
Hacosa js study 5th
Seong Bong Ji
 
Hacosa js study 2주차
Seong Bong Ji
 
Hacosa js study 1주차
Seong Bong Ji
 

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