배열관련 메소드

  배열관련 메소드의 종류

종류

사용법

설명

each()/$each()

$(“요소 선택”).each(function)

$each($(“요소 선택”).function)

배열에 저장된 문서 객체만큼 메소드가 반복 실행.

배열에 저장된 객체의 인덱스 순서대로 하나씩 접근하여 객체를 선택하고 인덱스를 구한다.

$.map()

$.map(Array, function)

배열에 저장된 데이터 수만큼 메소드가 반복 실행.

함수에서 반환된 데이터는 새 배열에 순서대로 저장. 새로 저장된 배열 객체를 반환.

$.grep()

$.grep(Array, function)

배열에 저장된 데이터 수만큼 메소드가 반복 실행.

반환값이 true인 경우에만 배열의 데이터가 인덱스 오름차순으로 새 배열에 저장되며 그 배열을 반환.

$.inArray()

$.inArray(data, Array, start index)

배열안에서 데이터를 찾는다. 데이터를 찾으면 가장 맨 앞 데이터의 인덱스를 반환하고, 찾지 못하면 -1을 반환.

start index의 값을 지정하면 해당 위치부터 데이터를 찾는다.

$.isArray()

$.isArray(object)

입력한 객체가 배열 객체라면 true를 아니면 false를 반환

$.merge()

$.merge(Array 1, Array 2)

인자값으로 입력한 2개의 배열 객체를 하나로 그룹화

inde()

$(“요소 선택”).index(“지정 요소 선택”)

선택자로 요소를 먼저 선택.

그런 다음 지정한 요소의 인덱스 정보를 가져온다.

 each()/$.each()메소드

  선택자로 선택한 요소(문서 객체)는 배열에 순서대로 저장된다.

  이때 each()와 $.each()메소드는 배열에 저장된 요소를 순서대로 하나씩 선택하면서 인덱스 정보를 가져온다.

1. $("요소 선택").each(function(매개변수 1, 매개변수 2){ })
2. $.each($("요소 선택"), function(매개변수1, 매개변수2){ })
3. $("요소 선택").each(function(){$(this)})
4. $.each($("요소 선택"),function(){$(this)})

  1,2는 배열에 저장된 요소의 개수만큼 메소드를 반복 실행한다. 메소드를 실행할 때마다 매개변수 1, 매개변수2에는

  배열에 저장된 요소와 인덱스의 값이 배열에 오름차순으로 대입된다.

  3,4는 배열에 저장된 요소의 개수만큼 메소드를 반복 실행한다. 메소드를 실행할 때마다 $(this)에는 배열에 저장된

  요소가 오름차순으로 대입된다.

 

  다음 예제는 배열에 저장된 요소를 each(), $.each()메소드를 사용해 순서대로 선택한다.

  그 다음 인덱스 정보를 콘솔 패널에 출력한다.

<script>
  $(function(){
    var obj = [{
      "area":"서울"
    },{
      "area":"부산"
    },{
      "area":"전주"
    }]

    $(obj).each(function(i,o){
      //obj 배열의 데이터 개수만큼 함수가 실행.
      //메소드가 반복 실행될 때마다 배열에 저장된 객체에
      //오름차순으로 접근하고 매개변수 i와 o에는 배열의 인덱스 값과
      //객체가 대입된다.
      console.log(i+":", o);
    });
    console.log("=====The End======");

    $.each($("#menu2 li"), function(i,o){
      //선택한 요소만큼(li) 메소드를 반복 실행.
      //배열에 저장된 요소는 인덱스 오름차순으로 $(this)에 반환된다.
      console.log(i+":",o);
    });
    console.log("=====The End2======");

    $.each($("#menu2 li"),function(i){
      console.log(i+":", $(this));
    });
  });
</script>
</head>
<body>
  <h1>탐색 선택자</h1>
   <ul id="menu 1">
    <li>내용1-1</li>
    <li>내용1-2</li>
    <li>내용1-3</li>
   </ul>
   <ul id="menu 2">
    <li>내용2-1</li>
    <li>내용2-2</li>
    <li>내용2-3</li>
   </ul>
</body>

$.map()/$.grep() 메소드

  $.map() 메소드는 배열에 저장된 데이터 수만큼 메소드를 반복 실행한다.

  그리고 메소드에서 반환된 데이터는 새 배열에 저장되고 그 배열 객체를 반환한다.

  $.grep() 메소드는 배열에 저장된 데이터 수만큼 메소드를 반복 실행하며 인덱스 오름차순으로 배열의 데이터를

  불러온다. 메소드의 반환값이 true면 데이터가 새 배열에 저장되고 배열을 반환한다.

1. $.map()메소드
$.map(Array, function(매개변수1, 매개변수2){
    return 데이터;
});

2. $.grep()메소드
$.grep(Array, function(매개변수1, 매개변수2){
    return [true|false];
});

  1은 배열에 저장된 요소만큼 메소드를 반복 실행한다.

  메소드가 실행될 때마다 매개변수 1, 매개변수2에는 배열의 데이터와 인덱스 값이 인덱스 오름차순으로 대입된다.

  반환된 데이터는 새 배열에 저장되고 새롭게 가공된 배열 객체를 반환한다.

  2는 배열에 저장된 요소만큼 메소드를 반복실행한다. 메소드가 실행될 때마다 매개변수 1, 매개변수2에는 배열에

  데이터와 인덱스 정보가 인덱스 오름차순으로 대입된다. 반환된 데이터가 true면 인덱스 오름차순으로 데이터를

  새 배열에 저장하고 새롭게 가공된 배열 객체를 반환한다.

 

  다음 예제는 $.map(), $.grep() 메소드를 사용해 배열에 저장된 객체 중 "area"의 속성값이 "서울"인 객체만 선택해

  새 배열로 가공한다. 그 다음 변수에 참조시키고 새롭게 가공된 두 배열의 객체를 콘솔 패널에 출력한다.

<script>
  $(function(){
    var arr1 = [{
      "area":"서울"
      "name":"무대리"
    },{
      "area":"부산"
      "name":"홍과장"
    },{
      "area":"대전"
      "name":"박사장"
    },{
      "area":"서울"
      "name":"빅마마"
    }]

    var arr2 = $.map(arr1, function(a,b){
      if(a.area == "서울"){
        return a;
      }
    });
    //배열에 저장된 객체 수만큼 메소드를 반복 실행.
    //메소드가 반복 실행될 때마다 배열에 저장된 객체에
    //인덱스 오름차순으로 접근한다.
    //매개변수 a,b에는 배열의 객체와 인덱스 값이 대입된다.
    //객체의 "area"속성이 "서울"이면 새 배열에 객체(매개변수a)를 저장하고
    //새롭게 가공된 배열 객체를 반환한다.
    console.log(arr2);
    console.log("======first End=====");

    var arr3 = $.grep(arr1, function(a,b){
      if(a.area == "서울"){
        return true;
      }else{
        return false;
      }
      //배열의 데이터 수만큼 메소드가 실행된다.
      //객체의 속성값이 '서울'이면 true를 반환한다.
    });
    console.log(arr3);
    console.log("=====Second End=====");
  });
</script>

$.inArray()/$.isArray()/$.merge()메소드

  $.inArray() 메소드는 배열에 저장된 데이터 중 지정한 데이터를 찾아 인덱스 값을 반환한다.

  $.isArray() 메소드는 지정한 데이터가 배열 객체면 true를 아니면 false를 반환한다.

  $.merge() 메소드는 두 배열 객체를 하나의 객체로 묶는다.

1. $.inArray(data, Array, start index)
2. $.isArray(object)
3. $.merge(Array1, Array2)

  1은 배열에 저장된 데이터 중 지정한 데이터를 인덱스 오름차순으로 찾아 먼저 찾은 데이터의 인덱스 값을 반환한다.

  2는 지정한 객체가 배열 객체면 true를 아니면 false를 반환한다.

  3은 두 배열 객체를 하나의 배열 객체로 묶는다.

 

  다음 예제에서는 $.inArray(), $.isArray()메소드를 사용해 배열 객체의 정보를 구하고 $.merge()메소드로는

  두 배열 객체를 하나의 배열 객체로 묶는다.

<script>
  $(function(){
    var arr1 = ["서울", "대전", "부산", "전주"];
    var arr2 = ["한국", "미국", "일본", "중국"];
    var obj = {
      "name":"정부장",
      "area":"서울"
    }

    var idxNum = $.inArray("부산", arr1);
    console.log(idxNum);

    var okArray1=$.isArray(arr1);
    var okArray2=$.isArray(obj);
    console.log(okArray1);//배열객체면 true
    console.log(okArray2);//배열객체가 아니면 false

    $.merge(arr2, arr1);
    console.log(arr2);//["한국", "미국", "일본", "중국", "서울", "대전", "부산", "전주"]
  });
</script>

index()메소드

  $.index()메소드는 지정 선택 요소를 찾아서 인덱스 값을 반환한다.

  다음은 index()메소드의 기본형이다.

$("요소 선택").index("지정 선택 요소");

  다음은 index()메소드를 사용한 예제이다.

<script>
  $(function(){
    var idxNum=$("li").index($("#list3"));
    console.log(idxNum); //2
  });
</script>
</head>
<body>
  <h1>배열 관련 함수</h1>

   <ul>
    <li>내용1</li>
    <li>내용2</li>
    <li id="list3">내용3</li>
    <li>내용4</li>
   </ul>
</body>

 

(참고 : do it 자바스크립트+제이쿼리 입문)

탐색 선택자

  탐색 선택자를 사용하면 기본 선택자로 선택한 요소 중 원하는 요소를 한번 더 탐색해서 좀 더 정확하게

  선택할 수 있다.

  대표적인 탐색 선택자에는 배열의 인덱스(index)를 사용해 선택하는 '위치 탐색 선택자'와

  배열에 담겨진 요소 중 지정된 속성과 값으로 선택하는 '속성 탐색 선택자'가 있다.

 

위치 탐색 선택자

  기본 선택자로 선택한 요소는 배열에 담긴다. 이때 배열의 인덱스를 사용하면 특정 요소를 좀 더

  정확하게 선택할 수 있다.

  다음은 위치 탐색 선택자의 종류를 간단하게 정리한 표이다.

종류 사용법 설명
$(“요소 선택:first”)
$(“요소 선택”).first()
$(“li:first”)
$(“li”).first()
전체<li>요소 중 첫번째 요소만 선택
$(“요소 선택:last”)
$(“요소 선택).last()
$(“li:last”)
$(“li”).last()
전체 <li>요소 중 마지막 요소만 선택
$(“요소 선택:odd”) $(“li:odd”) <li> 요소 무리 중 짝수 번째(홀수 인덱스)요소만 선택
$(“요소 선택:even”) $(“li:even”) <li> 요소 무리 중 홀수 번째(짝수 인덱스)요소만 선택
$(“요소 선택:first-of-type”) $(“li:first-of-type”) <li> 요소 무리 중 첫번째 요소만 선택
$(“요소 선택:last-of-type”) $(“li:last-of-type”) <li> 요소 무리 중 마지막 요소만 선택
$(“요소 선택:nth-child(숫자)”) $(“li:nth-child(3)”) <li> 요소 무리 중 세 번째 요소만 선택
$(“요소 선택:nth-child(숫자n)”) $(“li:nth-chile(3n)”) <li> 요소 무리 중 3의 배수 번째에 있는 요소만 선택
$(“요소 선택:nth-last-of-type
(숫자)”)
$(“li:nth-last-of-type(2)”) <li> 요소 무리 중 마지막 위치로부터 두번째에 있는 요소만 선택
$(“요소 선택:only-child”) $(“li:ony-child”) 부모 요소 내에 <li> 요소가 1개뿐인 <li> 요소만 선택
$(“요소 선택:eq(index)”)
$(“요소 선택”).eq(index)
$(“li:eq(2)”)
$(“li”).eq(2)
<li> 요소 중 인덱스 2가 참조하는 요소를 불러온다
$(“요소 선택:gt(index)”) $(“li:gt(1)”) <li> 요소 중 인덱스 1보다 큰 인덱스가 참조하는 요소를 불러온다
$(“요소 선택:lt(index)”) $(“li:lt(1)”) <li> 요소 중 인덱스 1보다 작은 인덱스가 참조하는 요소를 불러온다
$(“요소 선택”).slice(index) $(“li”).slice(2) <li> 요소 중 인덱스 2부터 참조하는 요소를 불러온다

 

