[PL] Chapter 7

subinยท2024๋…„ 7์›” 20์ผ

PL/ํ”„๋กœ๊ทธ๋ž˜๋ฐ์–ธ์–ด

๋ชฉ๋ก ๋ณด๊ธฐ
6/9
post-thumbnail

Expressions and Assignment Statements
๐Ÿ’ก Expression assign์„ ์–ด๋–ป๊ฒŒ ํ•  ๊ฒƒ์ธ๊ฐ€

  • ๊ณ„์‚ฐ์„ ํ•˜๋Š” ํ•ต์‹ฌ ๋ฐฉ๋ฒ•: expression
  • expression ์ข…๋ฅ˜ 4๊ฐ€์ง€
    • arithmetic
    • boolean(logic)
    • relational(comparison)
    • conditional (์กฐ๊ฑด๋ถ€ ์—ฐ์‚ฐ)
  • ์‚ผํ•ญ์—ฐ์‚ฐ์ž: c, c++, java ์ง€์›, python์€ ์—†์Œ
    • ์žˆ์œผ๋ฉด writability๋Š” ๋†’์•„์ง€์ง€๋งŒ readability๊ฐ€ ๋–จ์–ด์ง„๋‹ค.

Arthmetic Expressions

  • operator์™€ operand, parentheses(๊ด„ํ˜ธ), function call๋กœ ๊ตฌ์„ฑ
  • operator: ๊ตฌ์„ฑ๋ฐฉ์‹๊ณผ ๋™์ž‘ ๋ฐฉ์‹์— ๋”ฐ๋ผ ๋‹จํ•ญ,2ํ•ญ, 3ํ•ญ ์—ฐ์‚ฐ์ž๋กœ ๊ตฌ๋ถ„๋จ

Arithmetic Expressions ์ง€์›ํ•  ๋•Œ ๊ณ ๋ฏผํ•ด์•ผํ•  ์‚ฌํ•ญ

  • Operator precedence rules?
  • Operator associativity rules? โ‡’ ์œ„ ๋‘˜์€ ์–ธ์–ด์—์„œ ์–ด๋–ป๊ฒŒ ์ •์˜ํ•˜๋А๋ƒ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง
  • Order of operand evaluation?
    • ์—ฐ์‚ฐ์ž๋ฅผ ๋จผ์ € ๋‹ค ํ‰๊ฐ€ํ•˜๊ณ  operation์„ ํ• ๊ฑด์ง€, ์ˆœ์„œ๋Œ€๋กœ ๊ฐˆ๊ฑด์ง€ ์–ธ์–ด๊ฐ€ ์–ด๋–ป๊ฒŒ ์ •์˜ํ•˜๋А๋ƒ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง
  • Operand evaluation side effects?
    • function์ด ํ”ผ์—ฐ์‚ฐ์ž ๊ฐ’์— ์˜ํ–ฅ ๋ฏธ์นจ โ‡’ functionํ˜ธ์ถœ๋กœ ์ธํ•œ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ ๋ฐœ์ƒ, ์–ธ์–ด์— ๋”ฐ๋ผ ๋ฐœ์ƒ์„ ๋ง‰์„์ง€ ํ—ˆ์šฉํ• ์ง€โ€ฆ
    • ํ—ˆ์šฉํ•œ๋‹ค๋ฉด ์˜คํผ๋žœ๋“œ์˜ ํ‰๊ฐ€๋ฐฉ๋ฒ•์€ ์™ผ์ชฝ๋ถ€ํ„ฐ ๊ฐˆ์ง€, ์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ ๋‹คํ•ด๋†“๊ณ  ์‹œ์ž‘ํ• ์ง€
  • Operator overloading?
    • c++ ํ—ˆ์šฉ, cํ—ˆ์šฉx
    • c++, java ํ—ˆ์šฉ
  • Type mixing in expressions?
    • ์ˆ˜์‹์•ˆ์— ํ”ผ์—ฐ์‚ฐ์ž๋“ค์˜ ํƒ€์ž…์„ ์„ž์„์ง€ ๋ง์ง€
    • ์„ž๋Š”๋‹ค๋ฉด ์–ด๋–ค์‹์œผ๋กœ ๊ฒฐ๊ณผ ๋„์ถœํ• ์ง€ โ†’ strong, weak type์— ๋”ฐ๋ผ ๋‹ค๋ฆ„
    • ๋‹น์—ฐํžˆ ํ—ˆ์šฉ๋  ๊ฒƒ

