Skip to content

Python Code Convention

Mule129 edited this page Sep 27, 2023 · 1 revision

13๋…„ 8์›” 1์ผ์— ๋‚ด์šฉ์ด ์—…๋ฐ์ดํŠธ ๋œ ๊ฒƒ์ด ์žˆ์–ด์„œ ์ถ”๊ฐ€๋กœ ๋ฒˆ์—ญํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ์›๋ฌธ๋ณด๊ธฐ


#PEP 8 -- Style Guide for Python Code

PEP: 8
Title: Style Guide for Python Code
Author: Guido van Rossum ,
Barry Warsaw
Status: Active
Type: Process
Content-Type: text/x-rst
Created: 05-Jul-2001
Post-History: 05-Jul-2001, 01-Aug-2013 ๋ฒˆ์—ญ์ผ: 13-May-2013
๋ฒˆ์—ญ์ž: [email protected] (์ด์ˆ˜๊ฒธ), [email protected] (์ด๋™์ค€) ์ถ”๊ฐ€๋ฒˆ์—ญ

Contents

  • Introduction
  • A Foolish Consistency is the Hobgoblin of Little Minds
  • Code lay-out
    • Indentation
    • Tabs or Spaces?
    • Maximum Line Length
    • Should a line break before or after a binary operator?
    • Blank Lines
    • Source File Encoding
    • Imports
  • String Quotes
  • Whitespace in Expressions and Statements
    • Pet Peeves
    • Other Recommendations
  • Comments
    • Block Comments
    • Inline Comments
    • Documentation Strings
  • Version Bookkeeping
  • Naming Conventions
    • Overriding Principle
    • Descriptive: Naming Styles
    • Prescriptive: Naming Conventions
      • Names to Avoid
      • Package and Module Names
      • Class Names
      • Exception Names
      • Global Variable Names
      • Function Names
      • Function and method arguments
      • Method Names and Instance Variables
      • Constants
      • Designing for inheritance
    • Public and internal interfaces
  • Programming Recommendations
    • Function Annotations
  • References
  • Copyright

๋ฌธ์„œ ์†Œ๊ฐœ

์ด ๋ฌธ์„œ๋Š” ๊ธฐ๋ณธ ํŒŒ์ด์ฌ ๋ฐฐํฌํŒ์˜ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ํŒŒ์ด์ฌ ์ฝ”๋“œ ์˜ ์ฝ”๋”ฉ ๊ทœ์น™(coding convention)์„ ์„ค๋ช…ํ•œ๋‹ค. ํŒŒ์ด์ฌ์˜ C ๊ตฌํ˜„์— ๋Œ€ํ•œ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ๋ผ์ธ์„ ์„ค๋ช…ํ•˜๋Š” PEP[1]๋„ ์ฐธ๊ณ ํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค.

์ด ๋ฌธ์„œ์™€ PEP 257(Docstring ๊ทœ์น™)์€ ๊ท€๋„๊ฐ€ ์ž‘์„ฑํ•œ ํŒŒ์ด์ฌ ์Šคํƒ€์ผ ๊ฐ€์ด ๋“œ์— ๊ด€ํ•œ ์งง์€ ๊ธ€์— ๋ฐ”ํƒ•์„ ๋‘๊ณ  ์žˆ์œผ๋ฉฐ, ํ›„์— ๋ฐฐ๋ฆฌ์˜ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ[2] ์—์„œ ์ผ๋ถ€ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค.

์ด ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ๋Š” ์ด์ „์˜ ๊ทœ์น™๋“ค(Conventions) ์ด ์–ธ์–ด ์ž์ฒด์˜ ๋ณ€ํ™”๋กœ ์ธํ•ด ๊ตฌ์‹์˜ ๊ฒƒ์œผ๋กœ ๋˜๊ณ , ์ถ”๊ฐ€์ ์ธ ๊ทœ์น™๋“ค(Conventions) ์ด ํ™•์ธ๋˜๋ฉด์„œ ์˜ค๋žœ ์‹œ๊ฐ„์„ ๊ฑธ์ณ ๋ฐœ์ „ํ–ˆ๋‹ค.

๋งŽ์€ ํ”„๋กœ์ ํŠธ๋Š” ๊ทธ๋“ค๋งŒ์˜ ์ฝ”๋”ฉ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ๋ผ์ธ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์–ด๋– ํ•œ ์ถฉ๋Œ์ด ์žˆ๋”๋ผ๋„ ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•œ ๊ฐ€์ด๋“œ๊ฐ€ ์šฐ์„ ์ด ๋˜์–ด์•ผ ํ•œ๋‹ค.

##A Foolish Consistency is the Hobgoblin of Little Minds

๋ฉ์ฒญํ•˜๊ฒŒ ์ผ๊ด€์„ฑ์„ ๊ณ ์ง‘ํ•˜๋Š” ๊ฒƒ์€ ์†Œ์ธ๋ฐฐ์˜ ๋ฐœ์ƒ์ด๋‹ค

๊ท€๋„์˜ ์ค‘์š”ํ•œ ํ†ต์ฐฐ ์ค‘ ํ•˜๋‚˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๊ฐ€ ์ž‘์„ฑ๋˜๋Š” ํšŸ์ˆ˜๋ณด๋‹ค๋Š” ์‚ฌ๋žŒ ์—๊ฒŒ ์ฝํžˆ๋Š” ํšŸ์ˆ˜๊ฐ€ ๋” ๋งŽ๋‹ค๋Š” ์‚ฌ์‹ค์ด๋‹ค. ์ด ๋ฌธ์„œ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฐ€์ด๋“œ๋ผ ์ธ์€ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ๋‹ค์–‘ํ•œ ํŒŒ์ด์ฌ ์ฝ”๋“œ์— ์ผ๊ด€์„ฑ์„ ๋ถ€์—ฌํ•˜ ๊ณ ์žํ•˜๋Š” ์˜๋„๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค. PEP 20์—์„œ ์–ธ๊ธ‰ํ•˜๋“ฏ, "๊ฐ€๋…์„ฑ์€ ์ค‘์š”ํ•˜๋‹ค."

์Šคํƒ€์ผ ๊ฐ€์ด๋“œ๋Š” ์ผ๊ด€์„ฑ์„ ๋‹ค๋ฃฌ๋‹ค. ์ด ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ์—์„œ ๋‹ค๋ฃจ๋Š” ์ผ๊ด€์„ฑ ์€ ์ค‘์š”ํ•œ ๋‚ด์šฉ์ด๋‹ค. ํ”„๋กœ์ ํŠธ์—์„œ์˜ ์ผ๊ด€์„ฑ์€ ์ค‘์š”ํ•˜์ง€๋งŒ, ํŠน์ •ํ•œ ๋ชจ๋“ˆ ํ˜น์€ ํ•จ์ˆ˜ ๋‚ด์—์„œ์˜ ์ผ๊ด€์„ฑ์€ ์ •๋ง ์ค‘์š”ํ•˜๋‹ค.

ํ•˜์ง€๋งŒ ๋ฌด์—‡๋ณด๋‹ค ์ค‘์š”ํ•œ ๊ฒƒ์€, ์–ด๋А ์ˆœ๊ฐ„์— ์ผ๊ด€์„ฑ์„ ๋ฒ„๋ ค์•ผ ํ•  ์ง€ ์•Œ์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค - ์–ด๋–ค ์ˆœ๊ฐ„์—๋Š” ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. ์˜์‹ฌ์ด ๋“ ๋‹ค๋ฉด ์ตœ์„ ์„ ๋‹คํ•ด ํŒ๋‹จํ•ด๋ผ. ๋‹ค๋ฅธ ์˜ˆ์ œ๋“ค์„ ์‚ดํŽด๋ณด๊ณ  ์–ด๋–ค ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์•„ ๋ณด์ด๋Š”์ง€ ๊ฒฐ์ •ํ•˜๋ผ. ๊ทธ๋ฆฌ๊ณ  ์ฃผ์ €ํ•˜์ง€ ๋ง๊ณ  ์งˆ๋ฌธํ•˜๋ผ!

ํŠน์ •์ƒํ™ฉ: ์ด PEP์„ ์ดํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ˜ธํ™˜์„ฑ์„ ์žƒ์ง€ ๋ง๋ผ.

ํŠน์ •ํ•œ ๊ทœ์น™์„ ๋ฌด์‹œํ•ด๋„ ๊ดœ์ฐฎ์€ ๋‹ค์Œ์˜ ๊ฒฝ์šฐ๋“ค์„ ์‚ดํŽด๋ณด์ž:

  1. ๊ธฐ์กด์˜ ๊ทœ์น™์„ ๋”ฐ๋ฅด๋Š” ์ฝ”๋“œ๋ฅผ ์ฝ๋Š”๋ฐ ์ต์ˆ™ํ•œ ์‚ฌ๋žŒ์กฐ์ฐจ ํ•ด๋‹น ๊ทœ์น™์„ ์  ์šฉํ•œ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ๋‚˜๋น ์ง„๋‹ค๊ณ  ํŒ๋‹จํ•  ๊ฒฝ์šฐ.

  2. (์•„๋งˆ ๊ธฐ์กด ๊ด€์Šต ๋•Œ๋ฌธ์—) ์ผ๊ด€์„ฑ์„ ์žƒ์€ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๊ฐˆ์•„์—Ž์–ด์„œ ์ฝ”๋“œ ์˜ ์ผ๊ด€์„ฑ์„ ํ™•๋ฆฝํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ. ์ด๋Š” ๊ธฐ์กด ์ฝ”๋“œ์˜ ์ง€์ €๋ถ„ํ•œ ๋ถ€๋ถ„ ๋“ค์„ (์ง„์ •ํ•œ XP ์Šคํƒ€์ผ๋กœ) ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ์ด๊ธฐ๋„ ํ•˜๋‹ค.

  3. ๋ฌธ์ œ์˜ ์ฝ”๋“œ๊ฐ€ ๊ฐ€์ด๋“œ๋ผ์ธ์˜ ๋„์ž…์„ ์„ ํ–‰ํ• ํ•˜๋Š” ๊ฒฝ์šฐ, ์—ฌ๊ธฐ์—๋Š” ๊ทธ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ์ด์œ ๊ฐ€ ์—†๋‹ค.

  4. ์ฝ”๋“œ๊ฐ€ ์˜ค๋ž˜๋œ ๋ฒ„์ „์˜ Python๊ณผ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ, ์ด ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ๊ฐ€ ์ถ”์ฒœํ•˜๋Š” ํŠน์ง•๋“ค์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ฝ”๋“œ ๋ ˆ์ด์•„์›ƒ

๋“ค์—ฌ์“ฐ๊ธฐ

4๊ฐœ์˜ ๊ณต๋ฐฑ์„ ๋“ค์—ฌ์“ฐ๊ธฐ์˜ ๋‹จ์œ„๋กœ ์‚ฌ์šฉํ•˜๋ผ.

์ •๋ง ์˜ค๋ž˜๋œ ์ฝ”๋“œ๋ฅผ ์—‰๋ง์œผ๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์ง€ ์•Š์€ ๊ฒฝ์šฐ๋ผ๋ฉด, 8๊ฐœ์˜ ๊ณต๋ฐฑ์„ ๊ณ„์† ์‚ฌ์šฉํ•ด๋„ ๋œ๋‹ค.

์—ฌ๋Ÿฌ ์ค„์— ๊ฑธ์ณ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๊ฒฝ์šฐ ํŒŒ์ด์ฌ์˜ ๊ด„ํ˜ธ, ์ค‘๊ด„ํ˜ธ('{'), ๋Œ€๊ด„ํ˜ธ ('[')์ฒ˜๋Ÿผ ์•”์‹œ์ ์œผ๋กœ ์—ฌ๋Ÿฌ ์ค„์„ ๊ฒฐํ•ฉํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ๋“ค์—ฌ์“ฐ๊ธฐ (hanging indent)*๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ์˜ ์š”์†Œ๋“ค์„ ์ˆ˜์ง์œผ๋กœ ์ •๋ ฌํ•ด์•ผ ํ•œ๋‹ค. ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‚ฌํ•ญ์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค; ์ฒซ ๋ฒˆ์งธ ์ค„์— ์ธ์ˆ˜๊ฐ€ ์˜ค๋ฉด ์•ˆ ๋˜๋ฉฐ, ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ํ–‰์ด ๊ณ„์†๋œ๋‹ค๋Š” ์‚ฌ์‹ค ์„ ๋ถ„๋ช…ํžˆ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋„๋ก ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

์ข‹์€ ์˜ˆ::

# ๊ตฌ๋ถ„์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ ฌํ•˜๊ธฐ
foo = long_function_name(var_one, var_two,
                         var_three, var_four)

# ๋‚˜๋จธ์ง€ ์ฝ”๋“œ์™€์˜ ๊ตฌ๋ณ„์„ ์œ„ํ•ด ์ถ”๊ฐ€์ ์ธ ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.
def long_function_name(
        var_one, var_two, var_three,
        var_four):
    print(var_one)
    
# Hanging indents ๊ฐ€ ํ•œ ๋‹จ๊ณ„ ์ถ”๊ฐ€๋˜์–ด์•ผ ํ•œ๋‹ค.
foo = long_function_name(
    var_one, var_two,
    var_three, var_four)

๋‚˜์œ ์˜ˆ::

# ์ˆ˜์ง ์ •๋ ฌ์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ์ธ์ˆ˜๋ฅผ ์ฒซ ๋ฒˆ์งธ ์ค„์— ์‚ฌ์šฉํ•˜์ง€ ๋งˆ๋ผ.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# ๋‹ค์Œ ํ–‰๊ณผ ๊ตฌ๋ณ„์ด ์•ˆ ๋˜๋ฏ€๋กœ ์ถ”๊ฐ€์ ์ธ ๋“ค์—ฌ์“ฐ๊ธฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)

์„ ํƒ์‚ฌํ•ญ::

# ๋ถ€๊ฐ€์ ์ธ ๋“ค์—ฌ์“ฐ๊ธฐ๋Š” ๋”ฑํžˆ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
foo = long_function_name(
  var_one, var_two,
  var_three, var_four)

