[Javascript] Class와 Object 차이점

앤쨩·2021년 10월 26일
2

Javascript

목록 보기
5/8
post-thumbnail

자바스크립트는 프로토타입 기반의 객체지향 언어이다.
대부분의 사람들은 자바스크립트는 객체지향 프로그래밍이 아닌 함수형 프로그래밍 언어로 알고있지만, 사실 자바스크립트는 프로토타입을 기반으로 한 강력한 객체지향 프로그래밍을 제공하기도 하는 멀티 패러다임 언어이다.


🌹 Class

class Person {
  // constructor
  constructor(name, age) {
    // fields
    this.name = name;
    this.age = age;
  }
  // methods
  speak() {
    console.log(`${this.name}: hello!`);
  }
}

우리가 🐟🍞붕어빵🐟🍞을 만든다고 가정을 해보자.
그러면 붕어빵에 속을 넣기 전의 붕어빵은 여러가지 붕어빵이 될수 있겠다. 팥을 넣으면 팥붕어빵, 크림을 넣으면 크림붕어빵이 되듯이 이처럼 속이 비어있는 붕어빵(template)을 클래스(Class) 할 수 있겠다.
💕 특징
✔ 데이터가 없다. (크림이나 팥이 없다고 상상해보자)
✔ 한번만 선언할 수 있다.
✔ 메모리를 할당하지 않는다.
✔ ES6에서 추가된 친구이다.


🌹 Object

기본적으로 오브젝트를 선언하는 방법

// 첫번째 방법
const obj = { name:'앤쨩', age:24 };
// 두번째 방법
const obj2 = new Object( name:'앤쨩', age:24);

클래스를 이용하여 오브젝트를 만드는 방법

class Person {
  // constructor 생성자
  constructor(name, age) {
    // fields
    this.name = name;
    this.age = age;
  }
  // methods
  speak() {
    console.log(`${this.name}: hello!`);
  }
}
// 위의 Class로 Object 만들기
conse anne = new Person('anne', '24');
console.log(anne.name); // anne
console.log(anne.age); // 24
anne.speak(); // anne: hello!

🐟🍞비어있는 붕어빵🐟🍞(Class)에 크림이나 팥(Data)을 넣으면 그게 바로 오브젝트(Object)가 된다고 이해하면 될 것 같다.
💕 특징
✔ 메모리를 할당한다.
✔ 오브젝트만을 사용하게 되면 뒤늦게 또다른 프로퍼티를 추가가 가능하다. 그러면 이러한 짓을 할 수가 있다.

const person = { name:'anne', age: 24};
print(person);
--- // 또다른 프로퍼티 추가
person.hasJob = true;
console.log(person.hasJob); // true
--- // 프로퍼티 삭제
delete person.hasJob;
console.log(person.hasJob); // undefined

다른 언어에서는 흔한일은 아니다. 하지만 이렇게 동적으로 코딩을 하게되면 그때 잠시는 편할지 모르지만 나중에 유지보수가 힘들어지고 예상치 못한 에러가 발생한다.

🧩 팁

/*
- .(dot)
코딩하는 그 순간 그 key에 해당하는 값을 받아보고 싶을때
- Computed properties
정확하게 어떤 key가 필요한지 모를때 (런타임에서 결정될때)
*/
console.log(person.name);
console.log(person['name']);
---
person.hasJob = true;
person['hasJob'] = true;

붕어빵으로 비유를 해주신 드림코딩 엘리님에게 경의를 표하며..🙏🏻
profile
Front-End Developer

1개의 댓글

comment-user-thumbnail
2025년 1월 6일

너무 이쁘게 잘 정리해주셔서 가독성이 너무 좋네요!
바로 이해 됐습니다 감사합니다 ㅎㅎ

답글 달기
Powered by GraphCDN, the GraphQL CDN