"이름(name)"
과 "값(value)"
로 구성된 "속성(property)"
을 가진 데이터 타입이다.인덱스(index)
와 요소(element)
가 있다.요소(element)
에 접근할 때 키(key)
를 사용한다.{ }
중괄호를 이용해서 객체를 생성하고, 각각의 키(key)
와 값(value)
는 쉼표(,)를 이용해서 분리한다.const object = {
name : "김명랑", //name이 이름값, "김명랑"은 값이다.
age : 7,
breed: "dachsund"
} //name, age, breed로 구분되어 담겨있는 데이터가 object라는 객체의 속성이다.
객체의 요소에 접근하는 방식도 배열의 방식과 비슷하다. (배열은 객체의 일종이다.)
객체명 뒤에 대괄호[ ]
나 온점.
을 사용하고 특정 키를 입력하면 해당 키에 맞는 값이 표시된다.
예시:
object['name']
'김명랑'
object.name
'김명랑'
온점 사용 시, 보조 기능을 활용할 수 있다.
객체의 key는 식별자와 문자열을 모두 사용할 수 있다.
다만 객체를 생성할 때 식별자로 사용할 수 없는 단어를 키값key
으로 사용할 경우, 해당 키의 요소를 불러올 때 무조건 대괄호[ ]
를 사용해야한다.
배열과는 다르게 객체 내부에 있는 값은 속성(property)라고 한다.
배열의 요소와 마찬가지로 객체의 속성도 모든 형태의 자료형을 가질 수 있다. (문자열, 숫자, 함수 등)
객체의 속성 중 함수 자료형인 속성을 메소드라고 한다.
입력 값을 받아 일련의 과정을 걸치고 결과를 출력하는 함수 자료형을 function() 메소드
라고 한다.
화살표 함수는 메소드로 사용하지 않는다.
예시:
const pet = {
name: '김명랑',
age: 7,
breed: 'dachshund',
eat: function(food){
console.log(`명랑이는 하루에 두끼 ${food}를 먹는다.`)
}
}
pet.eat('사료') //출력 시 콘솔에 "명랑이는 하루에 두끼 사료를 먹는다."라는 문구 출력
this
라는 키워드는 메소드 내에 객체의 속성 중 하나를 사용할 때, 해당 값이 객체의 속성임을 명확하게 표시하고자 할 때 사용된다.
예시:
const pet = {
name: '김명랑',
age: 7,
breed: 'dachshund',
eat: function(food){
alert(this.name +'은 '+ '하루에 두끼 '+ food +'를 먹는다.')
}
}
pet.eat('사료') // "김명랑은 하루에 두끼 사료를 먹는다." 라는 문구가 적힌 알림창이 생성된다.
this
라는 키워드를 이용해서 객체(pet)
의 속성인 name(김명랑)
에 정확하게 접근했다.
객체[속성] = 값
형식을 사용해서 객체의 속성의 추가할 수 있다.
예시: 객체pet에 생일속성 추가
const pet = {
name: '김명랑',
age: 7,
breed: 'dachshund',
eat: function(food){
alert(this.name +'은 '+ '하루에 두끼 '+ food +'를 먹는다.')
}
}
pet['생일'] = '2015/06/12'
console.log(pet)
console에서 객체 호출 시, 생일값이 추가되어있음.
JSON.stringigy()
메소드 사용 시, 객체 내부에 있는 속성을 콘솔에 JSON 형태로 출력할 수 있다.
예시:
const pet = {
name: '김명랑',
age: 7,
breed: 'dachshund',
eat: function(food){
alert(this.name +'은 '+ '하루에 두끼 '+ food +'를 먹는다.')
}
}
console.log(JSON.stringify(pet, null, 2))
/*{
"name": "김명랑",
"age": 7,
"breed": "dachshund"
}
출력된 값이 해당 객체를 JSON 형식으로 보여주고 있음
(다만 함수형 속성은 JSON.stringify 호출 시 무시된다. 몇몇 자료형 속성은 무시됨!!)
*/
delete 객체.속성
형식을 이용해서 쉽게 객체의 속성을 제거할 수 있다.
예시: 객체pet에서 속성age 제거
const pet = {
name: '김명랑',
age: 7,
breed: 'dachshund',
eat: function(food){
alert(this.name +'은 '+ '하루에 두끼 '+ food +'를 먹는다.')
}
}
delete pet.age
console.log(JSON.stringify(pet, null, 2))
/*{
"name": "김명랑",
"breed": "dachshund"
}
*/ // 콘솔에 호출 시, age가 사라짐
function() { }
형태로 객체의 속성을 메소드로 선언할 수 있다.
현재의 자바스크립트는 메소드를 더 간편하게 선언할 수 있는 전용 구문이 있다.
예시:
const pet = {
name: '김명랑',
age: 7,
breed: 'dachshund',
eat(food){
alert(this.name +'은 '+ '하루에 두끼 '+ food +'를 먹는다.')
}
}
pet.eat('사료')
eat의 형태가 속성의 key값: function(매개변수) {statement}
형식에서,
속성의 key값 (매개변수) {statement}
의 형태로 변경되었다.
key:value
형식에서도 벗어난 셈console에 찍히는 문구가 어떤 문구일지 예상하기!
const object = {
ko: '빵',
en: 'bread',
fr: 'pain',
es: 'pan',
lang: {
ko: '한국어',
en: '영어',
fr: '프랑스어',
es: '스페인어'
},
print: function(a){
console.log(`${this.ko}은 ${this.lang[a]}로 ${this[a]}입니다.` )
}
}
object.print('en')
객체의 메소드의 매개변수에 들어간 값은 []안에 해당된다.
this.키워드 >> 이 형식에서 키워드는 객체의 키값을 의미.
this[a]의 경우, this.en과 같다.
콘솔에 출력된 값은: "빵"은 "영어"로 "bread"입니다.
아이고 이제 객체의 6-1이 끝났구만!
공부는 정말 끝이 없고,,, 지치기도 한다.
근데 너무 신기해. 누가 이렇게 생각을 했을까?
천재를 이해하진 못 해도 천재가 만들어둔 결과물은 이해할 수 있다면 좋겠다.
프로그래밍 언어란... 정말 신기해..
출처: 혼자 공부하는 자바스크립트 (한빛미디어)