first/last 선택자

  first 선택자는 선택된 요소 중 첫번째 요소만 선택한다. 이와 반대로 last 선택자는 선택된 요소 중 마지막 요소만 선택

  한다.

$("요소 선택:first")또는 $("요소 선택").first()

$("요소 선택:last") 또는 $("요소 선택").last()

  다음은 문단 태그 영역에 first 선택자와 last선택자를 적용한 예제이다.

<script>
      $(function(){
       $("#menu li:first")	//index 0
       .css({"background-color":"#ff0"});

       $("#menu li:last")	//index 3
       .css({"background-color":"#0ff"});
       });
</script>
</head>
<body>
    <h1>탐색 선택자</h1>
    <ul id="menu">
      <li>내용1</li>
      <li>내용2</li>
      <li>내용3</li>
      <li>내용4</li>
    </ul>
</body>

even/odd 선택자

  even 선택자는 선택한 요소 중 홀수 번째(짝수 인덱스)요소만 선택하고, 이와 반대로 odd 선택자는

  짝수번째(홀수 인덱스)요소만 선택한다.

  다음은 even선택자와 odd선택자의 기본형이다.

$("요소 선택:even")

$("요소 선택:odd")
<script>
  $(function(){
    $("#menu li:even")	//index 0, 2
    .css({"background-color":"#ff0"});

    $("#menu li:odd")	//index 1, 3
    .css({"background-color":"#0ff"});
  });
</script>
</head>
<body>
  <h1>탐색 선택자</h1>
   <ul id="menu">
    <li>내용1</li>
    <li>내용2</li>
    <li>내용3</li>
    <li>내용4</li>
   </ul>
</body>

 

eq(index)/lt(index)/gt(index) 탐색 선택자

  eq(index)탐색 선택자는 선택한 요소 중 지정한 인덱스가 참조하는 요소만 선택하고 lt(index) 선택자는 선택한

  요소 중 지정한 인덱스보다 작은(lt, Less Than) 인덱스를 참조하는 요소만 선택한다.

  이와 반대로 gt(index)는 선택한 요소 중 지정한 인덱스보다 큰(gt, Greater Than)인덱스를 참조하는 요소만 선택한다.

  다음은 eq, lt, gt선택자의 기본형이다.

1. $("요소 선택:eq(index)") 또는 $("요소 선택").eq(index)
2. $("요소 선택:lt(index)")
3. $("요소 선택:gt(index)")

  다음은 eq(), lt(), gt()의 선택자를 적용한 예제이다.

<script>
  $(function(){
    $("#menu li").eq(2) //index 2
    .css({"background-color":"#ff0"});

    $("#menu li:lt(2)") //index 0, 1
    .css({"background-color":"#0ff"});

    $("#menu li:gt(2)") //index 3, 4
    .css({"background-color":"#f0f"});
  });
</script>
</head>
<body>
  <h1>탐색 선택자</h1>
   <ul id="menu">
    <li>내용1</li>
    <li>내용2</li>
    <li>내용3</li>
    <li>내용4</li>
    <li>내용5</li>
   </ul>
</body>

 

first-of-type/last-of-type 선택자

  first-of-type 선택자는 선택한 요소의 무리 중 첫번째 요소만 선택한다.

  이와 반대로 last-of-type은 선택한 요소의 무리 중 마지막에 위치한 요소만 선택한다.

1. $("요소 선택:first-of-type")
2. $("요소 선택:last-of-type")

 

<script>
  $(function(){
    $("li:first-of-type") //<li> 1-1, 2-1
    .css({"background-color":"#ff0"});

    $("li:last-of-type") //<li> 1-3, 2-3
    .css({"background-color":"#0ff"});
  });
</script>
</head>
<body>
  <h1>탐색 선택자</h1>
   <ul>
    <li>내용1-1</li>
    <li>내용1-2</li>
    <li>내용1-3</li>
   </ul>
   <ul>
    <li>내용2-1</li>
    <li>내용2-2</li>
    <li>내용2-3</li>
   </ul>
</body>

nth-child(숫자n)/nth-last-of-type(숫자)선택자

  nth-child(숫자n)선택자는 선택한 요소의 무리 중 지정한 숫자(배수)의 요소를 선택한다.

  예를들어 li:nth-child(2)는 선택한 요소의 무리 중 두번째의 <li>태그를 가리키고, li:nth-child(2n)은

  선택한 요소의 무리 중 2의 배수의 <li>태그를 가리킨다.

  이에 비해 nth-last-of-type(숫자) 선택자는 선택한 요소의 무리 중 마지막에서 지정한 숫자의 요소를 선택한다.

1. $("요소 선택:nth-child(숫자)")
2. $("요소 선택:nth-child(숫자n)")
3. $("요소 선택:nth-last-child(숫자)")

  1. 선택한 요소 중 지정한 숫자에 위치한 요소를 선택한다.

  2. 선택한 요소 중 지정한 배수에 위치한 요소를 선택한다.

  3. 선택한 요소 중 마지막 위치에서 지정한 숫자에 위치한 요소를 선택한다.

 

  다음은 nth-child와 nth-last-child를 적용한 예제이다.

<script>
  $(function(){
    $("#menu 1 li:nth-child(1)") //<li> 1-1
    .css({"background-color":"#ff0"});

    $("#menu 1 li:nth-child(2n)") //<li> 1-2, 1-3, 1-4
    .css({"background-color":"#f00"});
    
    $("#menu 2 li:nth-last-child(2)") //<li> 2-2
    .css({"background-color":"#0ff"});
  });
</script>
</head>
<body>
  <h1>탐색 선택자</h1>
   <ul id="menu 1">
    <li>내용1-1</li>
    <li>내용1-2</li>
    <li>내용1-3</li>
   </ul>
   <ul id="menu 2">
    <li>내용2-1</li>
    <li>내용2-2</li>
    <li>내용2-3</li>
   </ul>
</body>

only-child/slice(index)선택자

  only-child 선택자는 선택한 요소가 '부모 요소에게 하나뿐인 자식요소'인 경우에 선택한다.

  slice(start index, end index) 선택자는 선택한 요소의 지정 구간 인덱스의 요소를 선택한다.

 

1. $("요소 선택:only-child")
2. $("요소 선택").slice(start index, end index)

  1. 선택한 요소가 부모 요소에게 하나뿐인 자식 요소면 선택한다.

  2. 지정 구간 인덱스의 요소를 선택한다. 예를들어 slice(1,3)은 1초과 3이하의 요소를 선택한다.

 

  다음은 only-child 선택자와 slice 선택자를 적용한 예제이다.

<script>
  $(function(){
    $("#menu 1 li").slice(1, 3)
    .css({"background-color":"#ff0"});

    $("li:only-child")
    //<ul id="menu2">
    //  <li>내용 2-1</li>
    //</ul>
    .css({"background-color":"#0ff"});
  });
</script>
</head>
<body>
  <h1>탐색 선택자</h1>
   <ul id="menu 1">
    <li>내용1-1</li>
    <li>내용1-2</li>
    <li>내용1-3</li>
    <li>내용1-4</li>
   </ul>
   <ul id="menu 2">
    <li>내용2-1</li>
   </ul>
</body>

 

(참고 : do it 자바스크립트+제이쿼리 입문)

'Front > JQuery' 카테고리의 다른 글

JQuery(이벤트 등록 메소드)  (0) 2020.05.22
JQuery(객체조작)  (0) 2020.05.20
JQuery(속성 탐색 선택자)  (0) 2020.05.20
jquery(선택자)  (0) 2020.05.20
jquery(연동)  (0) 2020.05.20

선택자

  선택자는 HTML 요소를 선택하여 가져온다.

  제이쿼리 선택자는 CSS선택자와 마찬기지로 선택한 요소의 디자인 속성을 적용할 때 사용할 수 있다.

  이때 HTML에 작성한 스타일은 사용자의 동작에 의해 스타일을 변경할 수 없기 때문에 HTML에서 작성한

  스타일(CSS)은 '정적이다'라고 표현한다.

  하지만 제이쿼리 선택자를 사용하면 '동적'으로 스타일을 적용할 수 있다.

  선택자를 좀 더 정확하고 깊이 있게 공부하려면 문서 객체 모델에 대해 알아 두는 것이 좋다.

 

문서객체 모델

  문서객체모델(DOM, Document Object Model)이란 HTML 문서 객체 구조를 말한다.

  HTML문서의 기본 객체 구존느 최상위 객체인 <html>이 있고 하위 객체로 <head>, <body>가 있다.

  <body>태그는 문단태그, 테이블태그, 폼태그 등을 포함할 수 있다.

  문서 객체 모델에서는 모든 태그를 객체라고 부르며, 태그에는 기능과 속성이 포함되어 있다.

  

  다음 HTML의 문서 객체 구조를 살펴 보자.

<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="UTF-8">
    <title>DOM</title>
  </head>
  <body>
    <h1>선호하는 음식</h1>
    <section id="food_1">
      <h2>한식</h2>
      <ul>
        <li>김치</li>
        <li>불고기</li>
      </ul>
    </section>
    <section id="food_2">
      <h2>양식</h2>
      <ul>
        <li>피자</li>
        <li>파스타</li>
      </ul>
    </section>
  </body>
</html>

  위 HTML의 문서 객체 구조를 그림으로 표현하면 트리구조가 된다. 이때 가장 상위에 위치하는 <html>은

  뿌리(root)라고 부르고, 뿌리로부터 가지처럼 뻗어나가는 모양의 요소를 노드(Node)라고 부른다.

  노드의 종류에는 요소노드(Element Node), 텍스트 노드(Text Node), 속성 노드(Attribute Node)가 있다.

 

선택자 사용하기

  선택자를 사용하기 위해서는 문서 객체를 불러와야 한다.

  다음은 선택자를 사용하는 방법이다.

방법1(잘못된 적용) 방법 2(정상 적용) 방법 3(정상 적용)
<head>