if ์กฐ๊ฑด๋ฌธ์ด ์ˆ˜์ค„์ด ๋  ์ •๋„๋กœ ๊ธธ๋•Œ, ํ‚ค์›Œ๋“œ(if)๋ฅผ ์กฐํ•ฉํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€์น˜๊ฐ€ ์—†๋‹ค. ๋ช‡์ค„๋กœ ์ž‘์„ฑํ•ด์•ผํ•˜๋Š” ๋ผ์ธ์„ ์œ„ํ•ด์„œ ํ•œ๊ฐœ์˜ ๋นˆ์นธ์„ ๋”ํ•˜๊ณ , ๊ฐœํ–‰๋ฌธ์„ ๋”ํ•ด์„œ ์ž์—ฐ์Šค๋Ÿฌ์šด 4์ž๋ฆฌ ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ ๋งŒ๋“ค์–ด๋ผ. ์ด๊ฒƒ์€ if๋ฌธ์—์„œ ์ค‘์ฒฉ๋œ ์ฝ”๋“œ๋“ค์„ ์‹œ๊ฐ์ ์œผ๋กœ ์ถฉ๋Œ๋˜๋Š” ๊ฒƒ์„ ๋ณด์ธ๋‹ค. ์ด PEP๋Š” ์ค‘์ฒฉ๋˜์–ด ์žˆ๋Š” ์กฐ๊ฑด๋ถ€๋ผ์ธ์— ๋Œ€ํ•ด์„œ ๋ถ„๋ช…ํ•œ ์ž…์žฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋‹ค. ๊ฐ ์ƒํ™ฉ์— ๋”ฐ๋ผ์„œ ์˜๊ฒฌ์„ ๋ฐ›์•„๋“ค์ด๋˜, ์ œํ•œ์‚ฌํ•ญ์ด ์•„๋‹˜์„ ์•Œ์ž:

# ์ถ”๊ฐ€์˜ ๋“ค์—ฌ์“ฐ๊ธฐ๊ฐ€ ์—†์„ ๋•Œ.
if (this_is_one_thing and
    that_is_another_thing):
    do_something()
# ์ด ์—๋””ํ„ฐ์—์„œ ๊ตฌ๋ณ„ํ•˜๋Š” ๊ฒƒ์— ๋”ฐ๋ผ ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‹ฌ์•„์ค€๋‹ค.
# ๊ตฌ๋ฌธ ๊ฐ•์กฐ๋ฅผ ์ง€์›
if (this_is_one_thing and
    that_is_another_thing):
    # Since both conditions are true, we can frobnicate.
    do_something()
# ์กฐ๊ฑด๋ถ€ ๋ผ์ธ ์•„๋ž˜์— ์ถ”๊ฐ€๋กœ ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ ๋” ํ•œ๋‹ค.
if (this_is_one_thing
        and that_is_another_thing):
    do_something()

(๋˜ํ•œ ์—ด๊ณ  ๋‹ซ๋Š” binary operatoer ๋“ค์— ๋Œ€ํ•œ ํ† ์˜๋ฅผ ๋ฐ‘์—์„œ ๋ณด์ž.)

์—ฌ๋Ÿฌ ์ค„์— ๊ฑธ์นœ ๊ด„ํ˜ธ/์ค‘๊ด„ํ˜ธ/๋Œ€๊ด„ํ˜ธ๋ฅผ ๋‹ซ์„ ๊ฒฝ์šฐ ๋ฆฌ์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰ ํ•ญ๋ชฉ์— ๋งž์ถ”์–ด ๋‹ค์Œ ์ค„์— ๋‹ซ๋Š” ํ‘œ์‹œ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ๋ณด์ž:

my_list = [
    1, 2, 3,
    4, 5, 6,
    ]
result = some_function_that_takes_arguments(
    'a', 'b', 'c',
    'd', 'e', 'f',
    )

ํ˜น์€ ์ด๋ ‡๊ฒŒ ์—ฌ๋Ÿฌ ์ค„์— ๊ฑธ์นœ ์ฝ”๋“œ์˜ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž ์œ„์น˜์— ๋‹ซ๋Š” ํ‘œ์‹œ๋ฅผ ๋„ฃ ์„ ์ˆ˜๋„ ์žˆ๋‹ค. ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ๋ณด์ž:

my_list = [
    1, 2, 3,
    4, 5, 6,
]
result = some_function_that_takes_arguments(
    'a', 'b', 'c',
    'd', 'e', 'f',
)

ํƒญ์ด๋ƒ ๊ณต๋ฐฑ์ด๋ƒ

์ ˆ๋Œ€ ํƒญ ๋ฌธ์ž์™€ ๊ณต๋ฐฑ ๋ฌธ์ž๋ฅผ ์„ž์–ด ์“ฐ์ง€ ๋งˆ๋ผ.

ํŒŒ์ด์ฌ์—์„œ ๋“ค์—ฌ์“ฐ๊ธฐ์— ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹์€ ๊ณต๋ฐฑ ๋ฌธ์ž๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋‹ค. ๋‘ ๋ฒˆ์งธ๋กœ ๋งŽ์ด ์“ฐ์ด๋Š” ๋ฐฉ์‹์€ ํƒญ ๋ฌธ์ž๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํƒญ ๋ฌธ ์ž์™€ ๊ณต๋ฐฑ ๋ฌธ์ž๊ฐ€ ์„ž์ธ ์ฝ”๋“œ๋Š” ๋ฐ˜๋“œ์‹œ ๊ณต๋ฐฑ ๋ฌธ์ž๋งŒ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ด ์•ผ ํ•œ๋‹ค. -t ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ด์ฌ ๋ช…๋ น์ค„ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํƒญ ๋ฌธ์ž์™€ ๊ณต๋ฐฑ ๋ฌธ์ž๊ฐ€ ์„ž์ธ ์ฝ”๋“œ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€ ๋ฅผ ํ‘œ์‹œํ•œ๋‹ค. -tt ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๊ฐ€ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋กœ ํ‘œ์‹œ๋œ๋‹ค. ์œ„ ์˜ต์…˜๋“ค์„ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ๊ถŒํ•œ๋‹ค.

์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค ๊ฒฝ์šฐ ํƒญ ๋ฌธ์ž ๋Œ€์‹  ๊ณต๋ฐฑ ๋ฌธ์ž๋งŒ์„ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜ ์ž. ๋Œ€๋ถ€๋ถ„์˜ ํŽธ์ง‘๊ธฐ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•œ ํ–‰์˜ ์ตœ๋Œ€ ๊ธธ์ด

ํ•œ ํ–‰์—๋Š” ์ตœ๋Œ€ 79๊ธ€์ž๊นŒ์ง€๋งŒ ๋„ฃ๋„๋ก ํ•œ๋‹ค.

์„ธ์ƒ์—๋Š” ํ•œ ํ–‰์— 80๊ธ€์ž๊นŒ์ง€๋งŒ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ๋น„๋“ค์ด ์•„์ง ๋งŽ์ด ๋‚จ์•„ ์žˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€, ์ฐฝ ํ•˜๋‚˜์— 80๊ธ€์ž๋งŒ ํ‘œ์‹œํ•˜๋„๋ก ๊ฐ•์ œํ•  ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ ์ฐฝ์„ ์—ด์–ด์„œ ๋Š˜์–ด๋†“๊ณ  ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋‹ค. 80๊ธ€์ž ์ œํ•œ์ด ์žˆ๋Š” ์žฅ์น˜์—์„œ ์ž๋™ ์ค„ ๋ฐ”๊ฟˆ(wrapping)์ด ์ผ์–ด๋‚  ๊ฒฝ์šฐ ์ฝ”๋“œ์˜ ์‹œ๊ฐ์ ์ธ ๊ตฌ์กฐ๊ฐ€ ๋ง๊ฐ€์ง€๋ฉฐ, ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ฝ”๋“œ ํ•œ ํ–‰์€ ์ตœ๋Œ€ 79๊ธ€์ž ๋กœ ์ œํ•œํ•˜๋„๋ก ํ•˜์ž. ํ…์ŠคํŠธ๊ฐ€ ๊ธธ๊ฒŒ ์ด์–ด์ง€๋Š” ๊ฒฝ์šฐ(docstring ํ˜น์€ ์ฃผ์„ ๋ฌธ)์—๋Š” 72๊ธ€์ž๋กœ ์ œํ•œํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.

๊ธ€์ž๊ฐ€ ๋งŽ์€ ํ–‰์— ์ค„๋ฐ”๊ฟˆ์„ ์ ์šฉํ•  ๊ฒฝ์šฐ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๊ด„ํ˜ธ, ์ค‘๊ด„ํ˜ธ, ๋Œ€๊ด„ ํ˜ธ ๋“ฑ์˜ ๋‚ด๋ถ€์— ์—ฌ๋Ÿฌ ํ–‰์˜ ์ฝ”๋“œ๋ฅผ ์ ๋Š” ๊ฒƒ์ด๋‹ค. ํŒŒ์ด์ฌ์—์„œ ์ด๋“ค ์ฝ”๋“œ๋Š” ์•”์‹œ์ ์œผ๋กœ ๊ณ„์† ์ด์–ด์ง€๋Š” ๊ฒƒ์œผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค. ๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•œ ์ค„๋ฐ”๊ฟˆ์„ ์  ์šฉํ•˜์—ฌ ๊ธด ์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ ํ–‰์˜ ์ฝ”๋“œ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ์ค„์ด ๊ณ„์† ๋จ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฑ์Šฌ๋ž˜์‹œ('') ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์ด ์ง„ ์—ฐ์‚ฐ์ž์—์„œ ์ค„๋ฐ”๊ฟˆ์„ ํ•  ๊ฒฝ์šฐ ์ค„๋ฐ”๊ฟˆํ•˜๊ธฐ ์ข‹์€ ๊ณณ์€ ์—ฐ์‚ฐ์ž์˜ ๋‹ค์Œ ์œ„์น˜์ด๋‹ค(์ด์ „ ์œ„์น˜๊ฐ€ ์•„๋‹ˆ๋‹ค). ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด์ž::

class Rectangle(Blob):

    def __init__(self, width, height,
                 color='black', emphasis=None, highlight=0):
        if (width == 0 and height == 0 and
            color == 'red' and emphasis == 'strong' or
            highlight > 100):
            raise ValueError("sorry, you lose")
        if width == 0 and height == 0 and (color == 'red' or
                                           emphasis is None):
            raise ValueError("I don't think so -- values are %s, %s" %
                             (width, height))
        Blob.__init__(self, width, height,
                      color, emphasis, highlight)

๋นˆ ์ค„

์ตœ์ƒ์œ„ ์ˆ˜์ค€ ํ•จ์ˆ˜์™€ ํด๋ž˜์Šค ์ •์˜๋Š” ๋‘ ์ค„์„ ๋„์›Œ์„œ ๊ตฌ๋ถ„ํ•œ๋‹ค.

ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ ์ •์˜๋Š” ํ•œ ์ค„์„ ๋„์›Œ์„œ ๊ตฌ๋ถ„ํ•œ๋‹ค.

์„œ๋กœ ์—ฐ๊ด€์ด ์žˆ๋Š” ํ•จ์ˆ˜๋“ค์˜ ๋ฌถ์Œ์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ๋นˆ ์ค„์„ ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ํ•œ ์ค„์งœ๋ฆฌ ๊ตฌํ˜„ ์ฝ”๋“œ๊ฐ€ ๋ญ‰์ณ ์žˆ์„ ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ๋นˆ ์ค„์„ ์ƒ๋žตํ•  ์ˆ˜๋„ ์žˆ๋‹ค. (์˜ˆ: ์ผ๋ จ์˜ ๋ฏธ๊ตฌํ˜„, ์ž„์‹œ ์ฝ”๋“œ)

ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋…ผ๋ฆฌ์ ์ธ ๋‹จ์œ„๋ฅผ ๋“œ๋Ÿฌ๋‚ด๊ธฐ ์œ„ํ•ด ๋นˆ ์ค„์„ ์‚ฌ์šฉํ•˜๋ผ. (ํ•˜์ง€๋งŒ ์•„๊ปด์„œ ์‚ฌ์šฉํ•˜์ž)

ํŒŒ์ด์ฌ์€ ์ปจํŠธ๋กค-L(^L) ํผ ํ”ผ๋“œ ๋ฌธ์ž๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ์ทจ๊ธ‰ํ•œ๋‹ค; ๋งŽ์€ ํ”„๋กœ๊ทธ ๋žจ์ด ์ด ๋ฌธ์ž๋ฅผ ํŽ˜์ด์ง€ ๊ตฌ๋ถ„์ž๋กœ ์ทจ๊ธ‰ํ•˜๋ฉฐ, ํŒŒ์ผ ๋‚ด์—์„œ ์„œ๋กœ ์—ฐ๊ด€์„ฑ์ด ์žˆ๋Š” ๋‹จ๋ฝ์„ ํŽ˜์ด์ง€๋ณ„๋กœ ๊ตฌ๋ถ„ํ•˜๋Š”๋ฐ ์ด ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํŠน์ • ํŽธ์ง‘๊ธฐ๋‚˜ ์›น ๊ธฐ๋ฐ˜์˜ ์ฝ”๋“œ ๋ทฐ์–ด๋Š” ์ปจํŠธ๋กค-L์„ ํผ ํ”ผ๋“œ ๋ฌธ์ž๋กœ ์ธ์‹ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, ์ด ๊ฒฝ์šฐ ํผ ํ”ผ๋“œ๋ฅผ ๋Œ€์‹ ํ•˜๋Š” ๋‹ค๋ฅธ ๋ฌธ์ž๊ฐ€ ์ปจํŠธ๋กค-L ๋ฌธ์ž์˜ ์œ„์น˜์— ํ‘œ์‹œ๋  ๊ฒƒ์ด๋‹ค.

์ธ์ฝ”๋”ฉ (PEP 263)

