ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Swift] ์‚ฌ์šฉ์ž ์ •์˜ ์—ฐ์‚ฐ์ž (Custom Operator)
    Swift 2023. 5. 3. 00:37

    ์•ˆ๋…•ํ•˜์„ธ์š”!

     

    ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์—ฐ์‚ฐ์ž๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋„๋ก ํ• ๊ฒŒ์š”.

     

    C, C++๋‚˜ Java ๋“ฑ์—๋Š” ์ฆ๊ฐ์—ฐ์‚ฐ์ž๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŽธ๋ฆฌํ•˜๊ฒŒ ++, -- ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ๋ฐ˜๋ฉด Swift์—๋Š” ์ฆ๊ฐ์—ฐ์‚ฐ์ž๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Swift 3์—์„œ deprecated ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด์ฃ ๐Ÿฅฒ

     

    ํ•˜์ง€๋งŒ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค! Swift์—์„œ๋Š” ์ €ํฌ๊ฐ€ ์ง์ ‘ ์—ฐ์‚ฐ์ž ๊ธฐํ˜ธ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ์‚ฌ์šฉ์ž ์ •์˜ ์—ฐ์‚ฐ์ž๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฑฐ๋“ ์š”ใ…Žใ…Ž

     

    ์ €๋Š” 5++๋ฅผ ํ•˜๋ฉด 1์ด ์ฆ๊ฐ€๋˜์–ด 6์ด ๋˜๋„๋ก ํ•˜๋Š” ํ›„์œ„ ์ฆ๊ฐ ์—ฐ์‚ฐ์ž (++) ์™€

    ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ 2๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์ „๋‹ฌ๋ฐ›์•„์„œ ๋‘ ๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๊ฐ๊ฐ ๊ณฑํ•˜๊ณ , ๋‚˜๋ˆˆ ๊ฐ’์„ ๋”ํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” ์ค‘์œ„ ์—ฐ์‚ฐ์ž (*+/)๋ฅผ ๋งŒ๋“ค์–ด๋ณผ๊ฑฐ์—์š”!

     

    ์‚ฌ์šฉ์ž ์ •์˜ ์—ฐ์‚ฐ์ž๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

    ๋จผ์ € ์—ฐ์‚ฐ์ž์˜ ์œ„์น˜์™€ ์—ฐ์‚ฐ์ž๋กœ ์‚ฌ์šฉํ•  ํŠน์ˆ˜๋ฌธ์ž๋ฅผ ์ •์˜ํ•ด์ฃผ๊ณ , ์—ฐ์‚ฐ์ž๋ฅผ ๊ตฌํ˜„ํ•ด์ฃผ๋ฉด ๋์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•˜์ฃ ?

    ์ด์ œ ์‹œ์ž‘ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

     

     

     

    1. ํ›„์œ„ ์ฆ๊ฐ ์—ฐ์‚ฐ์ž ๋งŒ๋“ค๊ธฐ (++)

    ๋จผ์ € ์—ฐ์‚ฐ์ž์˜ ์œ„์น˜์™€ ์—ฐ์‚ฐ์ž๋กœ ์‚ฌ์šฉํ•  ํŠน์ˆ˜๋ฌธ์ž๋ฅผ ์ •์˜ํ•ด๋ณด๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

     

    ์ €๋Š” ++๋ผ๋Š” ์—ฐ์‚ฐ์ž๋ฅผ ํ›„์œ„ ์—ฐ์‚ฐ์ž๋กœ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— postfix ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ •์˜ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

    postfix operator ++

     

    ์ฐธ๊ณ ๋กœ ์ „์œ„, ์ค‘์œ„ ์—ฐ์‚ฐ์ž๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด prefix, infix ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

    prefix operator customOperator // ํ”ผ์—ฐ์‚ฐ์ž์˜ ์•ž์— ์˜ค๋Š” ์ „์œ„ ์—ฐ์‚ฐ์ž ์ •์˜
    postfix operator customOperator // ํ”ผ์—ฐ์‚ฐ์ž์˜ ๋’ค์— ์˜ค๋Š” ํ›„์œ„ ์—ฐ์‚ฐ์ž ์ •์˜
    infix operator customOperator // ํ”ผ์—ฐ์‚ฐ์ž ์‚ฌ์ด์— ์˜ค๋Š” ์ค‘์œ„ ์—ฐ์‚ฐ์ž ์ •์˜

     

    ๊ทธ๋ฆฌ๊ณ  ์—ฐ์‚ฐ์ž๋Š” ๋ชจ๋“  Scope์—์„œ ์ธ์‹ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Global Scope์—์„œ ์„ ์–ธํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

     

     

     

    ํŠน์ˆ˜๋ฌธ์ž๋ฅผ ์ •์˜ํ•  ๋•Œ ์ฃผ์˜ํ•  ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

    Swift์˜ ์˜ˆ์•ฝ์–ด๋Š” ๋‹จ๋…์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ๋‹ค๋ฅธ ๋ฌธ์ž์™€ ์กฐํ•ฉํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

    Swift์˜ ์˜ˆ์•ฝ์–ด๋Š” ๋‹ค์Œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    (, ), {, }, [, ], ., ,, :, ;, =, @, #, <(prefix operator), &(prefix operator), ->, `, ?, >(postfix operator), !(postfix operator), /*, */, //

     

    ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ์ž ์ •์˜ ์—ฐ์‚ฐ์ž๋Š” ์•„์Šคํ‚ค ๋ฌธ์ž /, =, -, +, !, *, %, <, >, &, |, ^, ?, ~๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ž๋“ค์€ ๋ฐ˜๋“œ์‹œ ์ฒซ๋ฒˆ์งธ์— ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

     

    ๊ทธ๋ฆฌ๊ณ  ๋งˆ์นจํ‘œ (.)๋กœ ์‹œ์ž‘ํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์—ฐ์‚ฐ์ž๋„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ์š”, .+.๋Š” ๋‹จ์ผ ์—ฐ์‚ฐ์ž๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

    ํ•˜์ง€๋งŒ ๋งŒ์•ฝ ์—ฐ์‚ฐ์ž๊ฐ€ ๋งˆ์นจํ‘œ (.)์œผ๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์—ฐ์‚ฐ์ž์— ๋งˆ์นจํ‘œ (.)๋ฅผ ํฌํ•จ์‹œํ‚ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค๋ฉด +.+์˜ ๊ฒฝ์šฐ, + ์—ฐ์‚ฐ์ž์™€ .+ ์—ฐ์‚ฐ์ž 2๊ฐœ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

     

     

     

    ์ด์ œ ์—ฐ์‚ฐ์ž ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•  ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค!

     

    ์—ฐ์‚ฐ์ž ๋ฉ”์„œ๋“œ๋Š” func ํ‚ค์›Œ๋“œ ์•ž์— prefix ๋˜๋Š” postfix ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์—ฌ์„œ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

    infix ์—ฐ์‚ฐ์ž๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ์—๋Š” ์–ด๋–ค ํ‚ค์›Œ๋“œ๋„ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    ๊ทธ๋ฆฌ๊ณ  customOperator ๋ถ€๋ถ„์—๋Š” ์•ž์„œ ์ •์˜ํ•œ ์—ฐ์‚ฐ์ž๋ฅผ ์จ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

     

    // prefix operator
    prefix func customOperator(parameters) -> ReturnType {
    	// code
    }
    
    // postfix operator
    postfix func customOperator(parameters) -> ReturnType {
    	// code
    }
    
    // infix operator
    func customOperator(parameters) -> ReturnType {
    	// code
    }

     

     

    ++ ์—ฐ์‚ฐ์ž๋Š” ๊ฐ’์„ 1 ์ฆ๊ฐ€์‹œ์ผœ์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ „๋‹ฌ๋ฐ›์€ ์ธ์ž์— 1 ๋”ํ•œ ๊ฐ’์„ ๋ฆฌํ„ดํ•ด์ฃผ๋„๋ก ํ• ๊ฒŒ์š”.

    postfix func ++ (num: Int) -> Int {
        return num + 1
    }

     

    ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด๋ณผ๊นŒ์š”?

    ์ •์ƒ์ ์œผ๋กœ 4๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

     

     

    ์—ฌ๊ธฐ์„œ ์งˆ๋ฌธ!

    ์‹ค์ œ number์˜ ๊ฐ’๋„ ์ฆ๊ฐ€๋˜์—ˆ์„๊นŒ์š”?

     

     

     

    ์ •๋‹ต์€ ์•„๋‹™๋‹ˆ๋‹ค.

    number์˜ ๊ฐ’์€ ๋ณ€ํ•จ์—†์ด ๊ทธ๋Œ€๋กœ 3์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์—ฐ์‚ฐ์ž ๋ฉ”์„œ๋“œ์—์„œ number์˜ ๊ฐ’์„ ์ง์ ‘ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ , ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ๋œ ๊ฐ’์„ 1 ์ฆ๊ฐ€์‹œํ‚จ ํ›„ ๋ฆฌํ„ดํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด์—์š”. 

     

     

     

    ์‹ค์ œ number์˜ ๊ฐ’์„ ๋ณ€๊ฒฝ์‹œํ‚ค๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ž…์ถœ๋ ฅ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ™œ์šฉํ•ด์„œ num์„ 1 ์ฆ๊ฐ€์‹œํ‚ค๋„๋ก ๊ตฌํ˜„ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

     

     

    2. ์ค‘์œ„ ์—ฐ์‚ฐ์ž (*+/) ๋งŒ๋“ค๊ธฐ

    ์ด๋ฒˆ์—๋Š” infix ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ์ค‘์œ„ ์—ฐ์‚ฐ์ž (*+/)๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋„๋ก ํ• ๊ฒŒ์š”!

    ์ˆซ์ž 10๊ณผ 5๋ฅผ ์ „๋‹ฌ๋ฐ›์•˜์„ ๊ฒฝ์šฐ, ๋‘ ์ˆซ์ž๋ฅผ ๊ณฑํ•˜๊ณ  (10 * 5 = 50) ๋‚˜๋ˆˆ ๊ฐ’ (10 / 5 = 2)์„ ๋”ํ•œ ๊ฒฐ๊ณผ (50 + 2 = 52)๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

     

     

    ๋จผ์ € infix ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ์—ฐ์‚ฐ์ž๋ฅผ ์ •์˜ํ•ด์ฃผ์„ธ์š”.

    infix operator *+/

     

     

    ๊ทธ๋ฆฌ๊ณ  ์ •์˜ํ•œ ์—ฐ์‚ฐ์ž ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์ฃผ์„ธ์š”!

    func *+/ (left: Int, right: Int) -> Int {
        return (left * right) + (left / right)
    }

     

     

    ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด๋ณผ๊นŒ์š”?

     

    ์ œ๊ฐ€ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™”๋„ค์š”!

     

     

    ์ด๋ฒˆ์—๋Š” ์ œ๊ฐ€ ์ •์˜ํ•œ ์—ฐ์‚ฐ์ž *+/์™€ ๋‹ค๋ฅธ ์—ฐ์‚ฐ์ž๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

     

     

    ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋„ค์š”.

    Adajacent operators are in unordered precedence groups 'DefaultPrecedence' and 'AdditionPrecedence' ๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ธ์ ‘ํ•œ ์—ฐ์‚ฐ์ž๋“ค์˜ ์—ฐ์‚ฐ ์ˆœ์„œ๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ๋ฉ”์‹œ์ง€์ธ๋ฐ์š”, ์•ž์„œ ์ง์ ‘ ์ •์˜ํ•œ ์—ฐ์‚ฐ์ž์— ์šฐ์„ ์ˆœ์œ„ ๊ทธ๋ฃน์„ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. 

     

     

    ์ค‘์œ„ ์—ฐ์‚ฐ์ž๋Š” ์ „์œ„ ์—ฐ์‚ฐ์ž์™€ ํ›„์œ„ ์—ฐ์‚ฐ์ž์™€ ๋‹ค๋ฅด๊ฒŒ ์šฐ์„ ์ˆœ์œ„ ๊ทธ๋ฃน (Precedence Group)์„ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์šฐ์„ ์ˆœ์œ„ ๊ทธ๋ฃน์€ ๋‹ค๋ฅธ infix ์—ฐ์‚ฐ์ž๋“ค์„ ๊ธฐ์ค€์œผ๋กœ ์—ฐ์‚ฐ์ž์˜ ์šฐ์„ ์ˆœ์œ„์™€ ์—ฐ์‚ฐ์ž์˜ ์—ฐ๊ด€์„ฑ์„ ์ง€์ •ํ•˜๊ณ , ๋†’์€ ์šฐ์„  ์ˆœ์œ„ ๊ทธ๋ฃน์— ์†ํ•œ ์—ฐ์‚ฐ์ž๊ฐ€ ๋จผ์ € ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

     

     

    ์šฐ์„ ์ˆœ์œ„ ๊ทธ๋ฃน์€ ์—ฌ๊ธฐ์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ , ๋Œ€ํ‘œ์ ์ธ ์šฐ์„ ์ˆœ์œ„ ๊ทธ๋ฃน์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

     

    Operators Precedence Groups
    + - AdditionPrecedence
    * / MultiplicationPrecedence
    < <= > >= == != ComparisonPrecedence
    = += -= *= /= AssignmentPrecedence

     

     

     

    ์šฐ์„ ์ˆœ์œ„ ๊ทธ๋ฃน์„ ์ง์ ‘ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

    ์šฐ์„ ์ˆœ์œ„ ๊ทธ๋ฃน ์ด๋ฆ„์€ UpperCamelCase๋กœ ์ง“๊ณ , higherThan, lowerThan ์ค‘ ํ•˜๋‚˜๋Š” ๋ฐ˜๋“œ์‹œ ๋ช…์‹œํ•ด์ฃผ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

    higherThan์—๋Š” ํ˜„์žฌ ๊ทธ๋ฃน๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ๊ทธ๋ฃน์„, lowerThan์—๋Š” ํ˜„์žฌ ๊ทธ๋ฃน๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๊ทธ๋ฃน์„ ์ง€์ •ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

    associativity์—๋Š” ์—ฐ์‚ฐ์ž์˜ ๊ฒฐํ•ฉ ๋ฐฉํ–ฅ์„ ์ง€์ •ํ•˜๋Š”๋ฐ, left, right, none ์ค‘ ํ•˜๋‚˜๋ฅผ ์“ฐ๋ฉด ๋˜๊ณ  ๊ธฐ๋ณธ ๊ฐ’์€ none ์ž…๋‹ˆ๋‹ค.

    ๊ฒฐํ•ฉ ๋ฐฉํ–ฅ์ด left๋ผ๋ฉด, 1 + 2 + 3 + 4์˜ ์ˆ˜์‹์€ (((1 + 2) + 3) + 4)์ฒ˜๋Ÿผ ์™ผ์ชฝ๋ถ€ํ„ฐ ์—ฐ์‚ฐ์ด ๋˜๊ณ ,

    ๊ฒฐํ•ฉ ๋ฐฉํ–ฅ์ด right๋ผ๋ฉด, 1 + 2 + 3 + 4์˜ ์ˆ˜์‹์€ (1 + (2 + (3 + 4)))์ฒ˜๋Ÿผ ์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ ์—ฐ์‚ฐ์ด ๋ฉ๋‹ˆ๋‹ค. 

    precedencegroup MyPrecedence {
        higherThan: LowerGroupName // ํ˜„์žฌ ๊ทธ๋ฃน๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ๊ทธ๋ฃน ์ง€์ •
        lowerThan: HigherGroupName // ํ˜„์žฌ ๊ทธ๋ฃน๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๊ทธ๋ฃน ์ง€์ •
        associativity: associativity // ์—ฐ์‚ฐ์ž์˜ ๊ฒฐํ•ฉ ๊ทœ์น™ ์ง€์ •
    }

     

     

    ์‚ฌ์šฉ์ž ์ •์˜ ์—ฐ์‚ฐ์ž๋ฅผ ๋งŒ๋“ค ๋•Œ ์šฐ์„ ์ˆœ์œ„ ๊ทธ๋ฃน์„ ์ง์ ‘ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š๋Š”๋‹ค๋ฉด ์šฐ์„  ์ˆœ์œ„ ๊ทธ๋ฃน์ด ๊ธฐ๋ณธ ๊ทธ๋ฃน์ธ DefaultPrecedence์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. 

    DefaultPrecedence์— ์†ํ•œ ์—ฐ์‚ฐ์ž๋Š” ๋‹จ๋…์œผ๋กœ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์•„๋ฌด ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ, ๋‹ค๋ฅธ ์—ฐ์‚ฐ์ž์™€ ์‚ฌ์šฉํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

     

     

    ์ง€๊ธˆ ์ œ๊ฐ€ ์ •์˜ํ•œ *+/ ์—ฐ์‚ฐ์ž๋Š” DefaultPrecedence์— ์†ํ•ด์žˆ๋Š”๋ฐ์š”, ๊ณฑํ•˜๊ธฐ ์—ฐ์‚ฐ์ž์™€ ๋™์ผํ•œ ์šฐ์„ ์ˆœ์œ„ ๊ทธ๋ฃน์„ ์ง€์ •ํ•˜๊ณ  ๋‹ค๋ฅธ ์—ฐ์‚ฐ์ž์™€ ์‚ฌ์šฉํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

     

    ์šฐ์„ ์ˆœ์œ„ ๊ทธ๋ฃน์€ ์—ฐ์‚ฐ์ž ์˜†์— :์„ ๋ถ™์—ฌ์„œ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.

    infix operator *+/: MultiplePrecedence

     

    ์šฐ์„  ์ˆœ์œ„ ๊ทธ๋ฃน์„ ์ง€์ •ํ•˜๋‹ˆ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰์ด ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

     

     

     

    ๊ทธ๋Ÿผ *+/ ์—ฐ์‚ฐ์ž์˜ ์šฐ์„ ์ˆœ์œ„ ๊ทธ๋ฃน์„ AdditionPrecedence๋กœ ์ง€์ •ํ•˜๊ณ  2๋ฅผ ๊ณฑํ•  ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

    num2์— 2๋ฅผ ๋จผ์ € ๊ณฑํ•˜๊ณ  (5 * 2 = 10), num1 (10)๊ณผ num2์— 2๋ฅผ ๊ณฑํ•œ ๊ฒฐ๊ณผ (10)๋ฅผ *+/ ์—ฐ์‚ฐ์ž๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    ๊ทธ๋ž˜์„œ ๊ฒฐ๊ณผ๋Š” 10 * 10 + 10 / 10 = 101์ด ๋ฉ๋‹ˆ๋‹ค.

     

     

    ์—ฌ๊ธฐ๊นŒ์ง€ ์‚ฌ์šฉ์ž ์ •์˜ ์—ฐ์‚ฐ์ž์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค!

    ์˜ค๋Š˜๋„ ๊ธ€ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค๐Ÿ˜‡

    ๋Œ“๊ธ€

Designed by Tistory.