<script src=”js/jquery.js”></script>
<script>
  $(“#txt”).css(“color”,”red”);
</script>
</head>
<body>

  <p id=”txt”>내용</p>
</body>
<head>

<script src=”js/jquery.js”></script>
<script>
$(document).ready(function() {
$(“#txt”).css(“color”,”red);
});
</script>
</head>
<body>
<p id=”txt”>내용</p>
</body>
<head>

<script src=”js/jquery.js”></script>
<script>
$(function() {
$(“#txt”).css(“color”,”red”);
});
</script>
</head>
<body>

  <p id=”txt”>내용</p>
</body>

  다음은 제이쿼리 선택자로 스타일이나 속성을 적용하는 기본형이다.

  선택자는 $()에 문자형 데이터로 css선택자를 입력하면 된다.

1. 선택한 요소에 지정한 스타일을 적용.
$("CSS 선택자").css("스타일 속성명", "값");

2. 선택한 요소에 지정한 속성을 적용.
$("CSS 선택자").attr("속성명","값");

  다음은 제이쿼리의 아이디 선택자를 적용하여 글자 색상을 바꾸는 예제이다.

  <head>
    <meta charset="UTF-8">
    <title>선택자</title>
    <script src="js/jquery.js"></script>
    <script>
      $(function(){
        $("#title").css("color","red");
      });
    </script>
  </head>
  <body>
    <h1 id="title">제목</h1>
  </body>

기본 선택자

  <body>영역에 있는 문서 객체를 선택할 수 있는 선택자를 살펴 볼것이다.

  제이쿼리의 기본 선택자는 직접 선택자와 인접 관계 선택자로 나눌 수 있다.

구분 종류 사용법 설명
직접
선택자
전체 선택자 $(“*”) 모든 요소를 선택
아이디 선택자 $(“#아이디명”) id속성에 지정한 값을 가진 요소를 선택
클래스 선택자 $(“.클래스명”) class속성에 지정한 값을 가진 요소를 선택
요소 선택자 $(“요소명”) 지정한 요소명과 일치하는 요소들만 선택
그룹 선택자 $(“선택 1, 선택 2, 선택3,
선택 n”)
선택1, 선택2, 선택3, …선택n에 지정된 요소들을 한번에 선택
종속 선택자 $(“p.txt_1”)
$(“p#txt_1”)
<p> 요소 중 class갑싱 txt_1인 요소 또는 id값이 txt_1인 요소를 선택
인접 관계
선택자
부모 요소 선택자 $(“요소 선택”).parent() 선택한 요소의 부모 요소를 선택
상위 요소 선택자 $(“요소 선택”).parents() 선택한 요소의 상위 요소를 모두 선택
가장 가까운 상위
요소 선택자
$(“요소 선택”).closest(“div”) 선택한 요소의 상위 요소 중 가장 가까운 <div>만 선택
하위 요소 선택자 $(“요소 선택 하위 요소”) 선택한 요소에 지정한 하위 요소를 선택
자식 요소 선택자 $(“요소 선택>자식 요소”) 선택한 요소를 기준으로 자식 관계에 지정한 요소만 선택
자식 요소들 선택자 $(“요소 선택”).children() 선택한 요소의 모든 자식 요소를 선택
(이전) 요소
선택자
$(“요소 선택”).prev() 선택한 요소의 바로 이전 요소를 선택
(이전) 요소들
선택자
$(“요소 선택”).prevAll() 선택한 요소의 이전 요소 모두를 선택
지정 형(이전) 요소들
선택자
$(“요소 선택”).prevUntil
(“요소명”)
선택한 요소부터 지정한 요소의 이전 요소까지 모두 선택
동생(다음) 요소
선택자
$(“요소 선택”).next()
$(“요소 선택+다음 요소”)
선택한 요소의 다음 요소를 선택
동생(다음) 요소들
선택자
$(“요소 선택”).nextAll() 선택한 요소의 다음 요소 모두를 선택
지정 동생(다음)
요소들 선택자
$(“요소 선택”).nextUntil(“h2”) 선택한 요소부터 지정한 요소의 다음 요소까지 모두 선택
전체 형제 요소
선택자
$(“.box_1”).siblings() class 값이 box_1인 요소의 형제 요소 전체를 선택

 

직접 선택자

  직접 선택자는 주로 멀리 떨어진 요소를 직접 선택할 때 사용하는 선택자이다.

  직접 선택자의 종류로는 전체(*), 아이디(#), 클래스(.), 요소명, 그룹(,) 선택자가 있다.

 

전체 선택자

  전체(universal)요소를 선택할 때 사용한다. 즉, 이 선택자를 사용하면 현재 HTML의 모든 태그를 선택한다.

  전체 선택자의 기본형은 다음과 같다.

$("*")

  다음은 전체 선택자를 사용한 예제이다.

  <head>
    <meta charset="UTF-8">
    <title>선택자</title>
    <script src="js/jquery.js"></script>
    <script>
      $(function(){
        $("*").css("border","1px solid blue");
        //전체 요소 선택자로 두께가 1px인 파란색 실선을 생성한다
      });
    </script>
  </head>
  <body>
    <h1>제이쿼리</h1>
    <h2>선택자</h2>
    <h3>직접 선택자</h3>
  </body>

아이디 선택자

  아이디 선택자는 아이디 속성에 지정한 값을 포함하는 요소를 선택한다.

  아이디 선택자의 기본형은 다음과 같다.

$("#아이디명")

  다음은 아이디 선택자를 사용하기 위한 예제이다.

  <head>
    <meta charset="UTF-8">
    <title>선택자</title>
    <script src="js/jquery.js"></script>
    <script>
      $(function(){
        $("#tit").css("background-color","#ff0")
        .css("border", "2px solid #f00");
        // 체이닝 기법으로 선택한 요소의 css 메소드를 연속해서 2회 적용한다.
      });
    </script>
  </head>
  <body>
    <h1>제이쿼리</h1>
    <h2 id="tit">선택자</h2>
    <h3>직접 선택자</h3>
  </body>

  노란색 배경과 2px 두께의 빨간색 실선이 생성 된다.

  체이닝 기법이란?

      선택한 요소에는 메소드를 연속해서 사용할 수 있는데, 이를 마치 체인이 엮인 모양과 같다고 하여 '체이닝 기법'

      이라 한다. 제이쿼리에서는 한 객체에 다양한 메소드를 줄줄이 이어서 사용할 수 있다.

      메소드 사용이 완료 되면 문장 마지막에는 세미콜론을 작성하여 마무리한다.

$(요소선택).css(속성1, 값1).css(속성2, 값2).css(속성3, 값3);

 

클래스 선택자

  클래스 속성에 지정한 값을 포함하는 요소를 선택한다.

  기본형은 다음과 같다.

$("클래스명")

 

  다음은 문단 태그 영역에 <h2> 태그의 tit이라는 class값을 지정하는 예제이다.

<script>
      $(function(){
        $(".tit").css("background-color","#0ff")
        .css("border", "2px dashed #f00");
      });
</script>
</head>
<body>
    <h1>제이쿼리</h1>
    <h2 id="tit">선택자</h2>
    <h3>직접 선택자</h3>
</body>

 

요소명 선택자

  지정한 요소명(Tag Name)과 일치하는 요소를 모두 선택한다.

  요소명 선택자의 기본형은 다음과 같다.

$("요소명")

  다음은 문단 태그 영역에 요소명 선택자를 적용한 예제이다.

<script>
      $(function(){
        $("h2").css("background-color","#0ff")
        .css("border", "2px dashed #f00");
      });
</script>
</head>
<body>
    <h1>제이쿼리</h1>
    <h2>선택자</h2>
    <h3>직접 선택자</h3>
</body>

그룹 선택자

  그룹 선택자는 한번에 여러개의 요소를 선택할 때 사용한다.

  그룹 선택자의 기본형은 다음과 같다.

$("요소 선택1, 요소 선택2, 요소 선택3, ...요소 선택n");

  다음은 문단 태그 영역에 그룹선택자로 한번에 여러개의 요소를 선택하여 스타일(CSS)을 적용하는 예제이다.

    <script>
      $(function(){
        $("#tit3, h1").css("background-color","#0ff")
        .css("border", "2px dashed #f00");
      });
    </script>
  </head>
  <body>
    <h1>제이쿼리</h1>
    <h2>선택자</h2>
    <h3 id="tit3">직접 선택자</h3>
    <h3>인접 선택자</h3>
  </body>

 

종속 선택자

  종속 선택자는 선택한 요소의 id 또는 class 값이 일치하는 요소를 선택할 때 사용한다.

  종속 선택자의 기본형은 다음과 같다.

$("요소명#id 값")
$("요소명.class 값")

  다음은 종속 선택자로 요소명과 class값이 일치하는 요소를 선택하여 스타일(CSS)을 적용하는 예제이다.

    <script>
      $(function(){
        $("h1.tit").css("background-color","#0ff")
        .css("border", "2px dashed #f00");
      });
    </script>
  </head>
  <body>
    <h1 class="tit">제이쿼리</h1>
    <h2>선택자</h2>
    <h3 id="tit">직접 선택자</h3>
  </body>

인접 관계 선택자

  직접 선택자로 요소를 먼저 선택하고 그 다음 선택한 요소와 가까이에 있는(이전과 다음요소)요소를 선택할 때

  사용한다. 인접관계 선택자를 자유자재로 사용하려면 문서 객체 구조와 관계를 잘 이해하고 있어야 한다.

문서 객체 구조와 관계

<body>
  <div id="wrap">	// a
    <div id="inner_wrap"> // b
      <h1>제목</h1>	//d
      <h2>제목</h2>	//e
      <p>내용1</p>	//f
      <p>내용2</p>
      <p>내용3</p>	//<h1>부터 여기까지 c
    </div>
  </div>
</body>
      

  a는 c의 상위(closet)요소이고 c는 a의 하위 요소이다.

  b는 c의 부모(parent) 요소이고 c는 b의 자식(children)요소이다.

  d는 e의 형(prev)요소 이며 f는 e의 동생(next)요소이다.

1. $("h2").next().css("color", "green");
2. $("h2").parent().css("border", "1px solid #f00");

  1은 동생 요소 선택자인 next()함수를 사용하여 <h2>의 동생요소인 <p>내용1</p>를 선택한 다음

  글자색을 초록색으로 적용한다. 2는 부모 요소 선택자인 parent() 함수를 사용하여 <h2>의 부모 요소인

  <div id="inner_wrap">을 선택한 다음 1px 두께의 빨간색 실선을 생성한다.

 

부모 요소 선택자

  부모 요소 선택자는 선택한 요소를 감싸고 있는 부모 요소를 선택한다.

  기본형은 다음과 같다.

$("요소 선택").parent();

  다음은 문단 태그 영역의 부모 요소 선택자를 적용한 예제이다.

  <li id="list_1">의 부모요소는 안쪽에 있는 <ul>태그이다.

    <script>
      $(function(){
        $("#list_1").parent() //<ul> <li id="list_1">제이쿼리</li>
        .css("border", "2px dashed #f00");
      });
    </script>
  </head>
    <body>
      <h1>인접 관계 선택자</h1>
      <ul id="wrap">
        <li>리스트1
          <ul>
            <li id="list_1">리스트1-1</li>  <!-- <ul>의 자식인 <li>태그 -->
            <li>리스트1-2</li>
          </ul>
        </li>
        <li>리스트2</li>
        <li>리스트3</li>
      </ul>
    </body>

 

하위 요소 선택자

  하위 요소 선택자는 기준 요소로 선택한 하위 요소만 선택한다.

  기본형은 다음과 같다.

$("기준 요소 선택 1 요소 선택2")
ex) $("#wrap h1")	//id="wrap"인 요소가 기준 요소가 된다.

  다음은 하위 요소 선택자를 적용한 예제이다.

  id값이 "wrap"인 요소가 감싸고 있는 <h1>을 모두 선택한다.

    <script>
      $(function(){
        $("#wrap h1")
        .css({
          "background-color":"yellow",
          "border":"2px dashed #f00"
        });
      });
      </script>
  </head>
  <body>
    <div id="wrap">
      <h1>인접 관계 선택자</h1>
      <p>내용1</p>
      <section>
        <h1>하위 요소 선택자</h1>
        <p>내용2</p>
      </section>
    </div>
  </body>

 

자식 요소 선택자

  자식 요소 선택자는 선택된 요소를 기준으로 지정한 자식 요소만 선택한다.

  기본형은 다음과 같다.

1. $("요소 선택>자식 요소 선택")
2. $("요소 선택").children("자식 요소 선택")
3. $("요소 선택").children()

  1,2 는 선택한 요소를 기준으로 지정한 자식 요소만 선택한다.

  3은 선택한 요소를 기준으로 모든 자식 요소를 선택한다.

 

  다음은 문단 태그 영역에 자식 요소 선택자를 적용한 예제이다.

 

    <script>
      $(function(){
        $("#wrap > h1").css("border", "2px dashed #f00");
        //1. <div id="wrap"> <h1>인접 관계 선택자</h1>
        $("#wrap > section").children()
        //2. <section> <h1>자식 요소 선택자</h1> <p>내용2</p> </section>
        .css({
          "background-color":"yellow",
          "border":"2px solid #f00"
        });
      });
      </script>
  </head>
  <body>
    <div id="wrap">
      <h1>인접 관계 선택자</h1>
      <p>내용1</p>
      <section>
        <h1>자식 요소 선택자</h1>
        <p>내용2</p>
      </section>
    </div>
  </body>

  1번은 인자값을 사용해 css속성과 값을 전달하는 방식이다.

     $("요소 선택").css("속성명1","값1").css("속성명2","값2");

  2번은 객체를 사용해 css속성과 값을 전달하는 방식이다.

     $("요소 선택").css({"속성명1": "값1", "속성명2":"값2"...."속성명n":"값n"});

 

형(이전)/동생(다음) 요소 선택자

  형 요소 선택자는 선택한 요소를 기준으로 바로 이전 형제 요소만 선택한다.

  그리고 동생 요소 선택자는 선택한 요소를 기준으로 바로 다음 형제 요소만 선택한다.

1. $("요소 선택").prev()
2. $("요소 선택").next()
3. $("요소 선택1 + 요소 선택2")

  1. 선택한 요소를 기준으로 이전에 오는 형제 요소만 선택.

  2. 선택한 요소를 기준으로 다음에 오는 형제 요소만 선택.

  3. 선택한 요소를(요소 선택1) 기준으로 다음에 오는 선택한 요소(요소 선택2)만 선택.

 

  다음은 문단 태그 영역에 형 요소 선택자와 동생 요소 선택자를 적용한 예제이다.

  class값이 txt인 요소를 기준으로 이전 형제요소(<p>내용1</p>)와 다음 형제요소(<p>내용3</p>), 다음다음 

  형제 요소(<p>내용4</p>)를 선택한다.

    <script>
      $(function(){
        var style_1={
          "background-color":"#0ff",
          "border":"2px solid #f00"
        }
        var style_2={
          "background-color":"#ff0",
          "border":"2px dashed #f00"
        }

        $(".txt").prev()
        .css(style_1);
        //<p>내용1</p>
        //<p class="txt">내용2</p>

        $(".txt+p").css(style_2);
        //<p class="txt">내용2</p>
        //<p>내용3</p>

        $(".txt").next(),next()
        .css(style_2);
        //<p class="txt">내용2</p>
        //<p>내용3</p>
        //<p>내용4</p>
      });
      </script>
  </head>
  <body>
    <div id="wrap">
      <h1>인접 관계 선택자</h1>
      <p>내용1</p>
      <p class="txt">내용2</p>
      <p>내용3</p>
      <p>내용4</p>
    </div>
  </body>

전체 형(이전)/동생(다음)요소 선택자

  전체 형 요소 선택자는 선택한 요소를 기준으로 이전에 오는 전체 형제 요소를 선택한다.

  그리고 전체 동생 요소 선택자는 선택한 요소를 기준으로 다음에 오는 전체 형제 요소를 선택한다.

$("요소 선택").prevAll()
$("요소 선택").nextAll()

  다음은 문단 태그 영역에 전체 형 요소 선택자와 전체 동생 요소 선택자를 적용한 예제이다.

    <script>
      $(function(){
        var style_1={
          "background-color":"#0ff",
          "border":"2px solid #f00"
        }
        var style_2={
          "background-color":"#ff0",
          "border":"2px dashed #f00"
        }

        $(".txt").prevALl()
        .css(style_1);
        //<h1>인접 관계 선택자</h1>
        //<p>내용1</p>
        //<p class="txt">내용2</p>

        $(".txt+p").nextAll()
        .css(style_2);
        //<p class="txt">내용2</p>
        //<p>내용3</p>
        //<p>내용4</p>
      });
      </script>
  </head>
  <body>
    <div id="wrap">
      <h1>인접 관계 선택자</h1>
      <p>내용1</p>
      <p class="txt">내용2</p>
      <p>내용3</p>
      <p>내용4</p>
    </div>
  </body>

전체 형제 요소 선택자

  전체 형제 요소 선택자는 선택하 ㄴ요소의 모든 형제 요소를 선택한다.

  기본형은 다음과 같다.

$("요소 선택").siblings();

  다음은 문단 태그 영역에 전체 형제 요소 선택자를 적용한 예제이다.

    <script>
      $(function(){
        var style_1={
          "background-color":"#0ff",
          "border":"2px solid #f00"
        }

        $(".txt").siblings()
        .css(style_1);
        //<h1>인접 관계 선택자</h1>
        //<p>내용1</p>
        //<p class="txt">내용2</p>
        //<p>내용3</p>
        //<p>내용4</p>
      });
      </script>
  </head>
  <body>
    <div id="wrap">
      <h1>인접 관계 선택자</h1>
      <p>내용1</p>
      <p class="txt">내용2</p>
      <p>내용3</p>
      <p>내용4</p>
    </div>
  </body>

범위 제한 전체 형/동생 요소 선택자

  범위 제한 전체 형/동생 요소 선택자는 선택한 요소를 기준으로 형제 요소 중 지정한 범위 내의 전체 형 요소 또는

  전체 동생 요소를 선택한다.

  기본형은 다음과 같다.

1. $("요소 선택").prevUntil("범위 제한 요소 선택")
2. $("요소 선택").nextUntil("범위 제한 요소 선택")

  1. 선택한 요소를 기준으로 범위 제한 요소까지 전체 형 요소를 선택한다.

  2. 선택한 요소를 기준으로 범위 제한 요소까지 전체 동생 요소를 선택한다.

 

  다음은 범위 제한 전체 형/동생 선택자를 적용한 예제이다.

  class값이 txt3인 요소를 기준으로 전체 형/동생 요소를 선택한다.

    <script>
      $(function(){
        var style_1={
          "background-color":"#0ff",
          "border":"2px solid #f00"
        }

       $(".txt3").prevUntil(".title")
       .css(style_1);

       $(".txt3").nextUntil(".txt6")
       .css(style_1);
        //<h1 class="title">선택자</h1>
        //<p>내용1</p>
        //<p>내용2</p>
        //<p class="txt3">내용3</p>
        //<p>내용4</p>
        //<p>내용5</p>
        //<p class="txt6">내용6</p>
      });
      </script>
  </head>
  <body>
    <div id="wrap">
      <h1>인접 관계 선택자</h1>
      <p>내용1</p>
      <p>내용2</p>
      <p class="txt3">내용3</p>
      <p>내용4</p>
      <p>내용5</p>
      <p class="txt6">내용6</p>
    </div>
  </body>

상위 요소 선택자

  상위 요소 선택자는 선택한 요소를 기준으로 모든 상위 요소를 선택하거나 상위 요소 중 선택하고자 하는 요소만

  선택할 때 사용한다.

1. $("요소 선택").parents()
2. $("요소 선택").parents("요소 선택")

  1. 선택한 요소를 기준으로 상위 요소를 모두 선택한다.

  2. 선택한 요소를 기준으로 상위 요소 중 선택한 요소만 선택한다.

 

  다음은 문단 태그 영역에 상위 요소 선택자를 적용한 예제이다.

    <script>
      $(function(){
       $(".txt1").parents() //<p class="txt1">내용</p>의 전체 상위
                            //요소를 선택.
       .css({
         "border":"2px dashed #00f"
       });

       $(".txt2").parents("div") //<p class="txt2">내용</p>의 전체
                                 //상위 요소 중 <div>만 선택
       .css({
         "border":"2px solid #f00"
       });
      });
      </script>
  </head>
  <body>
    <h1 class="title">선택자</h1>
    <section>
      <div>
        <p class="txt1">내용</p>    //전체 상위 요소 선택
      </div>
    </section>
    <section>
      <div>
        <p class="txt2">내용</p>.		//상위 요소 중 <div>만 선택
      </div>
    </section>  
  </body>

가장 가까운 상위 요소 선택자

  가장 가까운 상위 요소 선택자는 선택한 요소를 기준으로 가장 가까운 상위 요소만 선택할 때 사용된다.

  기본형은 다음과 같다.

$("요소 선택").closest("요소 선택")

  다음은 가장 가까운 상위 요소 선택자를 적용한 예제이다.

    <script>
      $(function(){
       $(".txt1").closest("div")
       .css({
         "border":"2px solid #f00"
       });
       //<div>
       // <div>
       //   <p class="txt1">내용</p>
       // </div>
       //</div>
      </script>
  </head>
  <body>
    <h1 class="title">선택자</h1>
    <div>
      <div>
        <p class="txt1">내용</p>
      </div>
    </div> 
  </body>

 

(참고 : do it 자바스크립트+제이쿼리 입문)

'Front > JQuery' 카테고리의 다른 글

JQuery(이벤트 등록 메소드)  (0) 2020.05.22
JQuery(객체조작)  (0) 2020.05.20
JQuery(속성 탐색 선택자)  (0) 2020.05.20
JQuery(위치탐색선택자)  (0) 2020.05.20
jquery(연동)  (0) 2020.05.20

제이쿼리란?

  제이쿼리는 자바스크립트를 이용해 만든 라이브러리 언어이다.

  제이쿼리는 자바스크립트에서 사용할 때 불편했던 몇가지 점들을 간편하게 사용할 수 있도록 개선했다.

  

  호환성 문제 해결

    자바스크립트의 문서 객체 모델(DOM)과 이벤트 객체(Event Object)는 호환성(크로스 브라우징)이 떨어진다는

    단점이 있다. 예를 들어 인접 요소 선택자 중 다음 요소 선택자(nextSibling)는 IE8 이하의 브라우저에서 문서 객체를

    선택했을 때와 다른 브라우저에서 문서 객체를 선택햇을때의 결과가 다르다.

    하지만 이런 문서객체 선택자의 호환성 문제가 제이쿼리에서는 모두 해결되었다.

  

  쉽고 편리한 애니메이션 효과 기능 구현

    제이쿼리는 애니메이션과 다양한 효과(Effect)를 지원하는 메소드를 제공하기 때문에 개발 시간을 많이 단축할 수

    있다.

 

제이쿼리 라이브러리 연동

  제이쿼리 연동방법에는 다운로드 방식과 네트워크 전송방식 두가지가 있다.

  다운로드 방식은 파일을 직접 내려받아 HTML에 불러오는 방식이다.

  네트워크 전송방식은 온라인에서 제공하는 파일을 네트워크를 통해 HTML에 불러오는 방식이다.

  다운로드 방식은 네트워크 상태아 상관없이 언제든 개발할 수 있다는 장점이 있지만 컴퓨터에 파일을 내려받아야

  한다. 간단히 테스트 할 목적이라면 네트워크 전송방식이 더 편하다.

 

다운로드 방식으로 연동

  https://cdnjs.com/libraries/jquery 

 

jquery - cdnjs.com - The best FOSS CDN for web related libraries to speed up your websites!

jquery - JavaScript library for DOM operations - cdnjs.com - The best FOSS CDN for web related libraries to speed up your websites!

cdnjs.com

  위 사이트에서 jquery를 검색하고 라이브러리를 선택한다.

  그런 다음 버전 선택 상자에서 1.12.4를 선택.

  만약 IE8이하 브라우저까지 호환성을 염두에 둔다면 1.12.X이하 버전의 라이브러리 파일을 사용해야 한다.

  

  선택한 라이브러리 파일 목록에 [jquery.js], [jquery.min.js]가 있다. 해당 목록에 마우스 포인터를 올리면 [copy]버튼이

  나타나고 버튼을 누르면 해당하는 라이브러리 파일의 URL주소가 복사된다.

종류 설명
jquery.js 소스에 들여쓰기, 줄 바꿈, 주석까지 정리된 비압축 파일로, 제이쿼리 자체를 개발할 때 유용하다.
jquery.min.js 소스에 들여쓰기, 줄 바꿈, 줙이 무시된 압축파일로, 소스가 압축되어 있어 제이쿼리 자체를 개발하는 용도로는 적합하지 않다. 하지만 용량이 작아 로딩속도가 빠르다.

  복사한 URL로 이동한다. 그다음 Ctrl + S를 눌러 페이지를 저장한다.

  이때 js파일은 HTML파일이 있는 폴더에 'js'라는 이름으로 폴더를 만들어 저장하면 된다.

 

  HTML의<head> 영역에 <script>태그를 삽입하여 제이쿼리 라이브러리 파일을 불러온다.

<head>
  <meta charset="UTF-8">
  <title>제이쿼리 연동</title>
  <script src="js/jquery.js"></script>
</head>

  제이쿼리는 최신버전으로 자주 업그레이드 되는데 이전 버전에서 자주 사용했던 기능(메소드)이 삭제되어 사용할 수 

  없는 경우가 종종있다. 이런경우 이전버전의 기능을 사용하려면 'Migrate plugin'을 설치하면 된다.

 

네트워크 방식으로 연동

  cdnjs사이트에 들어가서 제이쿼리(1.12.4) 라이브러리 파일의 URL을 복사한다.

  <script> 태그 src속성에 복사한 URL을 붙여 넣는다.

<head>
  <meta charset="UTF-8">
  <title>제이쿼리 연동</title>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.js"></script>
</head>

 

(참고 : do it 자바스크립트+제이쿼리 입문)

'Front > JQuery' 카테고리의 다른 글

JQuery(이벤트 등록 메소드)  (0) 2020.05.22
JQuery(객체조작)  (0) 2020.05.20
JQuery(속성 탐색 선택자)  (0) 2020.05.20
JQuery(위치탐색선택자)  (0) 2020.05.20
jquery(선택자)  (0) 2020.05.20

객체(Object)

  객체는 기능과 속성을 갖고 있다.

  예를 들어 TV에는 켜다, 끄다, 음소거, 볼륨 높낮이 조절 등이 있다.

  이렇듯 TV라는 객체에는 다양한 기능이 있다.

  객체 안에는 메소드(Method), 속성(Property)이라는 것이 있고, 메소드는 기능인 켜기, 끄기, 음소거, 볼륨 높낮이

  조절이고, 속성은 너비, 높이, 색상, 무게이다.

 

자바스크립트에서 객체의 메소드와 속성을 사용하는 기본형은 다음과 같다.

객체.메소드();	//객체의 메소드를 실행한다.

객체.속성; //객체의 속성값을 가져온다

또는 객체.속성=값; //객체의 속성값을 바꾼다.

객체의 종류

  내장객체

    내장객체는 자바스크립트 엔진에 내장되어 있어 필요한 경우에 생성해서 사용할 수 있다.

    내장객체로는 문자(String), 날짜(Date), 배열(Array), 수학(Math) 객체 등이 있다.

    가령, 오늘 날짜를 알고 싶다면 Date 객체를 생성하여 오늘 날짜를 알려준느 메소드 getDate()를 사용하면 된다.

  브라우저 객체 모델

    브라우저 객체모델(BOM)은 브라우저에 계층 구조로 내장되어 있는 객체를 말한다.

    브라우저 객체로는 window, screen, location, history, navigator 객체 등이 있다.

    브라우저(window)는 document와 loaction 객체의 상위 객체이다.

    예를 들어 자바스크립트를 이용해 현재 열려있는 사이트에서 다른사이트로 이동하려면 location 객체에

    참조주소(href) 속성을 바꾸면 된다. 다음과 같이 실행하면 location의 참조 주소(href)의 속성이 바뀌어

    새 주소 사이트로 이동한다.

window.location.href="사이트 URL"

  문서 객체 모델

    문서객체모델(DOM)은 HTML 문서 구조를 말한다.

    HTML 문서의 기본 구조는 최상위 객체로 <html>이 있으며, 그 하위 객체로는 <head>와 <body>가 있다.

    예를 들어 자바스크립트를 이용해 이미지의 src 속성을 바꾸고 싶다면 지정된 <img>를 선택해 src속성을

    바꿔야 한다.

    이때, 지정 요소를 제대로 선택해서 가져오려면 문서 객체의 구조를 잘 이해하고 있어야 한다.

    문서객체모델에서는 HTML의 모든 요소들을 문서 객체로 선택하여 자유롭게 속성을 바꿀 수 있고,

    선택한 문서 객체에 원하는 스타일(css)을 적용할 수도 있다.

 

    하지만 자바스크립트의 문서 객체모델은 IE 8이하 버전에서는 호환성이 떨어지기 때문에 사용하기 힘들다는 

    단점이 있다.

    그래서 이러한 점을 극복하기 위해 JQuery 문서 객체모델을 많이 사용한다.

 

내장객체

  다음은 내장객체를 생성하는 기본형이다.

  객체를 생성할 때는 new라는 키워드와 생성함수를 사용한다.

참조변수(인스턴스 이름) = new 생성함수()

 

  다음 예제에서는 new 키워드와 기본객체 생성함수 Object()를 이용해 객체를 생성한다.

  생성된 객체는 변수 tv가 참조하고 있으며, 이를 이용해 객체의 속성과 메소드를 생성한다.

  변수를 이용해 참조를 한다는 말은 생성된 객체를 이용할 때 참조 변수를 사용하겠다는 의미이다.

 

  <script>
      var tv = new Object();
      tv.color = "white";
      tv.price = 300000;
      tv.info = function(){
        document.write("tv 색상:"+this.color, "<br>");
        document.write("tv 가격:"+this.price, "<br>");
        <!-- 위에서 this는 메소드의 객체(tv)를 가리킨다.-->
      }

      var car={
        color: "black",
        price: 5000000,
        info:function(){
          document.write("car 색상:"+this.color, "<br>");
          document.write("car 가격:"+this.price, "<br>");
        }
      };

      document.write("<h1>tv 객체 메소드 호출</h1>");
      tv.info();
      document.write("<h1>car 객체 메소드 호출</h1>");
      car.info();
    </script>

날짜 정보 객체

  날짜나 시간 관련 정보를 제공받고 싶을 때 사용한다.

  현재 날짜의 정보를 제공하는 Date 객체는 다음과 같이 생성한다.

참조변수=new Date();

var t = new Date();

  특정 날짜를 제공 받아야 할때는 다음과 같이 생성한다.

참조변수=new Date("연/월/일);

var t=new Date("2020/05/19);

참조변수=new Date(연, 월-1, 일);

var t=new Date(2020,04,19);

  다음은 현재 날짜 객체와 특정 날짜 객체를 이용하여 2002년 월드컵 날짜와 관련된 정보를 출력하는 예제이다.

<script>
    var today = new Date();
    var nowMonth=today.getMonth(),
    nowDate = today.getDate(),
    nowDay = today.getDay();

    document.write("<h1>오늘 날짜 정보</h1>");
    document.write("현재 월:"+nowMonth, "<br>");
    document.write("현재 일:"+nowDate, "<br>");
    document.write("현재 요일:"+nowDay, "<br>");

    var worldcup=new Date(2002,04,31);
    var theMonth=worldcup.getMonth(),
    theDate=worldcup.getDate(),
    theDay=worldcup.getDay();

    document.write("<h1>월드컵 날짜 정보</h1>");
    document.write("2002월드컵 몇월:"+theMonth, "<br>");
    document.write("2002월드컵 몇일:"+theDate, "<br>");
    document.write("2002월드컵 무슨요일:"+theDay, "<br>");
</script>

작성한 날짜는 5월 19일 이지만 getMonth는 -1을 하기 때문에 4월로 나오는것을 확인 할 수있다.

 

  현재 날짜부터 특정 날짜까지 몇일이 남았는지 구하는 형식은 다음과 같다.

남은일수(밀리초) = 특정 날짜 객체 - 현재 날짜 객체
<script>
      var today=new Date();
      var nowYear=today.getFullYear();

      var theDate=new Date(nowYear, 11, 31);
      <!-- 올해 연말에 대한 날짜 정보 객체.
           12월까지 있지만 -1을 해서 적어줘야 하므로
           11로 작성.-->
      var diffDate=theDate.getTime() - today.getTime();
      <!-- 남은날 = 특정날짜 - 현재날짜(밀리초단위)-->

      var result = Math.ceil(diffDate/(60 * 1000 * 60 * 24));
      document.write("연말 D-day:"+result+"일 남았습니다");
</script>

수학객체

  다음은 수학 객체의 메소드와 참조할 수 있는 상수에 대해 정리한 표이다.

  다음은 수학 객체에 포함되어 있는 수학 메소드에 숫자를입력하여 결과값을 반환 받는 예제이다.

<script>
      var num=2.1234;

      var maxNum=Math.max(10, 5, 8, 30),  //30 최대값
      var minNum=Math.min(10, 5, 8, 30),  //5  최소값
      var roundNum=Math.round(num),   //2 소수점 첫째자리 반올림
      var floorNum=Math.floor(num),   //2 소수점 첫째자리 내림
      var ceilNum = Math.ceil(num),   //3 소수점 첫째자리 올림
      var rndNum = Math.random(),   //0~1 0과 1사이의 난수 발생
      piNum = Math.PI;    //3.14  원주율 상수를 반환

      document.write(maxNum, "<br>");
      document.write(minNum, "<br>");
      document.write(roundNum, "<br>");
      document.write(floorNum, "<br>");
      document.write(ceilNum, "<br>");
      document.write(rndNum, "<br>");
      document.write(piNum, "<br>");
</script>

 random()메소드를 이용하여 지정한 숫자 구간에서 난수가 발생할 수 있도록 하려면?

다음와 같이 하면 0부터 10까지 난수를 반환한다.

Math.random()*10;

만일 Math.random()을 이용하여 0부터 10까지 정수로만 난수를 반환하려면 다음과 같이 Math.floor를 이용해야 한다.

floor()메소드는 값을 내리기때문에 0이 아닌 11을 사용한다.

Math.floor(Math.random()*11);

 

Math.random()를 이용하여 120~150 사이의 난수를 정수로만 발생하게 하려면 다음과 같이 한다.

Math.floor(Math.random()*31);		<!-- 0부터 30까지 정수로 난수를 발생한다 -->
Math.floor(Math.random()*31)+120;	<!-- 120부터 150까지 정수로 난수를 발생한다 -->

  즉, 난수를 발생하여 자신이 원하는 구간 사이에서 정수가 발생하게 하려면 다음과 같은 공식을 적용해야 한다.

Math.floor(Math.random()*(최대값-최소값+1))+최소값;

  다음은 웹사이트 방문 시 나타나는 창에 방문자가 가위, 바위, 보를 적어 컴퓨터가 내려는 가위, 바위, 보를 추측해

  맞추는 예제이다. 여기에서도 난수를 사용한다.

<script>
      document.write("<h1>컴퓨터 가위, 바위, 보 맞추기</h1>");

      var game = prompt("가위, 바위, 보 중 선택하세요", "가위");
      var gameNum;

      switch(game){
        case "가위";
          gameNum = 1;
          break;
        case "바위";
          gameNum = 2;
          break;
        case "보";
          gameNum = 3;
          break;
        default: alert("잘못 작성했습니다.");
        location.reload();
      }

      var com = Math.ceil(Math.random()*3); <!-- 1~3에서 난수가 발생한다.-->

      document.write("<img src=\"images/math_img_"+com+".jpg\">");

      if(gameNum == com){ <!-- gameNum과 com이 일치하는지 검사한다 -->
        document.write("<img src=\"images/game_1.jpg\">");
      }else{
        document.write("<img src=\"images/game_2.jpg\">");
      }
</script>

 

 

배열 객체

  여러개의 데이터를 하나의 저장수에 저장하려면 배열객체(Array Object)를 생성하면 된다.

  배열 객체를 생성하는 기본형은 다음과 같다.

var 참조변수=new Array();
참조변수[0]=값1; 참조변수[1]=값2; 참조변수[2]=값3; .... 참조변수[n-1]=값n;
var 참조변수=new Array(값1, 값2, 값3, ...값n);
var 참조변수=[값1, 값2, 값3, ....값n];

  배열 객체를 생성하는 방법은 다음과 같이 세가지이며, 이 중에서 선호하는 방식을 사용하면 된다.

1

var d=new Array();
d[0]=30;
d[1]="따르릉";
d[2]=true;
2

var d=new Array(30, "따르릉", true);
3

var=d=[30, "따르릉", true];

 

배열 객체에 저장된 데이터 불러오기

  배열객체에 저장된 데이터를 불러올 때는 다음과 같은 기본형을 사용한다.

참조변수[인덱스 번호];

  다음은 배열 객체에 저장된 값들을 모두 출력하는 예제이다.

  3개의 실행문은 모두 같은 결과를 출력한다.

<script>
	var arr = [30, "따르릉", true];
	
	document.write("<h3>배열값 가져오기-1</h3>");
	document.write(arr[0],"<br>");
	document.write(arr[1],"<br>");
	document.write(arr[2],"<br>");
	
	document.write("<h3>배열값 가졍괴-2</h3>");
	for(var i=0; i<arr.length; i++){
		document.write(arr[i], "<br>");
	}
	
	document.write("<h3>배열값 가져오기-3</h3>");
	for(i in arr){
		document.write(arr[i], "<br>");
	}
</script>

  다음은 배열 객체에서 사용할 수 있는 메소드와 속성이다.

  다음은 배열 객체 메소드인 join(), concat(), slice(), sort(), reverse()를 사용한 예제이다.

<script>
	var arr_1=["사당", "교대", "방배", "강남"];
	var arr_2=["신사", "압구정", "옥수"];
	
	var result=arr_1.join("-");
	console.log(result);
	
	result=arr_1.concat(arr_2);
	console.log(result);
	
	result=arr_1.slice(1,3);
	console.log(result);
	
	arr_1.sort();
	console.log(arr_1);
	
	arr_2.reverse();
	console.log(arr_2);
</script>

  다음은 배열 객체 메소드인 splice(), pop(), push(), shift(), unshift()를 사용한 예제이다.

<script>
	var greenArr=["교대", "방배", "강남"];
	var yellowArr=["미금", "정자", "수서"];
	
	greenArr.splice(2, 1, "서초", "역삼"); <!-- 2번 인덱스부터 1개의 데이터를 삭제한다. 그런다음 "서초", "역삼"을 삽입한다. -->
	console.log(greenArr);
	
	var data1 = yellowArr.pop(); <!-- yellowArr 배열 마지막 인덱스의 데이터를 data 1에 저장-->
	var data2 = yellowArr.shift(); <!-- yellowArr 배열 가장 앞쪽 인덱스의 데이터를 data2에 저장한다 -->
	
	yellowArr.push(data2);<!--data2에 저장된 데이터를 yellowArr 배열의 마지막 인덱스에 밀어 넣는다-->
	console.log(yellowArr);
	
	yellowArr.unshift(data1);<!--data1에 저장된 데이터를 yellowArr 배열의 가장 앞쪽 인덱스에 밀어 넣는다-->
	console.log(yellowArr);	
</script>

문자열 객체

  문자열 객체는 문자형 데이터를 객체로 취급하는 것으로, 자바스크립트에서 가장 많이 사용한다.

 

문자열 객체 생성하기

  문자열 객체를 생성하는 기본형은 다음과 같이 new 키워드와 String()메소드를 사용한다.

var 참조변수=new String(문자형 데이터)

var t=new String("hello javascript"); <!-- 문자열 객체 생성-->

  문자열 객체는 다음과 같이 참조 변수에 문자형 데이터만 입력해도 객체가 생성된다.

var 참조변수=문자형데이터

var t="hello javascript"; <!-- 문자열 객체 생성-->

  문자열 객체는 문자와 관련된 메소드와 속성을 제공하며, 이를 사용해 문자에 대한 다양한 정보를 얻을 수 있다.

문자열 객체의 메소드 및 속성

종류

설명

charAt(index)

문자열에서 인덱스 번호에 해당하는 문자를 반환한다.

) var str=”web he she”; str.charAt(2); <- “b”를 반환

indexOf(“찾을 문자”)

문자열에서 왼쪽부터 찾을 문자와 일치하는 문자를 찾아 제일 먼저 일치하는 문자의 인덱스 번호를 반환. 만일 찾는 문자가 없으면 -1을 반환.

) var str=”web he she he”; str.indexOf(“he”); <- 4를 반환

lastIndexOf(“찾을 문자”)

문자열에서 오른쪽부터 찾을 문자와 일치하는 문자를 찾아 제일 먼저 일치하는 문자의 인덱스 번호를 반환. 만일 찾는 문자가 없으면 -1을 반환.

) var str=”web he she he”; str.lastIndexOf(“he”) <- 11을 반환

match(“찾을 문자”)

문자열에서 왼쪽부터 찾을 문자와 일치하는 문자를 찾아 제일 먼저 찾은 문자를 반환한다. 만일 찾는 문자가 없으면 null을 반환.

) var str=”web he she he”; str.match(“boy”); <-null을 반환

replace(“바꿀 문자”, “새 문자”)

문자열에서 왼쪽부터 바꿀 문자와 일치하는 문자를 찾아 제일 먼저 찾은 문자를 새 문자로 치환한다.

) var str=”web he she”; str.replace(“web”,”html”); <- “html he she”를 반환

search(“찾을 문자”)

문자열에서 왼쪽부터 찾을 문자와 일치하는 문자를 찾아 제일 먼저 일치하는 인덱스 번호를 반환.

) var str=”web he she”; str.search(“he”); <- 4를 반환

Slice(a, b)

a개의 문자를 자르고 b번째 이후에 문자를 자른 후 남은 문자를 반환

) var str=”hello javascript” str.slice(3, 7); <- “lo j”를 반환

str.slice(3, 7); 은 문자열에서 3글자 “hel”까지 자르고 7번째 이후 글자인 “j”이이부터 “avascript”를 자른후 나머지 “lo j”를 반환

) var str=”hello javascript” str.slice(3, -3); <-“llo javascr”를 반환

여기에서 -1은 뒤에서부터 첫번째 글자를 가리킨다.

substring(a, b)

a 인덱스부터 b 인덱스 이전 구간의 문자를 반환.

) var str=”hello javascript” str.substring(3, 7); <- “lo j”를 반환

) var str=”hello javascript” str.substring(3, -3); <- “hel”을 반환.

