본문 바로가기

front-end 국비과정 학습일지

front-end 국비과정 일차 23일차 학습일지 JS: Error,REST API,DOM


error의 종류 
1 rangeError : 숫자나 배열의 유효 범위를 벗어났을때 출력되는 Error이다 
2 ReferenceError: 정의되지않은 함수,변수를 잘못 참조했을 때 출력되는 Error이다
3 TyepError : 변수나 파라미터가 유효한 데이터 타입이 아닐 때 출력되는 Error이다
4 AggregateError:하나의 동작이 다수의 오류를 발생시키는 경우 다수의 오류를 하나의 오류로 그룹화하여 출력되는 Error이다
5 SyntaxError: 작성된 문법이 잘못되었을 때 출력되는 Error이다
6 InternalError: JS엔진 내부에서 오류가 발생했을때 출력되는 Error이다


Strict Mode(엄격 모드)
1JS문법을 엄격하게 체크하는 모드이다 
2JS는 변수를 선언하지않아도 값을 할당 하여 출력 할 수 있는데 이러한 암묵적 문법의 모순을 허용하지 않는다
사용법 : 엄격모드를 사용하고 싶은 js파일 상단에 'use strict'라고 명시한다

ex)

'use strict'

a = 3
console.log(a)
//위코드에서 a란 문자에 3이란 값을 할당 해줬다 엄격 모드가 아니라면 console창에 3이 출력되는게 당연 하다고 생각 할 수 있지만 
//문법적으론 잘못된 것이다 이러한 문법의 모순을 엄격모드에서는 허용 하지 않기 때문에 error를 출력한다





REST API
애플리케이션이란? :컴퓨터 상의 프로그램 이라고 해석해도 무관하다 
프로토콜이란? : 데이터 통신(데이터를 주고 받는 행위) 이라고 해석해도 무관하다

REST란?
REST(Representational State Transfer)는 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미한다
자원이란? : 소프트웨어가 관리하는 모든것을 의미한다 데이터,문서,프로그램,그림 등등 
주로 json형태로 데이터를 주고 받는다 

API란?
API(Application Programming Interface)는  애플리케이션을 구축하고 통합하기 위한 프로토콜 세트이다 
즉 컴퓨터 상의 프로그램을 구축하고 통합하기 위해 데이터를 주고 받는 행위이다
ex)
구글지도,카카오지도,네이버 결제 , 영화 조회 등등

API의 장점
1구현방식을 몰라도 애플리케이션(컴퓨터 상의 프로그램)끼리 서로 소통 할 수있다. 
2애플리케이션(

REST API는 HTTP(통신 프로토콜의 일종)의 Method(속성이 함수인것)를 통해 자원(소프트웨어가관리하는 모든것)에 대해 CRUD를 실행한다.

CRUD란? 
Create(생성),Read(조회),Update(수정),Delete(삭제)를 의미한다

HTTP Method :POST(생성),GET(조회),PUT(수정),DELETE(삭제)


HTTP Method는 웹에 입장에서 봤을때 서버에서 만든 API를 사용자가 호출했을때 생성,조회,수정,삭제와 같은 기능을 서버에 요청 할 수 있게 해준다 


 
JS DOM
1DOM이란? Document Object Model의 약어이다 
2 js로 특정 기능을 만들어 html에 적용 시켜 페이지에 동적 기능을 부여하는 역할을 한다
3 DOM은 HTML에 요소와 속성을 변경,추가,제거,JS의 event삽입을 할 수 있고, css의 속성을 추가,제거 할 수 있다.

DOM으로 HTML에 요소를 찾는방법
1 document.getElementById(): ()안에 html에 특정요소 id이름을 명시 하고,JS의 변수와 연결한다
2 document.getElementsByTagName(): ()안에 html에 특정 태그이름을 명시 하고, 태그명에 해당하는 모든 요소와 연결된다
3 document.getElementsByClassName(): ()안에 html에 특정요소 class이름을 명시 하고 JS의 변수와 연결한다
4 document.querySelector(): ()안에 CSS의 선택자의 이름을 명시하고, 해당선택자와 연결된 html에 요소를 조회하여 제일 처음으로 찾아지는 요소를 JS 변수와 연결한다
5 document.querySelectorAll():()안에 CSS의 선택자의 이름을 명시하고, 해당선택자와 연결된 html에 모든요소를 JS 변수와 연결한다.

ex)

  <p id="getid">document.getElementById()</p>

  <p class="getclass">document.getElementsByClassName()</p>
  <p class="getclass">document.getElementsByClassName()</p>

  <ul>
    <li>getElementsByTagName()</li>
    <li>getElementsByTagName()</li>
  </ul>

  <p class="querySelect">document.querySelector()</p>
  <p class="querySelect">document.querySelector()</p>

  <ul>
    <li class="item">document.querySelectorAll()</li>
    <li class="item">document.querySelectorAll()</li>
  </ul>


  <style>
    .querySelect {
      color: yellow;
    }

    .item {
      color: brown;
    }
  </style>
  <script>
    const idEl = document.getElementById("getid")
