EulogiaKoine / koine

์นด์นด์˜คํ†ก ๋ด‡ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ver 2
Apache License 2.0
1 stars 0 forks source link

๐Ÿ•น๏ธ koine library(ver 2.0)

 ๋ฉ”์‹ ์ €๋ด‡R(์นด์นด์˜คํ†ก+RhinoJS) ํ™˜๊ฒฝ์˜ ๋ถ€์กฑํ•œ ์ ์„ ๋ณด์™„ํ•˜๊ณ  ๊ฐœ์ธ์ ์œผ๋กœ ์œ ์šฉํ•œ ๋ชจ๋“ˆ๋“ค์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.

ํ•˜์œ„ ํŒจํ‚ค์ง€๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.


How to use?

 ๋ฉ”์‹ ์ €๋ด‡ ๊ธฐ๋ณธ ํด๋”/global_modules์— ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋ฐ›์•„ koine ํด๋”๋ฅผ ๊ทธ๋Œ€๋กœ ์ง‘์–ด๋„ฃ๊ณ , ๋ด‡์˜ ์ „์—ญ์—์„œ ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

// ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜
const LIBRARY_PATH = '/storage/emulated/0/koine'
require(LIBRARY_PATH)(
    this, // [object global] - ์ „์—ญ ๊ฐ์ฒด
    LIBRARY_PATH // koine ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์œ„์น˜ํ•œ ๊ฒฝ๋กœ
    // ๊ฒฝ๋กœ ๊ธฐ๋ณธ๊ฐ’ = ๋ฉ”์‹ ์ €๋ด‡R์˜ global_modules/koine
)

// ๊ฐ ๋ชจ๋“ˆ ๋ณ„ ์ดˆ๊ธฐ ์„ค์ •
// ์ดˆ๊ธฐ ์„ค์ •์ด ํ•„์š”ํ•œ ๋ชจ๋“ˆ์€ ์†์„ฑ์œผ๋กœ ํ˜ธ์ถœ ์‹œ null์ด ๋ฐ˜ํ™˜๋จ
kpack.init(
    "packageName.moduleName",
    "base", // ํ•ด๋‹น ํŒจํ‚ค์ง€์˜ ๋ชจ๋“  ํ•˜์œ„ ๋ชจ๋“ˆ ์ ์šฉ
    "extension.Array.range"
)

klib.packageName.moduleName // ์ง์ ‘ ํ˜ธ์ถœ ๊ฐ€๋Šฅ




How to Develop?

 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ํŒจํ‚ค์ง€, ๋˜๋Š” ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

  1. Package
  2. Module
  3. base ํŒจํ‚ค์ง€
// ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ
koine //๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
โ”” package // ํŒจํ‚ค์ง€๋ช…
  โ”” config.json // ํŒจํ‚ค์ง€ ์ •๋ณด/์„ค์ • ํŒŒ์ผ
  โ”” module // ๋ชจ๋“ˆ๋ช…
    โ”” config.json // ๋ชจ๋“ˆ ์ •๋ณด/์„ค์ • ํŒŒ์ผ
    โ”” index.js // ๋ชจ๋“ˆ
    โ”” init.js // ์ดˆ๊ธฐ ์„ค์ • ํ•จ์ˆ˜
  โ”” package
    ...


Package_

 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํด๋”์˜ ํ•˜์œ„ ํด๋” ์ค‘ config.json ํŒŒ์ผ์ด ์กด์žฌํ•˜๋ฉฐ, type:"koinelib/package" ์ผ ๊ฒฝ์šฐ ํŒจํ‚ค์ง€๋กœ ํŒ์ •ํ•ฉ๋‹ˆ๋‹ค.

 ํ•ด๋‹น ๊ฐ์ฒด์—๋Š” ํŒจํ‚ค์ง€์˜ ์ •๋ณด์™€ ๊ธฐ๋ณธ ์„ค์ •์„ ๊ธฐ์ˆ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

{
    "type": "koinelib/package", // ํ•ด๋‹น ์†์„ฑ์ด ์žˆ์–ด์•ผ ํŒจํ‚ค์ง€๋กœ ํŒ๋‹จ
}


Module

 ํŒจํ‚ค์ง€์— ์†ํ•œ ํด๋” ์ค‘ ์•„๋ž˜ ์กฐ๊ฑด์„ ๋ชจ๋‘ ๋งŒ์กฑํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋ชจ๋“ˆ๋กœ ํŒ์ •๋ฉ๋‹ˆ๋‹ค.

  1. ํ•˜๋‚˜ ์ด์ƒ์˜ ์ƒ์œ„ ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ง„๋‹ค.
  2. index.js๊ฐ€ ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  3. type=="koinelib/module"์ธ config.json์ด ์กด์žฌํ•œ๋‹ค.


 ํŒจํ‚ค์ง€์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ config.json์˜ ์–‘์‹์€ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

