본문 바로가기
HTML+CSS+Javascript/Javascript

7. 객체

by 김마리님 2020. 3. 11.

객체는 다양한 속성이 묶여있는 것이라 생각하면 된다. 자바스크립트에도 객체를 선언할 수 있도록 만들어져 있다. 

객체를 선언하는 방법은 다음과 같다.

var d=new Date();
var s=new String("자바스크립트 공부하기");

이 때, 오른쪽에는 객체의 타입을 선언하고, 왼쪽에 객체의 레퍼런스 변수를 선언한다.

첫번째는 시간을 나타내는 객체를, 두번째는 "자바스크립트 공부하기"라는 문자열을 담은 객체를 생성했다.

객체에 접근하는 방법은, 다음과 같이 

var d1=d.toLocaleString();
document.writeln(s.length);

객체변수.프로퍼티 <<의 형태로 접근하게 된다.

예시를 들어보면,

        var d=new Date();
        var d1=d.toLocaleString(); 
        document.writeln(d1);
        document.writeln("<br>");
        var s=new String("자바스크립트 공부하기");
        document.writeln(s.length)

다음과 같이 객체에 메소드(LocaleString())를 결합해 d1으로 호출했다. 이 때, 여러개의 단어가 결합한 경우 두번째 단어부터 대문자로 작성한다.

또한 s.length를 통해 s객체 내부에 있던 문자열의 길이(속성값)을 읽어냈다.

 

 

 

-Date 객체 사용

Date 객체를 이용하면 다양한 시간, 날짜 정보를 호출할 수 있다.

        var now=new Date();
        document.writeln(now.toUTCString()+"<br>");
        document.writeln(now.getFullYear()+"<br>");
        document.writeln(now.getMonth()+1+"<br>");
        document.writeln(now.getDate()+"<br>");
        document.writeln(now.getHours()+"<br>");
        document.writeln(now.getMinutes()+"<br>");
        document.writeln(now.getSeconds()+"<br>");
        document.writeln(now.getMilliseconds()+"<br>");

다음과 같이 시간에 대한 메소드를 호출할 수 있다.

toUTCString()은 국제 표준 시간을 호출한다.

getFullYear()은 해,

getMonth는 달을 출력하는데, 이 때 사람과 다르게 컴퓨터는 0~11월로 인식하므로 +1을 붙여주어야 한다.

getDate는 날짜를, getMinute는 분, getSecond는 초를 호출한다.

getMilliseconds()는 초를 1/1000한 값을 소환한다.

 

이 데이터 정보를 이용하여 다음과 같은 응용을 할 수 있다.

페이지 방문 시 현재 초시간이 짝수일 때와 홀수일 때의 색이 다르게 호출할 수도 있다.

        if(now.getSeconds()%2==0){

            document.body.style.backgroundColor="violet"

        }else{

            document.body.style.backgroundColor="lightskyblue"

        }

if문에서 상수의 홀짝수를 비교하는 것처럼 초를 출력하는 메소드 역시 홀짝 수를 비교하는 방식은 동일하다.

따라서,

다음과 같이 초가 짝수일 경우 violet이, 홀수면 lightskyblue 배경색이 도출된다.

 

 

 

-string 객체 활용

string 객체 역시 다양한 메소드가 있다. 다음의 메소드는 문자열에 작용한다.

        var a=new String("Boys and Girls");
        var b="!!";
        document.writeln(a.charAt(0),"<br>");
        document.writeln(a.concat(b,"입니다.")+"<br>");
        document.writeln(a.concat(b));
        document.writeln(a.concat(b,"a","bb","cc"));
        document.writeln(a.indexOf('s')+"<br>"); 
        document.writeln(a.lastIndexOf('s')+"<br>"); 
        document.writeln(a.slice(5,8)+"<br>"); 
        document.writeln(a.indexOf('and')+"<br>"); 
        document.writeln(a.indexOf('And')+"<br>"); 
        document.writeln(a.toUpperCase+"<br>");
        document.writeln(a.replace("and","or")+"<br>");
        document.writeln("   apple        ".trim()+"<br>"); 
        var sub=a.split(" ");
        for(i=0;i<sub.length;i++){
            document.writeln(sub[i]+"<br>");
        }

결과는 다음과 같으며, 메소드를 살펴보면

CharAt = 매개변수 값 위에 있는 문자열을 반환

concat = 주어진 문자열에 매개변수로 주어진 문자열을 합함

indexOf = 매개변수에 주어진 문자열이 나타나는 첫번째 자리를 반환. 매개변수가 단어일 경우, 시작되는 위치를 반환. 만약 없을 경우 -1을 반환함

lastIndexOf = 매개변수로 주어진 문자열이 나타나는 두번째 자리를 반환

slice = 매개변수로 주어진 범위 내의 문자열을 반환

toUpperCase = 문자열을 대문자로 반환(toLowerCase : 소문자로 반환)

