개발일지

개발일지 5일차

index.ys 2023. 3. 10. 23:01

객체의 기본

- 객체란 한마디로 '실제로 존재하는 사물'을 의미하고 '이름'(name)과 '값'(value)으로 구성된

속성을가진 데이터 기본 타입이다.

객체

-자바스크립트에서 여러자료를 다룰때 객체(object)를 사용한다.배열도 여러자료를 다룰수 있다 (배열도 객체이다)

typeof([])
"object"  //객체를 의미하는 "object" 출력

배열의기본

- 배열에는 index와 element가 있다

const array = ['사과','배','망고','딸기']

배열은 객체를 기반으로 만들어졌으므로 배열과 객체는 상당히 비슷하다.

객체선언

const product = {
	제품명:'70 건조 망고',
    유형: '당절임'
    성분: '망고, 설탕, 메타중아황산나트륨, 치자황색소'
    원산지: '필리핀'

}

객체를 표로 나타냄

밸류
제품명 70 건조 망고
유형 당절임
성분 망고,설탕,메타중아황산나트륨, 치자황색소
원산지 필리핀

객체뒤에 대괄호[key] 를 입력하면 객체요소에 접근 할 수 있다

product['제품명']  //'70 건조 망고'
product['유형']  //'당절임'
product['성분']  //'망고, 설탕, 메타중아황산나트륨, 치자황색도'
product['원산지']  //'필리핀'

객체뒤에 온점(.)을 사용할 수도 있다.

  product.제품명  //'70 건조 망고'
  product.유형 //'당절임'
  product.성분  //'망고, 설탕, 메타중아황산나트륨, 치자황색도'
  product.원산지 //'필리핀'

속성과 메소드

- 배열 내부에 있는값을 요소(element)라고 하고, 객체 내부에 있는 값은 속성(property) 라고 한다. 속성도 모든 형태의 자료형을 가질 수 있다.

 const object = {
    number: 273,
    string: '구름',
    Boolean: true,
    array: [52,273,103,32] 

    method: function(){}
  }

속성과 메소드 구분하기

- 객체의 속성 중 함수 자료형을 속성을 메소드(method) 라고 부른다.eat 속성처럼 입력값을 받아 무언가 한 다음 결과를

도출해내는 함수 자료형을 ear() 메소드 라고한다.

const pet {
    pet: '구름'
    eat: function(food){ }
  }

  //메소드 호출
  pet.eat()

메소드 내부에서 this 키워드 사용하기

-메소드 내에서 자기 자신이 가진 속성을 출력할대는 this 키워드사용

const pet {
    nmae: '구름',
    eat: function(food){
        alert(this.name + '은/는' + food + '을/를 먹습니다.')
    }         //(구름)

  }
//메소드 호출
pet.eat()  //구름 은/는 밥을/를 먹습니다.

동적으로 객체속성 추가/제거

- 속성을 추가하거나 제거하는 것을 동적으로 속성을 추가/제거한다 라고함

동적으로 객체 속성 추가하기

- 객체 생성후 속성지정후 값을 입력한다.

const student = {}
student.이름 = '김용식'
student.취미 = '자기'
student.장점 = '착함'

console.log(JSON.stringify(student,null,2))

//{
// "이름": "김용식",
// "취미": "자기",
// "장점": "착함"
//}

 

(JSON.stringfy() 메소드는 객체를 콘솔출력에서 쉽게볼수 있는 방법이다)

동적으로 객체 속성제거하기

- 객체속성을 제거할대는 delete 키워드 사용

const student = {}
student.이름 = '김용식'
student.취미 = '자기'
student.장점 = '착함'
delete.student.장점

console.log(JSON.stringify(student,null,2))

//{
// "이름": "김용식",
// "취미": "자기"
//}

메소드 간단 선언구문

- function () {} 형태로 메소드 간단선언

const pet = {
    name:'구름',
    eat (food){
        alert(this.name + '은/는' + food + '을/를 먹습니다' )

    }

}
pet.ear('밥') //구름은/는 밥을/를 먹습니다.


const pet = {
    name:'하늘',
    eat (food){
        alert(this.name + '은/는' + food + '을/를 먹습니다' )

    }

}
pet.eat('사료') //구름은/는 사료을/를 먹습니다.

요약

  • 요소란 배열 내부에 있는 값
  • 속성은 객체 내부에 있는 값
  • 메소드는 속성중에 함수 자료형 인것을 의미
  • this 키워드는 객체내부의 메소드에서 객체자신을 의미
  • 속성추가:동적 속성 추가 속성제거:동적 속성제거

객체의 속성과 메소드 사용하기

자료는 기본자료형과 객체 자료형으로 구분한다.

자바스크립트 자료형
기본자료형 객체 자료형
숫자 함수
문자 배열
불린 기타..

객체 자료형

- 배열에 속성지정

const a = []
//undefined

a.sample = 10
//10

a.sample
//10

- 함수에 속성지정

function b (){}
//undefined

b.sample = 10
//10

b.sample
//10

기본 자료형

- 자바스크립트에서는 실체가 있는 것(undefined 와 null 등이 아닌것) 중 객체가 아닌것을 기본 자료형(숫자,문자,불린)이라고 한다.