{
    "type": "koinelib/module", // ๋ชจ๋“ˆ ํŒ์ • ์กฐ๊ฑด
}


  (*version 0.4 ์ถ”๊ฐ€)index.js ํŒŒ์ผ์€ ๊ธฐ๋ณธ์ ์ธ ๋ชจ๋“ˆ ์ฝ”๋“œ์™€ ๋™์ผํ•˜๋˜, ์•„๋ž˜์ฒ˜๋Ÿผ 'ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜' ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

module.exports = function(pack){
    ...
    return func // ํ•จ์ˆ˜
}

 ์ด๋•Œ export๋˜๋Š” ํ•จ์ˆ˜๊ฐ€ ์ž๋™์œผ๋กœ ๋ชจ๋“ˆ์˜ ๋ถ€๋ชจ ํŒจํ‚ค์ง€pack ๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„ ์‹คํ–‰๋˜์–ด ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜ func๊ฐ€ ๋ฐ”๋กœ ๋ชจ๋“ˆ์ด ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค/๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ด๋Š” klib๊ณผ ๊ฐ™์ด ์†์„ฑ์œผ๋กœ ํ•˜์œ„ ๋ชจ๋“ˆ/ํŒจํ‚ค์ง€์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 pack.$parent๋กœ ์ƒ์œ„ ํŒจํ‚ค์ง€์—๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

module.exports = function(pack){
    pack.$parent["ํ˜„์žฌ ํŒจํ‚ค์ง€๋ช…"] === pack // true
    return func
}

 *์ฃผ์˜: ๋ชจ๋“ˆ ์ž์‹ ์„ ์ฐธ์กฐํ•˜๋ฉด ์žฌ๊ท€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


 ์กฐ๊ธˆ ๊ท€์ฐฎ์ง€๋งŒ ๋ชจ๋“ˆ ๊ฐ„ ์†Œํ†ต์„ ์›ํ™œํžˆ ํ•˜๊ณ  ๋ชจ๋“ˆ ์Šค์ฝ”ํ”„๋ฅผ ํด๋กœ์ €๋ฅผ ํ†ตํ•ด ํ™•์‹คํžˆ ๋ถ„๋ฆฌํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ˆ ์–‘ํ•ด ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.



 ๋‹จ, ์–ด๋–ค ๋ชจ๋“ˆ์€ ์‚ฌ์šฉ ์ „ ์ดˆ๊ธฐ ์„ค์ •initialization์„ ์š”๊ตฌํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. config.json์— requireInit ์†์„ฑ์„ ๋ช…์‹œํ•จ์œผ๋กœ์จ ์ด ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// config.json
{
    "type": "koinelib/module",
    "requireInit": true
}

 requireInit ์†์„ฑ์ด true๋ผ๋ฉด ๋ชจ๋“ˆ์ด init(koine.init)๋˜์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ๋ชจ๋“ˆ์„ ์‚ฌ์šฉ(ํ˜ธ์ถœ)ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

 init.js ๋Š” index.js๋กœ ๋ฐ˜ํ™˜๋˜๋Š” ๋ชจ๋“ˆ๊ณผ ์ „์—ญ(global) ๊ฐ์ฒด๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

// File: .../module/init.js
module.exports = function(module, _global){
    _global.moduleTest = module
}


 config.json์— requireInit์„ ๋ช…์‹œํ•˜์ง€ ์•Š์•˜์ง€๋งŒ init.js๊ฐ€ ๊ฐ์ง€๋  ๊ฒฝ์šฐ์—๋Š” ์•”์‹œ์ ์œผ๋กœ true๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

 ๋˜ํ•œ, init.js๊ฐ€ ์กด์žฌํ•˜๋”๋ผ๋„ requireInit๊ฐ€ false๋ผ๋ฉด init ์—†์ด๋„ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


base ํŒจํ‚ค์ง€

  ํŒจํ‚ค์ง€ ์ค‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉ๋˜๊ฑฐ๋‚˜, ๊ธฐ๋ฐ˜์ด ๋˜๋Š” ๋ชจ๋“ˆ๋“ค์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด์žฅ๋˜์–ด ์•ˆ์ •์„ฑ์„ ์œ„ํ•ด ๋‹จ์ •๋ฌธ์„ ์ง€์›ํ•˜๋Š” assert, ํด๋ž˜์Šค(์ƒ์„ฑ์ž) ๊ฐ„ ์ƒ์†์„ ๋•๋Š” inherits์ฒ˜๋Ÿผ์š”.

 ์ด์ฒ˜๋Ÿผ base ํŒจํ‚ค์ง€์— ๋‚ด์žฅ๋œ ๋ชจ๋“ˆ๋“ค์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋กœ๋“œ ์‹œ ์ตœ์ดˆ์— ์ž๋™์œผ๋กœ init๋˜๋Š” ์  ์œ ์˜ํ•ด์ฃผ์„ธ์š”!