여기에서 -3은 인덱스 0을 가리킨다.

그러므로 인덱스 0부터 인덱스 3 이전 구간의 문자를 반환

Substr(a, 문자개수)

문자열에 a 인덱스부터 지정한 문자 개수만큼 문자열을 반환.

) var str=”hello javascript” str.substring(3,2); <- “lo”를 반환

str.str(3, 2);3 문자열에서 인덱스 3“l”부터 2글자를 가져와서 “lo”를 반환

Split(“문자”)

지정한 문자를 기준으로 문자 데이터를 나누어 배열에 저장하여 반환

) var str=”webkmobilek2002”;

(index)

var arr=str.split(“k”); <- arr[0]= “web”arr[1]=”mobile” arr[2]=”2002”

toLowerCase()

문자열에서 영문 대문자를 모두 소문자로 바꾼다.

) var str=”ABC”; str.toLowerCase(); <- “abc”를 반환

toUpperCase()

문자열에서 영문 소문자를 모두 대문자로 바꾼다.

) var str=”abc”, str.toUpperCase(); <-“ABC”를 반환

length

문자열에서 문자의 개수를 반환

) var str=”hello welcome”; str.length <- 13을 반환

concat(“새로운 문자”)

문자열에 새로운 문자열을 결합

) var str=”hello”; str.concat(“web”); <- “hello web”을 반환

