본문으로 바로가기

객체(수정)

category 웹/JavaScript,JQurey 2018. 9. 7. 17:08

객체(Object)

객체란 상태(속성)과 기능(오퍼레이션)으로 이루어져 있습니다.

주변의 모든 물체들을 객체라고 할 수있습니다. 기본형은 다음과 같습니다.

 

객체.메서드();

객체.속성

 

객체의 종류에는 총 3가지가 있습니다.

내장 객체, 브라우저 객체 모델, 문서 객체가 있습니다.

 

 

*내장 객체

내장 객체는 말 그대로 자바스크립트 엔진에 내장되어있어서 꺼내 사용 할 수있습니다.

예를들어 Date, Array, Math 등이 있습니다.

getDate()를 이용하여 날짜를 알수도 있겟죠.

 

*브라우저 객체 모델(BOM)

window , screen, location, history, navigator 등이 있습니다.

window는 document객체와 location의 상위 객체입니다. 따라서 브라우저 이동하고 싶을 때 window.location.href="이동 사이트 URL" 로 해주시면 됩니다.

 

*문서 객체 모델(DOM)

문서 객체 모델은 HTML문서 구조입니다.

<html>, <head>, <body>등이 있습니다.

이미지는 <img>의 src속성을 적용시킵니다.

 

우선 내장객체에 대해 알아보도록 할게요

 

내장 객체를 생성의 기본형은 다음과 같습니다.

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

이해를 돕기위해 예시를 보도록 하죠.

<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>");
    }

    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>

즉 tv라는 변수에 Object객체를 생성합니다. tv는 참조변수입니다.

tv를 가지고 적용하는 코드입니다.

tv.color와 tv.price변수에 각 값을 넣습니다. info는 함수입니다. 뒷 단원에서 배우게 될거에요.

즉 Object객체를 new로 생성하고 car 참조변수는 {}로 객체를 생성했습니다.

 

날짜 정보 객체에 대해 알아보죠.

날짜 객체는 유용합니다. 왜냐하면 어떤 날에 무슨 요일인지 쉽게 파악할 수있고 기념일 계산기도 만들 수 있씁니다.

다음은 기본형입니다.

참조 변수=new Date();

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

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

var dat=new Date();

날짜 관련 메서드를 한눈에 표로 보도록 하죠

날짜 정보 GET

날짜 정보 SET

getFullYear(): 연도 정보

setFullYear(): 연도 정보 수정

getMonth(): 월 정보(-1)

setMonth(): 월 정보 수정(-1)

getDate(): 일 정보

setDate(): 일 정보 수정

getDay():요일 정보(일:0~토:6)

x

getHours():시 정보

setHours()

getMinutes():분 정보

setMinutes()

getSeconds(): 초 정보

setSeconds()

getMilliseconds():밀리초 정보

setMilliseconds()

getTime():1970년 1월 1일 부터 경과된 시간(밀리초)

toGMTString():GMT표준 표기 방식으로 문자형 데이터 반환

setTime()

toLocaleString():운영 시스템 표기 방식으로 반환

 

예를 보도록 하죠.

    <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, 4, 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>

즉 today 참조 변수 Date객체 생성 후 nowMonth에 달 nowDate에 날짜 nowDay에 일을 저장합니다.

 

응용으로 연말까지 몇일 남았는지 계산하는 코드를 봅시다.

<script>
    var today = new Date();
    var nowYear = today.getFullYear();
    
    var theDate = new Date(nowYear, 11, 31);
    var diffDate = theDate.getTime( ) - today.getTime( );
    
    var result = Math.ceil( diffDate / (60 * 1000 * 60 * 24) );
    document.write("<h1>오늘부터 올해 연말까지 남은 날짜</h1>");
    document.write("D-day: " + result + "일 남았습니다.");
</script>

년도를 nowYear에 넣고 해당 연말 날짜를 theDate 객체에 정보를 담습니다.

diffDate는 연말까지 경과된시간에서 오늘까지 경과된 시간을 뺍니다. 즉 이 값은 경과된 시간입니다.