//HTML에 getid라는 id를 가지는 요소 조회하여 js와 연결
idEl.style.color = "red"
//id가 getid인 요소의 글자색 빨간색으로 제어

const classEl = document.getElementsByClassName("getclass")[0]
//HTML에 getclass라는 요소를 조회하여 js로 연결 
//index번호를 명시해 줘야 제대로 연결된다
classEl.style.color = "blue"
//class가 getclass인 요소의 글자색 파란색으로 제어

const ulEl = document.getElementsByTagName('ul')[0]
//HTML에 ul태그에 요소를 조회하여 js로 연결
//index번호를 명시해 줘야 제대로 연결된다
ulEl.style.color = "green"
//ul이라는 요소의 글자색 초록색으로 제어

const pEl = document.querySelector(".querySelect")
//클레스가 querySelect 인 요소를 css선택자로 조회하여js와 연결
//이때 클레스이름이 중복되면 제일 처음으로 찾아지는 요소와 연결됨
pEl.style.color = "yellowgreen"
//querySelect라는 클레스를 가진 첫번째요소에 글자색을
//yellow에서 yellowgreen으로 변경
const itemEl = document.querySelectorAll('.item')
//querySelectorAll은 전체요소를 찾아주지만 style을 제어할 때는 
//index번호를 명시해야하기 때문에 반목문을 사용한다
for(const item of itemEl){
  item.style.color = "violet"
}
// for-of라는 반복문을 사용하여 class가 item인 li태그의
//글자색을 보라색으로 변경
  </script>


innerHTML = text와 html요소를 삽입하는 기능이 있다

  ex)

<body>
<select name="test" id="1"></select>
 
<script>
const selEl = document.getElementById("1")
//id가 1인 요소 select와 변수 selEl을 연결 
console.log(selEl)
//잘 연결되었는지 확인
selEl.innerHTML = `<option>test<option>`
//innerHTML로  option태그와 test라는 text 추가
</script>
</body>



innerText = innerHTML과 다르게 요소를 추가하는 기능은 없고 요소안에 text를 작성하는 기능만 있다
ex)

<p class="hello"></p>
<script>
  const pEl = document.getElementsByClassName("hello")
  //getElementsByClassName로 p태그와 pEl변수 연결 
  console.log(pEl)
  //제대로 연결되었는지 확인
  pEl[0].innerText = `hello world`
  //hello world라는 택스트 추가
</script>



remove() : HTML요소를 삭제한다 
ex)