charCodeAt(index)

문자열 index에 해당 문자의 아스키 코드값을 반환

) var str=”ABC”; str.charCodeAt(0) <- “A”의 아스키 코드값 65를 반환

fromCharCode(아스키 코드 값)

아스키 코드값에 해당하는 문자를 반환

) String fromCharCode(65); <- “A”를 반환

trim()

문자의 앞 또는 뒤에 공백 문자열을 삭제(“hello” -> “hello”);

) str=”hello”; str.trim(); <- 공백이 제거된 “hello”를 반환

   다음은 문자열 객체 메소드와 속성을 사용한 예제이다. 문자열 객체에 내장되어 있는 메소드를 사용하여 현재 문자에

   지정한 위치(인덱스)또는 특정 문자에 대한 정보를 불러와 출력한다.

<script>
	var t="Hello Thank you good luck to you";
		document.write(t.charAt(16), "<br/>");	<!--인덱스 16에 저장된 문자를 불러온다 -->
		document.write(t.indexOf("you"), "<br/>"); <!-- 문자열 왼쪽에서 부터 제일 먼저 발견된 "you"의 인덱스 값을 반환-> 12-->
		document.write(t.indexOf("you", 16), "<br/>"); <!--문자열 인덱스 16 위치부터 제일 먼저 발견된 "you"의 인덱스 값을 반환 ->29-->
		docuemnt.write(t.lastIndexOf("you"),"<br/>");<!-- 문자열 오른쪽에서부터 왼쪽 방향으로 제일 먼저 발견된 "you"의 인덱스 값을 반환->29-->
		document.write(t.lastIndexOf("you",25), "<br/>");<!--문자열 인덱스 25부터 왼쪽방향으로 제일 먼저 발견된 "you"의 인덱스 값을 반환 ->12-->
		document.write(t.match("luck"), "<br/>");<!--문자열 왼쪽에서부터 제일 먼저 발견된 "luck"과 일치되는 문자를 찾아 반환-->
		document.write(t.search("you"), "<br/>");<!--문자열 왼족에서부터 제일 먼저 발견된 "you"의 인덱스 값을 반환->12-->
		document.write(t.substr(21,4), "<br/>");<!--문자열 인덱스 21부터 네글자를 가져온다 -> "luck"-->
		document.write(t.substring(6,12), "<br/>");<!--문자열 인덱스 6부터 12이전까지의 문자를 가져온다 ->"Thank"-->
		document.write(t.replace("you","me"), "<br/>");<!--문자열 왼쪽에서부터 제일 먼저 발견된 "you"를 "me"로 치환한다 -->
		document.write(t.toLowerCase(), "<br/>");<!-- 문자열의 영문자가 모두 소문자로 바뀐 문자열을 반환 -->
		document.write(t.toUpperCase(), "<br/>");<!-- 문자열의 영문자가 모두 대문자로 바뀐 문자열을 반환 -->
		document.write(t.length, "<br/>");<!--문자열의 문자 총 개수를 반환한ㄷ. 이때 공백도 문자로 취급한다. -> 32-->
		
		var s=t.split("");<!-- 공백 문자를 기준으로 문자를 분리. 분리된 문자열은 배열에 저장되어 s에 할당한다-->
		
		document.write(s[0], "<br/>"); <!--s의 인덱스 0에 저장된 문자열을 출력한다 ->"Hello"-->
		document.write(s[4], "<br/>"); <!--s의 인덱스 4에 저장된 문자열을 출력한다 ->"luck"-->
		
		var str="A";
		var t=str.charCodeAt(0);<!--변수에 저장된 문자열 중 0번 인덱스의 문자 "A"의 아스키 코드값을 반환.-->
		
		document.write(t);<!--"A"의 아스키 코드 값 65를 출력-->
		document.write(String.fromCharCode(65),"<br/>")<!--코드값 65에 해당하는 문자를 반환-->