따라서 result에 천장을 통해 일로 환산해서 출력해줍니다.

 

수학 객체를 보도록 하죠.

곱하기 나누기 연산등을 쉽게 제공합니다. 또한 기본 연산으로 할 수 없는 반올림 , 최대값 구하기 ,천장, 마루 등을 쉽게 구하도록 제공합니다.

관련 메소드들을 표로 보도록 합시다.

종류 

설명 

Math.abs(숫자) 

숫자 절댓값 

Math.max(숫자1, 숫자2,.....) 

최대값 

Math.min(숫자1, 숫자2,......) 

최소값 

Math.pow(숫자,제곱값) 

거듭제곱 값 반환 

Math.random() 

0~1사이 난수  

Math.round(숫자) 

첫 째자리 반올림 

Math.ceil(숫자)

첫 째자리에서 무조건 올림 반환 

Math.floor(숫자) 

내림 

Math.sqrt(숫자) 

제곱근값 

Math.PI 

원주율 상수 반환 

 

<script>
    var num = 2.1234;

    var maxNum = Math.max(10, 5, 8, 30),
        minNum = Math.min(10, 5, 8, 30),
        roundNum = Math.round(num),
        floorNum = Math.floor(num),
        ceilNum = Math.ceil(num),
        rndNum = Math.random( ),
        piNum = Math.PI;

    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>

 

결과는

30
5
2
2
3
0.9809036210412969
3.141592653589793

가 나옵니다.

 

랜덤을 사용 할 때는 Math.random()*10을 하면 0부터 10까지 실수 난수입니다.

정수로만 난수를 발생시키기 위해서는 floor을 이용하여 Math.floor(Math.random()*11); 해주면 됩니다. 왜냐하면 내림이기 때문에 11로 써주고 내림해줘서 정수만 출력되기 때문입니다.

 

Math.floor(Math.random()*31)+120;은 과연 범위가 어떻게 될까요 ????

즉 공식화하면 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 );

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

    if(gameNum == com) {
        document.write("<img src=\"images/game_1.jpg\">");
    } else {
        document.write("<img src=\"images/game_2.jpg\">");
    }
</script>

가위 바위 보 선택하여 switch문으로 가위일 경우 1 바위일 경우 2 보일 경우 3으로 컴퓨터는 com에 랜덤값으로 1~3난수를 발생시킵니다.

만약에 컴퓨터 발생 난수와 같으면 출력해줍니다.

 

배열 객체를 보도록 할게요

여러개의 데이터를 저장하기 위해서 필요한 객체입니다.

기본형은 아래와 같습니다.

var 참조변수=new Array();

참조변수[0]=값; .........참조변수[n-1]=값;

var 참조변수=new Array(값1,값2,......);

var 참조변수=[값1,값2,값3,....];

 

ex)

var a=new Array();

a[0]=1;

a[1]="오잉";

a[2]=true;

var b=new Array(1,"오잉",true);

var c=[1,"오잉",true];

 

저장된 객체를 참조하여 사용하기위해선 어떻게 해야 할까요????

우선 생성된 변수에 인덱스번호를 붙이면 되겠죠.

참조변수[인덱스]

