⛏️/JavaScript

[JavaScript] 5. 객체

defyuil 2023. 8. 4. 11:48

객체(Object): 눈앞에 있는 모든 대상

 

객체 추상화: 내가 코드로 표현하려고 하는 대상을 선택해서 속성, 동작들을 정의

ex) '모니터'

속성: 브랜드, 모델명, 크기, 색상, 가격, 화소, ...

동작: 전원 on/off, 명도, 음량 조절,...

 

객체 생성(인스턴스): 추상화했던 객체 정보를 실제 구현

 

*인스턴스화 -> 객체를 메모리에 올리는 작업

 

var참조 변수(레퍼런스) = new 객체명();

 

// 객체 생성
        // var obj = new Object();
        var TV = new Object();
        // TV객체의 속성 : 크기,색상,가격
        TV.size = 100;
        TV.color = "black";
        TV.price = 200;
        //TV.power = "off";
        TV.power = false; // 티비꺼짐
       
        TV.ch = 10;

        document.write(" 생성한 티비의 정보 출력 <hr>");

        TV.showTvInfo = function(){
                            document.write(" 티비 정보(size) "+TV.size+"인치 <br>");
                            document.write(" 티비 정보(color) "+TV.color+" <br>");
                            document.write(" 티비 정보(price) "+TV.price+"원 <hr>");            
                            document.write(" 티비 정보(power) "+(TV.power? "ON":"OFF")+"<hr>");            
                            document.write(" 티비 정보(ch) "+TV.ch+"번<hr>");            
                        }        
        TV.showTvInfo();

 

// TV객체의 동작 : 전원on/off,ch변경,음량조절
        // + 티비정보를 조회하는 동작

        // 전원on/off - 한번 실행 off/on
        TV.onOff = function(){
                    //티비 파워정보 가져오기 (true/false)
                    // 한번 누르면 on -> off
                    if(TV.power){
                         // 전원on상태 -> off로 변경
                        TV.power = false;
                        document.write(" 티비 꺼짐 ");
                    }
                    // 한번 누르면 off -> on
                    else{
                        // 전원off상태 -> on으로 변경
                        TV.power = true;
                       
                        document.write(" 티비 켜짐 ");
                     }
                     TV.ch = 10;
            }

          TV.onOff();
          TV.onOff();

 

  // ch변경 동작
          // 1) 티비가 켜짐상태 필요(꺼져있을때는 동작x)
          // 2) 기본 ch 10 번 (티비 켜질때)
          // 3) chUP()/chDown() 각각 ch을 1씩 증가,감소
          //     (+ch정보 출력)
          // 4) chNum() - 번호를 직접 입력받아서 변경
          //     (+ch정보 출력)
         
          TV.chUP = function(){
              if(TV.power){
                TV.ch++;
                document.write(TV.ch+"번<br>");
              }              
          }
          TV.chDown = function(){
            if(TV.power){
                TV.ch--;
                document.write(TV.ch+"번<br>");
              }  
            }
          TV.chNum = function(number){
             if(TV.power){
                TV.ch=number;
                document.write(TV.ch+"번<br>");
              }  
          }

          document.write("<hr>");
          document.write("<hr>");
          document.write("<hr>");
          TV.showTvInfo();
         
          TV.chUP();
          TV.onOff();
          TV.chUP();
          TV.chUP();
          TV.chDown();
          TV.showTvInfo();
          TV.onOff();
         
          document.write("<hr>");
          document.write("<hr>");
          document.write("<hr>");

 

 

자바 스크립트의 객체 종류

1. 내장 객체: 자바 스크립트 안에 내장되어 있는 객체(문자, 날짜, 배열, 숫자,...)

2. 브라우저 객체 모델(BOM): 브라우저에 내장되어 있는 객체

3. 문서 객체 모델(DOM): HTML 문서 구조에 포함된 객체

 

 

[내장객체 - 날짜(Date)]

