Open snaag opened 2 years ago
get fullname() {
return [this._firstname, this._lastname].join(''); // 메서드의 경우 대개 this 로 상태에 접근함
}
var fullname = (person) => [person.firstname, person.lastname].join('');
상태란 어느 한 시점에 찍은 모든 객체에 저장된 데이터의 스냅샷 이다.
function zipCode(code, location) {
let _code = code;
let _location = location || '';
return {
code: function() {
return _code;
},
location: function() {
return _location;
},
fromString: function() {
let parts = str.split('-');
return zipCode(parts[0], parts[1]);
},
toString: function() {
return _code + '-' + _location;
}
}
}
zc.code
이렇게 접근 못하고, zc.code()
이렇게 접근해야 함xx: function() {return yy}
를 작성해주어야 해서 번거로우며, 수정에 불편함var person = new Person('Haskell', 'Curry', '444-44-4444');
person.address = new Address(
'US', 'NJ', 'Princeton',
zipCode('08544', '1234'), 'Alexander St.'
);
person = Object.freeze(person);
person.address._country = 'France'; // -> 허용됨
console.log(person.address.country); // -> France (US 에서 France 로 바뀌었음)
➕
➖
추가자료: https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/seal
OOP에서는 메서드를 호출해서 객체의 내부 내용을 바꾸는 일이 비일비재합니다. 그 결과, 상태를 조회한 결과를 보장하기 어렵고 어떤 객체가 원래 그대로일 거라 기대했던 모듈은 기능 자체가 무용지물이 될 가능성이 있습니다.
(난 잘 이해가 안간다, 아래쪽 etc-2)
set lastname(lastname) {
return new Person(this._firstname, lastname, this._ssn);
};
// 기본적으로 람다JS 는 전역 객체 R 로 모든 기능을 노출함
// 1. person 생성
var person = new Person('Alonzo', 'Church', '444-44-4444');
var lastnameLens = R.lenseProp('lastname');
R.view(lastnameLens, person); // -> Church
// 2. newPerson 생성
var newPerson = R.set(lastnameLens, 'Mourning', person); // 원래 값이 포함된 새로운 객체 사본을 반환함
console.log(newPerson.lastname); // -> Mourning
// 3. person, newPerson 비교
console.log(person.lastname); // -> Church
// (내가 함수형을 잘 몰라서그런가... 다른 객체니까 다른 값 가지고있는거 아닌가... 이것도 etc-2 의 연장선상에 있는 질문)
함수형은 구조적인 프로그래밍에 취약할 것 같다
그 instance 내에서는 변수가 공유되길 바래서 쓰는건데, property 를 set 할 때 마다 새 instance 를 만들어주면... 의미가 있나??
디버깅이 쉽지 않나? (해웅)
closure(?) : 밖에있는 변수가, 안에로 안에있는 변수가 밖으로 나갈 수 없음