원시형 타입(Primitive type)을 넘어서 드디어 Object
타입으로 왔다.
Object
타입은 객체 타입으로 원시형 타입과 다르게 객체형은 다양한 데이터를 담을 수가 있다.
객체는 아래의 코드처럼 key : value
를 한쌍으로 가지는 속성을 뜻하는 property
를 가진다.
<script>
// 다양한 데이터들을 넣을 수 있는 객체형
let obj = {
name : 'hyunwoo', // 문자열 타입
age : 29, // 숫자 타입
study : true, // 불리언 타입
stack : ["HTML", "CSS", "JS", "React"] // 배열 등등..
}
</script>
객체는 두 가지 방법으로 선언이 가능한데, '생성자를 통한 선언'과 '객체 리터럴 방식'이 있다.
<script>
let obj1 = new Object(); // 생성자를 통한 선언
let obj2 = {}; // 객체 리터럴 방식
</script>
이 두두가 중에 보통은 2가지 중에서 '객체 리터럴 방식'을 많이 사용한다.
Object
의 property
에는 다양한 데이터 타입의 value
가 들어갈 수 있다고 했다.
이 value
에 아래처럼 함수
를 넣는다면?
<script>
let user = {
name : 'Mike',
age : 29,
status : function(action){
console.log(`저는 현재 ${action} 중 입니다.`)
}
}
</script>
value
의 함수
를 넣었는데 함수 호출은 어떻게 할까?
<script>
user.status("공부") // "저는 현재 공부 중 입니다."
</script>
위처럼 함수
를 호출하여 실행했을 때 결과를 아래처럼 출력된다.
우리는 이 형태를 어디선가 사용해본 경험이 있다.
<script>
console.log("hello world!")
</script>
바로 이것이다.
console
이 object
이고 log
는 property
의 key
이다.
console
을 typeof
를 통해 출력해보면 object
이라고 나온다.
그리고 가지고 있는 많은 property
가 있는데 이 모두의 value
가 거의 모두 함수
로 되어있다.
이것을 key
의 value
가 함수
일 때를 메서드
라고 한다.
object
에 다양한 데이터 타입이 들어갈 수 있다고 했으니 이제 데이터를 추출해서 사용할 수 있어야한다.
그래서 이제 object
의 value
에 접근하는 방법을 알아보자!
<script>
let me = {
name : 'hyunwoo',
age : 29,
todayStudy : true,
stack : ["HTML", "CSS", "JS", "React"],
education : {초등학교 : A초등학교, 중학교 : B중학교, 고등학교 : C고등학교, };
}
</script>
object
에서 수많은 데이터가 들어갈 수 있는데 값에는 어떻게 접근할 수 있을까?
우선 2가지 방법으로 접근할 수 있다.
점 표기법
과 괄호 표기법
으로 접근할 수 있다.
.
을 사용하여 값에 접근하는 것이다.<script>
// 1. 점 표기법
me.name // 'hyunwoo'
me.age // 29
me.todayStudy // true
me.education.초등학교 // A초등학교
</script>
[]
를 사용하여 값에 접근하는 것이다. 반드시 대괄호 안에는 문자열 형태의 값이 들어가야한다.<script>
// 2. 괄호 표기법
me['name'] // 'hyunwoo'
me['age'] // 29
me['todayStudy'] // true
me['education']['초등학교'] // A초등학교
</script>
데이터에 접근할 수 있으니 삭제도 할 수 있어야 하는데 delete
연산자를 사용해서 property
를 삭제할 수 있다.
<script>
let user = {
name : 'hyunwoo',
age : 29,
}
console.log(user); // {name:'hyunwoo', age:29}
delete user.age;
console.log(user); // {name:'hyunwoo', age:29}
</script>
위의 이미지를 보면 property
인 key : age
와 age의 value
가 삭제되어 {name : 'hyunwoo'}
만 남은 채로 출력된다.
다른 타입과 마찬가지로 object
에서 사용할 수 있는 메서드가 있다.
Object.keys
메서드는 객체의 key
만 담은 배열을 반환한다.
<script>
let me = {
name : 'hyunwoo',
age : 29,
education : '대졸'
}
Object.keys(me) // ['name', 'age', 'education']
</script>
Object.values
메서드는 객체의 value
만 담은 배열을 반환한다.
<script>
let me = {
name : 'hyunwoo',
age : 29,
education : '대졸'
}
Object.values(me) // ['hyunwoo', 29, '대졸']
</script>
Object.entries
메서드는 객체의 [key : value]
을 하나의 요소로 하여 배열로 반환한다.
<script>
let me = {
name : 'hyunwoo',
age : 29,
education : '대졸'
}
Object.entries(me) // [Array(2), Array(2), Array(2)]
</script>
이 메서드들은 '배열'을 반환하기 때문에 주로 배열의 메서드와 함께 데이터를 순회하거나 추출할 때 자주 사용된다.
객체는 아무래도 활용하는 빈도가 많아서 강의 내용이 많을 줄 알았는데 생각보다 별로 없어서 뭔가 허전하다.
막상 강의 시간에 한 코드의 양을 살펴보면 다음에 정리할 '배열'이 가장 많아서 걱정이 되기도 한다.
하지만 내가 그나마 사용해봤던 메서드들이 배열에 있기 때문에 어려운 난이도는 아닐 것 같다!
근데 시간이 지날 수록 확실히 강의의 전체적인 내용에서 조금 밀리기 시작한다... 😱
조금씩 놓치는 것도 있는 것 같아 스스로 찾아서 공부하는 습관이 앞으로 더 중요해질 것 같다..
진짜 자바스크립트 공부가 괜히 어렵다는게 아니구나 🤔