π [ λ νκ° ] ν¨μν μλ°μ€ν¬λ¦½νΈλ₯Ό μ½κ³ ..
βοΈ μλ‘
μ΄ μ± μ μλ μ μ¬λ΄ νλ‘μ νΈλ₯Ό λλ£μ νμ΄νλ‘κ·Έλλ°μ νλ©΄μ μ‘λ΄μκ°μ ν¨μν νλ‘κ·Έλλ°μ΄ 무μμΈμ§ μ€λͺ ν΄ μ£Όκ³ κ΄λ ¨ μμ μ μΆμ²ν΄ μ€μ μ½κ² λ μ± μ΄λ€. (μ΄ν μ¬λ΄ μ€ν°λ μ£Όμ λ₯Ό νμ€μΌλ‘ μ νλ©΄μ ν¨μν νλ‘κ·Έλλ° κ³΅λΆμ μ°μ₯μ μ΄ λμλ€.)
λ
μ κΈ°κ°μ 22.10.11.
λΆν° 23.4.27.
μ΄λ©°, μ±
μ μ½ 320μͺ½μΌλ‘ ꡬμ±λμ΄μκ³ , νμ€μΌμ λ°°μ°λ λμ μ΅μν ꡬ문μ 보며 ν¨μν νλ‘κ·Έλλ°μ μ
λ¬Ένλ €λ λ
μμκ² μμ±λ§μΆ€μ
λλ€.(λΌκ³ μλμ μ νμμ§λ§ ν¨μν νλ‘κ·Έλλ° μ체μ λμ΄λλ μ¬μ΄ νΈμ μλλΌμ μλ°μ€ν¬λ¦½νΈ λ¬Έλ²μ μ΄λ μ λ μλ λΆλ€μκ² κΆμ₯νκ³ ν μ±
μ΄λ€.)
μ± μ λ΄μ©μ κ³ κ³ν¨μ, ν΄λ‘μ , ν¨μ 컀λ§/ν©μ± λ±μ κ°λ κ³Ό λλ€ ννμ, μ΄ν°λ μ΄ν°, μ λλ μ΄ν°, νλ‘λ―Έμ€ κ°μ ES6 κ·Έλ¦¬κ³ λͺ¨λλ, 리μ‘ν°λΈ νλ‘κ·Έλλ°, μ΄λ²€νΈ μ€μ¬ λ° λΉλκΈ° μ½λλ₯Ό ν¨μν νλ‘κ·Έλλ°μΌλ‘ νμ΄λΈ μ± μ΄λ€.
λν, μ΄ μ± μμ ν¨μνμΌλ‘ μ½λλ₯Ό μμ± ν λ μλνν° λΌμ΄λΈλ¬λ¦¬(λ‘λμJS, λλ€JS, RxJS λ±..)λ₯Ό μ¬μ©νλλ°, μλ°μ€ν¬λ¦½νΈλ νμ€μΌ κ°μ μμ ν¨μν μΈμ΄κ° μλκΈ° λλ¬Έμ μ§μ§ ν¨μν μΈμ΄μ ν΅μ¬μΈ 컀λ§, λ©λͺ¨ν, λκΈν νκ°, λΆλ³μ± λ±μ νλ΄λ΄κΈ°μν΄ μ¬μ©νλ€. λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©ν¨μΌλ‘μ¨ ν¨μν νλ‘κ·Έλλ°μ κΈ°λ²λ€μ λ΄λΆλ₯Ό μΌκ΄λ λ°©ν₯μΌλ‘ μΆμννκ³ κ°λ¨ν ν¨μλ‘ μ½λλ₯Ό μμ±νκ² μ λνλ κ³ μμ€ μ νΈλ¦¬ν° ν¨μμ μΈμ΄μ λΆκ°μ μΈ μμλ₯Ό μ 곡ν¨μΌλ‘μ¨ νμ€ μλ°μ€ν¬λ¦½νΈ νκ²½κ³Όμ 격차λ₯Ό μ€μλ€.
μ μΈν νλ‘κ·Έλλ°μ μ₯μ μ μ¬λ¬κ°μ§κ° μμ§λ§ κ·Έμ€μ νλλ₯Ό λ½μλ©΄ μΆμνκ° μλκΉ μκ°νλ€. νλ‘κ·Έλ¨μ μΆμν μμ€μ λμ¬ μ΄λ»κ²(How)보λ€λ 무μ(What)μ λνλ΄λμ§μ μ§μ€νκΈ° λλ¬Έμ κ°κ²°νκ³ μ μΈμ μΈ λ°©μμΌλ‘ 볡μ‘ν μμ μ μ²λ¦¬ν μ μμΌλ, λ¨μ μΌλ‘λ λμ λ¬λ컀λΈμ΄λ€. λΆμν¨κ³Όλ₯Ό μμ£Ό λ°μνλ μλ°μ€ν¬λ¦½νΈ νΉμ§(μ μ λ²μμμ λ³μ/μμ±/μλ£κ΅¬μ‘°λ₯Ό λ³κ²½, μ¬μ©μ μ λ ₯μ μ²λ¦¬, μμΈλ₯Ό μΌμΌν¨ ν΄λΉ ν¨μκ° λΆμ‘μ§ μκ³ κ·Έλλ‘ μμΈλ₯Ό λμ§, HTMLλ¬Έμ, λΈλΌμ°μ μΏ ν€, DBμ§μ, DOM μμ λ±..) λλΆμ λͺ¨λ μ½λλ₯Ό ν¨μνμΌλ‘ μμ±νκΈ°λ³΄λ€ λͺ λ Ήνμ μΌλ‘ μμ±νλ κ²μ μ΅μν΄μ Έ μλ κ°λ°μλ€μ μ²μ λλΌλ ν¨μν μ¬κ³ λ°©μμ΄λΌλ λ²½μ λ§νλ κ²½μ°λ μ’ μ’ μμ κ²μ΄λ€.
βοΈ λ³Έλ‘
μ¬μ¬μ© κ°λ₯ν, λͺ¨λμ μΈ μ½λλ‘
- νμνν νν μλ£ν
const Tuple = function (/* νμ */) {
const typeInfo = Array.prototype.slice.call(arguments); // ννμ λ΄κΈ΄ μΈμ νμμ μ½μ΅λλ€.
console.log("typeInfo :>> ", typeInfo);
const _T = function (/* κ° */) {
// λ΄λΆν _Tλ ννμ νμκ³Ό κ°μ΄ λ§λμ§ νμΈν©λλ€.
const values = Array.prototype.slice.call(arguments); // ννμ μ μ₯λ κ°μ κΊΌλ
λλ€.
if (values.some((val) => val === null || val === undefined)) {
throw new ReferenceError("ννμ null κ°μ κ°μ§ μ μμ΅λλ€!");
}
if (values.length !== typeInfo.length) {
// μ μλ νμ κ°μμ νν νμκ° μΌμΉνλμ§ μ²΄ν¬ν©λλ€.
throw new TypeError("νν νμκ° νλ‘ν νμ
κ³Ό λ§μ§ μμ΅λλ€!");
}
values.forEach((val, index) => {
// κ° νν κ°μ νμμ΄ μ¬λ°λ₯Έμ§ checkTypeν¨μλ‘ μ‘°μ¬ν©λλ€. κ° νν μμλ ._n(μμ μΈλ±μ€ nμ 1λΆν° μμ)λ‘ μ°Έμ‘° κ°λ₯ν νν μμ±μΌλ‘ λ°κΏλλ€.
this["_" + (index + 1)] = checkType(typeInfo[index])(val);
}, this);
Object.freeze(this);
};
_T.prototype.values = () => {
return Object.keys(this).map((k) => this[k], this);
};
return _T;
};
const Status = Tuple(Boolean, String);
console.log("Status :>> ", Status());
- curry: λ€λ³μ ν¨μκ° μΈμλ₯Ό μ λΆ λ°μ λκΉμ§ μ€νμ 보λ₯, λλ μ§μ°μμΌ λ¨κ³λ³λ‘ λλ λ¨ν ν¨μμ μμ°¨μ΄λ‘ μ ννλ κΈ°λ²
// λ μΈμλ₯Ό μλμΌλ‘ 컀리
function curry(fn) {
return function (firstArg) {
// μ²μ curry2 νΈμΆ μ 첫 λ²μ§Έ μΈμλ₯Ό ν¬μ°©ν©λλ€.
return function (secondArg) {
// λ λ²μ§Έ νΈμΆ μ λ λ²μ§Έ μΈμλ₯Ό ν¬μ°©ν©λλ€.
return fn(firstArg, secondArg); // λ μΈμ firstArg, secondArgλ‘ ν¨μλ₯Ό μ€νν κ²°κ΄κ°μ λ°νν©λλ€.
};
};
}
- λΆλΆ μ μ©(partial application): ν¨μμ μΌλΆ 맀κ°λ³μ κ°μ μ²μλΆν° κ³ μ μμΌ νμκ° λ μμ ν¨μλ₯Ό μμ±νλ κΈ°λ²
function partial() {
let fn = this;
let boundArgs = Array.prototype.slice.call(arguments);
let placeholder = undefined;
let bound = function () {
let position = 0;
let length = boundArgs.length;
for (let i = 0; i < length; i++) {
args[i] =
boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];
}
while (position < arguments.length) {
args.push(arguments[position++]);
}
return fn.apply(this, args);
};
return bound;
}
- ν¨μ ν©μ±: 볡μ‘ν μμ μ νλ° λ¬Άμ΄ κ°λ¨ν μμ μΌλ‘ μͺΌκ°λ κ³Όμ
// compose ꡬνλΆ
function compose() {
let args = arguments;
let start = args.length - 1;
return function () {
// composeλ μ€μ μΈμλ₯Ό λ£κ³ νΈμΆν λ λ€λ₯Έ ν¨μλ₯Ό μΆλ ₯ν©λλ€.
let i = start;
let result = args[start].apply(this, arguments); // μ λ¬λ μΈμλ₯Ό λ£κ³ λμ μΌλ‘ ν¨μλ₯Ό μ μ©ν©λλ€.
while (i--) {
result = args[i].call(this, result); // μ΄μ λ¨κ³ λ°νκ°μ λ€μ μΈμλ‘ λ£κ³ κ·Έλ€μ ν¨μλ₯Ό κ³μ λ°λ³΅ μ€νν©λλ€.
}
return result;
};
}
ν¨μν 리μ‘ν°λΈ νλ‘κ·Έλλ°
Rx.Observable κ°μ²΄λ ν¨μνκ³Ό 리μ‘ν°λΈ, λ νλ‘κ·Έλλ° μΈμμ νλλ‘ λ¬Άμ΅λλ€. μ΄ κ°μ²΄λ 5μ₯μ map, of, join λ± μ΅μνμ λͺ¨λλ μΈν°νμ΄μ€μ ν΄λΉνλ ꡬν체μ μ€νΈλ¦Ό μ‘°μμ νΉνλ λ©μλλ₯Ό μ¬λΏ κ±°λ립λλ€. λ€μμ SSN νλκ°μ΄ μ¬λ°λ₯Έμ§ κ²μ¦νλ κ°λ¨ν μμ μ λλ€.
// AS-IS
document
.querySelector("#student-ssn")
.addEventListener("change", function (event) {
let value = event.target.value;
value = value.replace(/^\s*|\s*$|\-/g, "");
console.log(value.length !== 9 ? "λ§μ" : "νλ¦Ό");
});
// TO-BE
Rx.Observable.fromEvent(document.querySelector("#student-ssn"), "change")
.map((x) => x.target.value)
.map(cleanInput)
.map(checkLengthSsn)
.subscribe((ssn) =>
ssn.isRight ? console.log("Valid") : console.log("Invalid")
);
βοΈ κ²°λ‘
μ΄λ€ λ°©λ²μ λμ ν λ μΌμ₯μΌλ¨μ κ³ λ €ν΄μΌνλ€. 무μλ³΄λ€ μ€μν κ²μ, 100% μ μΈν νΉμ λͺ λ ΉνμΌλ‘ μ½λλ₯Ό μμ±νλ κ²μ΄ μλλΌ, κ°κ°μ μ₯, λ¨μ μ νμ νμ¬ μ§κΈ λμ μν©μ ν΄κ²°νλ λ° λ μ ν©ν λ°©λ²μ λμ νλ κ²μ΄μ§ μμκΉ μκ°νλ€.
μ΄λ² μ¬λ΄ μ€ν°λλ 리ν©ν λ§μ μ μ²νλλ°, μ€ν°λ λ μ°Έκ³ νλ μμ μ΄ λ¦¬ν©ν λ§ 2νμ΄λ€. κ·Έλμ λ€μ μμ μ 리ν©ν λ§ 2νμΌλ‘ μ νλ€. (μ½μ΄μΌ ν μ± μ΄ νλ λ μλλ° κ·Έ μ λͺ λμ λ§λ²μ¬ μ± μ΄λ€.)
'λ μ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[ λ νκ° ] 리ν©ν°λ§ 2νμ μ½κ³ .. (1) | 2023.06.17 |
---|---|
[ λ νκ° ] 리μ€ννΈ(μΌλμ μ°½μ μ μ΄μμ§μ κ²½μ μΌκΈ°)λ₯Ό μ½κ³ .. (0) | 2023.06.06 |
[ λ νκ° ] μλ³Έμ¬(θ³ζ¬εΏ)μ μ½κ³ .. (2) | 2023.04.02 |
[ λ νκ° ] μ½λ μλ μκ³ λ¦¬μ¦κ³Ό λ°μ΄ν° ꡬ쑰λ₯Ό μ½κ³ .. (0) | 2023.03.20 |
[ λ νκ° ] κΈλ¦¬ νλ μμμ λΏμΈ λ°λ₯Ό μ½κ³ .. (0) | 2023.03.09 |
λκΈ