<script>
      // 날짜(Date)객체 생성
      var today = new Date();
      document.write(today+"<br>");
      var day2 = new Date(2023,7,4); // 년, 월-1, 일
      // 월: 0~11까지 표시 (1~12)
      document.write(day2+"<br>");
      var day3 = new Date(2023,7,4,9,32,0) // 년,월-1,일,시,분,초
      document.write(day3+"<br>");
      var day4 = new Date("2023/8/4");
      document.write(day4+"<br>");

      // Date 객체 - 속성/동작
      // 2023 8월 4일

      document.write( today.getFullYear()+"년");
      document.write( today.getMonth()+1+"월");
      document.write( today.getDate() +"일");
      // 요일 출력 (0(일)-6(토))
      if (today.getDay() ==5 ){
      document.write( "금요일 <br>");
      }
      // 요일 정보를 숫자 -> 문자 변경하는 기능 구현
      function changeDay(day){
        var result = "";
        switch(day){
          case 0:
            result="일요일";
            break;
          case 1:
            result="월요일";
            break;
          case 2:
            result="화요일";
            break;
          case 3:
            result="수요일";
            break;
          case 4:
            result="목요일";
            break;
          case 5:
            result="금요일";
            break;
          case 6:
            result="토요일";
            break;
          default:
            result="요일 정보 아님!"


        }
       
        document.write(result);
      }

      changeDay(today.getDay());

      today.setFullYear(2000);
      document.write( today.getFullYear() +"년");

      // 카타르 월드컵(2022/11/20) 개막일은 무슨 요일?
      var worldcup2022 = new Date("2022/11/20");

      document.write("개막일의 요일" +worldcup2022.getDay());
      document.write("<hr>개막일의 요일 : ");
      changeDay(worldcup2022.getDay());

      // 디데이 = 특정 날짜 - 오늘 날짜

      // 1s = 1000ms
      // 1m = 60 * 1000ms
      // 1h = 60 * 60 * 1000ms
      // 1d = 24 * 60 * 60 * 1000ms

      // 여름 휴가까지 남은 일자 계산하기
      // " 여름 휴가 D-00일! "

      today = new Date();

      var d_day = new Date("2023/8/10");

      document.write( d_day - today + "<hr>" );
      document.write("여름휴가 D-"+Math.ceil ((d_day - today)/(24 * 60 * 60 * 1000)) +"!!<hr>");

    </script>

 

 

 