</script>

 

(참고 : do it 자바스크립트+제이쿼리 입문)

 

'Java Script' 카테고리의 다른 글

제어문  (0) 2020.05.19
연산자  (0) 2020.05.17
변수  (0) 2020.05.16
자바 스크립트 기초문법  (1) 2020.05.16
자바스크립트 간단한 실행문 예제  (1) 2020.05.16

REST API란

  API(Application Programming Interface)란

    데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을 촉진하며, 서로 정보를 교환 가능하도록 하는 것.

  REST API의 정의

    REST 기반으로 서비스 API를 구현한 것.

    최근 OpenAPI, 마이크로서비스(하나의 큰 애플리케이션을 여러개의 작은 애플리케이션으로 쪼개어 변경과 조합이

    가능하도록 만든 아키텍쳐) 등을 제공하는 업체 대부분은 REST API를 제공한다.

 

REST API의 특징

  사내 시스템들도 REST 기반으로 시스템을 분산해 확장성과 재사용성을 높여 유지보수 및 운용을 편리하게 할 수 있다.

  REST는 HTTP 표준을 기반으로 구현하므로, HTTP를 지원하는 프로그램 언어로 클라이언트, 서버를 구현할 수 있다.

  즉, REST API를 제작하면 델파이 클라이언트 뿐 아니라, 자바, C#, 웹 등을 이용해 클라이언트를 제작할 수 있다.

 

REST API 설계 기본 규칙

  참고 리소스 원형

    도큐먼트 : 객체 인스턴스나 데이터베이스 레코드와 유사한 개념.

    컬렉션 : 서버에서 관리하는 디렉터리라는 리소스

    스토어 : 클라이언트에서 관리하는 리소스 저장소

  1. URI는 정보의 자원을 표현해야 한다.

     i. resource는 동사보다는 명사를, 대문자보다는 소문자를 사용한다.

    ii. resource의 도큐먼트 이름으로는 단수 명사를 사용해야 한다.

   iii. resource의 컬렉션 이름으로는 복수 명사를 사용해야 한다.

   iv. resource의 스토어 이름으로는 복수 명사를 사용해야 한다.

        Ex) GET /Member/1  ->  GET /members/1

  2. 자원에 대한 행위는 HTTP Method(GET, PUT, POST, DELETE 등)로 표현한다.

    i. URI에 HTTP Method가 들어가면 안된다.

        Ex) GET /Members/delete/1  ->  DELETE /members/1

   ii. URI에 행위에 대한 동사 표현이 들어가면 안된다.(즉, CRUD 기능을 나타내는 것은 URI에 사용하지 않는다.)

        Ex) GET /members/show/1  ->  GET /memers/1

        Ex) GET /members/insert/2  -> POST /members/2

  iii. 경로 부분 중 변하는 부분은 유일한 값으로 대체한다.(즉, id는 하나의 특정 resource를 나타내는 고유값이다.)

        Ex) student를 생성하는 route:POST/students

        Ex) id=12인 student를 삭제하는 route:DELETE/students/12

 