Operator Precedence Rules

  • precedence: ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„
  • typical associativity rules: ๊ฐ™์€ ์šฐ์„ ์ˆœ์œ„์˜ ์—ฐ์‚ฐ์ž๋“ค์— ๋Œ€ํ•ด ๋ญ๋ถ€ํ„ฐ ๊ณ„์‚ฐํ• ์ง€
  • ๊ด„ํ˜ธ๋Š” ๋จผ์ € ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•จ
  • *Functional side effects:* expression์— ์‚ฌ์šฉ๋œ ๋ณ€์ˆ˜์ค‘์— ํ•˜๋‚˜๋ผ๋„ ํ•จ์ˆ˜ ํ˜ธ์ถœ๋กœ ์ธํ•ด ๊ฐ’์ด ๋ฐ”๋€” ๊ฐ€๋Šฅ์„ฑ์ด ์กด์žฌํ•˜๋ฉด ๊ฒฐ๊ณผ์˜ ์ผ๊ด€์„ฑ ๊นจ์ง„๋‹ค
    • ํ•ด๊ฒฐ์ฑ… 1. functional side effect์ž์ฒด๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค
      • ์œตํ†ต์„ฑ ์—†๋Š” ์–ธ์–ด๊ฐ€ ๋จ
    • ํ•ด๊ฒฐ์ฑ… 2. ํ”ผ์—ฐ์‚ฐ์ž ํ‰๊ฐ€ ์ˆœ์„œ๋ฅผ ๊ณ ์ •
      • Java๋Š” ํ”ผ์—ฐ์‚ฐ์ž์˜ ํ‰๊ฐ€๊ฐ€ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค
      • ์ผ๋ถ€ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์ตœ์ ํ™”๋ฅผ ์ œํ•œ
  • ๋„ค๊ฐ€์ง€ ์–ธ์–ด ๋ชจ๋‘ referential transparency ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค
    • ์ˆ˜์‹์ด ๋˜‘๊ฐ™์ด ์ƒ๊ฒผ์œผ๋ฉด ๊ฒฐ๊ณผ ๋ฌด์กฐ๊ฑด ๋˜‘๊ฐ™์•„์•ผํ•œ๋‹ค๋Š” ๊ฒƒ
    • pure functional language๋Š” ๋ณ€์ˆ˜๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—, referential transparency ๋ณด์žฅ
  • functional side effect โ†” referential transparency

Overloaded Operators

  • c, c++, java ์ง€์›
  • ์žฅ์ : writability ๋†’์•„์ง
  • ๋‹จ์ : reliability ๋–จ์–ด์ง
  • c,c++์—์„œ๋Š” user define ovaloaded operator์ง€์›
    • ์˜๋ฏธ์— ๋งž๊ฒŒ ์ž‘์„ฑํ•ด์•ผํ•จ
    • readability๊ฐ€ ๋–จ์–ด์งˆ ์ˆ˜๋„

Type Conversion

  • Narrowing conversion
    • float โ†’ int
    • narrowing explicit conversion์€ 4๊ฐ€์ง€ ์–ธ์–ด ๋‹ค ๋˜์ง€๋งŒ, Java๋Š” narrowing implicit conversion์ด ์•ˆ๋œ๋‹ค
  • Widening conversion
    • int โ†’ float
    • 4๊ฐ€์ง€ ์–ธ์–ด ๋ชจ๋‘ widening explicit, widening implicit conversion ๋จ
  • Casting: explicit conversion
    • c based languages ์—์„œ๋Š” casting์ด๋ผ๊ณ  ํ•จ
    • C,Java,C++: (int) angle
  • Coercion: implicit conversion
    • flexibility ๋†’์•„์ง, reliability ๋‚ฎ์•„์ง
    • ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ type error๋ฅผ ๊ฐ์ง€ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์›Œ์ง„๋‹ค