[내장 객체 - 배열(Array]

변수 -> 데이터를 1개만 저장

배열 -> 데이터를 여러 개 저장

 

// 배열 객체
    var arr = new Array(); // 배열 생성-기본
    var arr2 = new Array(10); // 10칸짜리 배열
    var arr3 = new Array(1,2,3,4,5,6);
    var arr4 = [1,2,3,4,5,6]; // 특정 요소가 들어 있는 배열 생성

 

// 배열 정보 저장
    // arr = 10;(X)
    // arr[위치(index)] = 값;
    arr[0] = 10;
    document.write("배열의 요소 출력 :"+arr[0]+"<br>");
    // 1-20 / 2-30 / 3-40 / 4-50
    arr[1] = 20;
    arr[2] = 30;
    arr[3] = 40;
    arr[4] = 50;
    document.write("배열의 요소 출력: "+arr[1]+"<br>");
    document.write("배열의 요소 출력: "+arr[2]+"<br>");
    document.write("배열의 요소 출력: "+arr[3]+"<br>");
    document.write("배열의 요소 출력: "+arr[4]+"<br>");
 
 

    for(let i=0;i<arr.length;i++){
      document.write("배열의 요소 출력: "+arr[i]+"<br>");
    }

arr.length(길이) -> 참조변수.속성(변수)

 

// 배열 arr 들어있는 모든 요소의 합 출력
    var sum = 0;
    for(let i=0;i<arr.length;i++){
      sum += arr[i]; (누적합 계산)
    }

    document.write("배열의 합: "+sum+"<br>");
   
let numArr = [6,4,7,2,8,9,3,1];

    document.write( numArr );
    document.write( "<hr>" );
    document.write( numArr.join("@") );
    document.write( "<hr>" );
    document.write( numArr.sort() );
    document.write( "<hr>" );

    // 배열을 내림차순 정열 (9~1)
    document.write( numArr.reverse() );
// numArr 배열 안에 들어 있는 홀수 개수 출력
    let cnt = 0;
    for(let i=0;i<numArr.length;i++){
      // 배열의 요소가 홀수인가를 체크
      if( numArr[i]%2 != 0 ){
        cnt++;
      }
    }

    document.write("홀수 개수: "+cnt+"개 <hr>");

 

 

[내장객체 - 문자(String)]

"/"로 저장한 문자 데이터를 저장하는 객체

문자 객체는 배열이다

"Hello" -> [H][e][l][l][o]

let str = "Hello"; -> 문자형 상수

let str2 = new String("Hello"); -> 문자 객체

 

 <script>
    let str = "Hello";
    for(let i=0;i<str.length;i++){
      document.write(str[i]+"<br>");
    }
  </script>

    // hello - > 문자만 출력
    // document.write(str[4]);
    document.write(str[str.length-1]);
    // 배열의 처음값
    document.write(str[0]);

 

  document.write("<hr>");
    let str3 = "ITWILL Busan";
    document.write(str3+"<hr>");
    document.write(str3.bold()+"<hr>");
    document.write(str3.italics()+"<hr>");
    document.write(str3.fontsize(20)+"<hr>");
    document.write(str3.fontcolor("blue")+"<hr>");
    document.write(str3.fontsize(20).fontcolor("blue")+"<hr>");
    // -> 체이닝 기법

글꼴 변경과 체이닝 기법

// ITWILL Busan의 B출력
        document.write( str3[7] );
        document.write( "<hr>" );
        document.write( str3.charAt(7) );
        document.write( "<hr>" );

        // 문자열 자르기 함수
        // 1. substring(시작, 끝-1) : 시작index ~끝index 앞까지 문자를 자르기
        // 2. slice(시작, 끝-1)
        // 3. substr(시작, 개수)

        let juminNumber = "990101-1231231";
        // => 해당주민번호의 성별을 출력
        // 7번 index의 정보값에 따라 출력
        // 1/3 이면 남성, 2/4면 여성

        let genderValue = juminNumber.charAt(7);
        if(genderValue == 1 || genderValue==3){
          alert(" 남성 ");
        }else if(genderValue == 2 || genderValue==4){
          alert("여성");
        }else{
          alert("잘못된 정보 입력!");
        }
       
        // indexOf(문자) / lastIndexOf(문자)
        // => 특정문자가 포함되어 있으면 해당위치 인덱스 리턴
        //     없는경우 -1 리턴
       
        // let str3 = "ITWILL Busan";
        document.write( str3.indexOf("L") ); //4  index3번에 "L"가 있느냐 없느냐
        document.write( str3.lastIndexOf("L") ); //5
        // => 차이가 나는 이유: indexOf : 왼쪽에서 제일 먼저 만나는 대상
        // lastIndexOf : 제일 마지막에 만나는 대상 or 오른쪽에서 lastIndexOf


      // split("구분자") => 문자데이터를 분리해서 배열에 저장
        document.write("<hr>");
        document.write(str3.split(" "));
        document.write(str3.split(" ")[1]);

        document.write("<hr>");
        let phoneNumber = "010-1234-1234";
        // => "당첨 : 010-****-1234" 로 바꿔주기
        document.write("당첨 : "+ phoneNumber.split("-")[0]+ "-****-" + phoneNumber.split("-")[2]+"<br>");
       
        // 이메일 주소 검증하는 코드
        // 1. 주소에 @가 포함 되었는지 확인
        // 2. [".co.kr",".com",".net", ".or.kr", ".go.kr"]
        //    => 문자들이 포함되어 있을때만 정상적인 이메일
        var checkEmail = "010829miI@gmil.com";
        if(checkEmail.indexOf("@") > 5) { // 특정 위치에 index가 존재한다.
          // id의 최소길이, @의 유무
          alert("1단계 OK");
        }
        if(checkEmail.indexOf(".co.kr") != -1) {
          alert("2단계 OK");
        }
        var emailArr = [".co.kr",".com",".net", ".or.kr", ".go.kr"];
       
        for(let i=0; i<emailArr.length; i++) {
          if(checkEmail.indexOf( emailArr[i] ) != -1) {
            alert("3단계 OK");
            break;
          }
        }

        //숫자 객체(Number) / 수학 객체(Math)

        // document.write(Number.MAX_VALUE);
        // document.write(Number.POSITIVE_INFINITY);
        // document.write(Number.NaN); // 숫자가 아닌 형태들이 나타났을때 보임

        document.write( Math.PI );
        document.write( Math.floor() ); // 올림
        document.write( Math.ceil() );  // 버림
 
    </script>

       
        <form>
          <input type="email">
        </form>