ํŒŒ์ด์ฌ ๋ฐฐํฌ๋ณธ ๋‚ด์˜ ์ฝ”๋“œ๋Š” ํ•ญ์ƒ ASCII ํ˜น์€ Latin-1 ์ธ์ฝ”๋”ฉ(ISO-8859-1 ์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค)์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ํŒŒ์ด์ฌ 3.0 ์ด์ƒ ๋ฒ„์ „์—์„œ๋Š” Latin-1 ๋Œ€์‹  UTF-8์„ ๊ถŒ์žฅํ•œ๋‹ค(PEP 3120์„ ์ฐธ๊ณ ํ•˜๋ผ).

ASCII ์ธ์ฝ”๋”ฉ์„ ์‚ฌ์šฉํ•˜๋Š” ํŒŒ์ผ์€ ์ฝ”๋”ฉ ์ฟ ํ‚ค๋ฅผ ํฌํ•จํ•˜๋ฉด ์•ˆ ๋œ๋‹ค. ์ฃผ์„ ํ˜น ์€ docstring์—์„œ Latin-1 ๋ฌธ์ž๋กœ ๊ธฐ๋ก๋œ ๋ฌธ์„œ ์ž‘์„ฑ์ž์˜ ์ด๋ฆ„์„ ์–ธ๊ธ‰ํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ์—๋งŒ Latin-1(ํ˜น์€ UTF-8)์„ ์‚ฌ์šฉํ•œ๋‹ค. ํ˜น์€, ๋น„ ASCII ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌธ์ž ์ƒ์ˆ˜์— ๋„ฃ์œผ๋ ค๋ฉด \x, \u, \U ๋“ฑ์˜ ์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ธธ ๊ถŒํ•œ๋‹ค.

ํŒŒ์ด์ฌ 3.0 ์ด์ƒ ๋ฒ„์ „์—์„œ๋Š” ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ •์ฑ…์„ ์ทจํ•˜๊ณ  ์žˆ๋‹ค(PEP 3131์„ ์ฐธ๊ณ ): ํŒŒ์ด์ฌ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ๋Š” ASCII ๋ฌธ ์ž๋งŒ์œผ๋กœ ๊ตฌ์„ฑ๋œ ์‹๋ณ„์ž๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ, ๋ชจ๋“  ๊ฒฝ์šฐ์— ์ ์ ˆํ•œ ์˜์–ด ๋‹จ์–ด ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค(๋งŽ์€ ๊ฒฝ์šฐ, ์–ด์–ด๋ผ๊ณ  ํ•  ์ˆ˜ ์—†๋Š” ์•ฝ์–ด์™€ ๊ธฐ์ˆ  ์šฉ ์–ด๊ฐ€ ์“ฐ์ด๊ณค ํ•œ๋‹ค). ๋˜ํ•œ, ๋ฌธ์ž ์ƒ์ˆ˜์™€ ์ฃผ์„ ๋˜ํ•œ ASCII๋กœ ์ž‘์„ฑ๋˜์–ด์•ผ ํ•œ๋‹ค. ์œ ์ผํ•œ ์˜ˆ์™ธ๋Š” (a) ๋น„ ASCII ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค (b) ์ž‘์„ฑ์ž์˜ ์ด๋ฆ„. ๋ผํ‹ด ์•ŒํŒŒ๋ฒณ ์ด์™ธ์˜ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง„ ์ž‘ ์„ฑ์ž๋Š” ์ž์‹ ์˜ ์ด๋ฆ„์— ๋Œ€ํ•œ ๋ผํ‹ด์–ด ์Œ์—ญ์„ ๊ฐ™์ด ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค.

์ „์„ธ๊ณ„์ธ์ด ์ฐธ์—ฌ ์ค‘์ธ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋“ค์€ ์ด์™€ ๋น„์Šทํ•œ ์ •์ฑ…์„ ๋”ฐ๋ฅด ๋„๋ก ํ•˜๊ณ  ์žˆ๋‹ค.

์ž„ํฌํŠธ

  • ์ž„ํฌํŠธ๋Š” ๋ณดํ†ต ํ–‰์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด์•ผ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด::

    ์ข‹์Œ: import os import sys

    ๋‚˜์จ: import sys, os

    ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ดœ์ฐฎ๋‹ค::

    from subprocess import Popen, PIPE
    
  • ์ž„ํฌํŠธ ๊ตฌ๋ฌธ์€ ํ•ญ์ƒ ํŒŒ์ผ์˜ ์ตœ์ƒ๋‹จ์— ์œ„์น˜ํ•ด์•ผ ํ•˜๋ฉฐ, ๋ชจ๋“ˆ์˜ ์ฃผ์„๋ฌธ๊ณผ docstring์˜ ๋ฐ”๋กœ ๋‹ค์Œ, ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“ˆ์˜ ์ „์—ญ ๋ณ€์ˆ˜์™€ ์ƒ์ˆ˜ ๋ฐ”๋กœ ์ด์ „์— ์œ„์น˜ํ•œ๋‹ค.

    ์ž„ํฌํŠธ ๊ตฌ๋ฌธ์€ ๋‹ค์Œ ์ˆœ์„œ์— ๋”ฐ๋ผ ๊ทธ๋ฃน๋ณ„๋กœ ๊ธฐ์ˆ ํ•œ๋‹ค::

    1. ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    2. ๊ด€๋ จ์ด ์žˆ๋Š” ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    3. ๋กœ์ปฌ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜/์ž์ฒด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

    ๊ฐ ๊ทธ๋ฃน ์‚ฌ์ด์—๋Š” ๋นˆ ์ค„ ํ•˜๋‚˜๋ฅผ ๋„ฃ์–ด์•ผ ํ•œ๋‹ค.

    ์ž„ํฌํŠธ ๊ตฌ๋ฌธ ๋‹ค์Œ์—๋Š” __all__ ๋ช…์„ธ๋ฅผ ๋„ฃ๋Š”๋‹ค.

  • ์ธ์ ‘(relative) ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด๋ถ€ ํŒจํ‚ค์ง€๋ฅผ ์ž„ํฌํŠธํ•˜์ง€ ์•Š๋„๋ก ํ•œ ๋‹ค. ํ•ญ์ƒ ์ ˆ๋Œ€ ํŒจํ‚ค์ง€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž„ํฌํŠธ๋ฅผ ํ•˜๋„๋ก ํ•˜์ž. ํ˜„์žฌ ํŒŒ์ด์ฌ 2.5์— PEP 328์ด ์™„์ „ํžˆ ๊ตฌํ˜„๋˜์–ด ์žˆ์œผ๋‚˜, ๋ช…์‹œ์  ์ธ์ ‘ ์ž„ํฌํŠธ (explicit relative import)๋Š” ์—ฌ์ „ํžˆ ๊ถŒ์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค; ์ ˆ๋Œ€ ์ž„ํฌํŠธ (์—ญ์ฃผ: ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•œ ์ž„ํฌํŠธ)๋Š” ์ด์‹์„ฑ์ด ๋†’์œผ๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ์ฝ๊ธฐ ๋” ์‰ฝ๋‹ค.

  • ํด๋ž˜์Šค๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“ˆ์—์„œ ํด๋ž˜์Šค๋ฅผ ์ž„ํฌํŠธํ•  ๋•Œ, ๋ณดํ†ต์€ ๋‹ค์Œ ๊ณผ ๊ฐ™์ด ๊ธฐ์ˆ ํ•œ๋‹ค::

    from myclass import MyClass
    from foo.bar.yourclass import YourClass
    

    ๋งŒ์•ฝ ์ด๋ฆ„์ด ์ด๋ฏธ ์„ ์–ธ๋œ ๋กœ์ปฌ ์ด๋ฆ„๊ณผ ์ถฉ๋Œํ•  ๊ฒฝ์šฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ธฐ์ˆ  ํ•œ๋‹ค::

    import myclass
    import foo.bar.yourclass
    

    ๊ทธ๋Ÿฐ ๋‹ค์Œ "myclass.MyClass", "foo.bar.yourclass.YourClass" ๊ฐ™์€ ์‹์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

ํ‘œํ˜„์‹, ๊ตฌ๋ฌธ์—์„œ์˜ ๊ณต๋ฐฑ ๋ฌธ์ž

๋ˆˆ์—ฃ๊ฐ€์‹œ*

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ๋Š” ์—ฌ๋ถ„์˜ ๊ณต๋ฐฑ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค:

  • ๊ด„ํ˜ธ, ์ค‘๊ด„ํ˜ธ, ๋Œ€๊ด„ํ˜ธ ๋‚ด๋ถ€์— ์—ฐ๊ฒฐ๋˜๋Š” ๋ถ€๋ถ„::

    ์ข‹์Œ: spam(ham[1], {eggs: 2})
    ๋‚˜์จ: spam( ham[ 1 ], { eggs: 2 } )
    
  • ์ฝค๋งˆ, ์„ธ๋ฏธ์ฝœ๋ก , ์ฝœ๋ก ์˜ ์ด์ „ ์œ„์น˜::

    ์ข‹์Œ: if x == 4: print x, y; x, y = y, x
    ๋‚˜์จ: if x == 4 : print x , y ; x , y = y , x
    
  • ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ ์ธ์ˆ˜ ๋ชฉ๋ก์ด ์‹œ์ž‘๋˜๋Š” ๊ด„ํ˜ธ์˜ ๋ฐ”๋กœ ์ด์ „ ์œ„์น˜::

    ์ข‹์Œ: spam(1)
    ๋‚˜์จ: spam (1)
    
  • ์ธ๋ฑ์‹ฑ ํ˜น์€ ์Šฌ๋ผ์ด์‹ฑ์ด ์‹œ์ž‘๋˜๋Š” ๊ด„ํ˜ธ์˜ ๋ฐ”๋กœ ์ด์ „ ์œ„์น˜::

    ์ข‹์Œ: dict['key'] = list[index]
    ๋‚˜์จ: dict ['key'] = list [index]
    
  • ํ• ๋‹น(ํ˜น์€ ๊ธฐํƒ€ ๋‹ค๋ฅธ) ์—ฐ์‚ฐ์ž ์ฃผ๋ณ€์— ํ•œ ๊ฐœ๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ๊ณต๋ฐฑ ๋ฌธ์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ::

    ์ข‹์Œ::

    x = 1
    y = 2
    long_variable = 3
    

    ๋‚˜์จ::

    x             = 1
    y             = 2
    long_variable = 3
    
  • Pet Peeves. '์ž๊พธ ๋ˆˆ์— ๊ฑฐ์Šฌ๋ฆฌ๋Š” ๊ฒƒ'์„ ์ด๋ฅด๋Š” ๊ด€์šฉ์–ด.

๊ธฐํƒ€ ๊ถŒ๊ณ ์‚ฌํ•ญ

  • ํ•ญ์ƒ ์ด์ง„ ์—ฐ์‚ฐ์ž์˜ ์ฃผ์œ„์—๋Š” ํ•œ ๊ฐœ์˜ ๊ณต๋ฐฑ์„ ๋„ฃ๋Š”๋‹ค: ํ• ๋‹น (=), ์ฆ๊ฐ ํ• ๋‹น (+=, -= ๋“ฑ.), ๋น„๊ต (==, <, >, !=, <>, <=, >=, in, not in, is, is not), ๋ถ€์šธ ์—ฐ์‚ฐ (and, or, not).

  • ์šฐ์„  ์ˆœ์œ„๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ์—ฐ์‚ฐ์ž๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ์—ฐ์‚ฐ์ž ์ฃผ์œ„์— ๊ณต๋ฐฑ์„ ๋„ฃ์„์ง€ ๊ณ ๋ คํ•ด๋ณด์ž. ํ•˜์ง€๋งŒ ์ด ๊ฒฝ์šฐ์—๋„ ํ•œ ๊ฐœ ๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ๊ณต๋ฐฑ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋˜๋ฉฐ, ์ด์ง„ ์—ฐ์‚ฐ์ž์˜ ์–‘์ชฝ์„ ๋˜‘ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๊ธฐ์ˆ ํ•˜๋„๋ก ํ•œ๋‹ค.

    ์ข‹์Œ::

    i = i + 1
    submitted += 1
    x = x*2 - 1
    hypot2 = x*x + y*y
    c = (a+b) * (a-b)
    

    ๋‚˜์จ::

    i=i+1
    submitted +=1
    x = x * 2 - 1
    hypot2 = x * x + y * y
    c = (a + b) * (a - b)
    
  • ํ‚ค์›Œ๋“œ ์ธ์ˆ˜ ํ˜น์€ ๊ธฐ๋ณธ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒฝ์šฐ์—๋Š” = ๊ธฐํ˜ธ ์ฃผ์œ„์— ๊ณต๋ฐฑ์„ ๋„ฃ์ง€ ์•Š๋Š”๋‹ค.

    ์ข‹์Œ::

    def complex(real, imag=0.0):
        return magic(r=real, i=imag)
    

    ๋‚˜์จ::

    def complex(real, imag = 0.0):
        return magic(r = real, i = imag)
    
  • ๋ณตํ•ฉ ๊ตฌ๋ฌธ(Compound statements, ์—ฌ๋Ÿฌ ๊ตฌ๋ฌธ์ด ํ•œ ์ค„์— ์žˆ๋Š” ๊ฒƒ)์€ ์ผ๋ฐ˜ ์ ์œผ๋กœ ๊ถŒ์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค.

    ์ข‹์Œ::

    if foo == 'blah':
        do_blah_thing()
    do_one()
    do_two()
    do_three()
    

    Rather not::

    if foo == 'blah': do_blah_thing()
    do_one(); do_two(); do_three()
    
  • ์งง์€ if/for/while ๊ตฌ๋ฌธ์„ ํ•œ ์ค„์— ๋„ฃ๋Š” ๊ฒƒ์€ ๊ดœ์ฐฎ์ง€๋งŒ, ์—ฌ๋Ÿฌ ์ ˆ์„ ๊ฐ€ ์ง„ ๊ตฌ๋ฌธ์€ ์ ˆ๋Œ€ ํ•œ ์ค„์— ๊ธฐ์ˆ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋˜ํ•œ ํ•œ ์ค„์— ์—ฌ๋Ÿฌ ๊ตฌ๋ฌธ์„ ๊ธฐ์ˆ ํ•˜๋ฉด์„œ ์ค„๋ฐ”๊ฟˆ์„ ํ•˜๋Š” ๊ฒƒ๋„ ํ”ผํ•ด์•ผ ํ•œ๋‹ค.

    ๊ทธ๋Ÿฐ๋Œ€๋กœ ๊ดœ์ฐฎ์Œ::

    if foo == 'blah': do_blah_thing()
    for x in lst: total += x
    while t < 10: t = delay()
    

    ์ ˆ๋Œ€ ์•ˆ๋จ::

    if foo == 'blah': do_blah_thing()
    else: do_non_blah_thing()
    
    try: something()
    finally: cleanup()
    
    do_one(); do_two(); do_three(long, argument,
                                 list, like, this)
    
    if foo == 'blah': one(); two(); three()
    