<body>
  <p id="hello">hello world</p>
  <!-- id가 hello인p 태그 생성  -->
  <button id="del" click="btnclick()">삭제</button>
  <!-- id가 del이고, click이벤트가 btnclick()인 요소 생성  -->
  <script>
    const pEl = document.getElementById(`hello`)
    // pEl이라는 변수에 id가 hello인 요소 연결 
    console.log(pEl)
    // 잘 연결 되었는지 확인 
    const btnEl = document.getElementById(`del`)
    // id가 del인 요소를 btnEl에 연결 
    console.log(btnEl)
    //잘 연결 되었는지 확인

    btnEl.addEventListener('click', function btnclick() {
      pEl.remove()
    })
//  btnEl이라는 변수에 click이벤트 추가 1번파라미터는 추가할 event이고
//  2번파라미터는 event가 실행될때 실행될 함수데이터 
  </script>
</body>

 



---DOM 이벤트 종류 ---
DOM 이벤트를 사용할때 js파일에선 on을 따로 명시하지않는다 요소에는 명시함

click이벤트 : 요소를 클릭 했을때 event에 해당하는 내용이 출력된다
ex)

<body>
  <p class="click" click="clickE();">click 이벤트</p>

  <script>
const pEl = document.querySelector('.click')
// 변수 pEl에 class가 css의 선택자가 .click인 요소름 담은 코드 
console.log(pEl)
// 제대로 연결 되었는지 확인
pEl.addEventListener('click', clickE = () => {
   console.log(`hello world`)
})
// pEl이라는 요소에 이벤트리스너를 설정
//EventListener에 1번파라미터에는이벤트의 종류,2번파라미터 에는 실행내용을 입력함
  </script>
</body>



change 이벤트 : html에 옵션이 있는요소에서 옵션이 변경되었을 때 발생하는 이벤트이다 
주로 selct태그와 input에 radio,checkbox type에서 사용된다.

focus 이벤트 : 대화형 콘텐츠 즉 input요소와 같은 요소에 초점이 맞춰 졌을때 이벤트를 발생시킨다 

blur 이벤트 : 대화형 콘텐츠 즉 input요소와 같은 요소에 초점이 해제 되었을 때 발생하는 이벤트이다 
ex)

<body>
<label >텍스트<input type="text" class="hellow"></label>

<style>
  .hellow{
    outline: none;
    background-color:gray;
    padding: 2px 10px;
  }
</style>
<script>
  const inputEl = document.querySelector('.hellow')
// css선택자 .hellow로 input요소와 연결
console.log(inputEl)
// 제대로 연결되었는지확인 
inputEl.addEventListener('focus',test=()=>{
  return inputEl.style.backgroundColor="black"
})
// input요소가 포커스 되었을때 배경색이 검정색으로 변하는 코드 

inputEl.addEventListener('blur',test2=()=>{
  return inputEl.style.backgroundColor="green"
})
// input요소가 포커스가 해제 되었을때 배경색이 초록색으로 변하는 코드

</script>
</body>


scroll 이벤트 : 브라우저에서 마우스를 스크롤 했을 때 발생하는 이벤트이다
ex)

window.addEventListener('scroll', function () {
  console.log(this.scrollY)
})


위 코드에서 window는 브라우저이고 브라우저가 스크롤 될때마다 스크롤된 위치를 숫자로 출력한다

DOM으로 css 스타일을 제어하는 방법 
1 DOM으러 css 스타일을 제어 할 요소를 선택하여 변수에 담는다
2 변수에 담긴 요소에 style이라는 속성을 사용한후 css속성과 속성값을 명시한다 이때 css속성은 카멜표기법으로 작성 해야한다
ex)

<body>
  <p class="hello">hellow</p>

  <style>
 .hello{
   font-size: 20px;
   color:red;
 }
  </style>
<script>
  const pEl = document.querySelector('.hello')
// css의 class가 hello인 선택자를 pEl이라는 변수에 담음 
console.log(pEl)
pEl.style.backgroundColor = "black"
// pEl이라는 요소에 style속성을 사용하여 CSS속성 backgroundColor 명시
// 통상적인 css라면 background-color이지만 JS에선 카멜표기법을 사용해야함 
pEl.style.fontSize = "16px"
</script>
</body>