const c = 273
//undefined

c.sample = 10
//10

c.sample
//undefined

기본 자료형은 객체가 아니므로 속성을 가질 수 없다 문자와 불린도 마찬가지다.

기본자료형을 객체로 선언하기

const 객체 = new 객체 자료형 이름()

new Number(10)
new String('안녕하세요')
new Boolean(true)
const f = new Number(273)

typeof f
"object"

f.sample = 10
10

f.sample
10

f
Number {273, sample:10}

f+0
273

f.valueOf()
273

프로토타입으로 메소드 추가하기

객체 자료형 이름.prototype.메소드 이름 = function () {}
Number.prototype.sample = 10 //객체로 승급
10

const i = 273
undefined

i.sample
10   //속성을 가짐

Number 객체

숫자 n번째 자릿수까지 출력 toFixed()

const i = 123.456789
undefined

i.toFixed(2) //소수점 둘째자리까지 출력
123.46

i.toFixed(3) //소수점 셋째자리까지 출력
123.457

i.toFixed(4) //소수점 넷째자리까지 출력
123.4567

//문자열로 출력

NaN과 Infinity 확인하기:isNaN, isFinite()

- NaN(Not a Number)

const m = Number('숫자로 변환 할 수 없는 경우')
undefined

m
NaN

m === NaN
false

Number.isNaN(m)
true

- Infinity(무한)

const n = 10 / 0
undefined
n
Infinity

const 0 = -10 / 0
undefined
0
Infinity

Number.isFinite(n)
false

Number.isFinite(0)
false

Number.isFinite(1)
true

Number.isFinite(10)
true

String 객체

공백없애기 trim()

const stringA =`
안녕하십니까 김용식입니다.`
undefined
const stringB = `   안녕하십니까 용식입니다.     `
undefined

stringA.trim()
//안녕하십니까 김용식입니다.
stringB.trim()
//안녕하십니까 용식입니다.

문자열을 특정기호로 자르기 split()

let input = `
일자, 달러, 엔, 유로
02,1141.8,1097.46,1262.37
04,1148.7,1111.36,1274.65
05,1140.6,1107.81,1266.58
06,1143.4,1099.58,1267.8
07,1141.6,1091.97,1261.07
`


input = input.trim() //공백제거

input = input.split('\n') //줄바꿈

input = input.map((line) => line.split(',') ) //열드을 쉼포로 자름

JSON.stringify(input, null ,2)

Math 객체

- 수학과 관련된 기본적은 연산을 할때 사용

Math.PI
3.141592653589793

Math.E
2.718281828459045

- 랜덤한 숫자  만들기(범위 지정)

function getRandomInt(min, max) {
    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min)) + min; //최댓값은 제외, 최솟값은 포함
  }
  
  console.log(getRandomInt(8,18)) //8 <= getRandomInt  < 18

요약

  • 실체가 있는 것 중에서 객체가 아닌 것을 기본자료형(숫자,문자,불린)이라고 한다.
  • 객체를 기반으로 하는 자료형을 객체자료형 이라고 한다 (new 키워드)
  • 기본 자료형의 승급이란 기본자료형이 일시적으로 객체 자료형으로 변환하는것
  • prototype 객체란 객체의 틀을 의미. 속성과 메소드추가

객체와 배열고급

속성 존재 여부 확인

- 객체 내부에 어떤 속성이 있는지 확인해보는 코드

const object = {
    name: '혼자 공부하는 파이썬',
    price: '18000',
    publisher: '한빛미디어'
}

if(Object.name !== undefined){
    console.log('name 속성이 있습니다.')
}else{
    console.log('name 속성이 없습니다.')
}

if(object.author !== undefined){
    console.log('author 속성이 있습니다.')
}else{
    console.log('author 속성이 없습니다.')
}
const object = {
    name: '혼자 공부하는 파이썬',
    price: '18000',
    publisher: '한빛미디어'
}

object.name = object.name !== undefined ? object.name:'제목 미정'
object.author = object.author !== undefined ? object.author:'저자 미상'

console.log(JSON.stringify(object, null, 2))

//{
//"name": "혼자 공부하는 파이썬",
//"price": "18000",
//"publisher": "한빛미디어",
//"author": "저자 미상"
//}

요약

  • 속성 존재 여부확인은 객체 내부에 어떤 속성이 있는지 확인하는 것을 의미한다. undefined 활용
  • 다중 할당은 배열과 객체하나로 여러변수에 값을 할당 하는것
  • 얕은 복사는 복사하는 행위가 단순하게 다른 이름을 붙이는 형태로 동작하는 의미
  • 깊은 복사는 복사후 두객체를 완전하게 독립적으로 사용할 수 있는 복사를 의미

객체는 지금까지 배웠던 문법들이 다 섞여있어서 전에 배웠던 문법이나 키워드들을 이해하지 못하면 객체도 이해하기 조금 어려울 수도 있겠다는 생각이 들었다. 객체도 자바스크립티에서 필수로 알아야 하는요소이니 잘 외우고 알아둬야겠다.