snaag / TIL

https://github.com/snaag/todo3/issues
3 stars 0 forks source link

22-04-07-THU #6

Open snaag opened 2 years ago

snaag commented 2 years ago
snaag commented 2 years ago

1. 왜 자바스크립트인가? (48p)

자바스크립트를 함수형 언어로 선택한 이유

2. 함수형 대 객체지향 프로그래밍 (49p)

객체지향으로 짠 코드, 함수형으로 짠 코드 비교

get fullname() {
   return [this._firstname, this._lastname].join(''); // 메서드의 경우 대개 this 로 상태에 접근함
}
var fullname = (person) => [person.firstname, person.lastname].join('');

3. 동적인 자바스크립트 객체의 상태를, 불변하게 관리하는 법

상태란 어느 한 시점에 찍은 모든 객체에 저장된 데이터의 스냅샷 이다.

1. 값 객체 패턴 👎

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;
    }
  }
}

2. Object.freeze() 👎

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 로 바뀌었음)

3. 메서드를 호출할 때마다 새 객체를 만들어서 반환하기 👎

OOP에서는 메서드를 호출해서 객체의 내부 내용을 바꾸는 일이 비일비재합니다. 그 결과, 상태를 조회한 결과를 보장하기 어렵고 어떤 객체가 원래 그대로일 거라 기대했던 모듈은 기능 자체가 무용지물이 될 가능성이 있습니다.

(난 잘 이해가 안간다, 아래쪽 etc-2)

set lastname(lastname) {
  return new Person(this._firstname, lastname, this._ssn);
};

4. 렌즈(lense) 👍

// 기본적으로 람다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 의 연장선상에 있는 질문)
snaag commented 2 years ago

etc

  1. 함수형은 구조적인 프로그래밍에 취약할 것 같다

    • 객체지향의 경우 xx 함수는 A 라는 클래스에 속해있는거구나 가 눈에 확 들어와서 구조를 파악하기가 더 쉬웠다. 그런데 함수형으로짜면 xx 는 A 클래스에 속한다 이런 개념이 없는 것 같아서... 이런 경우엔 코드를 더 구조적으로 보기 어렵지않을까....???
  2. 그 instance 내에서는 변수가 공유되길 바래서 쓰는건데, property 를 set 할 때 마다 새 instance 를 만들어주면... 의미가 있나??

  3. 디버깅이 쉽지 않나? (해웅)

snaag commented 2 years ago

closure(?) : 밖에있는 변수가, 안에로 안에있는 변수가 밖으로 나갈 수 없음