์ฃผ์„๋ฌธ

์ฝ”๋“œ์˜ ๋‚ด์šฉ๊ณผ ๋™๋–จ์–ด์ง„ ์ฃผ์„์ด ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ์•„์˜ˆ ์ฃผ์„์ด ์—†๋Š” ํŽธ์ด ๋‚ซ ๋‹ค. ์ฃผ์„์€ ํ•ญ์ƒ ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ์— ๋งž์ถ”์–ด ์ตœ์‹ ์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋„๋ก ํ•œ๋‹ค.

์ฃผ์„์€ ์™„๊ฒฐ๋œ ๋ฌธ์žฅ ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•œ๋‹ค. ํ•œ ๊ตฌ์ ˆ ํ˜น์€ ๋ฌธ์žฅ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ฃผ์„์„ ์ž‘์„ฑํ•  ๊ฒฝ์šฐ, ์ฒซ ๋ฒˆ์งธ ๋‹จ์–ด๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ๊ธฐ์ˆ ํ•œ๋‹ค. ์˜ˆ์™ธ์ ์œผ๋กœ, ์ด ์ฒซ ๋ฒˆ์งธ ๋‹จ์–ด๊ฐ€ ์†Œ๋ฌธ์ž๋กœ ๋œ ์‹๋ณ„์ž์ผ ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋Œ€๋กœ ์†Œ๋ฌธ์ž๋กœ ๊ธฐ์ˆ  ํ•œ๋‹ค(์ด๋ ‡๊ฒŒ ์‹๋ณ„์ž๋ฅผ ์ฃผ์„์— ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ์—๋Š” ์ ˆ๋Œ€ ์†Œ๋ฌธ์ž/๋Œ€๋ฌธ์ž๋ฅผ ๋ฐ” ๊พธ์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค).

์ฃผ์„๋ฌธ์ด ์งง์„ ๊ฒฝ์šฐ ๋งˆ์ง€๋ง‰์— ์˜ค๋Š” ๋งˆ์นจํ‘œ๋Š” ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ธ”๋ก ํ˜•ํƒœ ์˜ ์ฃผ์„๋ฌธ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์™„๊ฒฐ๋œ ๋ฌธ์žฅ๋“ค๋กœ ๊ตฌ์„ฑ๋œ ๋ฌธ๋‹จ๋“ค์ด๋ฉฐ, ๊ฐ๊ฐ์˜ ๋ฌธ ๋‹จ์€ ๋งˆ์นจํ‘œ๋กœ ๋๋‚˜์•ผ ํ•œ๋‹ค.

๋ฌธ์žฅ์˜ ๋งˆ์นจํ‘œ ๋‹ค์Œ์—๋Š” ๋‘ ๊ฐœ์˜ ๊ณต๋ฐฑ์„ ๋„ฃ๋Š”๋‹ค.

์˜๋ฌธ์œผ๋กœ ์ž‘์„ฑํ•  ๊ฒฝ์šฐ Strunk์™€ White*์˜ ์Šคํƒ€์ผ์„ ์ ์šฉํ•œ๋‹ค.

๋น„์˜์–ด๊ถŒ ๊ตญ๊ฐ€์˜ ํŒŒ์ด์ฌ ์ฝ”๋”์˜ ๊ฒฝ์šฐ, ๋‹ค๋ฅธ ๋‚˜๋ผ์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ˜„์žฌ ๋‹น์‹ ์ด ์ž‘์„ฑํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ฝ๊ฒŒ ๋  ์ผ์ด ์ „ํ˜€ ์—†์œผ๋ฆฌ๋ž€ ํ™•์‹ ์ด ๋“ค์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๋ถ€ ๋”” ์˜๋ฌธ์œผ๋กœ ์ฃผ์„์„ ์ž‘์„ฑํ•ด์ฃผ๊ธธ ๋ฐ”๋ž€๋‹ค.

  • ์˜์–ด ์ž‘๋ฌธ์— ๊ด€ํ•œ ์ฑ…์ธ 'The Elements of Style'์˜ ์ €์ž.

๋ธ”๋ก ์ฃผ์„๋ฌธ

๋ธ”๋ก ์ฃผ์„๋ฌธ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ธ”๋ก ์ฃผ์„๋ฌธ ์ดํ›„์— ๊ธฐ์ˆ ๋˜๋Š” ์ผ๋ถ€(ํ˜น์€ ์ „์ฒด) ์ฝ”๋“œ์™€ ๊ด€๋ จ๋œ ๋‚ด์šฉ์ด๋ฉฐ, ํ•ด๋‹น ์ฝ”๋“œ์™€ ๊ฐ™์€ ์ˆ˜์ค€๋งŒํผ ๋“ค์—ฌ์“ฐ๊ฒŒ ๋œ๋‹ค. ๋ธ” ๋ก ์ฃผ์„๋ฌธ์˜ ๊ฐ ํ–‰์€ #๋ฌธ์ž์™€ ํ•œ ๊ฐœ์˜ ๊ณต๋ฐฑ์œผ๋กœ ์‹œ์ž‘๋œ๋‹ค(์ฝ”๋ฉ˜ํŠธ ๋‚ด ๋ถ€์— ๋“ค์—ฌ์“ฐ๊ธฐ๋œ ํ…์ŠคํŠธ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ๋Š” ์ œ์™ธ)

๋ธ”๋ก ์ฃผ์„๋ฌธ ๋‚ด๋ถ€์˜ ๋ฌธ๋‹จ๋“ค์€ ํ•œ ๊ฐœ์˜ # ๋ฌธ์ž๋ฅผ ํฌํ•จํ•œ ๋นˆ ์ค„์„ ๋„ฃ์–ด ๊ตฌ๋ถ„ํ•œ๋‹ค.

์ธ๋ผ์ธ ์ฃผ์„๋ฌธ

์ธ๋ผ์ธ ์ฃผ์„๋ฌธ์€ ์•„๊ปด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

์ธ๋ผ์ธ ์ฃผ์„๋ฌธ์€ ์ฝ”๋“œ์™€ ๋™์ผํ•œ ํ–‰์— ๊ธฐ์ˆ ๋˜๋Š” ์ฃผ์„๋ฌธ์ด๋‹ค. ์ธ๋ผ์ธ ์ฃผ์„ ๋ฌธ์€ ์ฝ”๋“œ์—์„œ ์ตœ์†Œํ•œ ๋‘ ๊ฐœ ์ด์ƒ์˜ ๊ณต๋ฐฑ์œผ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ฃผ ์„๋ฌธ์€ # ๋ฌธ์ž์™€ ํ•œ ๊ฐœ์˜ ๊ณต๋ฐฑ์œผ๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค.

๋ป”ํ•œ ๋‚ด์šฉ์˜ ์ธ๋ผ์ธ ์ฃผ์„๋ฌธ์€ ๋ถˆํ•„์š”ํ•˜๋ฉฐ, ์‚ฌ์‹ค ๋ฐฉํ•ด๋ฌผ์ด๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ์ฃผ์„๋ฌธ์€ ํ”ผํ•˜์ž::

x = x + 1                 # x์˜ ์ฆ๊ฐ€

ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ์ฃผ์„๋ฌธ์€ ์œ ์šฉํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค::

x = x + 1                 # ๊ฒฝ๊ณ„๊ฐ’์— ๋Œ€ํ•œ ๋ณด์ƒ

๋ฌธ์„œํ™” ๋ฌธ์ž์—ด

