Javascript 내용 정리

문법 - 속성과 메소드(with 객체)

강민승 2022. 10. 12. 01:24

자바스크립트에서는 실제 순수한 데이터를 속성이라고 하고  내용물이 함수(function())가 들어간 속성을 메소드라고 한다.

이는 객체생성을 통해 쉽게 확인할 수 있다.

 

const obj = {
  name: "minseung",
  age: "31",
  getFamilyName: function () {
    return "Kang";
  },
  getLastName: () => "Kang",
  getBloodType() {
    return "O";
  },
};

obj.name; // minseung
obj.age; // 31
obj.getFamilyName(); // Kang 
obj.getLastName(); // arrow 함수
obj.getBloodType(); // O, function과 콜론을 제거하는 축약형 문법

 

또한 자바스크립트에서 객체를 만드는 방법에는 크게 3가지가 존재한다.

 

첫번째는 방금 전과 같이 객체리터럴을 사용하여 만들 수 있으며,

 

두번째는 클래스 만들어 인스턴스 객체를 만들 수 있다. 여기서 Class는 객체를 생성하기 위한 템플릿을 말한다.

 

// typescript

class Person {
  _bloodType: string;

  constructor(bloodType: string) {
    this._bloodType = bloodType;
  }
  
  // 클래스를 만들고나서  인스턴스 객체를 만들때 초기값 세팅을 해줄 수 있는 것이 바로 constructor!
  
  bloodType(btype:string){
  	this._bloodType = btype
  }
  
}

const minseung = new Person("O");

 

여기서 외부에서 접근할때 메소드의 접근방식(minseung.bloodType() = 'c')이 아닌 대입문을 이용해서 속성(minseung.bloodType = 'c')으로 접근하고 싶을때는 메소드 앞에 set을 입력해주면 된다.(이것이 바로 setter와 getter)

 

 

class Person {
  _bloodType: string;

  constructor(bloodType: string) {
    this._bloodType = bloodType;
  }
  set bloodType(btype: string) {
    if (btype === "A" || btype === "B" || btype === "O" || btype === "AB") {
      this._bloodType = btype;
    }
  }
  get bloodType() {
    return `${this._bloodType}형`;
  }
}

const minseung = new Person("O");
minseung.bloodType; // 'O형'

 

 

Getter와 Setter는 일반적인 객체에서는 형성할 수 없고 클래스 내에서만 형성할 수 있는 특별한 스펙이다.

 

 

마지막 세번째는 Object(최상위 객체)가 제공하는 create 메소드를 이용한다.

 

 

const Myobj = Object.create(null, {
  name: {
    value: "Gang minseung",
    writable: true,
    configurable: false,
  },
});

 

 

create 메소드의 첫번째 인자부모 객체로써 작동되게 될 객체를 입력받는다(이 부분은 프로토타입과 관련 되어있다고 한다. 지금은 이해가 되지 않음으로 pass).

 

두번째 인자구성객체(구성정보가 어떻게 되어있냐를 객체로 표현해서 넘겨준 것)이다.


wraitable속성은 값을 true를 해주면 다른 값으로 바꿀 수 있다.

즉 , false로 되어있으면 Myobj.name = "가나다라마바사" 가 안되는 것!  (readonly느낌이라고 생각하면 이해하기 편하다)

 

여기서 Myobj의 name 객체를 삭제하고 싶을때는 delete Myobj.name과 같이 변수명 앞에 delete를 붙여주면 되는데,

 

삭제를 하고 싶을때는 configurable을 true로하면 된다. 반대로 false로 해두면 삭제할 수 없다.