REST API 설계 규칙

  1. 슬래시 구분자(/)는 계층 관계를 나타내는데 사용한다.

      Ex) http://restapi.example.com/gouses/apartments 

  2. URI 마지막 문자로 / 를 포함하지 않는다.

      URI에 포함되는 몯느 글자는 리소스의 유일한 식별자로 사용되어야 하며 URI가 다르다는 것은 리소스가

      다르다는 것이고, 역으로 리소스가 다르면 URI도 달라져야 한다

      REST API는 분명한 URI를 만들어 통신을 해야하기 때문에 혼동을 주지 않도록 URI 경로의 마지막에는 

      / 를 사용하지 않는다.

      Ex) http://restapi.example.com/houses/apartments/ (X)

  3. 하이픈( - )은 URI 가독성을 높이는데 사용

     불가피하게 긴 URI 경로를 사용하게 된다면 하이픈을 사용해 가독성을 높인다.

  4. 밑줄( _ ) 은 URI에 사용하지 않는다.

     밑줄은 보기 어렵거나 밑줄 때문에 문자가 가려지기도 하므로 가독성을 위해 밑줄은 사용하지 않는다.

  5. URI 경로에는 소문자가 적합하다.

     URI 경로에 대문자 사용은 피하도록 한다.

     RFC 3986(URI 문법형식)은 URI 스키마와 호스트를 제외하고는 대소문자를 구별하도록 규정하기 때문이다.

  6. 파일확장자는 URI에 포함하지 않는다.

     REST API에서는 메시지 바디 내용의 포맷을 나타내기 위한 파일 확장자를 URI안에 포함시키지 않는다.

     Accept header를 사용한다.

     Ex) http://restapi.example.com/members/soccer/345/photo.jpg  (X)

     Ex) GET / members/soccer/345/photo HTTP/1.1 Host: restapi.example.com

          Accept : image/jpg (O)

  7. 리소스 간에는 연관 관계가 있는 경우

      /리소스명/리소스 ID/관계가 있는 다른 리소스명

      Ex) GET : /users/{userid}/devices(일반적으로 소유'has'의 관계를 표현할 때)

 

REST API 설계 예시

 

  참고 : 응답상태 코드

    1xx : 전송 프로토콜 수준의 정보 교환

    2xx : 클라이언트 요청이 성공적으로 수행됨

    3xx : 클라이언트는 요청을 완료하기 위해 추가적인 행동을 취해야 함

    4xx : 클라이언트의 잘못된 요청

    5xx : 서버쪽 오류로 인한 상태코드

https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html

'JAVA' 카테고리의 다른 글

클래스(Class)와 인스턴스(Instance)  (0) 2021.01.26
객체지향프로그래밍(Object Oriented Programming, OOP)  (0) 2021.01.25
REST  (0) 2020.05.19
배열(Array)  (1) 2020.05.08
this, this(), super, super()  (1) 2020.05.08

REST의 개념

 

  REST란

 

    REST의 정의

 

      Representational State Tramsfer"의 약자.

        자원을 이름(자원의표현)으로 구분하여 해당 자원의 상태(정보)를 주고받는 모든 것을 의미한다.

 

        즉, 자원(resource)의 표현(representation)에 의한 상태 전달.

 

           자원(resource)의 표현(representation)

              자원 : 해당 소프트웨어가 관리하는 모든 것

               ->Ex) 문서, 그림, 데이터, 해당 소프트웨어 자체 등

              자원의 표현 : 그 자원을 표현하기 위한 이름

               ->Ex) DB의 학생 정보가 자원일때, 'students'를 자원의 표현으로 정한다.

 

           상태(정보)전달

              데이터가 요청되어지는 시점에서 자원의 상태(정보)를 전달한다.

              JSON 혹은 XML을 통해 데이터를 주고받는 것이 일반적이다.

 

        월드와이드웹(www)과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 개발 아키텍쳐의 한 형식.

           REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한

           활용할 수 있는 아키텍처 스타일이다.

           REST는 네트워크 상에서 Client와 Server 사이의 통신 방식 중 하나이다.

 

     REST의 구체적인 개념

 

       HTTP URI(Uniform Resouce Identifier)를 통해 자원(Resource)을 명시하고,

       HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는것을 의미한다.

         즉, REST는 자원 기반의 구조(ROA, Resource Oriented Architecture) 설계의 중심에 Resource가 있고

         HTTP Method를 통해 Resource를 처리하도록 설계된 아키텍쳐를 의미한다.

         웹 사이트의 이미지, 텍스트, DB내용 등의 모든 자원에 고유한 ID인 HTTP URI를 부여한다.

 

         CRUD Operation

            Create : 생성(POST)

            Read : 조회(GET)

            Update : 수정(PUT)

            Delete : 삭제(DELETE)

            HEAD : header 정보 조회(HEAD)

 

  REST의 장단점

 

    장점

      HTTP 프로토콜의 인프라를 그대로 사용하므로 REST API 사용을 위한 별도의 인프라를 구출 할 필요가 없다.

      HTTP 프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 가져갈 수 있게 해준다.

      HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다.

      Hypermedia API의 기본을 충실히 지키면서 범용성을 보장한다.

      REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있다.

      여러가지 서비스 디자인에서 생길 수 있는 문제를 최소화한다.

      서버와 클라이언트의 역할을 명확하게 분리한다.

 

    단점

      표준이 존재하지 않는다.

      사용할 수 있는 메소드가 4가지 밖에 없다.

        HTTP Method 형태가 제한적이다.

      브라우저를 통해 테스트 할 일이 많은 서비스라면 쉽게 고칠 수 있는 URL보다 Header 값이 왠지 더 어렵게

      느껴진다.

      구형 브라우저가 아직 제대로 지원해주지 못하는 부분이 존재한다.

        PUT, DELETE를 사용하지 못하는 점

        pushState를 지원하지 않는 점

 

  REST가 필요한 이유

    애플리케이션 분리 및 통합

    다양한 클라이언트의 등장

    최근의 서버 프로그램은 다양한 브라우저와 안드로이드폰, 아이폰과 같은 모바일 디바이스에서도 통신을 할 수

    있어야 한다,

    이러한 멀티 플랫폼에 대한 지원을 위해 서비스 자원에 대한 아키텍처를 세우고 이용하는 방법을 모색한 결과,

    REST에 관심을 가지게 되었다.

 

  REST 구성요소

    1. 자원(Resource) : URI

        모든 자원에 고유한 ID가 존재하고, 이 자원은 Server에 존재한다.

        자원을 구별하는 ID는 '/groups/:group_id'와 같은 HTTP URI다.

        Client는 URI를 이용해서 자원을 지정하고 해당 자원의 상태(정보)에 대한 조작을 Server에 요청한다.

 

    2. 행위(Verb) : HTTP Method

        HTTP 프로토콜의 Method를 사용한다.

        HTTP 프로토콜은 GET, POST, PUT, DELETE와 같은 메소드를 제공한다.

 

    3. 표현(Representation of Resource)

        Client가 자원의 상태(정보)에 대한 조작을 요청하면 Server는 이에 적절한 응답(Representation)을 보낸다.

        REST에서 하나의 자원은 JSON, XML, TEXT, RSS 등 여러 형태의 Representation으로 나타내어 질 수 있다.

        JSON 혹은 XML을 통해 데이터를 주고 받는 것이 일반적이다.

 

  REST 특징

    1. Server-Client(서버-클라이언트 구조)

       자원이 있는 쪽이 Server, 자원을 요청하는 쪽이 Client가 된다.

          REST Server : API를 제공하고 비즈니스 로직 처리 및 저장을 책임진다.

          Client : 사용자 인증이나 context(세션, 로그인 정보)등을 직접 관리하고 책임진다.

       서로 간 의존성이 줄어든다.

 

    2. Stateless(무상태)

        HTTP프로토콜은 Stateless Protocol이므로 REST 역시 무상태성을 갖는다.

        Client의 context를 Server에 저장하지 않는다.

           즉, 세션과 쿠키와 같은 context정보를 신경쓰지 않아도 되므로 구현이 단순해진다.

        Server는 각각의 요청을 완전히 별개의 것으로 인식하고 처리한다.

           각 API 서버는 Client의 요청만을 단순 처리한다.

           즉, 이전 요청이 다음 요청의 처리에 연관되어서는 안된다.

           물론 이전 요청이 DB를 수정하여 DB에 의해 바뀌는 것은 허용한다.

           Server의 처리방식에 일관성을 부여하고 부담이 줄어들며, 서비스의 자유도가 높아진다.

 

    3. Cacheable(캐시 처리 기능)

        웹 표준 HTTP프로토콜을 그대로 사용하므로 웹에서 사용하는 기존의 인프라를 그대로 활용 할 수 있다.

          즉, HTTP가 가진 가장 강력한 특징 중 하나인 캐싱 기능을 적용할 수 있다.

          HTTP 프로토콜 표준에서 사용하는 Last-Modified 태그나 E-Tag를 이용하면 캐싱 구현이 가능하다.

        대량의 요청을 효율적으로 처리하기 위해 캐시가 요구된다.

        캐시 사용을 통해 응답시간이 빨라지고 REST Server 트랜잭션이 발생하지 않기 때문에 전체 응답시간, 성능,

        서버의 자원 이용률을 향상시킬 수 있다.

 

    4. Layered System(계층화)

        Client는 REST API Server 만 호출한다.

        REST Server는 다중 계층으로 구성될 수 있다.

          API Server는 순수 비즈니스 로직을 수행하고 그 앞단에 보안, 로드밸런싱, 암호화, 사용자인증등을 추가하여

          구조상의 유연성을 줄 수 있다.

          또한, 로드밸런싱, 공유 캐시 등을 통해 확장성과 보안성을 향상시킬 수 있다.

        PROXY, 게이트웨이 같은 네트워크 기반의 중간 매체를 사용할 수 있다.

 

    5. Code-On-Demand(optional)

        Server로부터 스크립트를 받아서 Client에서 실행한다.

        반드시 충족할 필요는 없다.

 

    6. Uniform Interface(인터페이스 일관성)

        URI로 지정한 Resource에 대한 조작을 통일되고 한정적인 인터페이스로 수행한다.

        HTTP표준 프로토콜에 따른느 모든 플랫폼에서 사용이 가능하다.

          특정 언어나 기술에 종속되지 않는다.

'JAVA' 카테고리의 다른 글

객체지향프로그래밍(Object Oriented Programming, OOP)  (0) 2021.01.25
REST API의 개념  (0) 2020.05.19
배열(Array)  (1) 2020.05.08
this, this(), super, super()  (1) 2020.05.08
접근제어자  (0) 2020.05.08

제어문이란 프로그램의 흐름을 제어할 수 있도록 도와주는 문장이다.

조건을 만족하는지의 여부에 따라 코드를 제어할 수 있는 조건문과 변수에 일치하는 경의 값에 따라 코드를 제어할

수 있는 선택문 그리고 특정 코드를 여러번 반복해서 실행할 수 있도록 하는 반복문이 있다.

 

조건문

  조건식의 값이 true인지 false인지에 따라 자바스크립트 코드를 제어한다.

  조건문의 종류에는 if문 else문 그리고 else if문이 있다.

 

if문

  if문은 조건식을 만족할 경우에만 코드를 실행한다.

  boolean과 마찬가지로 어떤 데이터를 입력해도 true 또는 false를 반환한다.

  기본형은 자바와 같다. 

기본형
if(조건식)	{
    자바스크립트 코드;
}
var num=10;
if(num<500){ //true를 반환한다.
	document.write("hello");
}

  위 예제에서 num<500 의 비교결과는 10<500이므로 true를 반환한다.

  조건문 내에 적어 놓은 hello는 현재 조건이 만족하기 때문에 출력된다.

if(0){ //false를 반환한다.
    document.write("hello");
}

  위 예제의 조건식에 있는 0은 boolean()메소드에 0을 입력했을 때와 결과가 같다.

  그 결과 false를 반환하여 조건문 내의 코드를 실행하지 않는다.

 

  다음 에제는 방문자로부터 입력받은 걸음 수를 조건문으로 만들고, 걸음 수가 10,000보 이상일 경우에만 결과를

  출력한다.