Errors in Expressions

  • ์›์ธ
    1. inherent limitations of arithmetic (์ˆ˜ํ•™ ์›๋ฆฌ) โ†’ division by zero
    2. limitations of computer arithmetic (๋ฆฌ์†Œ์Šค๊ฐ€ ์•ˆ๋ผ์„œ) โ†’ overflow, underflow
  • ํ•ด๊ฒฐ
    • exception handling

Relational, Boolean Expressions

  • relational, boolean expression์€ ์„œ๋กœ ์—ฐ๊ด€ ์žˆ์Œ
  • boolean์€ ๋ชจ๋‘ relational expression์ž„
  • ๊ฒฐ๊ณผ๊ฐ€ true or false๋กœ ๋‚˜์˜ค๋Š” ์—ฐ์‚ฐ โ†’ logic operation์„ ์ˆ˜ํ–‰ํ•œ ๊ฒƒ
  • chained relation: 4 < 5 < 6
    • c/c++ : true
    • java: ํ—ˆ์šฉ์•ˆ๋จ
    • python: true
    • 4 < 5 > 3
      • c/c++: false ( ๋ฌด์กฐ๊ฑด left to right, 4 < 5 ๊ฐ€ 1์ด๋ฏ€๋กœ )
      • python: true ( 4<5 && 5>3 ์œผ๋กœ ๋ฌถ์–ด์„œ ํ•ด์„)
  • short circuit evaluation: ์•ž๋ถ€๋ถ„์ด ํ™•์‹คํ•˜๋ฉด ๋’ท๋ถ€๋ถ„ ํ™•์ธ ์•ˆํ•˜๋Š” ๊ฒƒ์„ ์ง€์›
    • 4๊ฐ€์ง€ ์–ธ์–ด ๋ชจ๋‘ ์ง€์›
    • &&: ํ•˜๋‚˜๋ผ๋„ false๋ฉด ๋’ค ๊ณ„์‚ฐ ์•ˆํ•จ
    • || : ํ•˜๋‚˜๋ผ๋„ true๋ฉด ๋’ค ๊ณ„์‚ฐ ์•ˆํ•จ
    • &, | ๋Š” ๋‹จ์ถ•ํ‰๊ฐ€X
  • assignment statements
    • assign operator๋Š” ๋ชจ๋“  ์–ธ์–ด์—์„œ =
  • compound assignment operator (๋ณตํ•ฉ์—ฐ์‚ฐ์ž)
    • =๊ธฐํ˜ธ์— ๋‹ค๋ฅธ ์—ฐ์‚ฐ์ž ํ•ฉ์ณ๋†“์€ ๊ฒƒ. (+=, -= ๋“ฑ)
    • c,c++, java, python๋ชจ๋‘ ์ง€์›
  • unary assignment operator (๋‹จํ•ญ์—ฐ์‚ฐ์ž)
    • ++ a, a ++
    • python๋นผ๊ณ  ๋ชจ๋‘ ์ง€์› ๋จ
  • assignment as an expression
    • ๋Œ€์ž…๋ฌธ์ด ์ˆ˜์‹์˜ ํ”ผ์—ฐ์‚ฐ์ž๋กœ ์“ฐ์ด๋Š” ๊ฒƒ
    • while ((ch=getchar()) โ‰  EOF ) { โ€ฆ }
    • python์•ˆ๋จ
  • multiple assignment
    • python๋งŒ ๋œ๋‹ค
  • assignment in functional languages
    • functional languages์—์„œ assignment ์ง€์›์€ ํ•˜์ง€๋งŒ, ๋ณ€์ˆ˜๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์ˆ˜ ํ• ๋‹น๋งŒ ๋œ๋‹ค.
  • Mixed-Mode Assignment
    • ์—ฌ๋Ÿฌ๊ฐœ์˜ ํƒ€์ž…์ด ์„ž์—ฌ์žˆ๋Š” ์ˆ˜์‹์ด ์žˆ์œผ๋ฉด mixed-mode๋ผ๊ณ  ํ•จ
    • ํŠน์ •๋ณ€์ˆ˜์— mixed mode expression ๋Œ€์ž…ํ•˜๋ฉด mixed mode assignment๊ฐ€ ๋จ โ†’ c,c++,java, python ๋ชจ๋‘ ์ง€์›
    • java๋Š” widening assignment coercion๋งŒ ์ง€์›๋œ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€