JavaScript-6(객체-1)
객체 (object)
-
특징
- 자바스크립트는 객체지향프로그래밍을 흉내내고 있지만, 다른 언어에 비해 실질적인 객체지향적인 프로그래밍은 아님. C ++ 이 가장 객체지향적인 프로그래밍을 알 수 있다. 그 다음은 자바정도!
-
메모리 내에 stack에는 주소를 담고 실제값은 heep에 저장됨
- 키(key)와 값(value)으로 구성된 프로퍼티(property)들의 집합입니다. 프로퍼티의 값은 자바스크립트에서 사용할 수 있는 모든 값을 담을 수 있습니다.
-
배열 VS 객체
- 배열 (카테고리끼리 묶어서 담는 집합)
- const student = [‘김사과’, ‘반하나’, ‘오렌지’];
- 객체 (한사람에 대한 정보?를 담는 집합)
- const student = {num:1, name:’김사과’, kor:90, math:100, eng:60}
- 배열 (카테고리끼리 묶어서 담는 집합)
-
필드, 메소드를 다 모아서 프로퍼티(property)라고 부름
const dog = { name: '해피', -- 필드 family: '포메리안', -- 필드 color: 'white', age: 4, play: function(){ -- 메소드 console.log('뛰어놀아') } } console.log(dog.name); // 해피 dog.play(); // 뛰어놀아
-
객체를 저장하는 방법
- 방법 1
const student1 = { num: 1, name: "김사과", kor: 90, math: 100, eng: 60 }; const student2 = { num: 2, name: "반하나", kor: 90, math: 100, eng: 60 };
- 방법 2
const student = [ { num: 1, name: "김사과", kor: 90, math: 100, eng: 60 }, { num: 2, name: "반하나", kor: 90, math: 100, eng: 60 }, ]; console.log(student[0]); // 김사과 // const student[0] const student[1] 이렇게 불러오면된다.
- 방법 1
-
프로퍼티(Property)
- 프로퍼티는 키(이름)와 프로퍼티 값으로 구성됩니다. 키로 유일하게 값을 식별할 수 있습니다. 프로퍼티키는 프로퍼티를 식별하기위한 식별자이며, 프로퍼티 값으로 사용할 수 있는 값은 빈 문자열을 포함하는 모든 문자열 또는 symbol값입니다.
-
객체를 생성하는 3가지 방법
1. 리터럴 2. 생성자 (가장 보편적) 3. 클래스 (앞으로의 추세로 갈듯. 다른언어가 가장 많이 쓰는 방법이기때문에)
-
리터럴 표기법을 이용한 객체의 생성
- 자바스크립트에서 객체를 생성하는 가장 쉽고, 간단한 방법이다.
const 객체이름 = { 프러퍼티명1 : 값1, 프러퍼티명2 : 값2, ... 프러퍼티명n : function(){ } }
const dog1 = "뽀미"; const dog2 = { name: "루시", family: "포메리안", color: "white", age: 9, weight: 3.5, play: function () { console.log("뛰어논다"); }, }; console.log(`dog1 : ${dog1}`); console.log(`dog2 : ${dog2}`); console.dir(dog2); // 객체에 어떤 정보가 있는지 확인하려면 console.dir로 객체를 찍으면 안에 있는 프로퍼티 값 확인가능 console.log(`don2.name : ${dog2.name}`); console.log(`don2.family : ${dog2.family}`); console.log(`don2.color : ${dog2.color}`); console.log(`don2.age : ${dog2.age}`); console.log(`don2.weight : ${dog2.weight}`); console.log(`don2.play : ${dog2.play}`); dog2.play();
-
생성자를 이용한 객체의 생성
- new 연산자를 사용하여 객체를 생성하고 초기화할 수 있음. 이 때 사용되는 메소드를 생성자라고 하며, 이 메소드는 새롭게 생성되는 초기화하는 역할을 함. 이건 붕어빵의 틀 같은 방식으로 만들어내는 것이다. 생성자(붕어빵틀)을 만들어두면 객체(붕어빵)를 만들때마다 쓰면 되니까 코딩의 양이 확 줄어들 수 있다
function 생성자이름(매개변수1, 매개변수2 ..){ 프러퍼티이름 1 = 값1; 프러퍼티이름 2 = 값2; 프러퍼티이름 n = function(){} }
const 객체이름1 = new 생성자이름(값1, 값2 ...); const 객체이름2 = new 생성자이름(값1, 값2 ...); const 객체이름n = new
function triangle(b, h) { // b = 10, h=10 this.base = b; this.height = h; this.area = function () { return (this.base * this.height) / 2; }; } // 프로퍼티 앞에 파라미터와 구분하기 위해 this라고 붙인다. const tg1 = new triangle(10, 10); const tg2 = new triangle(20, 5); // 객체를 이렇게 만들면, console.log(`tg1.base : ${tg1.base}`); console.log(`tg1.height : ${tg1.height}`); console.log(`tg1.area() : ${tg1.area()}`); console.dir(tg1); console.log(`tg2.base : ${tg2.base}`); console.log(`tg2.height : ${tg2.height}`); console.log(`tg2.area() : ${tg2.area()}`); console.dir(tg2);
- 프로토타입(prototype) - 자바스크립트의 모든 객체는 프로토타입이라는 객체를 가지고 있습니다. 모든 객체는 그들의 프로토타입으로부터 프러퍼티와 메소드를 상속받습니다. 이처럼 자바스크립트의 모든 객체는 최소한 하나이상의 다른 객체로부터 상속을 받으며, 이 때 상속되는 정보를 제공하는 객체를 프로토타입이라고 합니다. (tg1 <— object.prototype) 템플릿 역할이라는게 객체를 만들때 객체의 틀과 같은 뜻이다. 생성자가 객체의 틀을 만들기 위해 만들어진 함수이니 그 안에 프러퍼티 정의된 형태가 템플릿이죠 그 내용을 가지고 있는 객체가 프로토타입입니다
function Dog(name, color, age) { this.name = name; this.color = color; this.age = age; } // 프로퍼티랑 변수를 구분하기 위해 프로퍼티명 앞에다가 this.를 추가해준다. const rucy = new Dog("루시", "White", 9); rucy.family = "포메리안"; rucy.breed = function () { return this.color + " " + this.family; }; // const rucy = new Dog('루시', 'white', 9); const bbomi = new Dog("뽀미", "white", 4); console.log(rucy); console.log(rucy.name); console.log(rucy.color); console.log(rucy.age); console.log(rucy.family); console.log(rucy.breed()); console.log(bbomi); console.log(bbomi.name); console.log(bbomi.color); console.log(bbomi.age); console.log(bbomi.family); // undefined console.log(bbomi.breed()); // error
function Dog(name, color, age) { this.name = name; this.color = color; this.age = age; } Dog.prototype.family = "포메리안"; // 이렇게 하면, this.family = '포메리안'; 처럼 되게 하는거다. Dog.prototype.breed = function () { return this.color + " " + this.family; }; const rucy = new Dog("루시", "white", 9); const bbomi = new Dog("뽀미", "white", 4); console.log(rucy); console.log(rucy.name); console.log(rucy.color); console.log(rucy.age); console.log(rucy.family); console.log(rucy.breed()); console.log(bbomi); console.log(bbomi.name); console.log(bbomi.color); console.log(bbomi.age); console.log(bbomi.family); // 에러가 안생김 // 프로토타입을 써서 추가했기때문에 아예 프로퍼티가 추가된거임 console.log(bbomi.breed()); // 에러가 안생김 // 프로토타입을 써서 추가했기때문에 아예 프로퍼티가 추가된거임
-
클래스를 이용한 객체의 생성
- 클래스는 객체를 만들기 위한 용도로만 쓰는 함수같은 느낌!
const 변수명 = class { constructor(매개변수1, 매개변수2,){ 프러퍼티 이름 1 = 값1; 프러퍼티 이름 2 = 값2; } 메소드이름(매개변수1, 매개변수2){ } }
const 객체이름 = new 변수명(값1, 값2); const 계좌정보 = class { constructor(계좌번호, 이름, 통장이름){ this.계좌번호 = '111-11-11111', this.이름 = '사과', this.통장이름 = '저축통장', this.담당자 = '홍길동' } function set금액(price){ if(price<0){ 나가버려 } this.price = price; } }
let Dog = class { // 생성자는 객체가 생겨날 때 가장 먼저 호출하는 함수 #family = "포메리안"; static count = 0; constructor(name, color, age) { this.name = name; this.color = color; this.age = age; this.weight = 3.5; } play() { console.log(`${this.name}가 놉니다.`); } get getWeight() { return this.weight; } set setWeight(weight) { this.weight = weight; } }; const rucy = new Dog("루시", "white", 9); console.dir(rucy); console.log(rucy.name); console.log(rucy.color); console.log(rucy.age); console.log(rucy.getWeight); rucy.setWeight = 4.0; console.log(rucy.getWeight); console.log(rucy.family); rucy.play(); rucy.name = "똥개"; console.log(rucy.name); // class를 써서 만드는 방법을 아마 가장 많이 쓰게될 것이다. // 결국 다른 언어들이 class로 많이 하니까 JavaScript도 점차 따라가게 됨.
- ECMA 6에서 생긴 문법
- class는 모든 브라우저 다 되지만, 고급 class 기능은 크롬에서만 정상적으로 돌아가고 나머지 브라우저는 지원이 안될 때가 많다.
-
-
내장객체
-
Math 객체
- Math 객체는 수학에서 자주 사용하는 상수와 함수들을 미리 구현해놓은 자바스크립트 표준 내장객체입니다 - min() : 인수로 전달받은 값중에서 가장 작은 수를 리턴한다 인수가 전달되지 않으면 Infinity를 리턴함. 또한 비교할 수 없는 값이 포함되어있으면 NaN을 리턴하게 됨 - max() : 인수로 전달받은 값중에서 가장 큰 수를 리턴한다 인수가 전달되지 않으면 -Infinity를 리턴함. 또한 비교할 수 없는 값이 포함되어있으면 NaN을 리턴하게 됨 - round() : 인수로 전달받은 값을 소수점 첫번째 자리에서 반올림해서 그 결과를 리턴함 - floor() : 인수로 전달받은 값과 같거나 작은 수중에서 가장 큰 정수를 리턴함 - ceil() : 인수로 전달 받은 값과 같거나 큰 수중에서 가장 작은 정수를 리턴함 - random() : 0보다 크거나 같고 1보다 작은 무작위 소수를 리턴함
console.log(Math.min()); console.log(Math.min(1, 10, -10, 1000, 0)); // -10 console.log(Math.min(1, 10, -10, "-1000", 0)); // console.log(Math.min(1, 10, -10, "문자열", 0)); // console.log(Math.max()); console.log(Math.round(10.49)); // 10 console.log(Math.round(10.5)); // 11 console.log(Math.round(-10.5)); // -10 console.log(Math.round(-10.51)); // -11 console.log(Math.floor(10.49)); // 10 console.log(Math.floor(10.5)); // 10 console.log(Math.floor(-10.5)); // -11 console.log(Math.floor(-10.51)); // -11 console.log(Math.ceil(10.49)); // 11 console.log(Math.ceil(10.5)); // 11 console.log(Math.ceil(-10.5)); // -10 console.log(Math.ceil(-10.51)); // -10 const rm = Math.random(); // 0 ~ 0.99999999.. console.log(rm); // 0.12377488104318535
- Q. 만약 1이상 10미만의 값을 추출하려면 어떻게 해야하는가?
console.log(Math.floor(Math.random() * 9 + 1)); // 1 ~ 9 사이의 값 나온다 // random 함수 사용시 : 0 ~ 0.9999값 추출됨 console.log(parseInt(Math.random() * 10) + 1); // 1 ~ 10 값 나온다 let RM = Math.random(); console.log(Math.round(RM * 10)); // 0 ~ 10 사이의 값이 나온다.
- Q. 로또 번호를 추첨한다면?
let lotto = Math.random(); // 0 ~ 0.99999 // 1 ~ 45 lotto = Math.floor(lotto * 45) + 1; console.log(`로또 번호 : ${lotto}`);
-
String 객체
- 자바스크립트에서 문자열을 손쉽게 만들 수 있는 객체입니다. 또한 문자열을 쉽게 다룰 수 있습니다.
- length : 문자열의 길이를 저장할 수 있는 것
- str.indexOf(‘a’) : 특정 문자나 문자열이 처음으로 등장하는 위치를 리턴합니다.
- chatAt() : 특정 문자열에서 전달 받은 인덱스에 위치한 문자를 리턴합니다.
- includes() : 특정 문자열에서 전달받은 문자열이 포함되어있는지 여부를 리턴하게 됨.
- substring() : 전달받은 시작 인덱스부터 종료 인덱스 바로 앞까지 문자열을 추출하여 새로운 문자열을 리턴함 (다른 언어는 이것밖에 없어서 이걸로 씀)
- substr() : 전달받은 시작인덱스부터 전달받은 개수만큼 문자열을 추출하여 새로운 문자열을 리턴함 (이걸 많이 씀)
- split() : 구분자를 기준으로 나눈 후 나뉜 문자열을 하나의 배열에 저장합니다
- str = “드라이브, 등산, 음악감상, 게임”
- arr = str.split(‘,’)
- arr[0] = ‘드라이브’
- arr[1] = ‘등산’
- replace() : 원본 문자열의 일부를 전달받은 문자열로 치환합니다
- trim() : 문자열의 앞뒤 공백을 제거합니다
- toUpperCase() : 영문자 중 소문자를 대문자로 변환합니다
- toLowerCase() : 영문자 중 대문자를 소문자로 변환합니다
const str = 'JavaScript'; const strobj = new String('JavaScript'); (str == strObj); // true, 값만 비교, (str === strobj); // false, 값과 형까지 비교, str은 string이고 strobj는 object이다.
const str1 = "안녕하세요. JavaScript"; console.log(str1.length); // 10 (글자수 카운트) console.log(str1.indexOf("j")); // 찾지 못했기 때문에 -1 출력됨 console.log(str1.indexOf("a")); // 여러개의 a중 처음 나오는 문자 순서출력, 8 console.log(str1.indexOf("Java")); // 문자열인 경우 첫번째 문자 위치를 검색 7 console.log(str1.charAt(8)); // a console.log(str1.includes("Java")); // 대소문자 구별한다. true console.log(str1.includes("java")); // 대소문자 구별한다. false console.log(str1.substring(7)); // JavaScript // 매개변수가 1개일 경우 해당 위치부터 끝까지 console.log(str1.substring(7, 11)); // Java console.log(str1.substr(7, 4)); // Java const str2 = "김사과|오렌지|반하나|이메론|박수박|오피치"; const student = str2.split("|"); for (let stu of student) { console.log(stu); } // 한 명씩 순서대로 출력됨 console.log(str1.replace("안녕하세요.", "Hello!")); const str3 = " JavaScript "; console.log(`|${str3}|`); // JavaScript 출력 console.log(`|${str3.trim()}|`); // |JavaScript| 출력 console.log(str3.toLowerCase()); // javascript console.log(str3.toUpperCase()); // JAVASCRIPT
- 자바스크립트에서 문자열을 손쉽게 만들 수 있는 객체입니다. 또한 문자열을 쉽게 다룰 수 있습니다.
-
Date 객체
- 날짜, 시간등을 쉽게 처리할 수 있는 내장 객체입니다. 굉장히 많이 쓰인다.
const startDate = "2020-09-20 10:17:00"; // 2020년 9월 20일 10시 17분 처럼 표기하려면 substr등으로 값을 분리해준 후 해야한다.
- 연도(year)
- 2자리로 표기하게되면 1900년 ~ 1999년을 이야기하는 것
- 4자리로 표기해야한다. (2000 ~ )
- 월 (month) : 0월(일반적인 1월)부터 11월(일반적인 12월)까지 있어
- 시 (hour) : 0 ~ 24시 표현가능
- 분 (minute) : 0분 ~ 59분
- 초 (seconds) : 0초 ~ 59초
-
Date 객체 만드는 방법
new Date(); // 현재 날짜 시간을 저장한 객체가 만들어집니다. // ex) const currentTime = new Date(); new Date("날짜 문자열"); // 해당 특정 날짜와 시간을 가리키는 객체가 만들어집니다. const thisDate = new Date("2020-09-20 10:25:00");
new Date("밀리초") : 1970년 1월 1일 0시 ~ 해당 밀리초만큼 지난 날짜 객체가 만들어집니다 ex ) 타임스템프 new Date("2000") = 1970년 1월 1일 0시 0분 2초 예전에 많이 쓰던 방법이다 2038년 1월 19일 3분 14초까지가 최대치이다 (PC에서 쓸 수 있는 최대치) new Date(년, 월, 일, 시, 분, 초, 밀리초) : 해당 특정날짜시간을 가리키는 객체가 만들어집니다
-
댓글남기기