Alloy ์์
7552 ๋จ์ด Alloyํ์์๋ฒAlloyAnalyzerํ์ ์ธ์ด
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
๋ ์๋ฐ๋ก ๋ถ๋ฅ๋ช
์ ํด๋นํ๋ค.<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๋ ๊ฒ์ฆ ๋ฐฉ๋ฒ์ ํน๋ณํ ์ง์ ํ์ง ์์๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฌ์ด ๊ฒฝ๊ณ ์กฐ๊ฑด์ด๋ ๊ฐ์ ๊ฐ ๋ฒ์ฃผ๋ฅผ ์ฐ์ ์ ์ผ๋ก ๊ฒ์ฆํ๊ณ ํ์ํฉ๋๋ค.
๋งํฌ
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(Alloy ์์), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://qiita.com/kannkyo/items/0742253aeb5a43e449c9ํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ
์ธ ๋ฐ๊ฒฌ์ ์ ๋
(Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค