Alloy ์‹œ์ž‘

Alloy๋ž€
Alloy๋Š” "์†Œํ”„ํŠธ์›จ์–ด ๋ชจ๋ธ๋ง์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐœ๋ฐฉ๋œ ์†Œ์Šค ์–ธ์–ด์™€ ๋ถ„์„๊ธฐ"์ด๋ฉฐ "์•ˆ์ „์˜ ๋นˆํ‹ˆ์„ ๋ฐœ๊ฒฌํ•˜๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์ „ํ™” ๊ตํ™˜ ๋„คํŠธ์›Œํฌ๊นŒ์ง€ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์‘์šฉ๋œ๋‹ค"๊ณ  ๋งํ–ˆ๋‹ค.
Alloy is an open source language and analyzer for software modeling. It has been used in a wide range of applications, from finding holes in security mechanisms to designing telephone switching networks. - Alloy - Website
Alloy๋Š” ์–ด๋–ค ๊ตฌ์†์„ ๊ฐ€์ •ํ•˜๋Š” ๋Œ€์‹  ํ‘œํ˜„๋ ฅ๊ณผ ์ž๋™ ๊ฒ€์ฆ ๋Šฅ๋ ฅ์„ ๊ฒธ๋น„ํ•œ'๊ฒฝ๋Ÿ‰ ํ˜•์‹ ๋ฐฉ๋ฒ•'์˜ ์ผ์ข…์ด๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ ํ˜•์‹ ๊ธฐ๋ฒ•์œผ๋กœ์„œ์˜ ์–ธ์–ด์˜ ํ‘œํ˜„๋ ฅ๊ณผ ์ž๋™ ๊ฒ€์ฆ ๋Šฅ๋ ฅ์€ ๊ท ํ˜•์ ์ธ ๊ด€๊ณ„์ด๋‹ค.ํ•œ ๋งˆ๋””๋กœ ํ•˜๋ฉด ํŽธ๋ฆฌํ•œ ๋ฌธ๋ฒ•์„ ์ค€๋น„ํ•œ ์–ธ์–ด์ผ์ˆ˜๋ก ๋ณต์žกํ• ์ˆ˜๋ก ์ž๋™ ๊ฒ€์ฆ์˜ ๊ณ„์‚ฐ ๋น„์šฉ์ด ์ปค์ง„๋‹ค(์ด๋Ÿฐ ๊ฒƒ ๊ฐ™๋‹ค)
Alloy๊ฐ€ ๊ฐ€์ •ํ•˜๋Š” "์–ด๋–ค ๊ตฌ์†"์„ ์†Œ๋ฒ”์œ„ ๊ฐ€์ •์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
์†Œ๋ฒ”์œ„ ๊ฐ€์„ค์€'๋Œ€๋ถ€๋ถ„์˜ ์‹ค์ˆ˜์— ์ž‘์€ ๋ฐ˜๋ก€๊ฐ€ ์žˆ๋‹ค'๋Š” ๊ฒƒ์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.ํ•œ ๋งˆ๋””๋กœ ํ•˜๋ฉด ๋™์น˜๋ถ„ํ• ยท๊ฒฝ๊ณ„์น˜ ๋ถ„์„์ ์ธ ์ƒ๊ฐ์œผ๋กœ'๋Œ€๋žต 0 ๋˜๋Š”null์„ ํฌํ•จํ•˜๋Š” ๋™์น˜๋ฅ˜ ์˜ค๋ฅ˜์ฃ ?'์ด๋Ÿฐ ๋งํˆฌ.๊ฐ๊ฐ์ ์œผ๋กœ ์ž์œ ๋กญ๊ฒŒ ์ง€๋ฐฐํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด ์†Œ๋ฒ”์œ„ ๊ฐ€์„ค์„ ๊ฐ€์ •ํ•˜๊ณ  ์ ๋‹นํ•œ ์†Œ๋ฒ”์œ„๋ฅผ ์„ค์ •ํ•˜์—ฌ ๋ฐ˜๋ก€๊ฐ€ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ๊ฒƒ์ด์ง€ ๋ชจ๋ธ์— ๋Œ€ํ•ด ์ „๋ฉด์ ์ธ ๊ฒ€์ฆ์„ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.
'์ ๋‹นํ•œ ์ž‘์€ ๋ฒ”์œ„', ์˜ˆ๋ฅผ ๋“ค์–ด '๋ชจ๋“  ๋ฐฐ์—ด์˜length๊ฐ€ 0, 1, 2์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š”์ง€ ๊ฒ€์ƒ‰ํ•˜๊ธฐ'.length๊ฐ€ ์ž„์˜์˜ ๊ฐ’์ผ ๋•Œ ๊ตฌ๋ฆฐ๋‚ด ๋‚˜๋Š” ๋ฒŒ๋ ˆ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์–ด๋ ค์šฐ๋ฉฐ, 0, 1, 2๋ผ๋ฉด ์‰ฝ๊ฒŒ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.
๋˜ํ•œ Alloy์˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์€ ํŠนํžˆ Alloy Analyzer๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
ํ™˜๊ฒฝ ๊ตฌ์กฐ
์›น ํŽ˜์ด์ง€ ์ •๋ณด์—์„œ ์‹คํ–‰ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.Windows ๋ฐ Linux์˜ ๊ฒฝ์šฐ alloy.4.2.OS X์˜ ๊ฒฝ์šฐ jar์„ alloy4๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.2. dmg ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.(๋˜ํ•œ, ํ˜„์žฌ(2017/4/30) ๋‹ค์šด๋กœ๋“œ ๊ฐ€๋Šฅํ•œ ์ตœ์‹  ๋ฒ„์ „์€ 4.2%)

  • alloy4.2.jar Alloy 4.2 (platform independent). Requires Java 6.

  • alloy4.2.dmg Alloy 4.2 (for OS X). Requires Java 6.
  • ๋‹ค์šด๋กœ๋“œํ•œ ํŒŒ์ผ์„ ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅํ•˜๋ฉด ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค.
    Hello World!
    Alloy ์‹œ์ž‘
    ๋‹ค์šด๋กœ๋“œํ•œ alloy4.2. jar์„ ๋‘ ๋ฒˆ ํด๋ฆญํ•˜๋ฉด Alloy๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.์ž๋ฐ”์™€ ํ™•์žฅ์žjar ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ช…๋ น ์•Œ๋ฆผ (๋˜๋Š” ์…ธ) ์ž…๋ ฅ java -jar alloy4.2.jar ์„ ํ†ตํ•ด ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ
    Alloy ํŽธ์ง‘๊ธฐ์—์„œ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
    ์ด๋ฒˆ ์˜ˆ๋Š”'ํ•œ ๋ชจ๋‹ˆํ„ฐ์— ํ‘œ์‹œ๋œ ๊ฒƒ์€ ๋‹จ์ง€ ํ•˜๋‚˜์˜ ์ปจํŠธ๋กค๋Ÿฌ์— ์žˆ๋Š”'Hello World'์ผ ๋ฟ์ด๋‹ค."์ž…๋‹ˆ๋‹ค.
    ๋˜ ์•Œ๋กœ์ด์˜ ๋ฌธ๋ฒ•์€ EBNF ํ˜•ํƒœ๋กœ ์ •์˜๋ผ ์›น ํŽ˜์ด์ง€ ์ •๋ณด์—์„œ ์—ด๋žŒํ•  ์ˆ˜ ์žˆ๋‹ค.
    /**
     * 
     * Hello World ใฎใƒขใ‚ธใƒฅใƒผใƒซ
     * 
     */
    module sample/HelloWorld
    
    //=====================================================
    //
    // ใ‚ทใ‚ฐใƒ‹ใƒใƒฃ
    //
    //=====================================================
    
    /** ใƒ‡ใ‚ฃใ‚นใƒ—ใƒฌใ‚ค */
    one sig Display {
        console : one Console
    }
    one sig Console {
        message : some Message
    }
    
    /** ใƒกใƒƒใ‚ปใƒผใ‚ธ */
    abstract sig Message {}
    
    /** Hello World */
    sig HelloWorld extends Message {}
    
    //=====================================================
    //
    // ไบ‹ๅฎŸ
    //
    //=====================================================
    
    /** ๅ…จใฆใฎใƒกใƒƒใ‚ปใƒผใ‚ธใฏใ‚ณใƒณใ‚ฝใƒผใƒซใซ่กจ็คบใ•ใ‚Œใ‚‹ */
    fact {
        all m : Message | m in Console.message
    }
    
    //=====================================================
    //
    // ๅฎŸ่กŒ
    //
    //=====================================================
    pred show{}
    run show
    
  • ๋ชจ๋“ˆ ์„ ์–ธ
  • ์ฒซ ์ค„์˜ module sample/HelloWorld๋Š” ๋ชจ๋“ˆ์˜ ์„ฑ๋ช…์ด๋‹ค.๋ชจ๋“ˆ์€ Alloy๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ตœ๋Œ€ ๋‹จ์œ„์ด๋ฉฐ ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์„ ์—ฐ๊ฒฐํ•˜์—ฌ ๋ชจ๋ธ์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ์˜ˆ์—์„œ sample๋Š” ์ž๋ฐ”๋กœ ํฌ์žฅ๋ช…์ด๊ณ , HelloWorld๋Š” ์ž๋ฐ”๋กœ ๋ถ„๋ฅ˜๋ช…์— ํ•ด๋‹นํ•œ๋‹ค.
  • ์ฐธ๊ณ  ์‚ฌํ•ญ
  • ์˜๊ฒฌ์„ Java์™€ ๋™์ผํ•˜๊ฒŒ ์”๋‹ˆ๋‹ค.
  • ์„œ๋ช…
  • ์„œ๋ช…์€ Java์—์„œ ํด๋ž˜์Šค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐœ๋…์ด๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ Alloy์—์„œ๋Š” ํ•œ ๋ชจ๋“ˆ์— ์—ฌ๋Ÿฌ ์„œ๋ช…์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  • ์„œ๋ช… ์„ฑ๋ช…์€ ๊ฐ„๋‹จํ•˜๊ฒŒ <sigQual> sig <name> {<decl>}๋กœ ๋ฌ˜์‚ฌ๋˜์—ˆ๋‹ค.
  • <sigQual>๋Š” ์„œ๋ช…์˜ ์ˆ˜๋Ÿ‰๊ณผ ๋ฐฉ๋ฌธ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆ˜์‹์ž์ž…๋‹ˆ๋‹ค.
  • one๋Š” ํ•œ ๊ฐœ์˜ ์„œ๋ช…(์ฆ‰ ์ž๋ฐ”๋กœ ๋งํ•˜์ž๋ฉด ๋‹จ์‹)์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆ˜์‹๋ถ€ํ˜ธ์ด๊ณ , abstract๋Š” ์‹ค์ฒด๊ฐ€ ์—†๋Š” ์ถ”์ƒ์ ์ธ ์„œ๋ช…์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆ˜์‹๋ถ€ํ˜ธ์ด๋‹ค.
  • <name>๋Š” ์„œ๋ช…ํ•œ ์ด๋ฆ„์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.<decl>๋Š” ์„œ๋ช…์˜ ์ •์˜๋กœ ์ž๋ฐ”๋กœ ๊ตฌ์„ฑ์› ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•œ ์„œ๋ช…Display๋งŒ ํ•œ ์„œ๋ช…Console์œผ๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค.์ฆ‰, ํ•˜๋‚˜์˜ ๋ชจ๋‹ˆํ„ฐ์— ํ•˜๋‚˜์˜ ์ฝ˜์†”๋งŒ ํ‘œ์‹œ๋˜๋Š” ์ƒํƒœ๋ฅผ ๋ชจ๋ธ๋งํ•ฉ๋‹ˆ๋‹ค.
  • ํ•œ ๊ฐœConsole์˜ ์„œ๋ช…๋งŒ 0 ๊ฐœ ๋˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœMessage์˜ ์„œ๋ช…์œผ๋กœ ์ •์˜๋œ๋‹ค.์ฆ‰, ํ•˜๋‚˜์˜ ์ฝ˜์†”์— ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ์ƒํƒœ๋ฅผ ๋ชจ๋ธ๋งํ•ฉ๋‹ˆ๋‹ค.
  • Message ์„œ๋ช…์€ ์ถ”์ƒ์ ์ธ ์„œ๋ช…์ด๋‹ค.๊ฐ์ข… ์†Œ์‹์„ ์ถ”์ƒํ™”ํ•˜๋Š” ์ถ”์ƒ์ ์ธ ์„œ๋ช…์ด๋‹ค.
  • HelloWorld ์„œ๋ช…์€ ์ƒ์†Message ์„œ๋ช…extends์˜ ๊ตฌ์ฒด์ ์ธ ์„œ๋ช…์ด๋‹ค.์ฆ‰, ์ฝ˜์†”์— ํ‘œ์‹œ๋œ Hello World!์— ๋Œ€ํ•œ ๋ชจ๋ธ๋ง ์„œ๋ช…์ž…๋‹ˆ๋‹ค.
  • ์‚ฌ์‹ค
  • ์‚ฌ์‹ค์€ ์„œ๋ช…์ด ๋งŒ์กฑํ•ด์•ผ ํ•  ์กฐ๊ฑด์„ ์—ด๊ฑฐํ–ˆ๋‹ค.
  • "๋ชจ๋“  ๋ฉ”์‹œ์ง€๊ฐ€ ์ฝ˜์†”์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค"๋Š” ์‚ฌ์‹ค์€ ๋ชจ๋“  ๋ฉ”์‹œ์ง€all m : Message๊ฐ€ ์ฝ˜์†”์— ํฌํ•จ๋˜์–ด์•ผ ํ•จ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹คin.
  • ์‹คํ–‰
  • ๋Š” ์‹คํ–‰ ํ•จ์ˆ˜m in Console.message๋ฅผ ์ •์˜ํ•˜๊ณ  ์‹คํ–‰pred show{}์„ ํ†ตํ•ด ๋ชจ๋ธ์„ ๊ฒ€์ฆํ•œ๋‹ค.
  • ์‹คํ–‰
    ๋ชจํ˜• ํ‘œ์‹œrun show ์•„์ด์ฝ˜์„ ํด๋ฆญํ•˜์—ฌ ๋ชจํ˜•์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.๋ฉ”ํƒ€ ๋ชจ๋ธ์€ Alloy ๋ชจ๋ธ์˜ ์ •์  ๊ตฌ์กฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.์„œ๋ช…์˜ ํฌํ•จ ๊ด€๊ณ„์™€ ๊ณ„์Šน ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

    ๋ฉ”ํƒ€๋ชจ๋ธ์„ ํ†ตํ•ด ๋ชจ๋‹ˆํ„ฐ, ์ฝ˜์†”, ๋ฉ”์‹œ์ง€ ๋ฐ Show ์„œ๋ช…์˜ ํฌํ•จ ๊ด€๊ณ„์™€ ๊ณ„์Šน ๊ด€๊ณ„๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    ์‹คํ–‰ ๊ฒฐ๊ณผ ํ‘œ์‹œHello World! ์•„์ด์ฝ˜์„ ํด๋ฆญํ•˜์—ฌ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.๊ฒ€์ฆ ๊ฒฐ๊ณผ๋Š” Alloy์— ์ •์˜๋œ ๋ชจ๋ธ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ถฉ์กฑํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
    ์ด๋ฒˆ ์˜ˆ์—์„œ๋Š” Hello World 1๊ฐœ์™€ ๋””์Šคํ”Œ๋ ˆ์ด 2๊ฐœ๋งŒ ํ‘œ์‹œ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ถœ๋ ฅํ–ˆ๋‹ค.์ฝ˜์†”์— ๋ชจ๋ธ์— ํ‘œ์‹œ๋˜๋Š” Hello World์˜ ์ˆ˜๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
    ๋ชจ๋‹ˆํ„ฐ ํ•˜๋‚˜์— ์ฝ˜์†” ํ•˜๋‚˜์— Hello World ํ•˜๋‚˜๋งŒ ํ‘œ์‹œ๋˜๋ฉด

    ๋ชจ๋‹ˆํ„ฐ ํ•˜๋‚˜์— Hello World 2๊ฐœ

    ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด Alloy๋Š” ๊ฒ€์ฆ ๋ฐฉ๋ฒ•์„ ํŠน๋ณ„ํžˆ ์ง€์ •ํ•˜์ง€ ์•Š์•„๋„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฌ์šด ๊ฒฝ๊ณ„ ์กฐ๊ฑด์ด๋‚˜ ๊ฐ™์€ ๊ฐ’ ๋ฒ”์ฃผ๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ๊ฒ€์ฆํ•˜๊ณ  ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
    ๋งํฌ
  • ๋‹ค๋‹ˆ์—˜ ์žญ์Šจ(์ €), ์ค‘๋„์ง„(์—ญ), ์ด๋งˆ์ด ๊ฒ๋‚จ(์—ญ), ์‚ฌ์นด์ด ๋งˆ์‚ฌ์œ (์—ญ), ํžˆ๋กœ์‹œ๋งˆ ์œ ๊ฐœ(์—ญ), ํžˆ๋กœ์‹œ๋งˆ ์‹ ํ”„(์—ญ), ์ถ”์ƒ์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธ-์˜ฌ๋กœ์ด๋กœ ์‹œ์ž‘ํ•˜๋Š” ํ˜•์‹ ๊ธฐ๋ฒ•-์˜ด์‚ฌ, 2011
  • Alloy - Website
  • alloy-4-eclipse
  • ์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