์ข‹์€ ๋ฌธ์„œํ™” ๋ฌธ์ž์—ด(Documentation String, docstring์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค)์„ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๊ทœ์น™์œผ๋กœ PEP 257๊ฐ€ ๋„๋ฆฌ ์•Œ๋ ค์ ธ ์žˆ๋‹ค.

  • public์œผ๋กœ ์ •์˜๋œ ๋ชจ๋“  ๋ชจ๋“ˆ, ํ•จ์ˆ˜, ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด docstring ์„ ์ž‘์„ฑํ•œ๋‹ค. public์œผ๋กœ ์ •์˜๋˜์ง€ ์•Š์€ ๋ฉ”์„œ๋“œ์—๋Š” docstring์„ ์ž‘์„ฑ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ํ•˜์ง€๋งŒ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฌด์Šจ ์ผ์„ ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•˜๋Š” ์ฃผ ์„์€ ๋‹ฌ์•„์•ผ ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ฃผ์„์€ def๊ฐ€ ์žˆ๋Š” ํ–‰ ๋ฐ”๋กœ ๋‹ค์Œ ํ–‰์— ์ž‘์„ฑํ•œ๋‹ค.

  • PEP 257์€ ์ข‹์€ docstring ์ž‘์„ฑ ๊ทœ์น™์— ๋Œ€ํ•ด ๊ธฐ์ˆ ํ•˜๊ณ  ์žˆ๋‹ค. """ ์˜์—ญ์ด ๋๋‚˜๋Š” ๋ถ€๋ถ„์—์„œ๋Š” ํ•œ ์ค„ ์ „์ฒด์— """ ๋ฌธ์ž๋ฅผ ๋„ฃ๊ณ , ๋ฐ”๋กœ ์œ„ ์˜ ํ•œ ์ค„์„ ๋นˆ ์ค„๋กœ ๋‘์–ด์•ผ ํ•œ๋‹ค. ๋‹ค์Œ ์˜ˆ๋ฅผ ๋ณด์ž::

    """Return a foobang
    
    Optional plotz says to frobnicate the bizbaz first.
    
    """
    
  • ํ•œ ์ค„ ์งœ๋ฆฌ docstring์˜ ๊ฒฝ์šฐ์—๋Š” ๊ฐ™์€ ์ค„์—์„œ """๋ฅผ ๋‹ซ์•„๋„ ๋œ๋‹ค.

๋ฒ„์ „ ๊ด€๋ฆฌ

์†Œ์Šค ํŒŒ์ผ์— Subversion, CVS, RCS ๋“ฑ์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฒ„ ์ „์„ ๊ธฐ๋กํ•œ๋‹ค::

__version__ = "$Revision$"
# $Source$

์œ„ ๋‚ด์šฉ์€ ๋ชจ๋“ˆ์˜ docstring ๋ฐ”๋กœ ๋‹ค์Œ์— ์™€์•ผ ํ•˜๋ฉฐ, ๊ทธ ์ดํ›„์—๋Š” ํ”„๋กœ๊ทธ ๋žจ ์ฝ”๋“œ๊ฐ€ ์˜จ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ํ–‰์˜ ์œ„์™€ ์•„๋ž˜์—๋Š” ๋นˆ ์ค„ ํ•œ ๊ฐœ์”ฉ์ด ๋“ค์–ด๊ฐ€ ์•ผ ํ•œ๋‹ค.

๋ช…๋ช… ๊ทœ์น™

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

ํ‘œํ˜„: ๋ช…๋ช… ์Šคํƒ€์ผ

์„ธ์ƒ์—๋Š” ๋‹ค์–‘ํ•œ ๋ช…๋ช… ์Šคํƒ€์ผ์ด ์กด์žฌํ•œ๋‹ค. ๋ช…๋ช… ์Šคํƒ€์ผ์€ ์ด ์Šคํƒ€์ผ์ด ์–ด๋–ค ๋ชฉ์ ์œผ๋กœ ์“ฐ์ด๋Š”์ง€์™€๋Š” ๋ณ„๊ฐœ๋กœ, ์–ด๋–ค ๋ช…๋ช… ์Šคํƒ€์ผ์ด ์“ฐ์ด๊ณ  ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๋Š”๋ฐ ๋„์›€์ด ๋œ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช…๋ช… ์Šคํƒ€์ผ์„ ํ”ํžˆ ๋ณผ ์ˆ˜ ์žˆ๋‹ค:

  • b (ํ•œ ๊ฐœ์˜ ์†Œ๋ฌธ์ž)

  • B (ํ•œ ๊ฐœ์˜ ๋Œ€๋ฌธ์ž)

  • lowercase

  • lower_case_with_underscores

  • UPPERCASE

  • UPPER_CASE_WITH_UNDERSCORES

  • CapitalizedWords (CapWords ํ˜น์€ CamelCase -- CamelCase๋ผ๋Š” ์ด ๋ฆ„์€ ๊ธ€์ž๊ฐ€ ํˆญ ํŠ€์–ด๋‚˜์˜จ ๋ชจ์–‘ ๋•Œ๋ฌธ์— ๋ถ™์€ ์ด๋ฆ„์ด๋‹ค [3]_). ๊ฐ„ํ˜น StudlyCaps์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค.

    ์ฃผ์˜: CapWords์—์„œ ์•ฝ์–ด๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ์•ฝ์–ด์˜ ๋ชจ๋“  ๊ธ€์ž๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ๊ธฐ์ˆ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ HTTPServerError๊ฐ€ HttpServerError๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค ๋‚ซ๋‹ค.

  • mixedCase (CapWords์™€ ๋‹ค๋ฅธ ์ ์€ ์ฒซ ๊ธ€์ž๊ฐ€ ์†Œ๋ฌธ์ž๋ผ๋Š” ๊ฒƒ์ด๋‹ค)

  • Capitalized_Words_With_Underscores (์ด๊ฑด ๋ณ„๋กœ๋‹ค!)

์„œ๋กœ ์—ฐ๊ด€์ด ์žˆ๋Š” ๋ช…์นญ๋“ค์„ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ์งง์€ ๊ณ ์œ  ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์Šคํƒ€์ผ ๋˜ํ•œ ์กด์žฌํ•œ๋‹ค. ํŒŒ์ด์ฌ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์Šคํƒ€์ผ์ด ๋งŽ์ด ์“ฐ์ด์ง€ ์•Š๊ณ  ์žˆ์œผ๋‚˜, ์ด ๋ฌธ์„œ์˜ ์™„๊ฒฐ์„ฑ์„ ์œ„ํ•ด ์–ธ๊ธ‰ํ•ด๋‘”๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด os.stat() ํ•จ์ˆ˜๋Š” ์ „ํ†ต์ ์œผ๋กœ st_mode, st_size, st_mtime ๋“ฑ์˜ ์ด๋ฆ„์„ ๊ฐ€์ง„ ํ•ญ๋ชฉ์ด ๋‹ด๊ธด ํŠœํ”Œ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. (์ด๋“ค์€ POSIX ์‹œ์Šคํ…œ ํ˜ธ์ถœ ๊ตฌ์กฐ์ฒด ์˜ ํ•„๋“œ์™€ ๊ด€๋ จ์ด ์žˆ์Œ์„ ๊ฐ•์กฐํ•˜๊ธฐ ์œ„ํ•ด ์“ฐ์ธ ๊ฒƒ์ด๋‹ค. POSIX์— ์ต์ˆ™ํ•œ ํ”„ ๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ๋Š” ๋„์›€์ด ๋œ๋‹ค.)

X11 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” public ํ•จ์ˆ˜์— ๋ชจ๋‘ X๋ผ๋Š” ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. ํŒŒ์ด์ฌ์—์„œ ์ด๋Ÿฌํ•œ ์Šคํƒ€์ผ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์“ธ๋ฐ์—†๋Š” ์ง“์œผ๋กœ ๊ฐ„์ฃผ๋œ๋‹ค. ์–ด ํŠธ๋ฆฌ๋ทฐํŠธ์™€ ๋ฉ”์„œ๋“œ์— ์ ‘๊ทผํ•  ๋•Œ์—๋Š” ๊ฐ์ฒด๋ฅผ ์ ‘๋‘์‚ฌ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, ํ•จ์ˆ˜์— ์ ‘๊ทผํ•  ๋•Œ์—๋Š” ๋ชจ๋“ˆ ์ด๋ฆ„์„ ์ ‘๋‘์‚ฌ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋˜ํ•œ, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฒ˜์Œ์ด๋‚˜ ๋์— ์–ธ๋”์Šค์ฝ”์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŠน๋ณ„ํ•œ ํ˜•์‹์ด ์žˆ๋‹ค (์ด๋“ค์€ ๋ณดํ†ต ๋Œ€์†Œ๋ฌธ์ž ๊ด€๋ จ ๊ทœ์น™๊ณผ ํ•จ๊ป˜ ์“ฐ์ผ ์ˆ˜ ์žˆ๋‹ค):

  • _single_leading_underscore: "๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•œ๋‹ค"๋Š” ๊ฒƒ์„ ์˜๋ฏธ. ์˜ˆ๋ฅผ ๋“ค๋ฉด, from M import *์€ ์–ธ๋”์Šค์ฝ”์–ด๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ž„ํฌ ํŠธํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • single_trailing_underscore_: ํŒŒ์ด์ฌ ํ‚ค์›Œ๋“œ์™€์˜ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์“ฐ์ธ๋‹ค. ์˜ˆ::

    Tkinter.Toplevel(master, class_='ClassName')
    
  • __double_leading_underscore: ํด๋ž˜์Šค ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์˜ ์ด๋ฆ„์„ ์ง€์œผ ๋ฉด ๋„ค์ž„ ๋งน๊ธ€๋ง(name mangling)์ด ๋ฐœ์ƒํ•œ๋‹ค (FooBar ํด๋ž˜์Šค ๋‚ด๋ถ€์— __boo๋ฅผ ์„ ์–ธํ•˜๋ฉด ์ด๋Š” _FooBar__boo๊ฐ€ ๋œ๋‹ค; ์•„๋ž˜ ๋‚ด์šฉ์„ ์ฐธ ๊ณ ํ•˜๋ผ).

  • __double_leading_and_trailing_underscore__: ์‚ฌ์šฉ์ž๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‚ด์— ์žˆ๋Š” "๋งˆ๋ฒ•(magic)" ๊ฐ์ฒด. __init__, __import__, __file__ ๋“ฑ์ด ๊ทธ ์˜ˆ์ด๋‹ค. ์ด๋Ÿฌํ•œ ์ด๋ฆ„์„ ์ •์˜ํ•ด ์„œ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋˜๋ฉฐ, ์ด๋ฏธ ๋ฌธ์„œํ™”๋˜์–ด ์žˆ๋Š” ํ•ญ๋ชฉ๋“ค๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

๊ทœ์ •: ๋ช…๋ช… ๊ทœ์น™

ํ”ผํ•ด์•ผ ํ•  ์ด๋ฆ„


'l' (์†Œ๋ฌธ์ž L), 'O' (๋Œ€๋ฌธ์ž O), 'I' (๋Œ€๋ฌธ์ž I) ํ•œ ๊ธ€์ž๋ฅผ ๋ณ€์ˆ˜ ์ด๋ฆ„์œผ
๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

ํŠน์ • ํฐํŠธ์—์„œ๋Š” ์ด๋“ค ๊ธ€์ž๋ฅผ ์ˆซ์ž ์ผ, ์˜๊ณผ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์—†๋‹ค.  'l'์„ ๊ตณ
์ด ์‚ฌ์šฉํ•ด์•ผ ํ•  ๊ฒฝ์šฐ์—๋Š” ์ฐจ๋ผ๋ฆฌ 'L'์„ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜์ž.

ํŒจํ‚ค์ง€์™€ ๋ชจ๋“ˆ ์ด๋ฆ„

๋ชจ๋“ˆ์€ ์†Œ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ง„ ์งง์€ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ๋ชจ๋“ˆ ์ด๋ฆ„์˜ ๊ฐ€ ๋…์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์–ธ๋”์Šค์ฝ”์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํŒŒ์ด์ฌ ํŒจํ‚ค์ง€ ๋˜ํ•œ ์†Œ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ง„ ์งง์€ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ํŒจํ‚ค์ง€์˜ ๊ฒฝ์šฐ์— ๋Š” ์–ธ๋”์Šค์ฝ”์–ด๋ฅผ ๊ฐ€๊ธ‰์  ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

์œ„์™€ ๊ฐ™์ด ํ•˜๋Š” ์ด์œ ๋Š” ๋ชจ๋“ˆ ์ด๋ฆ„์ด ํŒŒ์ผ ์ด๋ฆ„์— ์ง์ ‘์ ์œผ๋กœ ๋Œ€์‘๋˜๋ฉฐ, ํŠน์ •ํ•œ ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ๋Š” ๋Œ€์†Œ๋ฌธ์ž๊ฐ€ ๋ฌด์‹œ๋˜๊ณ  ๊ธด ์ด๋ฆ„์ด ์ž˜๋ ค๋‚˜๊ฐ€๊ธฐ ๋•Œ ๋ฌธ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ชจ๋“ˆ ์ด๋ฆ„์„ ๊ฐ€๊ธ‰์  ์งง๊ฒŒ ์ง“๋Š” ๊ฒƒ์€ ์ค‘์š”ํ•œ ์ผ์ด๋‹ค -- ์œ ๋‹‰์Šค ์‹œ์Šคํ…œ์—์„œ๋Š” ๋ณ„ ๋ฌธ์ œ๊ฐ€ ์—†๊ฒ ์ง€๋งŒ ๊ตฌํ˜• ๋งฅ, ์œˆ๋„์šฐ, ๋„์Šค ๋“ฑ์œผ๋กœ ์ด ์ฝ”๋“œ๋ฅผ ์˜ฎ๊ฒผ์„ ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

C/C++๋กœ ์ž‘์„ฑ๋œ ํ™•์žฅ ๋ชจ๋“ˆ์ด ๊ณ ์ˆ˜์ค€ ์ธํ„ฐํŽ˜์ด์Šค(์˜ˆ๋ฅผ ๋“ค์–ด ์ข€ ๋” ๊ฐ์ฒด ์ง€ ํ–ฅ์ ์ธ)๋ฅผ ์ œ๊ณตํ•˜๋Š” ํŒŒ์ด์ฌ ๋ชจ๋“ˆ์„ ๊ฐ–์ถ”๊ณ  ์žˆ์„ ๊ฒฝ์šฐ, ํ•ด๋‹น C/C++ ๋ชจ๋“ˆ์€ ์•ž์— ์–ธ๋”์Šค์ฝ”์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค (์˜ˆ๋ฅผ ๋“ค๋ฉด _socket).

ํด๋ž˜์Šค ์ด๋ฆ„


ํด๋ž˜์Šค ์ด๋ฆ„์€ ์˜ˆ์™ธ ์—†์ด CapWords ๊ทœ์น™์„ ๋”ฐ๋ฅธ๋‹ค.  ๋˜ํ•œ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉ
ํ•˜๋Š” ํด๋ž˜์Šค๋Š” ์•ž์— ์–ธ๋”์Šค์ฝ”์–ด ๋ฌธ์ž ํ•˜๋‚˜๋ฅผ ๋ถ™์ธ๋‹ค.

์˜ˆ์™ธ ์ด๋ฆ„
~~~~~~~~~
์˜ˆ์™ธ๋Š” ํด๋ž˜์Šค์ด๋ฏ€๋กœ ํด๋ž˜์Šค ๋ช…๋ช… ๊ทœ์น™์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•œ๋‹ค.  ํ•˜์ง€๋งŒ, ์˜ˆ
์™ธ ์ด๋ฆ„์˜ ๋์— "Error"๋ผ๋Š” ์ ‘๋ฏธ์‚ฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค (์˜ˆ์™ธ๊ฐ€ ์‹ค์ œ๋กœ ์—
๋Ÿฌ์ผ ๊ฒฝ์šฐ์—).

์ „์—ญ ๋ณ€์ˆ˜ ์ด๋ฆ„

(ํ•ด๋‹น ๋ณ€์ˆ˜๋Š” ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ ๋‚ด๋ถ€์—์„œ๋งŒ ์“ฐ์ธ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋„๋ก ํ•˜์ž) ์ด ๊ทœ ์น™์€ ํ•จ์ˆ˜์—๋„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋œ๋‹ค.

from M import * ๊ตฌ๋ฌธ์„ ํ†ตํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ๋ชจ๋“ˆ๋“ค์€ __all__ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ „์—ญ์ ์œผ๋กœ ๋…ธ์ถœ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ฑฐ๋‚˜, ์ „์—ญ ๊ฐ์ฒด์— ์–ธ๋”์Šค์ฝ”์–ด๋ฅผ ๋ถ™์ด๋Š” ์˜ˆ์ „์˜ ๊ทœ์น™์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค (์ด๋“ค ์ „ ์—ญ ๊ฐ์ฒด๋ฅผ "๋น„ public ๋ชจ๋“ˆ"๋กœ ํ‘œ์‹œํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค).

ํ•จ์ˆ˜ ์ด๋ฆ„


ํ•จ์ˆ˜ ์ด๋ฆ„์€ ์†Œ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ๊ฐ ๋‹จ์–ด๋Š” ์–ธ๋”์Šค
์ฝ”์–ด๋กœ ๊ตฌ๋ถ„ํ•˜๋„๋ก ํ•œ๋‹ค.

mixedCase ์Šคํƒ€์ผ์˜ ๊ฒฝ์šฐ, ์ด๋ฏธ mixedCase ์Šคํƒ€์ผ์„ ๋”ฐ๋ฅด๊ณ  ์žˆ๋Š” ๋ชจ๋“ˆ
(์˜ˆ: threading.py)์—์„œ๋งŒ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ ์œ ์ง€๋ฅผ ์œ„ํ•ด ํ—ˆ์šฉ๋œ๋‹ค.

ํ•จ์ˆ˜/๋ฉ”์„œ๋“œ ์ธ์ˆ˜

์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜์—๋Š” self๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜์—๋Š” cls๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

ํ•จ์ˆ˜ ์ธ์ˆ˜์˜ ์ด๋ฆ„์ด ์˜ˆ์•ฝ์–ด์™€ ์ถฉ๋Œํ•  ๊ฒฝ์šฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ์ธ์ˆ˜ ์ด๋ฆ„์˜ ๋์— ์–ธ๋”์Šค์ฝ”์–ด ๋ฌธ์ž ํ•˜๋‚˜๋ฅผ ์ถ”๊ฐ€ํ•ด ์ฃผ๋Š” ๊ฒƒ์ด ์•ฝ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋งž์ถค๋ฒ•์„ ์–ด๊ธฐ๋Š” ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค ๋‚ซ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ class_๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด clss๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋‚ซ๋‹ค. (์•„๋งˆ ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์€ ๋™์˜์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ด๋ฆ„ ์ถฉ๋Œ์„ ํ”ผํ•˜๋Š” ๋ฐฉ๋ฒ•์ผ ๊ฒƒ์ด๋‹ค.)

๋ฉ”์„œ๋“œ ์ด๋ฆ„๊ณผ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜


๋‹ค์Œ ํ•จ์ˆ˜ ๋ช…๋ช… ๊ทœ์น™์„ ์‚ฌ์šฉํ•œ๋‹ค: ์†Œ๋ฌธ์ž๋กœ ๋œ ๋‹จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ๊ฐ ๋‹จ์–ด
๋Š” ํ•„์š”์— ๋”ฐ๋ผ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์–ธ๋”์Šค์ฝ”์–ด๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.

๋น„ public ๋ฉ”์„œ๋“œ/์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์˜ ๊ฒฝ์šฐ ์•ž์— ์–ธ๋”์Šค์ฝ”์–ด ๋ฌธ์ž๋ฅผ ํ•˜๋‚˜ ๋ถ™
์ธ๋‹ค.

์„œ๋ธŒํด๋ž˜์Šค์™€์˜ ์ด๋ฆ„ ์ถฉ๋Œ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด, ์•ž์— ๋‘ ๊ฐœ์˜ ์–ธ๋”์Šค์ฝ”์–ด๋ฅผ ๋ถ™
์—ฌ ํŒŒ์ด์ฌ์˜ ๋„ค์ž„ ๋งน๊ธ€๋ง ๊ทœ์น™์„ ๋”ฐ๋ฅธ๋‹ค.

ํŒŒ์ด์ฌ์€ ์ด๋Ÿฌํ•œ ์ด๋ฆ„์— ํด๋ž˜์Šค ์ด๋ฆ„์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๋„ค์ž„ ๋งน๊ธ€๋ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค
: ๋งŒ์•ฝ Foo ํด๋ž˜์Šค๊ฐ€ ``__a``๋ผ๋Š” ์ด๋ฆ„์˜ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค๋ฉด, ์ด
์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋Š” ``Foo.__a``๊ฐ™์€ ์ฝ”๋“œ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.  (์ง‘์š”ํ•œ ์‚ฌ์šฉ์ž
๋ผ๋ฉด ``Foo._Foo__a``๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ด ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.)
์ผ๋ฐ˜์ ์œผ๋กœ  ๋‘ ๊ฐœ์˜ ์–ธ๋”์Šค์ฝ”์–ด ๋ฌธ์ž๋ฅผ ์•ž์— ๋ถ™์ด๋Š” ๋ฐฉ๋ฒ•์€ ์ƒ์†์ด ์ผ์–ด
๋‚˜๋„๋ก ์„ค๊ณ„๋œ ํด๋ž˜์Šค ๋‚ด์˜ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์—์„œ ์ผ์–ด๋‚˜๋Š” ์ด๋ฆ„ ์ถฉ๋Œ์„ ํ”ผํ• 
๋•Œ์—๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

์ฃผ์˜: __names์˜ ์‚ฌ์šฉ์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์†Œ ๋…ผ๋ž€์ด ์žˆ๋‹ค (์•„๋ž˜ ๋‚ด์šฉ์„ ์ฐธ์กฐ).

์ƒ์ˆ˜
~~~~

์ƒ์ˆ˜๋Š” ๋ณดํ†ต ๋ชจ๋“ˆ ์ˆ˜์ค€์—์„œ ์ •์˜๋˜๋ฉฐ, ๋Œ€๋ฌธ์ž ๋ฐ ๋‹จ์–ด๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ
์–ธ๋”์Šค์ฝ”์–ด ๋ฌธ์ž๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.  ``MAX_OVERFLOW``์™€ ``TOTAL`` ๋“ฑ์˜ ์˜ˆ๋ฅผ
๋“ค ์ˆ˜ ์žˆ๋‹ค.

์ƒ์†์„ ์œ„ํ•œ ์„ค๊ณ„
~~~~~~~~~~~~~~~~

ํ•ญ์ƒ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ์™€ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜(๋‘˜์„ ํ•ฉ์ณ "์–ดํŠธ๋ฆฌ๋ทฐํŠธ")๊ฐ€
public์ธ์ง€ public์ด ์•„๋‹Œ์ง€๋ฅผ ๊ฒฐ์ •ํ•ด์•ผ ํ•œ๋‹ค.  ๊ฒฐ์ •์ด ์–ด๋ ค์šธ ๊ฒฝ์šฐ ๋น„
public์œผ๋กœ ์ •์˜ํ•œ๋‹ค.  ๋น„ public ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ public์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ
์ด ๊ทธ ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ๋ณด๋‹ค ์‰ฝ๋‹ค.

public ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋Š” ๋‹น์‹ ์ด ๋งŒ๋“  ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๋“ค์ด ์‹ค
์ œ๋กœ ์ ‘๊ทผํ•˜๊ฒŒ ๋  ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋กœ, ํ•˜์œ„ ํ˜ธํ™˜์„ฑ ์œ ์ง€๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.
๋น„ public ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋Š” ์„œ๋“œ ํŒŒํ‹ฐ๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋„๋ก ์„ค๊ณ„๋œ ์–ดํŠธ๋ฆฌ๋ทฐ
ํŠธ์ด๋‹ค.  ๋น„ public ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋Š” ์ดํ›„์— ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ๋Š” "private"์ด๋ž€ ๋‹จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.  ์‚ฌ์‹ค ํŒŒ์ด์ฌ์—๋Š”
private ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค (ํ•„์š” ์ด์ƒ์˜ ์ž‘์—…์„ ๋™์›
ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ์— ๊ทธ๋ ‡๋‹ค๋Š” ์ด์•ผ๊ธฐ์ด๋‹ค).

์–ดํŠธ๋ฆฌ๋ทฐํŠธ์˜ ๋˜ ๋‹ค๋ฅธ ํ•œ ๊ฐ€์ง€ ์œ ํ˜•์œผ๋กœ "์„œ๋ธŒํด๋ž˜์Šค API"์˜ ์ผ๋ถ€๋ฅผ ๋“ค
์ˆ˜ ์žˆ๋‹ค (๋‹ค๋ฅธ ์–ธ์–ด์—์„œ๋Š” "protected"๋ผ๊ณ  ํ‘œํ˜„ํ•˜๊ณค ํ•œ๋‹ค).  ํด๋ž˜์Šค๋“ค
์ค‘ ์ผ๋ถ€๋Š” ์ƒ์†์„ ์œ„ํ•œ ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ์„œ ์„ค๊ณ„๋˜๋ฉฐ, ํด๋ž˜์Šค์˜ ํ–‰๋™์„ ๊ตฌ์„ฑ
ํ•˜๋Š” ์š”์†Œ๋“ค์„ ํ™•์žฅํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.  ์ด๋Ÿฌํ•œ ํด๋ž˜์Šค๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ
์–ด๋–ค ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๊ฐ€ public์ด ๋ ์ง€, ์„œ๋ธŒํด๋ž˜์Šค API์˜ ์ผ๋ถ€๊ฐ€ ๋ ์ง€, ๊ธฐ๋ณธ
ํด๋ž˜์Šค์—์„œ๋งŒ ์“ฐ์ผ์ง€์— ๋Œ€ํ•ด ๋ช…ํ™•ํ•œ ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๋Š”๋ฐ ์‹ ๊ฒฝ์จ์•ผ ํ•œ๋‹ค.

ํŒŒ์ด์ฌ์˜ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ€์ด๋“œ๋ผ์ธ์„ ๋งˆ์Œ์— ์ƒˆ๊ธฐ๋„๋ก ํ•˜์ž:

- public ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋Š” ์–ธ๋”์Šค์ฝ”์–ด ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์„  ์•ˆ ๋œ๋‹ค.

- public ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์˜ ์ด๋ฆ„์ด ์˜ˆ์•ฝ์–ด์™€ ์ถฉ๋Œํ•  ๊ฒฝ์šฐ, ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ์ด๋ฆ„์˜
  ๋์— ์–ธ๋”์Šค์ฝ”์–ด ๋ฌธ์ž ํ•˜๋‚˜๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.  ์•ฝ์–ด๋‚˜ ํ‹€๋ฆฐ ๋งž์ถค๋ฒ•์„ ์‚ฌ์šฉํ•˜
  ๋Š” ๋Œ€์‹  ์ด ๋ฐฉ์‹์„ ๊ถŒ์žฅํ•œ๋‹ค.  (์ด ๊ทœ์น™๊ณผ๋Š” ์ƒ๊ด€ ์—†์ด, 'cls'๋Š” ๋ณ€์ˆ˜
  ํ˜น์€ ์ธ์ˆ˜์—์„œ ํด๋ž˜์Šค๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ ์ ์ ˆํ•œ ๋‹จ์–ด์ด๋ฉฐ, ํŠนํžˆ ํด๋ž˜์Šค ๋ฉ”
  ์„œ๋“œ์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์“ฐ์ธ๋‹ค.)

  ์ฃผ์˜ 1: ์œ„์—์„œ ์„ค๋ช…ํ•œ ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ์˜ ์ธ์ˆ˜ ์ด๋ฆ„์— ๋Œ€ํ•œ ๊ถŒ์žฅ์‚ฌํ•ญ์„
  ์‚ดํŽด๋ณด์ž.

- ๊ฐ„๋‹จํ•œ public ๋ฐ์ดํ„ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์˜ ๊ฒฝ์šฐ, ๋ณต์žกํ•œ ์ ‘๊ทผ์ž/๋ณ€๊ฒฝ์ž ๋ฉ”์„œ
  ๋“œ ๋Œ€์‹  ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ์ด๋ฆ„์„ ์ง์ ‘ ๋…ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๊ฐ€์žฅ ์ข‹๋‹ค.  ํŒŒ์ด์ฌ
  ์€ ํ–ฅํ›„ ๊ฐœ์„ ์— ๋Œ€ํ•˜์—ฌ ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋ฉฐ, ๊ธฐ๋Šฅ์ด ๋Š˜์–ด๋‚  ์ˆ˜
  ๋ก ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„์•ผ ํ•œ๋‹ค.  ์ด๋Ÿฐ
  ๊ฒฝ์šฐ, ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์ œ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์ˆจ๊ธฐ๊ณ  ์‚ฌ์šฉ์ž๋Š” ๊ฐ„๋‹จํ•œ
  ๋ฐ์ดํ„ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์— ์ ‘๊ทผํ•˜๋Š” ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

  ์ฃผ์˜ 1: ํ”„๋กœํผํ‹ฐ๋Š” ์ƒˆ๋กœ์šด ์Šคํƒ€์ผ์˜ ํด๋ž˜์Šค์—์„œ๋งŒ ๋™์ž‘ํ•œ๋‹ค.

  ์ฃผ์˜ 2: ๊ธฐ๋Šฅ์  ๋™์ž‘์— ์žˆ์–ด ๋ถ€์ž‘์šฉ์ด ์ƒ๊ธฐ์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•œ๋‹ค. ํ•˜์ง€๋งŒ
  ์บ์‹œ์ฒ˜๋Ÿผ ๋ถ€์ž‘์šฉ์ด ์ฃผ ๊ธฐ๋Šฅ์ธ ๊ฒฝ์šฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๊ดœ์ฐฎ๋‹ค.

  ์ฃผ์˜ 3: ํฐ ๊ณ„์‚ฐ๋Ÿ‰์„ ์š”๊ตฌํ•˜๋Š” ํ”„๋กœํผํ‹ฐ์˜ ์‚ฌ์šฉ์€ ํ”ผํ•œ๋‹ค; ํ˜ธ์ถœ์ž๋Š” ์–ด
  ํŠธ๋ฆฌ๋ทฐํŠธ์— ๋Œ€ํ•œ ์ ‘๊ทผ ๋น„์šฉ์ด (๋น„๊ต์ ) ์ ๋‹ค๊ณ  ๊ธฐ๋Œ€ํ•˜๊ฒŒ ๋œ๋‹ค.

- ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ๋””์ž์ธํ•˜๋ฉด์„œ ํŠน์ • ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๊ฐ€ ์ƒ์†๋˜์ง€ ์•Š๋„๋ก ํ•˜๊ณ 
  ์‹ถ๋‹ค๋ฉด, ์ด๋“ค ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์˜ ์ด๋ฆ„ ์•ž์— ๋‘ ๊ฐœ์˜ ์–ธ๋”์Šค์ฝ”์–ด๋ฅผ ๋ถ™์ด๋Š” ๊ฒƒ
  ์„ ๊ณ ๋ คํ•ด๋ณด์ž.  ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํŒŒ์ด์ฌ์˜ ๋„ค์ž„ ๋งน๊ธ€๋ง ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ฒŒ
  ๋˜๋ฉฐ, ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ์ด๋ฆ„ ์•ž์— ํด๋ž˜์Šค์˜ ์ด๋ฆ„์ด ๋งน๊ธ€๋ง๋œ๋‹ค. ์ด ๊ธฐ๋Šฅ์€
  ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ์šฐ์—ฐํžˆ ๋™์ผํ•œ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ์–ดํŠธ๋ฆฌ๋ทฐ
  ํŠธ ์ด๋ฆ„ ์ถฉ๋Œ์ด ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์„ ๋ง‰์•„์ค€๋‹ค.

  ์ฃผ์˜ 1: ๋งน๊ธ€๋ง์—๋Š” ๋‹จ์ˆœํžˆ ํด๋ž˜์Šค ์ด๋ฆ„๋งŒ์ด ์“ฐ์ธ๋‹ค๋Š” ๊ฒƒ์— ์ฃผ์˜ํ•˜์ž.
  ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋งŒ์•ฝ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋™์ผํ•œ ํด๋ž˜์Šค ์ด๋ฆ„๊ณผ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ์ด๋ฆ„์„
  ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ์—ฌ์ „ํžˆ ์ด๋ฆ„ ์ถฉ๋Œ์ด ์ผ์–ด๋‚  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.

  ์ฃผ์˜ 2: ์ด๋ฆ„ ๋งน๊ธ€๋ง์„ ์‚ฌ์šฉํ•˜๋ฉด ๋””๋ฒ„๊น…๊ณผ ``__getattr__()`` ๋“ฑ์˜ ์ž‘
  ์—…์ด ์กฐ๊ธˆ ๋ถˆํŽธํ•ด์ง„๋‹ค. ํ•˜์ง€๋งŒ, ๋„ค์ž„ ๋งน๊ธ€๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด์„œ๋Š” ์ด๋ฏธ
  ์ •๋ฆฌ๊ฐ€ ์ž˜ ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์ง์ ‘ ํ•„์š”ํ•œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ๋„ ์–ด๋ ต์ง€ ์•Š
  ๋‹ค.

  ์ฃผ์˜ 3: ๋ชจ๋“  ์ด๊ฐ€ ๋„ค์ž„ ๋งน๊ธ€๋ง์„ ์ข‹์•„ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.  ์šฐ๋ฐœ์ ์ธ ์ด
  ๋ฆ„ ์ถฉ๋Œ์˜ ๋ฐฉ์ง€์™€, ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ์‚ฌ๋žŒ์˜ ํŽธ์˜์„ฑ ์‚ฌ์ด์—์„œ
  ํ˜•ํ‰์„ฑ์„ ์ฐพ๋„๋ก ํ•˜์ž.


ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ถŒ์žฅ์‚ฌํ•ญ
===================

- ํŒŒ์ด์ฌ ์ฝ”๋“œ๋Š” ๋‹ค๋ฅธ ํŒŒ์ด์ฌ ๊ตฌํ˜„ (PyPy, Jython, IronPython, Cython,
  Psyco ๋“ฑ)์—์„œ

  ์˜ˆ๋ฅผ ๋“ค๋ฉด, CPython์˜ ๊ฐ„๋‹จํ•œ ๋ฌธ์ž์—ด ๊ฒฐํ•ฉ(``a += b``, ``a = a + b``
  ๊ฐ™์€ ํ˜•ํƒœ์˜)์€ ํšจ์œจ์ ์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค. ํ•˜์ง€๋งŒ Jython์—์„œ๋Š” ์œ„ ๊ตฌ
  ๋ฌธ์ด ๋” ๋А๋ฆฌ๊ฒŒ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, CPython์˜ ๊ตฌํ˜„์— ์ง€๋‚˜์น˜๊ฒŒ ์˜์กด
  ํ•ด์„  ์•ˆ ๋œ๋‹ค.  ์„ฑ๋Šฅ์— ๋ฏผ๊ฐํ•œ ๋ถ€๋ถ„์—์„œ ๋ฌธ์ž์—ด ๊ฒฐํ•ฉ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์•ผ
  ํ•  ๊ฒฝ์šฐ ``''.join()`` ๋ฉ”์„œ๋“œ๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.  ์ด ๋ฉ”์„œ๋“œ๋Š” ๋‹ค
  ์–‘ํ•œ ํŒŒ์ด์ฌ ๊ตฌํ˜„์ฒด์—์„œ ๋ฌธ์ž์—ด ๊ฒฐํ•ฉ์ด ์„ ํ˜•์  ์‹คํ–‰ ์‹œ๊ฐ„์„ ๊ฐ–๋„๋ก ๋ณด
  ์žฅํ•ด ์ค€๋‹ค.

- None๊ณผ ๊ฐ™์€ ์‹ฑ๊ธ€ํ„ด ๊ฐ์ฒด์— ๋Œ€ํ•ด ๋น„๊ต ์—ฐ์‚ฐ์„ ํ•  ๋•Œ์—๋Š” ํ•ญ์ƒ ``is``
  ํ˜น์€ ``is not`` ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋™๋“ฑ ๋น„๊ต ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด์„  ์•ˆ
  ๋œ๋‹ค.

  ๋˜ํ•œ, ``if x is not None``์˜ ์˜๋ฏธ๋กœ ``if x``๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์ฃผ์˜ํ•ด์•ผ
  ํ•œ๋‹ค -- ๊ธฐ๋ณธ๊ฐ’์ด None์ธ ๋ณ€์ˆ˜๋‚˜ ์ธ์ˆ˜์— ๋ฌด์–ธ๊ฐ€ ๊ฐ’์ด ์ง€์ •๋˜์—ˆ๋Š”์ง€๋ฅผ
  ๊ฒ€์‚ฌํ•  ๊ฒฝ์šฐ๋ฅผ ์˜ˆ๋กœ ๋“ค ์ˆ˜ ์žˆ๋‹ค.  ์ด ๊ฐ’์ด ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ํฌํ•จํ•˜๋Š” ํƒ€์ž…
  (์ปจํ…Œ์ด๋„ˆ์˜ ๊ฒฝ์šฐ)์ผ ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, ๊ทธ๋Ÿด ๊ฒฝ์šฐ boolean์œผ๋กœ ํ•ด์„๋˜์–ด
  false๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

- ํ–ฅ์ƒ๋œ ๋น„๊ต ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด ์ •๋ ฌ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ๊ฒฝ์šฐ, ํŠน์ •ํ•œ ๋น„
  ๊ต ์—ฐ์‚ฐ๋งŒ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š” ์—ฌ์„ฏ ๊ฐœ์˜ ์—ฐ์‚ฐ(``__eq__``,
  ``__ne__``, ``__lt__``, ``__le__``, ``__gt__``, ``__ge__``)์„ ๋ชจ๋‘
  ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ตœ์„ ์˜ ๋ฐฉ๋ฒ•์ด๋‹ค.

  ``functools.total_ordering()`` ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋Š” ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋น„๊ต ์—ฐ
  ์‚ฐ ๋ฉ”์„œ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๋ฏ€๋กœ, ์ด๋Ÿฌํ•œ ๊ตฌํ˜„์—
  ๋“ค์–ด๊ฐ€๋Š” ๋…ธ๋ ฅ์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

  PEP 207์€ ํŒŒ์ด์ฌ์ด ๊ฐ€์ •ํ•˜๊ณ  ์žˆ๋Š” ์žฌ๊ท€์  ๊ทœ์น™์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ณ  ์žˆ๋‹ค.
  ์ด์— ๋”ฐ๋ฅด๋ฉด, ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ``y > x``๋ฅผ ``x < y``์œผ๋กœ, ``y >= x``๋ฅผ
  ``x <= y``๋ผ๋Š” ์ฝ”๋“œ๋กœ ๋ณ€ํ˜•ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ``x == y``์™€
  ``x != y``์˜ ๊ฒฝ์šฐ ๋‘ ์ธ์ˆ˜์˜ ์œ„์น˜๋ฅผ ์„œ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜๋„ ์žˆ๋‹ค.
  ``sort()``์™€ ``min()`` ๋ช…๋ น์€ ``<`` ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ``max()``
  ํ•จ์ˆ˜๋Š” ``>`` ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.  ์–ด์จŒ๋“ , ์—ฌ์„ฏ ๊ฐœ์˜ ์—ฐ์‚ฐ์„ ๋ชจ๋‘ ๊ตฌ
  ํ˜„ํ•˜์—ฌ ๋‹ค๋ฅธ ๋งฅ๋ฝ์—์„œ ํ˜ผ๋™์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹๋‹ค.

- ํด๋ž˜์Šค ๊ธฐ๋ฐ˜์˜ ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  ์•ž์œผ๋กœ ์ž‘์„ฑ๋˜๋Š” ์ฝ”๋“œ์—์„œ๋Š” ๋ฌธ์ž์—ด ์˜ˆ์™ธ๊ฐ€ ๊ธˆ์ง€๋˜๋ฉฐ, ๋ฌธ์ž์—ด ์˜ˆ์™ธ ๊ธฐ
  ๋Šฅ์€ ํŒŒ์ด์ฌ 2.6์—์„œ ์ œ๊ฑฐ๋˜์—ˆ๋‹ค.

  ๋ชจ๋“ˆ, ํŒจํ‚ค์ง€๋Š” ์ž์‹ ๋งŒ์˜ ํŠน์ • ๋„๋ฉ”์ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์˜ˆ์™ธ ํด๋ž˜์Šค๋ฅผ
  ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค. ์ด๋“ค ์˜ˆ์™ธ ํด๋ž˜์Šค๋Š” ํŒŒ์ด์ฌ์— ๋‚ด์žฅ๋œ Exception ํด๋ž˜์Šค
  ๋ฅผ ์ƒ์†ํ•œ๋‹ค.  ํด๋ž˜์Šค docstring์„ ํ•ญ์ƒ ํฌํ•จ์‹œ์ผœ์•ผ ํ•œ๋‹ค. ์˜ˆ::

      class MessageError(Exception):
          """Base class for errors in the email package."""

  ์˜ˆ์™ธ์—๋Š” ํด๋ž˜์Šค ์ด๋ฆ„ ๊ทœ์น™์ด ์ ์šฉ๋˜์ง€๋งŒ, ์ด ์˜ˆ์™ธ ํด๋ž˜์Šค๊ฐ€ ์—๋Ÿฌ๋ฅผ ๋‚˜
  ํƒ€๋‚ผ ๊ฒฝ์šฐ์—๋Š” "Error"๋ฅผ ์ ‘๋ฏธ์‚ฌ๋กœ ๋ถ™์—ฌ์•ผ ํ•œ๋‹ค.  ์—๋Ÿฌ๊ฐ€ ์•„๋‹Œ ์˜ˆ์™ธ์˜
  ๊ฒฝ์šฐ์—๋Š” ํŠน๋ณ„ํ•œ ์ ‘๋ฏธ์‚ฌ๋ฅผ ๋ถ™์ผ ํ•„์š”๊ฐ€ ์—†๋‹ค.

- ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋ ค๋ฉด `raise ValueError('message')`` ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•œ๋‹ค
  . ์˜ˆ์ „์˜ ``raise ValueError, 'message'`` ๊ตฌ๋ฌธ์€ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€
  ์•Š๋Š”๋‹ค.

  ๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ๋ฌธ์„ ๊ถŒ์žฅํ•˜๋Š” ์ด์œ ๋Š”, ์˜ˆ์™ธ์˜ ์ธ์ˆ˜๊ฐ€ ๊ธด ๋ฌธ์ž์—ด์ด
  ๊ฑฐ๋‚˜ ๋ฌธ์ž์—ด ํ˜•์‹ํ™”๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ์— ์—ฌ๋Ÿฌ ์ค„์„ ์ด์–ด์„œ ์ž‘์„ฑํ•˜๊ธฐ๊ฐ€ ์ข€
  ๋” ํŽธ๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.  ํŒŒ์ด์ฌ 3์—์„œ ๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ์˜ˆ์™ธ ๋ฐœ
  ์ƒ ๊ตฌ๋ฌธ์€ ํ‹€๋ฆฐ ๋ฌธ๋ฒ•์ด๋‹ค.

- ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ• (catch) ๋•Œ์—๋Š” ๋ฒ”์šฉ์ ์ธ ``except:`` ์ ˆ ๋Œ€์‹ , ์ฒ˜๋ฆฌํ• 
  ํŠน์ •ํ•œ ์˜ˆ์™ธ๋ฅผ ๋ช…์‹œํ•˜๋„๋ก ํ•œ๋‹ค.

  ์˜ˆ๋ฅผ ๋“ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•œ๋‹ค:

      try:
          import platform_specific_module
      except ImportError:
          platform_specific_module = None

  ์ฒ˜๋ฆฌํ•  ์˜ˆ์™ธ๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์€ ``except:`` ์ ˆ์€ SystemExit,
  KeyboardInterrupt ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปจํŠธ๋กค-C๋ฅผ ๋ˆŒ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ
  ์„ ์ธํ„ฐ๋ŸฝํŠธํ•  ์ˆ˜ ์—†๊ฒŒ ๋งŒ๋“œ๋Š” ๋“ฑ ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์†Œ์ง€๊ฐ€ ์žˆ๋‹ค. ๋งŒ
  ์•ฝ ํ”„๋กœ๊ทธ๋žจ ์—๋Ÿฌ์˜ ์ง•ํ›„๋ฅผ ์•Œ๋ฆฌ๋Š” ๋ชจ๋“  ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด
  ``except Exception:``๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜์ž(์ฒ˜๋ฆฌํ•  ์˜ˆ์™ธ๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š
  ์€ except ์ ˆ์€ ``except BaseException:`` ์ ˆ๊ณผ ๋™์ผํ•˜๋‹ค).

  ์˜ˆ์™ธ๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์€ 'except' ์ ˆ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ ์ ˆํ•œ ๊ฒฝ์šฐ๋Š” ๋‹ค์Œ
  ๊ณผ ๊ฐ™๋‹ค:

  1. ์˜ˆ์™ธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์—ญ์ถ”์ (traceback) ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๊ฑฐ๋‚˜ ๋กœ๊ทธ๋ฅผ ๋‚จ๊ฒจ์•ผ
     ํ•  ๊ฒฝ์šฐ; ์‚ฌ์šฉํ•˜๊ฐ€ ์ตœ์†Œํ•œ ์—๋Ÿฌ๊ฐ€ ์ผ์–ด๋‚ฌ์Œ์„ ์ธ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

  2. ์ฝ”๋“œ์—์„œ ์ผ์ข…์˜ ์ •๋ฆฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ, ``raise`` ๋ช…๋ น์„ ์‚ฌ์šฉ
     ํ•ด ํ•ด๋‹น ์˜ˆ์™ธ๋ฅผ ์ƒ์œ„ ๋‹จ๊ณ„๋กœ ๊ณ„์† ์˜ฌ๋ ค๋ณด๋‚ด๋ ค ํ•  ๊ฒฝ์šฐ. ์ด ๊ฒฝ์šฐ์—๋Š”
     ``try...finally`` ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์ผ ์ˆ˜ ์žˆ๋‹ค.

- ๋˜ํ•œ, try/except ์ ˆ์„ ์‚ฌ์šฉํ•  ๋•Œ์—๋Š” ``try`` ์ ˆ์ด ์ ์šฉ๋˜๋Š” ์ฝ”๋“œ์˜
  ๋ฒ”์œ„๋ฅผ ์ตœ์†Œํ™”ํ•ด์•ผ ํ•œ๋‹ค.  ์ด๋Š” ๋ฒ„๊ทธ๊ฐ€ ๊ฒน์น˜๋Š” ์ผ์„ ๋ง‰์•„์ค€๋‹ค.

  ์ข‹์Œ::

      try:
          value = collection[key]
      except KeyError:
          return key_not_found(key)
      else:
          return handle_value(value)

  ๋‚˜์จ::

      try:
          # ์ฝ”๋“œ ์ ์šฉ ๋ฒ”์œ„๊ฐ€ ๋„“๋‹ค!
          return handle_value(collection[key])
      except KeyError:
          # ์—ฌ๊ธฐ์„œ๋Š” handle_value()์ด ๋ฐœ์ƒ์‹œํ‚จ KeyError ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌ
          return key_not_found(key)

  - ๋ฆฌ์†Œ์Šค์˜ ์ ์œ /ํ•ด์ œ ์™ธ์˜ ์ž‘์—…์„ ์ œ์™ธํ•˜๊ณ , ์–ด๋–ค ์ž‘์—…์„ ํ•  ๋•Œ๋“ ์ง€
    ๋ณ„๋„์˜ ํ•จ์ˆ˜/๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฌธ๋งฅ(context) ๊ด€๋ฆฌ์ž๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.
    ์˜ˆ๋ฅผ ๋“ค๋ฉด:

  ์ข‹์Œ::

               with conn.begin_transaction():
                   do_stuff_in_transaction(conn)

  ๋‚˜์จ::

               with conn:
                   do_stuff_in_transaction(conn)

  ํ›„์ž์˜ ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๋ฉด __enter__, __exit__ ๋ฉ”์„œ๋“œ๊ฐ€ ํŠธ๋žœ์žญ์…˜ ์ดํ›„์—
  ์ปค๋„ฅ์…˜์„ ๋‹ซ๋Š”๋‹ค๋Š” ๊ฒƒ ์™ธ์—๋Š” ์–ด๋–ค ์ผ์„ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜
  ์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.  ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ๋ช…์‹œ์ ์ธ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ
  ์€ ์ค‘์š”ํ•˜๋‹ค.

- string ๋ชจ๋“ˆ ๋Œ€์‹  ๋ฌธ์ž์—ด ๊ด€๋ จ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  ๋ฌธ์ž์—ด ๋ฉ”์„œ๋“œ๋Š” ํ•ญ์ƒ ์ข€ ๋” ๋น ๋ฅด๋ฉฐ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž์—ด๊ณผ ๋™์ผํ•œ API๋ฅผ
  ๊ณต์œ ํ•˜๊ณ  ์žˆ๋‹ค.  ํŒŒ์ด์ฌ 2.0 ์ดํ•˜ ๋ฒ„์ „๊ณผ์˜ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ
  ์—๋Š” ์ด ๊ทœ์น™์„ ๋ฌด์‹œํ•ด๋„ ๋œ๋‹ค.

- ๋ฌธ์ž์—ด์˜ ์ ‘๋‘์‚ฌ/์ ‘๋ฏธ์‚ฌ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋ฌธ์ž์—ด์„ ์ง์ ‘ ์ž๋ฅด๋Š” ๋Œ€์‹ ,
  ``''.startswith()``์™€ ``''.endswith()``๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  startswith()์™€ endswith()๋Š” ์˜๋ฏธ๊ฐ€ ๋ช…ํ™•ํ•˜๋ฏ€๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์—ฌ์ง€๊ฐ€
  ์ ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด::

      ์ข‹์Œ: if foo.startswith('bar'):
      ๋‚˜์จ: if foo[:3] == 'bar':

  ์˜ˆ์™ธ์ ์œผ๋กœ, ํŒŒ์ด์ฌ 1.5.2์—์„œ ๋™์ž‘ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•  ๊ฒฝ์šฐ๋Š” ํ›„
  ์ž์˜ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค(๊ทธ๋Ÿฐ ์ผ์ด ์—†๊ธฐ๋ฅผ!).

- ๊ฐ์ฒด ํƒ€์ž… ๋น„๊ต ์‹œ, ํƒ€์ž…์„ ์ง์ ‘ ๋น„๊ตํ•˜๋Š” ๋Œ€์‹  ํ•ญ์ƒ isinstance()๋ฅผ
  ์‚ฌ์šฉํ•œ๋‹ค. ::

      ์ข‹์Œ: if isinstance(obj, int):

      ๋‚˜์จ: if type(obj) is type(1):

  ๊ฐ์ฒด๊ฐ€ ๋ฌธ์ž์—ด์ธ์ง€ ํ™•์ธํ•  ๊ฒฝ์šฐ, ํ•ด๋‹น ๋ฌธ์ž์—ด์ด ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž์—ด์ผ ์ˆ˜
  ๋„ ์žˆ๋‹ค๋Š” ์ ์„ ๋ช…์‹ฌํ•˜์ž.  ํŒŒ์ด์ฌ 2.3์—์„œ๋Š” str, unicode๊ฐ€ ๋™์ผํ•œ
  ๊ธฐ๋ณธ ํด๋ž˜์Šค์ธ basestring์„ ์ƒ์†ํ•˜๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜
  ์žˆ๋‹ค::

      if isinstance(obj, basestring):

- ๋ฐฐ์—ด ํ˜•ํƒœ์˜ ํƒ€์ž…(๋ฌธ์ž์—ด, ๋ฆฌ์ŠคํŠธ, ํŠœํ”Œ)์€ ๊ทธ ๋‚ด์šฉ์ด ๋น„์–ด์žˆ์„ ๋•Œ
  false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ํ™œ์šฉํ•œ๋‹ค. ::

      ์ข‹์Œ: if not seq:
            if seq:

      ๋‚˜์จ:if len(seq)
           if not len(seq)

- ๊ณต๋ฐฑ ๋ฌธ์ž๊ฐ€ ๋’ค์— ๋”ฐ๋ผ์˜ค๋Š” ๋ฌธ์ž ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.  ์ด๋ ‡๊ฒŒ ๋’ค
  ์— ๋ถ™์€ ๊ณต๋ฐฑ ๋ฌธ์ž๋Š” ๋ˆˆ์— ์ž˜ ๋„์ง€ ์•Š์œผ๋ฉฐ, ์ผ๋ถ€ ํŽธ์ง‘๊ธฐ(ํ˜น์€ ์ตœ์‹ ์˜
  reindent.py)์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๊ณต๋ฐฑ ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

- ``==``๋ฅผ ์‚ฌ์šฉํ•ด์„œ True/False ๊ฐ’์„ ๋ถ€์šธ ๊ฐ’๊ณผ ๋น„๊ตํ•˜์ง€ ์•Š๋Š”๋‹ค.

      ์ข‹์Œ:   if greeting:
      ๋‚˜์จ:   if greeting == True:
      ์ตœ์•…:   if greeting is True:

- ํŒŒ์ด์ฌ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํŠน์ • ์–ด๋…ธํ…Œ์ด์…˜ ์Šคํƒ€์ผ์— ์–ฝ๋งค์ธ ํ•จ์ˆ˜ ์–ด๋…ธ
  ํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.  ๊ทธ ๋Œ€์‹ ์—, ์‚ฌ์šฉ์ž๋กœ ํ•˜์—ฌ๊ธˆ ์œ ์šฉํ•œ ์–ด๋…ธ
  ํ…Œ์ด์…˜ ์Šคํƒ€์ผ์„ ์ง์ ‘ ๋ฐœ๊ฒฌํ•˜๊ณ  ์‹คํ—˜ํ•ด ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ  ์žˆ๋‹ค.
  (์—ญ์ฃผ: ์—ฌ๊ธฐ์—์„œ์˜ ํ•จ์ˆ˜ ์–ด๋…ธํ…Œ์ด์…˜์€ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ํ•จ์ˆ˜ ํ”„
  ๋กœํ† ํƒ€์ž…๊ณผ ๋น„์Šทํ•˜๊ฒŒ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ •์˜๋ฅผ ๋งํ•œ๋‹ค. PEP 3107์„ ์ฐธ๊ณ )

  ํ•จ์ˆ˜ ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋˜ ์ดˆ๊ธฐ์˜ ํ•ต์‹ฌ ๊ฐœ๋ฐœ์ž๋“ค์€ ์ผ๊ด€์„ฑ ์—†๋Š” ์ž„๊ธฐ
  ์‘๋ณ€์‹ ์–ด๋…ธํ…Œ์ด์…˜ ์Šคํƒ€์ผ์ด ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค.  ์˜ˆ๋ฅผ ๋“ค๋ฉด:

  * ``[str]``์€ ์ด ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ฌธ์ž์—ด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”์ง€, str ํ˜น์€
    None ํƒ€์ž…์˜ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š”์ง€ ๋ชจํ˜ธํ•˜๋‹ค.

  * ``open(file:(str,bytes))``์ด๋ž€ ์–ด๋…ธํ…Œ์ด์…˜์€ str ๋‹ค์Œ์— bytes ๊ฐ’
    ์„ ๊ฐ–๋Š” 2๊ฐœ์˜ ํŠœํ”Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, bytes ํ˜น์€ str์šธ ๊ฐ€์งˆ
    ์ˆ˜ ์žˆ๋Š” ๊ฐ’์— ์“ฐ์ธ๋‹ค.

  * ``seek(whence:int)``๋ž€ ์–ด๋…ธํ…Œ์ด์…˜์€ ๋ช…์„ธ๊ฐ€ ํŠน์ • ๋ถ€๋ถ„์—์„œ๋Š” ์ œ์•ฝ
    ์ด ์‹ฌํ•˜๊ณ , ํ˜น์€ ๊ทธ๋ ‡์ง€ ์•Š์„ ๋•Œ๋„ ์žˆ์Œ์„ ๋ณด์—ฌ์ค€๋‹ค: int๋Š” ์ง€๋‚˜์น˜๊ฒŒ
    ํ•œ์ •์ ์ด๋ฉฐ(``__index__``๊ฐ€ ํ—ˆ์šฉํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์ด ํ—ˆ์šฉ๋œ๋‹ค), ๋™์‹œ์—
    ํ•œ์ •์ ์ด์ง€ ์•Š๊ธฐ๋„ ํ•˜๋‹ค(0, 1, 2 ๊ฐ’๋งŒ ํ—ˆ์šฉ๋œ๋‹ค).  ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ
    ``write(b: bytes)``๋ผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜ ๋˜ํ•œ ์ง€๋‚˜์น˜๊ฒŒ ํ•œ์ •์ ์ด๋‹ค(๋ฒ„ํผ
    ํ”„๋กœํ† ์ฝœ์„ ํ—ˆ์šฉํ•˜๋Š” ๋ชจ๋“  ๊ฐ’์„ ์ง€์›ํ•œ๋‹ค).

  * ``read1(n: int=None)`` ์–ด๋…ธํ…Œ์ด์…˜์€ ๋ชจ์ˆœ์ ์ด๋‹ค. None์€ int๊ฐ€ ์•„
    ๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ``source_path(self, fullname:str) -> object``์™€
    ๊ฐ™์€ ์–ด๋…ธํ…Œ์ด์…˜์€ ๋ฐ˜ํ™˜ ํƒ€์ž…์ด ๋ฌด์—‡์ธ์ง€ ํ˜ผ๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

  * ๋˜ํ•œ, ์–ด๋…ธํ…Œ์ด์…˜์€ ๊ตฌ์ฒดํ™”(concrete) ํƒ€์ž…๊ณผ ์ถ”์ƒ ํƒ€์ž…์˜ ์‚ฌ์šฉ์— ์žˆ
    ์–ด ์ผ๊ด€์„ฑ์ด ์—†๋‹ค: int์™€ Integral, set/frozenset๊ณผ MutableSet/Set
    ์„ ๋“ค ์ˆ˜ ์žˆ๋‹ค.

  * ์ถ”์ƒ ๊ธฐ๋ณธ ํด๋ž˜์Šค์˜ ์–ด๋…ธํ…Œ์ด์…˜ ์ผ๋ถ€๋Š” ๋ถ€์ •ํ™•ํ•œ ๋ช…์„ธ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค.
    ์˜ˆ๋ฅผ ๋“ค๋ฉด, set-to-set ์—ฐ์‚ฐ์€ Set ๊ฐ์ฒด๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š”๋ฐ, ์ด๋Š”
    Iterable์ด ์•„๋‹Œ Set ์ธ์Šคํ„ด์Šค๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.

  * ์–ด๋…ธํ…Œ์ด์…˜์€ ๋ช…์„ธ์— ํฌํ•จ๋˜์–ด ์žˆ์œผ๋‚˜ ํ…Œ์ŠคํŠธ๊ฐ€ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์•˜๋‹ค๋Š”
    ๊ฒƒ ๋˜ํ•œ ๋ฌธ์ œ๊ฐ€ ๋˜์—ˆ๋‹ค.

  * ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ, docstring์ด ์ด๋ฏธ ํƒ€์ž… ๋ช…์„ธ์— ํฌํ•จ๋˜์–ด ์žˆ์—ˆ์œผ๋ฉฐ ํ•จ
    ์ˆ˜ ์–ด๋…ธํ…Œ์ด์…˜๋ณด๋‹ค ๋” ๋ช…ํ™•ํ–ˆ๋‹ค.  ๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ, ์–ด๋…ธํ…Œ์ด์…˜์ด ์‚ญ์ œ
    ๋œ ํ›„ docstring์˜ ๋‚ด์šฉ์ด ๊ฐœ์„ ๋˜์—ˆ๋‹ค.

  * ์ด์™€ ๊ฐ™์€ ํ•จ์ˆ˜ ์–ด๋…ธํ…Œ์ด์…˜๋“ค์€ ์ž๋™ ํƒ€์ž… ๊ฒ€์‚ฌ๋‚˜ ์ธ์ˆ˜์˜ ๊ฒ€์ฆ์„ ์ˆ˜
    ํ–‰ํ•˜๋Š” ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ์ฃผ๋จน๊ตฌ๊ตฌ์‹์ด๊ณ  ์ผ๊ด€์„ฑ์ด ์—†์—ˆ
    ๋‹ค. ์ด๋Ÿฌํ•œ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ฝ”๋“œ์— ๋‚จ๊ฒจ๋‘๋ฉด ์ฐจํ›„์— ์ž๋™ํ™”๋œ ์œ ํ‹ธ๋ฆฌํ‹ฐ
    ๋“ฑ์„ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ ์–ด๋ ค์›€์„ ๊ฒช์„ ์ˆ˜ ์žˆ๋‹ค.


์ฐธ์กฐ
====

.. [1] PEP 7, C ์ฝ”๋“œ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ (Style Guide for C Code), ๋ฐ˜ ๋กœ์„ฌ


.. [2] ๋ฐฐ๋ฆฌ์˜ GNU Mailman ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ
       (Barry's GNU Mailman style guide)
       http://barry.warsaw.us/software/STYLEGUIDE.txt

.. [3] http://www.wikipedia.com/wiki/CamelCase


์ €์ž‘๊ถŒ
======

    ์ด ๋ฌธ์„œ๋Š” ํผํ”Œ๋ฆญ ๋„๋ฉ”์ธ์— ์†ํ•œ๋‹ค.



..
   Local Variables:
   mode: indented-text
   indent-tabs-mode: nil
   sentence-end-double-space: t
   fill-column: 70
   coding: utf-8
   End: