1.객채의 정의
primitive type
자바스크립트 자료형의 기본 타입으로 변경 불가능 한 값이다. 변수 하나당 하나의 값을 원칙으로 한다.
const name = 'yurim';
const gender = 'female';
const age = 29;
yurim이라는 사람에 대한 정보를 각각의 변수에 담아서 console창에 출력하는 함수를 만들고자 한다면
아래와 같이 각각의 변수들을 다 입력해주어야 할 것이다.
const print = (name,gender,age) => {
console.log(name, gender, age);
}
print(name, gender, age);
이러한 방법은 인자의 값이 적을때면 큰 문제가 없지만 인자의 값이 많아질 경우 파라미터가 너무 많이 생기고,
결국 관리가 힘들고 하나의 그룹으로 묶어서 생각하기가 힘들어진다.
이를 개선하고자 사용되는 개념이 바로 Object이다
MOZILLA 사이트에서 정의된 내용을 찾아보면 Object란 , 객체는 속성들을 담고있는 가방 (collection) 으로 볼 수 있다. 객체 리터럴 문법 (object literal syntax) 으로 제한적으로 몇 가지 속성을 초기화할 수 있고, 그러고 나서 속성들을 추가하거나 제거할 수도 있다. 속성 값은 객체를 포함해 어떠한 자료형도 될 수 있고, 그 덕분에 복잡한 데이터 구조를 형성하는게 가능해진다. 속성은 키 (key) 값으로 식별된다. 키 값은 String 이거나 Symbol 값이다.
두 종류의 객체 속성이 있는데, 이들은 종류에 따라 특성값들을 가질 수 있다. 데이터 (data) 속성과 접근자 (accessor) 속성이 그것이다.
즉 객체란 같은 속성 혹은 비슷한 속성을 묶어서 정의내린 하나의 덩어리같은 개념이다.
객체를 정의하는 방법은 2가지가 있다
//방법 1
const yurim01 = { name: 'yurim', gender : 'female', age : 29 }
//방법 2
const yurim02 = new Object();
yurim02.name = 'yurim';
yurim02.gender = 'female';
yurim02.age = 29;
이렇게 객체로 정의해준 값을 받아오는 함수를 실행시킬때는
const print = (user) => {
console.log(user)
};
print(yurim01);
print(yurim02);
이렇게 하나의 파라미터만으로도 객체에 포함된 key:value값을 관리 할 수 있기 때문에
훨씬 더 직관적이고 깔끔하게 데이터를 관리 할 수 있다.
2. 객체의 vlaue에 접근하는 방법
위와 같이 객체는 객체 자체를 한꺼번에 꺼내 볼 수도 있지만, key값을 이용해서 원하는 vlaue에만 접근하는것도 가능하다.
//방법1 : 대부분 이 방법을 사용, 코딩하는 순간 vlaue값을 받아오고 싶을 때 사용된다.
print(yurim01.name);
//방법2 : 정확하게 어떤 키가 이용될지 모를 때 사용
print(yurim02['name']);
대부분 첫번째 방법이 사용되지만 2번이 사용되는 경우가 있다. 정확하게 어떤 키가 이용될지 모르는 상황에서는 2번의 방법을 사용하게 된다.
아래 console실행 함수에서 console.log(obj.key);를 입력하면
함수가 만들어지는 순간에 key값이 정의되지 않았기 때문에 undefined가 뜨게된다.
function printValue(obj, key){
console.log(obj[key]);
}
printValue(yurim01,'name');
3. 객체를 만든 후에도 속성을 추가, 삭제 할 수 있다.
yurim01.hasjob = false;
delete yurim01.hasjob;
4. 자바스크립트에서 객체의 key, value값이 같으면 값을 각각 표기하지 않고 한번만 표기할 수 있다.
const makeNewPerson = (name, gender, age) => {
return {
name: name,
gender: gender,
age: age
};
};
const changkyu = makeNewPerson("changkyu", "male", 30);
makeNewPerson이라는 함수를 만들어 changkyu라는 객체를 생성해보았다.
이때 모든 key값과 value값의 이름이 같을땐 한번씩만 표기함으로써 더 깔끔한 모양새로 객체를 만들 수 있다.
const makeNewPerson = (name, gender, age) => {
return {
name,
gender,
age
};
};
5. 객체를 생성하는 함수는 class와 비슷한 역할을 한다.
function Person (name, gender, age){
this.name = name,
this.gender = gender,
this.age = age
};
const changkyu = new Person("changkyu", "male", 30);
위와 같이 class처럼 사용도 가능하다
6. in operator
console.log('name' in changkyu);
위와 같이 'key' in Object를 사용해서 key값의 유무를 조회 할 수 있다.
7. 객체를 clone 시 주의사항
const yurim01 = { name: "yurim", gender: "female", age: 29 };
const yurim02 = yurim01;
yurim02.gender = 'male';
console.log(yurim01.gender);
위의 코드를 그대로 작성해보면 console창에는 female이 찍힐까 male이 찍힐까?
정답은 female이다.
객체를 변수에 할당하게되면 같은 객체가 +1되는것이 아니고,
새로운 변수가 같은 값을 들여다 보게 된다.
따라서 object를 클론하고싶으면 새로운 객체를 선언 한 후 for문 등을 통해 새로 생성해주어야한다
(for문에 대해선 추후 따로 정리하여 포스팅 할 예정이다 :) )
참고: 드림코딩 엘리 유튜브 https://www.youtube.com/watch?v=1Lbr29tzAA8&t=133s
'JAVASCRIPT' 카테고리의 다른 글
DOM EVENT (0) | 2021.03.25 |
---|---|
배열 내장함수 총 정리 (0) | 2021.03.25 |
배열내장함수 - reduce (0) | 2021.03.24 |
배열내장함수 - concat / join (0) | 2021.03.23 |
배열 내장함수 - shift / pop / unshift / push (0) | 2021.03.23 |