<script>
    var walkAmount = prompt("당신의 하루 걷는 양은 몇 보인가요?", "0");
    
    if(walkAmount >= 10000){
        document.write("매우 좋은 습관을 지니고 계시는군요!!","<br>");
    }
    document.write("==========The End==========");
</script>

  10,000보 이상일 경우에는 조건식에 true를 반환하여 { }안의 코드를 실행하지만 10,000보 미만일 경우에는

  ========The End=========를 출력한다.

 

조건식에 논리형 데이터가 아닌 다른 형이 오는 경우

  조건식에 논리형데이터(ture,false)가 아닌 다른 형의 데이터가 입력되어도 true 또는 false로 인식된다.

  

  다음 예제에서 방문자가 질의응답 창에 이름을 입력하지 않으면 기본 응답값인 빈문자("")가 변수에 저장되어

  조건식에 false값이 반환되고 그 결과 문장이 출력되지 않는다.

<script>
    var userName = prompt("방문자의 이름은?","");
    
    if(userName){  //userName에 이름이 저장되면 중괄호 내의 코드가 실행.
        document.write(userName+"님 반갑습니다! 방문을 환영합니다.");
    }
</script>

 

else문

  조건식을 만족할 경우와 만족하지 않을 경우에 따라 실행되는 코드가 달라진다.

  즉, 두가지 결과가 나올 수 있다.

 

  다음은 조건식의 만족 여부에 따라 실행되는 코드가 달라지는 else문의 기본형이다.

if(조건식){
    자바스크립트코드1;
}else{
    자바스크립트코드2;
}

 

<script>
    var num = prompt("당신이 좋아하는 숫자는?","0");
    
    if(num % 2 == 0){ //짝수일 경우에 실행
        document.write("당신이 좋아하는 숫자는 짝수입니다.");
    }else{
        document.write("당신이 좋아하는 숫자는 홀수입니다.");
    }
</script>

 

  다음은 confirm객체를 사용하여 웹페이지에 회원 탈퇴 여부를 묻는 확인/취소 창이 나타나게 하고,

  else 조건문으로 사용자가 확인 버튼을 눌렀을 때와 취소 버튼을 눌렀을 때 결과 화면이 다르게 나타나도록 할 것이다.

 

  확인/취소 창은 confirm() 메소드를 사용한다.

  확인 버튼은 true, 취소 버튼은 false를 반환한다.

기본형

confirm("message");

 

  다음은 confirm() 메소드를 사용해 회원 탈퇴 여부를 묻는 창을 만드는 예제이다.

<script>
    var result = confirm("정말로 회원을 탈퇴하시겠습니까?");
    
    if(result){
        document.write("탈퇴처리 되었습니다.");
    }else{
        document.write("탈퇴 취소 되었습니다.");
    }    
</script>

else if문

  else if문은 두가지 이상의 조건식과 정해놓은 조건을 만족하지 않았을 때 실행되는 코드로 이루어져 있다.

  

  다음은 else if문의 기본형이다.

if(조건식1){
    코드1;
}else if(조건식2){
    코드2;
}else if(조건식3){
    코드3;
}else if(조건식4){
    코드4;
}else if(조건식5){
    코드5;
}else{
    코드 6;
}

  가장 위에 있는 조건식 1부터 5까지 차례로 조건 검사를 하면서 만족하는 값이 나오면 그에 해당하는 코드를 실행하고

  조건문을 종료한다.

  조건식 중 만족하는 값이 하나도 없으면 else문의 중괄호 { }에 있는 코드를 실행한다.

 

  다음 예제는 질의응답 창을 이용하여 "현재는 몇월입니까"를 묻고 else if문을 사용해 현재 월에 해당하는 계절과

  관련된 문구가 출력되도록 했다.

<script>
    var mon = prompt("현재는 몇월입니까?","0");
    
    if(mon >= 9 && mon <= 11){	//9-11
        document.write("독서의 계절 가을이네요!!");
    }else if(mon >= 6 && mon <= 8{	//6-8
        document.write("여행가기 좋은 여름이네요!!");
    }else if(mon >= 3 && mon <= 5{	//3-5
        document.write("햇살 가득한 봄이네요!!");
    }else{
        document.write("스키의 계절 겨울이네요!!");
    }
</script>

중첩 if문

  조건문 안에 조건문이 있는 것을 중첩 if문이라 한다.

기본형

if(조건식1){
  if(조건식2){
    자바스크립트코드;
  }
}

  중첩 if문은 바깥쪽에 있는 조건문인 조건식 1을 만족해야만 안쪽에 있는 조건문인 조건식 2를 검사한다.

  만일 안쪽 if문의 조건식 2를 만족하지 않으면 바깥쪽 조건문인 조건식1의 중괄호 안에 있는 코드만 실행하고

  종료한다.

  

  다음은 중첩 if문을 사용해 아이디와 비밀번호가 일치했을 때 환영문구가 출력되도록 작성한 예제이다.

<script>
  var id="easy1004"; //아이디
  var pw="112233";   //비밀번호

  var user_id=prompt("아이디는?", "0"); //아이디입력
  var user_pw=prompt("비밀번호는?", "0"); //비밀번호 입력

  if(id == user_id){  //아이디가 일치하면 실행한다.
    if(pw == user_pw){
      document.write(user_id+"님 반갑습니다."); //비밀번호가 일치하면 실행한다.
    }else{
      alert("비밀번호가 일치하지 않습니다."); //비밀번호가 일치하지 않으면 실행한다.
      loaction.reload();  //브라우저 새로고침
    }
  }else{
    alert("아이디가 일치하지 않습니다");  //아이디가 일치하지 않으면 실행한다.
    location.reload();
  }
</script>

반복문

  while문

    while문은 조건식을 만족할 때까지 코드를 여러 회 반복하여 실행할 수 있다.

    다음은 while문의 기본형이다.

var 변수=초기값;

while(조건식){
    자바스크립트코드;
    증감식;
}

    while문의 실행 순서는 조건식을 검사하고 만족하면 중괄호 안에 있는 코드를 실행한다.

    그리고 다시 조건식을 검사한다.

 

    다음은 while문을 사용해 "안녕하세요1 ~ 안녕하세요10"까지 1씩 증가하면서 10회 출력하도록 작성한 예제이다.

<script>
      var i = 1;
      while(i<=10){
        document.write("안녕하세요"+i, "<br>");
        i++;
      }
      document.write("======The End======");
</script>

    다음은 while문을 사용하여 1부터 30까지의 숫자 중 2의 배수이면서 6의 배수인 숫자만 출력하는 예제이다.

<script>
      var i = 1;
      while(i<=30){
        if(i % 2 == 0 && i % 6 == 0){

        document.write(i, "<br>");
        }
        i++;
      }
</script>

    다음은 20부터 10까지의 숫자 중 짝수일 경우에는 파란색으로 출력되고, 홀수일 경우에는 빨간색으로 출력되도록

    작성한 예제이다.

<script>
      var i = 20;
      while(i>=10){
        if(i % 2 == 0){
        document.write("<p class='blue'>"+i+"</p>");
        }else{
        document.write("<p class='red'>"+i+"</p>");
        }
        i++;
      }
</script>

  do while문

    do while문은 반드시 한번은 코드를 실행하고 조건식을 검사한다.

    다음은 do while문의 기본형이다. 중괄호에 있는 코드를 먼저 실행하고 조건식을 검사한다.

var 변수 = 초기값;

do{
    자바스크립트코드;
    증감식;
}while(조건식)

    다음은 do while문의 예제이다.

<script>
      var i = 10;

      do{
        document.write("hello!");
      }while(i<3)
</script>

   

    do에 있는 hello를 먼저 출력하고 조건식을 검사한다. 조건식은 false이기 때문에 do while문이 종료된다.

 

for 문

  for문은 조건식을 만족할 때까지 특정 코드를 반복하여 실행한다. while문과 사용방법은 같지만 while문보다 

  사용하기 편해 사용 빈도가 높은 편이다.

  다음은 for문의 기본형이다.

for(초기값; 조건식; 증감식){
    자바스크립트코드;
}

  다음은 for문으로 '반복1~반복 10'까지 i를 1씩 증가하며 출력한 예제이다.

<script>
      for(var i = 1; i <= 10; i++){
        document.write("반복"+i, "<br>");
      }
</script>

  다음은 1부터 100까지 5의 배수일 경우에는 빨간색글자, 7의 배수일 경우에는 초록색 글자 그리고 5의 배수이며

  7의 배수일 경우에는 아쿠아색 글자로 출력하는 예제이다.

<script>
      for(var i = 1; i <= 100; i++){
        if(i % 5 == 0 && i % 7 != 0){
          document.write("<p class='red'>"+i+"</P>");
        }else if(i % 7 == 0 && i % 5 != 0){
          document.write("<p class='green'>"+i+"</p>");
        }else if(i % 7 == 0 && i % 5 == 0){
          document.write("<p class='aqua'>"+i+"</P>");
        }
      }
</script>

break 문

  반복문에서 break문을 실행하면 조건식과 상관없이 강제로 반복문을 종료한다.

  즉, break문은 반복문을 강제로 종료할 때 사용한다.

 

  다음은 break문의 기본형이다.

  break문이 코드보다 앞에있으므로 코드는 실행되지 않고 반복문이 바로 종료된다.

for(초기값; 조건식; 증감식){
    break; <!--반복문을 강제로 종료한다.-->
    자바스크립트코드;
}

var 변수 = 초기값;
while(조건식){
    break;
    자바스크립트코드;
    증감식;
}

  다음은 1부터 10까지 반복하도록 작성한 예제이다. 그리고 break문을 사용하여 i의 값이 6일경우 강제로 종료한다.

    <script>
      for(var i = 1; i <= 10; i++){
        if(i == 6) break;
        document.write(i, "<br>");
      }
      document.write("=====The End=====");
    </script>

continue문

  continue문은 반복문에서만 사용할 수 있다. while문에 사용할 경우 continue문 다음에 오는 코드는 무시하고

  바로 조건식으로 이동해 조건 검사를 한다. 즉, while문 안에 있는 continue문은 "다음에 오는 코드는 무시하고

  조건식에서 조건 검사를 실행"하라고 하는 것이다.

 

  for 문에서 continue문을 실행할 경우에는 continue문 다음에 오는 코드는 무시하고 바로 증감식으로 이동하여

  증감연산을 실행한다. 즉, for 문 안에 있는 continue문은 "다음에 오는 코드는 무시하고 증감식을 바로 실행"

  하라는 것이다.

 

  continue문의 기본형은 다음과 같다.

for(초기값; 조건식; 증감식){
    continue;
    자바스크립트 코드;
}

var 변수 = 초기값;
while(조건식){
    증감식;
    continue;
    자바스크립트 코드;
}

  다음은 for문을 이용해 1부터 10까지 i가 2의 배수일 경우에만 continue 문을 실행하여 홀수만 출력하는 예제이다.

<script>
      for(var i = 1; i <= 10; i++){
        if(i % 2 ==0)continue;
        document.write(i, "<br>");
      }
      document.write("====The End====");
</script>

중첩 for문

  for문 안에 for문을 사용한 것을 중첩 for문이라고 한다. 중첩 for문은 예를 들어 자바스크립트를 이용해 3행 5열의

  표를 만든다고 할 때 1행씩 행이 만들어질 때 마다 5개의 열을 만들어야 할 경우에 사용한다.

  중첩 for문의 기본형은 다음과 같다.

for(초기값; 조건식; 증감식){
    for(초기값; 조건식; 증감식){
        자바스크립트 코드;
    }
}

  다음은 중첩 for문을 사용하여 1행 1열부터 3행 2열까지 출력하는 예제이다.

<script>
      for(var i = 1; i<=3; i++){
        for(var k=1; k<=2; k++){
          document.write(i+"행"+k+"열", "<br>");
        }
        document.write("<br>");
      }
</script>

 

(참고 : do it 자바스크립트+제이쿼리 입문)

'Java Script' 카테고리의 다른 글

객체(내장객체)  (1) 2020.05.19
연산자  (0) 2020.05.17
변수  (0) 2020.05.16
자바 스크립트 기초문법  (1) 2020.05.16
자바스크립트 간단한 실행문 예제  (1) 2020.05.16

+ Recent posts