<script>
    var arr = [1, "오잉", 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>

실행 결과는

배열값 가져오기-1

1
오잉
true

배열값 가져오기-2

1
오잉
true

배열값 가져오기-3

1
오잉
true

 

이런식으로 나오게 됩니다.

 

배열 관련 메서드들을 한번 표로 살펴봅시다.

종류 

설명 

join(연결문자) 

배열 객체 연결문자 기준으로 1개 문자형 데이터 반환 

reverse() 

순서를 거꾸로 반환합니다. 

sort() 

정렬하여 반환 

slice(index1,index2) 

데이터 중 원하는 인덱스 구간만큼 잘라서 가져옴 

splice() 

지정 데이터 삭제하고 그 구간에 새 데이터 삽입 

concat() 

2개의 배열 객체를 하나로 결합 

pop() 

마지막 인덱스에 저장된 데이터 삭제 

push(new data) 

data를 마지막 인덱스에 삽입 

shift()

unshift(new data) 

첫 인덱스 저장 데이터 삭제

가장 앞의 인덱스에 데이터 삽입 

 length

데이터 개수 반환 

 

문자열 객체에 대해 알아보도록 하죠

문자형 데이터를 객체로 취급합니다. 가장 많이 사용하므로 중요시 여겨야합니다.

기본형은 다음과 같습니다.

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

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

var t=new String("heel"):

var t="heel";

 

관련 메서드를 표로 보도록하죠 .

종류

설명 

charAt(index) 

문자열에서 인덱스 해당 번호 문자 반환 

indexOf("찾을 문자") 

문자를 왼쪽부터 찾아 제일 먼저 찾은 인덱스 번호 반환 

lastIndexOf("찾을 문자") 

문자를 오른쪽 부터 찾아 제일 먼저 찾은 인덱스 번호 반환  

match("찾을 문자") 

제일 먼저 찾은 문자를 반환 

replace("바꿀 문자","새 문자") 

바꿀 문자를 찾아 새 문자로 치환 

search("찾을 문자") 

제일 먼저 일치하는 인덱스 번호 반환 

slice(a,b) 

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

ex) var str="hello javascript" str.slice(3,7); => lo j를 반환 

substring(a,b) 

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

substr(a,문자개수) 

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

ex) var str="hello javascript" str.substring(3,2); lo를 반환 

split("문자") 

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

toLowerCase() 

영 문 대문자를 모두 소문자로 

toUpperCase() 

소문자를 모두 대문자로 

length 

문자열개수 반환 

concat("새 문자") 

새문자를 결합 

charCodeAt(index) 

아스키 코드갑 반환 

fromCharCode(아스키 코드 값) 

아스키에 해당하는 문자 반환 

trim() 

공백 문자열 제거 

 

연락처에 해당하는 번호를 뒷번호를 ****로 표시하여 출력하고싶으다면

<script>
    var userName = prompt("당신의 영문 이름은?","");

    var upperName = userName.toUpperCase();
    document.write(upperName, "<br>");

    var userNum = prompt("당신의 연락처는?","");
    var result = userNum.substring(0, userNum.length - 4) + "****";
    document.write(result, "<br>");
</script>

substring으로 0인덱스부터 번호 길이에서 -4를 하면 뒤에 4자리가 없애고 ****을 붙인 결과를 출력한다.

실행결과:

LEEJEONGCHAN
010-2000-****

또한 이메일 유효 검사를 할 때도 사용합니다.

@를 작성을 잘 했는지 확인을 위해서 indexOf("@")으로 0보다 큰 값을 반환한다면 잘쓴겁니다. 그리고 또하나로 뒤에 .com .co.kr .net .or.kr .go.kr 을 잘 썼는지도 확인을 해야합니다. indexOf("해당 배열")으로 0보다 큰 값을 반환하다면 잘쓴겁니다.

코드로 보시죠

 

<script>
    var userEmail = prompt("당신의 이메일 주소는?", "");
    var arrUrl = [".co.kr", ".com", ".net", ".or.kr", ".go.kr"];

    var check1 = false;
    var check2 = false;

    if( userEmail.indexOf("@") > 0 ) { check1=true; }

    for(var i = 0; i < arrUrl.length; i++) {
        if( userEmail.indexOf(arrUrl[i]) > 0 ) {
            check2 = true;
        }
    }

    if( check1 && check2 ) {
        document.write( userEmail );
    } else {
        alert("이메일 형식이 잘못되었습니다.");
    }
</script>

 

다음으로 브라우저 객체 모델(BOM)에 대해 배우도록 하겠습니다. 감사합니다.

' > JavaScript,JQurey' 카테고리의 다른 글

JavaScript 함수  (0) 2019.02.25
객체(2)  (0) 2018.09.09
제어문(선택문과 반복문)  (0) 2018.09.06
제어문(조건문에 대해)  (0) 2018.09.05
Javascript 본격 들어가기(2)  (0) 2018.08.22