[CleanCode_JS]_객체 & 자료구조

Dev_min·2021년 2월 28일
0

CleanCode

목록 보기
3/5

객체와 자료구조

getter와 setter를 사용한다

  • 객체의 속성을 얻는 것 이상의 많은 것을 하고 싶을 때, 코드에서 모든 접근자를 찾아 바꾸고 할 필요가 없다.
  • set 할때 검증로직을 추가하는 것이 코드를 더 간단하게 만든다.
  • 내부용 API를 캡슐화 할 수 있다.
  • gettingsetting할 때 로그를 찾거나 에러처리를 하기 쉽다.
  • 서버에서 객체 속성을 받아올 때 lazy load 할 수 있다.
// bad
function makeBankAccount() {
  // ...

  return {
    // ...
    balance: 0
  };
}

const account = makeBankAccount();
account.balance = 100;

// good
function makeBankAccount() {
  // private으로 선언된 변수
  let balance = 0;

  // 아래 return을 통해 public으로 선언된 "getter"
  function getBalance() {
    return balance;
  }

  // 아래 return을 통해 public으로 선언된 "setter"
  function setBalance(amount) {
    // ... balance를 업데이트하기 전 검증로직
    balance = amount;
  }

  return {
    // ...
    getBalance,
    setBalance
  };
}

const account = makeBankAccount();
account.setBalance(100);

1. 객체에 비공개 멤버를 만든다.

: 클로저를 이용하면 가능하다

// bad
const Employee = function(name) {
  this.name = name;
};

Employee.prototype.getName = function getName() {
  return this.name;
};

const employee = new Employee('John Doe');
console.log(`Employee name: ${employee.getName()}`); // Employee name: John Doe
delete employee.name;
console.log(`Employee name: ${employee.getName()}`); // Employee name: undefined

// good
function makeEmployee(name) {
  return {
    getName() {
      return name;
    },
  };
}

const employee = makeEmployee('John Doe');
console.log(`Employee name: ${employee.getName()}`); // Employee name: John Doe
delete employee.name;
console.log(`Employee name: ${employee.getName()}`); // Employee name: John Doe

참고 링크 Github

profile
TIL record

0개의 댓글