replace(a, b) = a를 문자열에서 찾아 b로 변환 후 반환

trim = 문자열에 있는 공백을 삭제 

split = 매개변수 내에 있는 문자열을 기준으로 문자열을 분리

 

이것을 바탕으로 url을 잘라내는 것도 가능하다

예시)

        var s="https://news.naver.com/main/read.nhn?mode=LSD&mid=shm&sid1=102&oid=421&aid=0004515570"
        var s1=s.slice(s.indexOf('?')+1);
        var s2=s1.split('&');
        for(i=0;i<s2.length;i++){
            var s3=s2[i].split("=");
            document.writeln(s3[0]+"<br>");
        }
        document.writeln("<hr>");
        for(i=0;i<s2.length;i++){
            document.writeln(s2[i].split('=')[1]+"<br>");
        }

s1은 ?을 기준으로, s2는 &을 기준으로 잘라낸다. 잘라진 s2(mode=LSD, mid=shm....)를 바탕으로 s3에서는 =를 기준으로 잘라내되, 첫번째는 =의 앞[0]을 반환하고, 두번째는 =의 뒤[1]를 반환했다. 

 

 

-Math 객체

Math 객체는 수학적인 계산을 할때 쓰이는 프로퍼티와 메소드를 제공한다.

자주 쓰이는 메소드는 다음과 같다

abs(x) 절대값 리턴
sin(x) sin값 리턴
exp(x) e의 x제곱 값 리턴
pow(x,y) x의 y제곱 값 리턴
random() 0~1사이의 난수 값 리턴
floor(x) 소수점 버림
round(x) x를 반올림한 정수 리턴
sqrt(x) x의 제곱근 리턴
E Euler 상수 리턴
PI 원주율 리턴

난수를 이용해 구구단 게임을 만들 수 있다.

<head>
    <script>
        function randomInt(){
            var r=Math.random()*9; //0~0.999999999사이의 난수
            return Math.floor(r)+1; //floor = 버림
        }
    </script>
</head>
<body>
    <h3>Math 객체 만들기</h3><hr>
    <script>
        var q=randomInt()+"*"+randomInt();
        var u=prompt(q+"값은 얼마입니까?","");
        if(u==null){
            document.writeln("구구단 연습을 종료합니다.");
        }else{
            var ans=eval(q);
            if(u==ans){
                document.writeln("정답입니다!");
            }else{
                document.writeln("오답입니다.");
            }
            document.writeln(q+"="+"<strong>"+ans+"</strong>");
        }
    </script>
</body>

다음처럼 두 가지 메소드를 사용했다. floor에 1을 붙인 이유는 소수값을 버리게 되면 0이 되는 구간이 생기기 때문이다. 따라서 계산에 혼선이 생기지 않게 하기 위해서 +1을 하여 0이 나오는 상황을 방지했다.

 

 

 

- object 객체

이 객체를 이용하면 사용자 객체를 쉽게 만들 수 있다. 여기에 프로퍼티를 추가해서 새로운 객체를 사용할 수 있다.

메소드 역시 없기 때문에 직접 만들 수 있는데, 메소드 이름과 동일한 이름의 함수를 만들고, 객체의 메소드 이름을 함수 이름으로 초기화 하면 된다. 다음이 object 객체의 예시이다.

<head>
    <title>Document</title>
    <script>
        function inquiry(){
            return this.balance;
        }
        function deposit(money){
            this.balance+=money; 
        }
        function withdraw(money){
            this.balance-=money; 
            return money;
        }
        var account=new Object();
        account.owner="홍길동";
        account.code="1234";
        account.balance=35000; 
        account.inquiry=inquiry;
        account.deposit=deposit;
        account.withdraw=withdraw;
    </script>
</head>
<body>
    <h3>Object 객체 사용하기</h3><hr>
    <script>
        document.writeln("account : ");
        document.writeln(account.owner);
        document.writeln(account.code);
        document.writeln(account.balance+"<br>");
        account.deposit(10000);
        document.writeln("10000원 저축 후 잔액 : "+account.inquiry()+"<br>");
        account.withdraw(5000);
        document.writeln("5000원 저축 후 잔액 : "+account.inquiry()+"<br>");
    </script>
</body>

붉은 부분이 메소드를 직접 만든 부분이고, 주황색 부분이 프로퍼티를 직접 입력하는 부분이다.

호출 방식은 기존 객체와 동일하다. 따라서 이 결과는

다음과 같이 윗줄에는 넣어준 프로퍼티가,

아랫줄에는 생성한 메소드에 의한 결과값이 도출된다.

반응형

'HTML+CSS+Javascript > Javascript' 카테고리의 다른 글

9. HTML DOM 개요  (0) 2020.03.12
8. 배열  (0) 2020.03.11
6. 함수  (0) 2020.03.11
5. 반복문  (0) 2020.03.11
4. 조건문  (0) 2020.03.11