데이터 오브젝트
데이터를 공개하고 수정할 수 있게 제공해준다
OOP 오브젝트
데이터를 숨기고 데이터를 다룰 수 있는 메소드를 제공해준다
데이터 오브젝트 예시
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| const createPerson = ({ fname, lname }) => ({ fname, lname });
const obj = { fname: 'Jhon', lname: 'Locke' }; const clone = { ...obj }
function person(fname, lname) { const person = {}; person.fname = fname; person.lname = lname; return person; }
const fname = 'Jhon'; const lname = 'Locke' const obj = { fname, lname };
function person(fname, lname){ const fullname = () => `${fname} ${lname}`; return { fname, lname, fullname } } const person1 = person('John', 'Locke'); person1.fullname();
function createPerson(name) { function getName() { return name; } return Object.freeze({ name, getName }); } const person = createPerson('John Locke'); console.log(person.name)
|
OOP 오브젝트 예시 (Factory Functions)
PersonStore
라는 Factory Function 을 만들어서 사용하기에
Person 에 직접 접근할 수 가 없다.
add, removeById, getItems
메소드만 접근이 가능하다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| function PersonStore() { let items = [];
function add(person) { items.push(person); }
function removeById(id) { items = items.filter((p) => p.id !== id); }
function getItems() { return Object.freeze([...items]); }
return Object.freeze({ add, removeById, getItems, }); } const store = PersonStore(); store.add({ id: 1, name: 'John Lock' }); store.add({ id: 2, name: 'Jack Shephard' }); store.add({ id: 3, name: 'James "Sawyer" Ford' }); store.removeById(3);
console.log(store.getItems());
|
Factory method 는 변경불가
add 메소드를 재정의 하거나
items 를 강제로 변경하려고 해도 변경되지 않는다