45. 파이썬 – 클래스의 상속

45. 파이썬 – 클래스의 상속

이전 포스팅까지 파이썬 클래스를 이용한 사칙연산 클래스를 생성해 봤습니다.
이번에는 클래스의 상속이라는 개념을 적용하여 기존에 만든 사칙연산 클래스에 기능을 추가해 제곱을 계산하는 클래스를 만들어 보도록 하겠습니다.

파이썬 클래스

사칙연산 클래스의 상속

클래스의 상속에서 상속(Inheritance)의 의미는 물려받다 라는 의미 입니다.
재산 상속 할 때의 상속과 같은 의미입니다.
클래스에서도 이 상속이라는 개념이 있습니다.
클래스를 만들고 다른 어떤 클래스의 기능을 물려 받을 수 있게 만드는 것이 바로 클래스의 상속입니다.

이제 기존에 만든 Four_Calculator 클래스에 클래스의 상속이라는 개념을 적용하여 a 와 b 의 제곱을 구하는 기능을 추가해 보도록 하겠습니다.

다음처럼 Four_Calculator 클래스를 상속하는 More_Four_Calculator 클래스를 만들어 보겠습니다.

Python
>>> class More_Four_Calculator(Four_Calculator):
...     pass
...
>>>

위 코드 처럼 클래스를 상속하려면 클래스 이름 뒤 괄호 속에 상속할 클래스 이름을 넣어주면 됩니다.

class 클래스 이름(상속할 클래스 이름)

More_Four_Calculator 클래스는 Four_Calculator 클래스를 상속했으므로 Four_Calculator 클래스의 모든 기능을 사용할 수 있습니다.

Python
>>> a = More_Four_Calculator(4, 2)
>>> a.add()
6
>>> a.multi()
8
>>> a.subtrack()
2
>>> a.divide()
2.0
>>>

위처럼 상속받은 Four_Calculator 클래스의 모든 기능을 사용할 수 있음을 확인 할 수 있습니다.

클래스의 상속을 하는 이유

그럼 클래스의 상속을 하는 이유는 무엇일까요?
클래스의 상속은 보통 기존 클래스를 변경하지 않고 기능을 추가하거나
기존에 있던 기능을 변경하고자 할 때 주로 사용됩니다.

그럼 기존 클래스에 기능을 추가하고자 한다면 기존 클래스를 수정을 하면 되는데
왜 상속을 받아서 처리를 할까요?
만약 기존 클래스가 라이브러리 형태로 제공되거나 수정이 허용되지 않는 상황이라면
클래스의 상속을 통해서 이를 해결할 수가 있습니다.

제곱을 계산하는 클래스 More_Four_Calculator 만들기

이제 a 와 b 의 제곱을 계산하는 클래스 More_Four_Calculator 를 생성해 보겠습니다.

Python
>>> class More_Four_Calculator(Four_Calculator):
...     def squared(self):
...         result = self.first ** self.second
...         return result
...
>>>

앞서 작성했던 제곱을 계산하는 클래스 More_Four_Calculator 의 pass 문장을 제거하고 입력받은 두 수의 제곱을 구할 수 있는 squared 라는 메서드를 추가해 봤습니다.
이제 squared 메서드를 실행해 보겠습니다

Python
>>> a = More_Four_Calculator(4, 2)
>>> a.squared()
16
>>> a.add()
6

제곱을 계산하는 클래스 More_Four_Calculator 로 만든 a 객체에 4 와 2 라는 숫자를 입력한 후 squared 메서드를 호출했습니다.
결과는 숫자 4 의 2 제곱 인 16 을 리턴하는 것을 확인 할 수 있습니다.
add 라는 메서드 역시 상속받은 대로 정상 동작하는 것을 확인 할 수 있습니다.

클래스의 상속은 제곱을 계산하는 클래스 More_Four_Calculator 처럼 기존에 있는 클래스(Four_Calculator) 는 그대로 유지한 채로 클래스의 기능을 확장 시킬 때 주로 사용하게 됩니다.

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
45. 파이썬 - 클래스의 상속

44. 파이썬 – 곱하기.빼기.나누기 기능 만들기와 생성자(Constructor)

44. 파이썬 – 곱하기.빼기.나누기 기능 만들기와 생성자(Constructor)

지난 시간까지 파이썬 에서 사칙연산 클래스를 만드는 과정중에 더하기 기능까지 만드는 과정에 대해 공부해봤습니다.
이번 포스팅에서는 사칙연산에서 나머지 곱하기.빼기.나누기 기능 만들기와 생성자(Constructor)에 대해서 공부해 보려 합니다.

파이썬 클래스

사칙연산 클래스 만들어 보기 #5

곱하기.빼기.나누기 기능 만들기

곱하기.빼기.나누기 기능을 추가하여 보겠습니다.

Python
>>> class Four_Calculator:
...     def testnumber(self, first, second):
...         self.first = first
...         self.second = second
...     def add(self):
...         result = self.first + self.second
...         return result
...     def multi(self):
...         result = self.first * self.second
...         return result
...     def subtrack(self):
...         result = self.first - self.second
...         return result
...     def divide(self):
...         result = self.first / self.second
...         return result
...
>>>        

이렇게 add (더하기 기능) 에 이어 multi(곱하기), subtrack(빼기), divide(나누기) 를 add 메서드에서 공부한 것 처럼 동일하게 만들어 봤습니다.
이제 정상적인 동작을 하는지 작동을 해보겠습니다.

Python
>>> a = Four_Calculator()
>>> b = Four_Calculator()
>>> a.testnumber(4, 2)
>>> b.testnumber(3, 8)
>>> a.add()
6
>>> a.subtrack()
2
>>> a.divide()
2.0
>>> b.add()
11
>>> b.multi()
24
>>> b.subtrack()
-5
>>> b.divide()
0.375
>>>

이렇게 파이썬 클래스를 이용해 사칙연산 기능(더하기.곱하기.빼기.나누기 기능)을 하는 클래스를 만들어 보았습니다.

생성자(Constructor)

앞서 만든 Four_Calculator 클래스를 아래처럼 사용해 보겠습니다.

Python
>>> a = Four_Calculator()
>>> a.add()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 6, in add
AttributeError: 'Four_Calculator' object has no attribute 'first'
>>>

Four_Calculator 클래스의 인스턴스 a 에 testnumber 메서드를 수행하지 않고 add 메서드를 먼저 수행해 봤습니다.
그 결과는 AttributeError: ‘Four_Calculator’ object has no attribute ‘first’ 라는 오류가 발생하게 됩니다.
그 이유는 testnumber 메서드를 수행을 해야만 a 의 객체변수 first 와 second 가 생성되기 때문입니다.

이렇듯 first, second 같은 초기값을 객체에 설정을 해야하는 경우에는 testnumber 와 같은 메서드를 호출하여 초기값을 설정을 하기 보다는 생성자를 구현하는 것이 좋은 방법입니다.

여기서 생성자(Constructor) 라는 것은 객체가 생성될 때 자동으로 호출되는 메서드를 뜻합니다.

파이썬 메서드 이름으로 __init__ 를 사용하게 되면 이 메서드는 생성자가 됩니다.
아래처럼 Four_Calculator 클래스에 생성자를 추가해 보겠습니다.

__init__ 메서드의 init 앞뒤로 붙은 __ 는 언더바(_) 두 개 를 이어서 쓴 것 입니다.

Python
>>> class Four_Calculator:
...     def __init__(self, first, second):
...         self.first = first
...         self.second = second
...     def testnumber(self, first, second):
...         self.first = first
...         self.second = second
...     def add(self):
...         result = self.first + self.second
...         return result
...     def multi(self):
...         result = self.first * self.second
...         return result
...     def subtrack(self):
...         result = self.first - self.second
...         return result
...     def divide(self):
...         result = self.first / self.second
...         return result
...
>>>

기존 클래스에 새롭게 추가한 __init__ 메서드만 따로 살펴 보겠습니다.

Python
def __init__(self, first, second):
    self.first = first
    self.second = second

__init__ 메서드는 testnumber 메서드와 이름만 다르고 똑같습니다.
메서드 이름만을 __init__ 으로 지정했기 때문에 생성자로 인식이 되며
객체가 생성되는 시점에 자동으로 호출이 된다는 차이점이 있습니다.

다음 코드를 실행해 보겠습니다.

Python
>>> a = Four_Calculator()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Four_Calculator.__init__() missing 2 required positional arguments: 'first' and 'second'

위처럼 a = Four_Calculator() 를 수행을 하면 생성자 __init__ 이 호출이 되어 위 같은 오류가 발생하게 됩니다.
이렇게 오류가 나는 이유는 생성자의 배개변수 first 와 second 에 값이 전달되지 않았기 때문입니다.
위의 오류를 해결하는 방법은 first 와 second 에 해당하는 값을 전달하면서 객체를 생성하면 됩니다.

Python
>>> a = Four_Calculator(4, 2)

위처럼 수행을 하게 되면 __init__ 메서드의 매개변수에 self 는 생성되는 객체, first = 4, second = 2 의 값이 전달되게 됩니다.

여기서 __init__ 메서드에도 다른 메서드와 마찬가지로 self 에는 첫 번재 매개변수로 생성되는 객체가 자동으로 전달이 되게 됩니다.

결과적으로 __init__ 메서드를 호출하게 되면 이전에 testnumber 메서드를 호출했을 때와 동일하게 first 와 second 라는 객체 변수가 생성이 되게 됩니다.
아래처럼 확인해 보겠습니다.

Python
>>> a = Four_Calculator(4, 2)
>>> print(a.first)
4
>>> print(a.second)
2
>>>

아래처럼 사칙연산 클래스로 만들었던 add, multi, divide, subtrack 의 메서드도 정상적으로 잘 동작하는 것을 확인할 수 있습니다.

Python
>>> a.add()
6
>>> a.multi()
8
>>> a.divide()
2.0
>>> a.subtrack()
2
>>>

이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.

44. 파이썬 - 곱하기.빼기.나누기 기능 만들기와 생성자(Constructor)

43. 파이썬 – 더하기 기능 만들기

지난 시간에 이어 파이썬의 사칙연산 클래스를 만드는 과정을 통해 클래스에 대한 공부를 하고 있습니다.
지난 포스팅에서는 Four_Calculator 라는 클래스를 만들어 보는 과정까진 진행을 했는데
이번 포스팅에서는 Four_Calculator 클래스에 더하기 기능을 만들어 보는 과정을 공부해 보겠습니다.

파이썬 클래스

사칙연산 클래스 만들어보기 #4

더하기 기능 만들기

이전 Four_Calculator 클래스에서 testnumber 라는 메서드를 생성을 하고
first 와 second 라는 메서드의 매개변수의 설정까지 진행을 했습니다.

Python
>>> class Four_Calculator:
...     def testnumber(self, first, second):
...         self.first = first
...         self.second = second
...
>>>

이제 2개의 숫자를 더하는 기능을 Four_Calculator 클래스에 추가해 보도록 하겠습니다.
아래 코드가 가능하도록 더하기 기능을 가지고 있는 클래스를 만들어야 하겠습니다.

Python
>>> a = Four_Calculator()
>>> a.testnumber(4, 2)
>>> print(a.add())
6

다음처럼 코드를 만들어 보겠습니다.

Python
>>> class Four_Calculator:
...     def testnumber(self, first, second):
...         self.first = first
...         self.second = second
...     def add(self):
...         result = self.first + self.second
...         return result
...
>>>

add 라는 메서드를 새로 추가했습니다.
이제 클래스를 사용해 보도록 하겠습니다

Python
>>> a = Four_Calculator()
>>> a.testnumber(4, 2)

위 코드처럼 클래스 Four_Calculator 와 클래스에 속한 메서드 testnumber 를 호출했다면
이전 포스팅에서 보았듯이 a 객체의 first, second 객체변수에는 각각 숫자 4 와 2 가 저장 될 것입니다.
여기서 add 메서드를 호출을 해 보겠습니다

Python
>>> print(a.add())
6

위 처럼 a.add() 라고 호출하게 되면 add 메서드가 호출되면서 4 와 2 를 더한 값 6 이 출력이 됩니다.
아래 코드를 보면서 어떤 과정을 거쳐 6이 출력이 되는지 살펴 보겠습니다.

Python
def add(self):
    result = self.first + self.second
    return result

위에서 보시다시피 add 메서드의 매개변수는 self 이고 리턴값은 result 입니다.
아래는 리턴값인 result 의 계산 부분입니다.

Python
result = self.first + self.second

이전 코드에서 보신 것 처럼 a.add() 처럼 a 객체에 의해 add 메서드가 실행이 되면 add 메서드의 self 에는 a 라는 객체가 입력이 되게 됩니다.
이 내용은 아래와 같습니다.

Python
result = a.first + a.second

위의 내용은 a.add() 메서드가 호출되기 전에 a.testnumber(4, 2) 가 먼저 호출되면서 a.first = 4, a.second = 2 라고 먼저 설정되었기 때문입니다.
따라서 아래와 같은 내용이라고 보시면 됩니다.

Python
result = 4 + 2

결국 a.add() 를 호출하게 되면 4 와 2 를 더한 값 6 을 리턴을 하게 됩니다.

Python
>>> print(a.add())
6

여기까지 파이썬에서 클래스를 이용해 사칙연산을 위한 클래스를 만들고 더하기 기능까지 만드는 과정을 진행 해봤습니다.
다음 포스팅에 이어서 사칙연산의 나머지 기능인 곱하기, 빼기, 나누기 기능을 추가로 만들어 보도록 하겠습니다.

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
43. 파이썬 - 더하기 기능 만들기

42. 파이썬 – 메서드 수행문

42. 파이썬 – 메서드 수행문

지난 시간에 이어 계속해서 파이썬 클래스를 이용해서 사칙연산 계산기를 만들어 보겠습니다.

파이썬 클래스

사칙연산 클래스 만들어보기 #3

메서드 수행문

메서드의 또 다른 호출방법

아래처럼 클래스를 통해 메서드를 호출하는 것도 가능은 합니다.
하지만 많이 사용되지는 않는다는 거는 참고하시기 바랍니다.

Python
>>> a = Four_calculator()
>>> Four_calculator.testnumber(a, 4, 2)

위처럼 클래스이름.메서드 형태로 호출을 하게 되면 객체 a 를 첫번재 매개변수 self 에 꼭 전달해 주어야만 합니다.
하지만 아래처럼 객체.메서드 형태로 호출을 하게 되면 self 를 반드시 생략해서 호출을 해주어야만 합니다.

Python
>>> a.Four_calculator()
>>> a.testnumber(4, 2)
testnumber 메서드 수행문

testnumber 메서드의 수행문에 대해 공부해 보겠습니다.

Python
def testnumber(self, first, second): # 함수명(메서드의 매개변수):
    self.first = first               # 메서드의 수행할 문장
    self.second = second             # 메서드의 수행할 문장

testnumber 메서드를 생성을 하고 a.testnumber(4, 2) 로 호출을 하게 되면 testnumber 메서드의 매개변수 first, second 에는 각각 숫자 4와 2 가 대입되어 testnumber 메서드는 다음처럼 수행문을 해석하게 됩니다.

Python
self.first = 4
self.second = 2

이전 포스팅에서 설명했던 self 는 실제로 전달된 a 객체를 의미하므로 다음처럼 해석하게 됩니다.

Python
a.first = 4
a.second = 2
객체변수

a.first = 4 문장이 수행이 되면 a 객체에 객체변수 first 가 생성이 되고 숫자 4 가 대입이 됩니다.
마찬가지로 a.second = 2 문장이 수행이 되면 a 객체에 객체변수 second 가 생성이 되고 숫자 2 가 대입이 됩니다.
여기서 객체변수는 객체만의 변수를 의미합니다.

Python
>>> a = Four_Calculator()
>>> a.testnumber(4, 2)
>>> print(a.first)
4
>>> print(a.second)
2

위 코드를 보면 a 객체에 first 와 second 가 생성이 된 것을 알 수 있습니다.
이번엔 아래처럼 a 와 b 객체를 만들어 보겠습니다.

Python
>>> a = Four_Calculator()
>>> b = Four_Calculator()

그리고 이렇게 만들어진 a 와 b 객체의 객체변수 first 를 아래와 같이 생성을 해보겠습니다.

Python
>>> a.testnumber(4, 2)
>>> print(a.first)
4

a 에 이어 b 객첵의 객체변수 first 도 아래와 같이 생성해 보겠습니다.

Python
>>> b.testnumber(5, 7)
>>> print(b.first)
5

여기서 중요한 점!
위처럼 b 객체의 객체변수 first 에 는 5 라는 숫자가 저장이 된걸 알 수 있습니다.
그럼 a 객체의 first는 어떻게 되어 있을까요?
원래 있던값 4를 유지하고 있을까요?

Python
>>> print(a.first)
4

위 결과를 보시면 아시다시피 a 객체의 first 값은 b 객체의 first 값에 영향을 받지 않습니다.
원래 있던 4 라는 숫자를 가지고 있음을 확인 할 수 있습니다.
이점이 클래스로 만든 객체의 객체변수는 다른 객체의 객체변수에 상관없이 독립적이게 값을 유지 한다는 점입니다.
클래스에서는 이점을 중요하게 여기고 넘어가야 합니다.

이제까지 진행한 내용을 바탕으로 Four_Calculator 클래스를 완성해 보겠습니다.
물론 사칙연산의 모든 기능이 다 포함된 완성본은 아닙니다.

Python
>>> class Four_Calculator:
...     def testnumber(self, first, second):
...         self.first = first
...         self.second = second
...
>>>

이번 포스팅에서 공부한 내용은 위의 코드를 설명하기 위한 것들입니다.
이해가 안간다면 다시 한 번 더 훑어보고 이해를 하고 넘어가야 합니다.
다음 포스팅에서 이어서 파이썬 클래스를 이용해 사칙연산 계산기 만들기에 대해 공부해 보겠습니다.

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
42. 파이썬 - 메서드 수행문

41. 파이썬 – 클래스 구조와 매개변수

41. 파이썬 – 클래스 구조와 매개변수

지난 포스팅에서 파이썬의 클래스를 이용한 사칙연산을 만들기 위해 먼저 어떻게 동작을 해야할지 구상을 해봤습니다.

이번 포스팅에서는 지난 포스팅에 이어서 사칙연산 을 수행할 클래스를 만들어 보면서 클래스 구조와 매개변수에 대해 공부해 보겠습니다.

파이썬 클래스

클래스 구조와 매개변수

사칙연산 클래스 만들어보기 #2

클래스 구조 만들기

이제 앞에서 구상한 동작대로 실행을 하는 클래스를 만들어 보겠습니다.
먼저 a = Four_Calculator() 처럼 객체를 만들수 있게 클래스를 정의하는 것입니다.
우선은 아무 기능이 없어도 되기 때문에 간단하게 만들어 보겠습니다.

Python
>>> class Four_Calculator:
...     pass
...
>>>

우선은 대화형 인터프리터에서 pass 라는 문장만 포함한 Four_Calculator 클래스를 만들어 봤습니다.
현재 만들어진 Four_Calculator 클래스는 어떤 변수나 함수도 가지고 있지 않지만 원하는 객체 a 를 만들 수 있는 기능만은 가지고 있습니다.
여기서 사용된 pass 는 아무것도 수행하지 않는 문법입니다.
임시로 코드를 만들때 자주 사용되니 알고 넘어가야 겠습니다.

Python
>>> a = Four_Calculator()
>>> type(a)
<class '__main__.Four_Calculator'>

위 코드 처럼 a = Four_Calculator() 클래스를 이용해 a 객체를 만들어 준 뒤 type(a) 로 a 객체의 타입을 확인해 보았습니다.
a 라는 객체가 Four_Calculator 클래스의 인스턴스 임을 알 수 있습니다.
type 함수는 파이썬 자체의 내장 함수로서 객체의 타입을 출력해 주는 함수입니다.

객체에 숫자 지정 가능하게 만들기

여기서 생성된 객체 a 는 아직은 아무런 기능도 하지 못합니다.
여기에 더하기, 나누기, 곱하기, 빼기 등의 기능을 수행하는 객체로 만들어 줘야 합니다.
이런 여러가지 기능을 가지는 객체를 만들려면 우선 a 라는 객체에 사칙연산을 할 때 사용될 숫자 2개를 알려줘야 합니다.
아래처럼 연산을 수행할 때 필요한 숫자 4와 2를 객체에 지정할 수 있도록 만들어 보겠습니다.

Python
>>> a.testnumber(4, 2)

위 코드가 동작하게 하려면 아래 처럼 코드를 수정을 해야 합니다.

Python
>>> class Four_Calculator:
...    def testnumber(self, first, second):
...        self.first = first
...        self.second = second
...
>>>        
메서드(Method)란

앞서 만든 Four_Calculator 클래스에서 pass 문장을 삭제하고 testnumber 함수를 만들었습니다.
클래스 안에 구현된 함수를 다른 용어로는 메서드(Method) 라고도 합니다.
앞으로도 클래스 내부의 함수는 메서드(Method)라고 표현함을 알고 계시면 됩니다.

일반적으로 함수를 만들 때는 아래 처럼 코드를 작성합니다.

Python
def 함수명(매개변수):
    수행할 문장
    ...

메서드도 클래스에 포함되어 있다는 것만 빼면 일반 함수와 별반 다를게 없어보입니다.
testnumber 메서드를 살펴보겠습니다

Python
def testnumber(self, first, second): # 함수명(메서드의 매개변수):
    self.first = first               # 메서드의 수행할 문장
    self.second = second             # 메서드의 수행할 문장
testnumber 메서드의 매개변수

testnumber 메서드에서 매개변수로 self, first, second 3개의 값을 입력으로 받았습니다.
여기서 self 라는 매개변수가 등장하는데 self 는 특별한 의미를 가지고 있는 매개변수 입니다.
아래처럼 a 객체를 만들고 a 객체로 testnumber 메서드를 호출해 보겠습니다.

Python
>>> a = Four_Calculator()
>>> a.testnumber(4, 2)

위처럼 객체를 통해서 메서드를 호출하고자 할때는 a.testnumber(4, 2) 와 같이 도트(.) 연산자를 사용해야 합니다.
그런데 보면 self, first, second 3개의 매개변수가 설정이 되어있는데 실제로 보면 a.testnumber(4, 2) 처럼 2개의 값만 입력이 됩니다.
이유는 a.testnumber(4, 2) 처럼 호출을 하게 되면 testnumber 메서드의 첫번째 매개변수인 self 에는 testnumber 메서드를 호출한 객체 a 가 자동을 전달되는 형태이기 때문입니다

파이썬에서는 메서드의 첫번재 매개변수 이름을 관례적으로 self 라고 사용을 합니다.
객체를 호출 할 때 호출한 객체 자신을 전달하기 때문에 self 라는 이름을 사용하는 것이구요
따라서 self 대신 다른 이름을 사용해도 상관이 없습니다.
이는 파이썬만의 특정으로 자바 같은 언어에서는 첫 번째 매개변수로 self 가 필요가 없습니다.

사칙연산 클래스를 만들면서 파이썬의 클래스 구조와 매개변수에 공부해 봤습니다.
다음 포스팅에 이어서 사칙연산 클래스를 만들면서 파이썬의 클래스에 대해 더 알아보겠습니다

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
41. 파이썬 클래스 구조와 매개변수

40. 파이썬 – 클래스와 객체(class and object)

40. 파이썬 – 클래스와 객체(class and object)

파이썬 클래스

클래스와 객체(class and object)

아래는 클래스를 가장 잘 설명해 주는 그림이라고 합니다.

40. 파이썬 - 클래스와 객체

위 그림은 과자를 만드는 과자 틀과 그 과자 틀을 사용해 만든 과자 들입니다.

  • 클래스(class) -> 과자틀
  • 객체(object) -> 과자틀로 만들어 낸 과자들

클래스는 과자틀과 비슷하다고 보시면 됩니다.
똑같은 무언가를 계속해서 만들어 내는 설계 도면이라 보시면 되고(과자틀)
객체는 클래스로 만들어낸 피조물을 의미합니다(과자틀로 만들어 낸 과자들)

클래스(class)의 중요한 특징

클래스의 중요한 특징은 객체마다 고유한 성격을 가진다는 것입니다.
과자틀로 만들어 낸 과자들에 구멍을 내거나 조금 먹는다고 해서 다른 과자들에게 영향을 끼치지 않는 것과 마찬가지로 같은 클래스로 만들어진 객체라고 하더라도 서로 영향을 끼치지 않습니다.

클래스의 간단한 예

아래 코드는 클래스의 가장 간단한 예입니다.

Python
>>> class Snaks:
>>>     pass

위 클래스는 아무런 기능도 하지 않습니다.
그렇다고 하더라도 이런 무기능 클래스도 객체를 생성하는 기능은 가지고 있습니다.
아래는 Snaks 라는 클래스의 객체를 만드는 방법입니다.

Python
>>> a = Snaks()
>>> b = Snaks()

Snaks() 의 결과값을 리턴받은 a 와 b 가 바로 객체(object)입니다.
함수를 사용해서 결과값을 리턴받는 경우와 비슷합니다.

객체와 인스턴스의 차이

클래스로 만든 객체를 인스턴스 라고도 합니다.
객체와 인스턴스에는 차이가 있습니다.
a = Snaks() 라고 만든다면 a 는 객체가 됩니다.
그리고 a 객체는 Snaks 의 인스턴스가 됩니다.
즉 인스턴스라는 말은 어떤 개체(a)가 어떤 클래스(Snaks) 의 객체인지를 관계 위주로 설명할 때 사용됩니다.
a 는 인스턴스 보다 a 는 객체라고 표현하며
a 는 Snaks 의 객체 보다 a 는 Snaks 의 인스턴스 라고 표현합니다.

사칙연산 클래스 만들어 보기 #1

이제 클래스를 직접 만들어 보면 공부를 해 보겠습니다.
먼저 사칙연산을 수행해 주는 클래스를 만들어 보겠습니다.
사칙연산이 더하기, 빼기, 곱하기, 나누기 인건 다들 아시겠죠?

클래스를 어떻게 만들지 먼저 구상

클래스를 무조건 만들기 보다는 클래스로 만들 객체를 중점으로 어떻게 동작시킬 컷인지 먼저 구상을 하고 난 뒤에 이렇게 구상한 것들을 하나 하나 해결해 나가면서 완성하는게 좋습니다.
사칙연산을 가능하게 하는 Four_Calculator 가 동작하는 과정을 상기해 봅니다

우선 a = Four_Calculator() 로 a 라는 객체를 만들어 봅니다

Python
>>> a = Four_Calculator()

그 뒤로 a.testnumber(4, 2) 처럼 입력을 하고 입력된 숫자 4와 2를 a 에 지정해 줍니다

Python
>>> a.testnumber(4, 2)

다음 a.add() 라고 수행을 하면 입력된 두 수 4와 2를 더한 결과 4 + 2 를 리턴을 합니다

Python
>>> print(a.add())
6

만일 a.mul() 을 수행을 하면 입력된 두 수 4와 2를 곱한 결과 4 * 2 를 리턴을 합니다

Python
>>> print(a.mul())
8

그리고 또 a.sub() 를 만나면 입력된 두 수 4와 2를 뺀 결과인 4 – 2 를 리턴을 합니다.

Python
>>> print(a.sub())
2

마지막으로 a.div() 를 만나게 되면 입력된 두 수 4와 2에서 나누기를 한 결과 4 / 2 를 리턴을 합니다

Python
>>> print(a.div())
2

이런 동작들을 하게 만드는 것이 이제부터 만들 Four_Calculator 입니다

이번 포스팅에서는 파이썬 클래스와 객체에 대해 클래스의 특징과 객체와 인스턴스의 차이에 대해 알아봤습니다.
다음 포스팅에 사칙연산을 하는 클래스 Four_Calculator 에 대해 이어서 공부해 보겠습니다

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
40. 파이썬 - 클래스와 객체(class and object)

39. 파이썬 클래스의 정의(class)

39. 파이썬 클래스의 정의(class)

이제 파이썬 클래스와 모듈, 예외처리, 라이브러리 등 핵심적인 내용들에 대해 공부를 진행하겠습니다.
먼저 클래스의 정의와 클래스가 필요한 이유에 대해 알아보겠습니다.

파이썬 클래스

저와 같은 파이썬 초보들에게 파이썬 클래스(class)는 아직까진 하나의 벽이기도 합니다.
클래스가 필요한 이유와 클래스의 정의 등 기초부터 공부해 보겠습니다.

클래스가 필요한 이유

프로그래머들이 가장 많이 사용하는 프로그래밍 언어 중 하나는 C 언어 일겁니다.
그런 C언어에는 클래스가 없습니다.
즉 클래스가 없어도 프로그램을 만드는데 지장은 없다는 뜻이기도 할겁니다.
파이썬으로 만들어진 프로그램을 보더라도 클래스가 없는 프로그램도 상당히 많을 겁니다.
이처럼 클래스는 함수, 자료형 같이 필수 요소는 아니라는 겁니다.

그렇다 하더라도 클래스(class)를 알고 클래스를 적절하게 사용을 한다면 프로그래머가 얻는 이익은 상당할 것입니다.

클래스를 사용하기 전 예제

계산기를 예를 들어보겠습니다. 계산기에 숫자를 입력하고 덧셈이나 뺄셈 등에 따라 기호를 입력한 후 숫자를 하나 더하면 결과를 보여줍니다. 그 상태에서 한번 더 기호를 입력한 후 숫자를 입력하면 기존에 나왔던 결과값에 나중에 입력한 기호와 숫자를 더해 최종 결과를 보여 주게 됩니다.
이렇게 계산기는 결과값들을 메모리 어딘가에 저장하고 있어야 합니다.

이런 내용을 예전에 공부한 함수로 구현해 보겠습니다.
계산기의 더하기 기능을 구현해 봅니다.

Python
result_sum = 0

def add(test_num):
    global result_sum
    result_sum += test_num
    return result_sum

print(add(5))
print(add(7))

위 코드에서 생성한 add 함수는 값을 입력 받아 이전에 값에 값을 더해 리턴 해주는 함수 입니다.
이전에 입력된 값을 유지하기 위해서 result_sum 변수를 전역변수(global) 로 설정 했습니다.
결과는 아래와 같습니다.

Python
5
12

여기서 만약에 하나의 프로그램에서 계산기가 2대가 필요하다면 어떻게 해야 할까요?
각각의 계산기는 각각의 결과값을 유지를 해야합니다.
그래서 add 함수 하나만 가지고는 결과값을 유지 할 수가 없습니다.
이런 상황을 해결하기 위해서는 함수를 따로 만들어야 하는 경우가 생깁니다.

Python
result_sum_1 = 0
result_sum_2 = 0

def add1(test_num):
    global result_sum_1
    result_sum_1 += test_num
    return result_sum_1

def add2(test_num):
    global result_sum_2
    result_sum_2 += test_num
    return result_sum_2

print(add1(5))
print(add1(7))
print(add2(5))
print(add2(8))

위 코드를 보시면 add1 함수와 add2 함수는 똑같은 함수입니다.
그런데 각 함수에서 결과값을 유지하기 위해서 result_sum_1 과 result_sum_2 가 각각 전역 변수로 필요하게 되었습니다.
결과값은 아래와 같습니다.

Python
5
12
5
13

1번 계산기 add1 는 2번 계산기 add2 의 결과에 영향을 끼치지 않는 것을 확인 할 수 있습니다.
그런데 이런 계산기가 더 많이 필요하다면 어떻게 될까요?
그때 마다 전역 변수와 함수를 무한정 추가하기는 어려울 것입니다.
거기에 더하기 뿐만 아니라 곱하기, 빼기, 나누기 등을 추가해야 한다면 훨씬 더 복잡해지겠죠

클래스를 사용한 후의 예제

이런 경우에 클래스가 필요한 겁니다.
아직 클래스에 대해 정확히는 모르지만
아래 코드를 보시면서 클래스에 대한 개념만 아~ 이런 식이구나 하는 정도만 아시면 될 듯 합니다.

Python
class Add_Calculator:
    def __init__(self):
        self.result_sum = 0
    
    def add(self, test_num):
        self.result_sum += test_num
        return self.result_sum

cal1 = Add_Calculator()
cal2 = Add_Calculator()

print(cal1.add(5))
print(cal1.add(7))
print(cal2.add(5))
print(cal2.add(8))

위 코드를 실행해 보면 함수 2개를 사용했을 때와 동일하게 결과가 나오는 걸 확인 할 수 있습니다.

Python
5
12
5
13

Add_Calculator 라는 클래스로 만든 계산기 cal1, cal2 를 파이썬에서는 객체라고 합니다.
그리고 이 객체는 각각의 역할을 수행 하게 됩니다.
계산기 cal1, cal2 의 결과값 역시 독립적으로 값을 유지하게 됩니다.
이렇게 클래스를 사용하게 되면 계산기 대수가 많이 늘어난다고 하더라도 객체를 생성해 주기만 하면 되기 때문에 함수를 무한정 늘리는 것 보다 매우 간단해 지게 됩니다.
Add_Calculator 클래스에 만약 빼기 기능을 추가하고 싶다면 Add_Calculator 클래스에 빼기 기능 함수를 추가만 하면 됩니다.

Python
class Add_Calculator:
    def __init__(self):
        self.result_sum = 0
    
    def add(self, test_num):
        self.result_sum += test_num
        return self.result_sum

    def sub(self, test_num):
        self.result_sum -= test_num
        return self.result_sum

cal1 = Add_Calculator()
cal2 = Add_Calculator()

print(cal1.add(5))
print(cal1.add(7))
print(cal2.sub(5))
print(cal2.sub(8))

위 코드에는 sub 라는 빼기 기능을 더한 함수입니다.
아래 결과를 보시면 빼기 기능을 수행한 값이 나온 걸 볼수 있습니다.

Python
5
12
-5
-13

클래스가 필요한 이유는 이것만도 아니고 이점도 이것만이 아닙니다.
그래도 위 예를 하나만 보더라도 클래스가 필요한 이유는 분명해질 것 같습니다.

이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.

39. 파이썬 클래스의 정의(class)

38. 파이썬 4장 연습문제 -오류 수정 / 입력 저장

38. 파이썬 4장 연습문제 -오류 수정 / 입력 저장

4장 연습문제

오류 수정과 입력 저장 등의 문제들을 풀이해 보겠습니다.

4. 다른 출력결과가 나오는 코드를 선택해 보세요

  1. print(“Python’s””favorite””food””is””perl”)
  2. print(“Python’s” + “favorite” + “food” + “is” + “perl”)
  3. print(“Python’s”, “favorite”, “food”, “is”, “perl”)
  4. print(“”.join([“Python’s”, “favorite”, “food”, “is”, “perl”]))

Python
>>> print("Python's""favorite""food""is""perl")
Python'sfavoritefoodisperl
>>> print("Python's" + "favorite" + "food" + "is" + "perl")
Python'sfavoritefoodisperl
>>> print("Python's", "favorite", "food", "is", "perl")
Python's favorite food is perl
>>> print("".join(["Python's", "favorite", "food", "is", "perl"]))
Python'sfavoritefoodisperl

위 결과를 보면 알 수 있듯이 콤마가 있는 경우에는 공백이 생깁니다.
첫 번째 “” 로 둘러싸인 문자열은 문자열 + 연산과 같습니다.
두 번째 는 위 설명대로 “” 로 둘러싸인 문자열과 같습니다.
네 번째는 리스트 요소를 “” 과 각각 합쳐서 출력 하니 역시 첫 번째나 두 번째와 동일합니다.

5. 프로그램 오류 수정 – 2

다음 처럼 test.txt 파일에 “Python’s favorite food is perl” 라고 문자열을 저장 한 뒤 test.txt 파일을 다시 읽어서 출력하는 코드입니다.

Python
file1 = open("test.txt", "w")
file1.write("Python's favorite food is perl")

file2 = open("test.txt", "r")
print(file2.read())

위 코드는 단순하게 예상한 대로 “Python’s favorite food is perl” 문장을 출력하지 않습니다.
예상한 대로 “Python’s favorite food is perl” 문장이 출력 되게 수정해 보세요

위 코드를 그대로 비주얼스튜디오코드에서 입력하고 실행해보면 아무런 결과도 나오지 않습니다.
이유는 파일을 open 했으면 close 를 해줘야 하기 때문입니다.

Python
file1 = open("ex_test.txt", "w")
file1.write("Python's favorite food is perl")
file1.close()

file2 = open("ex_test.txt", "r")
print(file2.read())
file2.close

6. 사용자 입력 저장

사용자가 입력하는 내용을 파일로 저장하는 코드를 작성해 보세요. 파일명은 write_txt.txt 로 하겠습니다.
단, 작성한 코드를 재실행 하더라도 기존에 작성한 내용을 유지하고 새로 입력한 내용을 추가해야 합니다.

Python
txt_input = input("기록할 내용을 입력하세요 : ")
file = open("write_txt.txt", "a") # 모드 a 는 추가 모드 입니다.
file.write(txt_input)
file.write("\n") # 입력한 내용을 줄 단위로 구분하기 위해 줄 바꿈 문자를 넣어 줍니다.
file.close

위 코드를 실행하고 문자 입력후, 재실행 후 문자를 입력 했습니다.

Python
기록할 내용을 입력하세요 : Python's favorite food is perl

기록할 내용을 입력하세요 : python

원하던 대로 기존 문자열을 유지한 채 다음 문자열이 추가가 되었습니다.

38. 4장 연습문제 -오류 수정  입력 저장

7. 파일의 문자열 변경

아래와 같은 문자열을 가진 write_text.txt 파일이 있습니다.
이 파일의 내용중 “java” 라는 문자열을 “python” 으로 바꿔서 저장해 보세요

Python
Python's favorite food is perl
you need java

아래 처럼 코드를 생성해 봅니다
파일을 읽기 모드로 열어서 파일 전체를 txt 라는 변수에 대입합니다.
파일을 닫고 txt 변수 안에 저장된 문자열에서 replace 함수를 사용해 java 를 python 으로 변경합니다.
이번에는 다시 파일을 쓰기 모드로 열어서 저장된 txt 변수의 문자열을 파일에 씁니다.

Python
file = open("write_text.txt", "r")
txt = file.read()
file.close()

txt = txt.replace("java", "python")

file = open("write_text.txt", "w")
file.write(txt)
file.close

8. 입력한 값들을 모두 더하여 출력

다음 처럼 실행을 하면 입력된 값들을 모두 더하는 코드입니다.
D:\test\test_argv.py 파일을 생성해 보세요

D:\> cd test
D:\test> python test_argv.py 1 2 3 4 5 6 7 8 9 10
55

import sys 을 먼저 진행을 해주어야 인수를 전달 할 수 있습니다.
sys 모듈의 argv 를 사용해 주면 됩니다.

Python
import sys

nums = sys.argv[1:] # 파일 이름을 제외한 명령 행의 모든 입력을 받습니다.
tot = 0
for num in nums:
    tot += int(num)
print(tot)

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
38. 4장 연습문제 -오류 수정  입력 저장

37. 파이썬 – 프로그램 입출력(연습문제)

37. 파이썬 – 프로그램 입출력(연습문제)

프로그램 입출력

Dos 명령어에 type 이라는 명령이 있습니다.
type 명령을 사용해 파일이름을 입력 받아 파일의 내용을 출력을 하게 됩니다.

C:\> type test.txt

이렇게 명령 프롬프트에서 사용 되는 명령어들은 인수를 전달하여 프로그램을 실행하게끔 됩니다.
이와 같은 기능을 파이썬에서도 사용할 수가 있습니다.

명령어 [인수 1 인수 2 ...]

sys 모듈

파이썬에서는 sys 모듈을 사용하여 프로그램에 인수를 전달 할 수 있습니다.
sys 모듈은 사용하기 전에 먼저 import 명령어를 사용해야 합니다.

Python
# test.py
import sys

test = sys.argv[1:]
for i in test:
    print(i)

위 코드는 프로그램을 실행하면서 입력 받은 인수를 for 문을 이용해 하나씩 차례대로 출력하는 코드입니다.
위에서 사용된 sys 모듈의 argv 는 프로그램 실행시 전달된 인수를 의미합니다.
argv[0] 은 파일 이름인 test.py 가 되고 argv[1] 부터는 뒤에 따라오는 인수가 차례로 argb 의 요소가 됩니다.


위에 작성된 코드를 명령 프롬프트를 이용해 실행해 보겠습니다.

37. 파이썬 - 프로그램 입출력

명령 프롬프트에서 python test.py aaa bbb ccc 라고 입력을 했습니다.
전달받은 인수를 출력한 걸 볼 수 있습니다.

간단한 코드를 하나 작성 해 보겠습니다

Python
# test_02.py
import sys
test_args = sys.argv[1:]
for i in test_args:
    print(i.upper(), end=' ')

위 코드를 마찬가지로 명령 프롬프트에서 실행해 보겠습니다.

# test_02.py
import sys
test_args = sys.argv[1:]
for i in test_args:
print(i.upper(), end=' ')

위 코드에서 보면 upper() 함수를 사용해 test_02.py 를 실행할 때 전달 한 인수를 모두 대문자로 바꾸어 준걸 확인 할 수 있습니다.

4장 연습문제 풀이

1. 홀수 짝수 판별

자연수를 입력 받아 홀수 인지 짝수 인지 구별하는 함수 is_odd 를 만들어 보세요

Python
>>> def is_odd(num):
...     if num % 2 == 1:
...         return True
...     else:
...         return False
...
>>> is_odd(5)
True
>>> is_odd(8)
False

2. 모든 입력 값의 평균 값 구하기

입력을 받아 모든 수의 평균 값을 구하는 함수를 만들어 보세요
단, 입력으로 들어오는 수의 개수는 정해져 있지 않습니다.

Python
>>> def num_avg(*num):
...     tot = 0
...     for i in num:
...         tot = tot + i
...     avg = tot / len(num)
...     return(avg)
...
>>> num_avg(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
5.5

3. 프로그램 오류 수정 – 1

두 개의 숫자를 입력 받아 더한 값을 출력해 주는 코드 입니다.

Python
input_01 = input("첫번째 숫자 입력 : ")
input_02 = input("두번째 숫자 입력 : ")

tot = input_01 + input_02
print("입력 받은 두 수의 합은 %s 입니다" % tot)
Python
첫번째 숫자 입력 : 5
두번째 숫자 입력 : 7
입력 받은 두 수의 합은 57 입니다

5 와 7 을 입력 했을 때 결과가 57 이 나왔습니다.
정상적으로 5 + 7 의 결과인 12 가 나오게 수정해 보세요

Python
input_01 = input("첫번째 숫자 입력 : ")
input_02 = input("두번째 숫자 입력 : ")

tot = int(input_01) + int(input_02)
print("입력 받은 두 수의 합은 %s 입니다" % tot)

입력이 항상 문자열이라고 공부했었습니다. int 함수를 이용해 정수로 변경 후 출력해 보았습니다.

Python
첫번째 숫자 입력 : 5
두번째 숫자 입력 : 7
입력 받은 두 수의 합은 12 입니다
  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.

36. 파이썬 – 파일 읽기.내용 추가하기

지난 포스팅에 이어서 파이썬 파일 읽기와 파일에 내용 추가하기 에 대해 공부해 보겠습니다.

파이썬 입출력

파일 읽고 쓰기

파일을 읽는 여러가지 방법

줄바꿈 문자(\n) 제거하는 방법

파일을 읽어 올 때 줄 끝에 줄 바꿈 문자(엔터값 또는 개행값이라고 합니다) \n 를 제거해야 할 경우가 종종 생깁니다.
다음 코드는 줄 바꿈 문자가 있는 상태에서 그냥 출력해 본 코드입니다.

Python
file = open(r"d:\test\신규파일.txt", 'r')
lines = file.readlines()
for line in lines:
    print(line)
file.close()

결과를 보면 줄 바꿈 문자로 인해 줄 사이에 한 줄씩 비어 있는 것이 보입니다

Python
1 번째 줄 입니다.

2 번째 줄 입니다.

3 번째 줄 입니다.

4 번째 줄 입니다.

5 번째 줄 입니다.

6 번째 줄 입니다.

7 번째 줄 입니다.

8 번째 줄 입니다.

9 번째 줄 입니다.

10 번째 줄 입니다.

다음 코드처럼 strip 함수를 사용해서 줄 바꿈 문자를 제거 해보겠습니다

Python
file = open(r"d:\test\신규파일.txt", 'r')
lines = file.readlines()
for line in lines:
    line = line.strip() # 줄 끝의 줄 바꿈 문자를 제거합니다.
    print(line)
file.close()

줄 바꿈 문자가 제거되어 빈줄 없이 출력이 되었습니다.
그냥 보기에도 확실히 위의 예 보다는 보기가 훨씬 좋습니다.

Python
1 번째 줄 입니다.
2 번째 줄 입니다.
3 번째 줄 입니다.
4 번째 줄 입니다.
5 번째 줄 입니다.
6 번째 줄 입니다.
7 번째 줄 입니다.
8 번째 줄 입니다.
9 번째 줄 입니다.
10 번째 줄 입니다.
read 함수 사용하기

앞에 포스팅에서 readline 과 readlines 함수를 사용 해봤는데 이번에는 read 함수를 사용해 보겠습니다.

Python
file = open(r"d:\test\신규파일.txt", 'r')
file_view = file.read()
print(file_view)
file.close

아래 결과 처럼 read 함수는 파일 전체 내용을 문자열로 리턴하게 됩니다.
결국 아래 결과가 신규파일.txt 의 전체 내용이라고 보시면 됩니다.

Python
1 번째 줄 입니다.
2 번째 줄 입니다.
3 번째 줄 입니다.
4 번째 줄 입니다.
5 번째 줄 입니다.
6 번째 줄 입니다.
7 번째 줄 입니다.
8 번째 줄 입니다.
9 번째 줄 입니다.
10 번째 줄 입니다.
파일 객체를 for 문과 함께 사용

파일 객체를 for 문과 함께 사용하는 방법도 있습니다.

Python
file = open(r"d:\test\신규파일.txt", 'r')
for file_view in file:
    print(file_view)
file.close

for 문을 사용하여 파일을 줄 단위로 읽어온 결과입니다.

Python
1 번째 줄 입니다.

2 번째 줄 입니다.

3 번째 줄 입니다.

4 번째 줄 입니다.

5 번째 줄 입니다.

6 번째 줄 입니다.

7 번째 줄 입니다.

8 번째 줄 입니다.

9 번째 줄 입니다.

10 번째 줄 입니다.

파일에 새로운 내용 추가하기

앞선 예제 코드에서는 읽기 모드로(‘r’) 로 파일을 열어 봤습니다.
쓰기모드(‘w’) 로 파일을 열게 되면 이전에 존재하는 내용이 모두 사라진다고 공부했었습니다.
하지만 무조건 적으로 이렇게 모든 내용이 사라지게 하면서 파일을 작성할 수는 없을 겁니다.
이럴때 사용하는 것이 추가모드(‘a’) 입니다.

Python
file = open(r"d:\test\신규파일.txt", 'a')
for i in range(11, 20):
    file_view = "%d 번째 줄 입니다.\n" % i
    file.write(file_view)
file.close

파일이 잘 작성이 되었는지 열어 보겠습니다.
아래처럼 기존에 10번째 까지 작성되었던 파일에 추가로 데이터가 들어간 것을 확인 할 수 있습니다.

36. 파이썬 - 파일 읽기.내용 추가하기

with문 사용하기

지금까지 사용한 파일을 열고 닫는 방식과는 다르게 with 문을 사용하여 파일을 열고 닫아보겠습니다.
이전에는 파일을 open 하면 끝에는 항상 close 를 해주어야 했습니다.

Python
with open(r"d:\test\python_test.txt", "w") as file:
    file.write("Python's favorite food is perl")

with 문을 사용하게 되면 with 문이 속해 있는 문장을 벗어나면 열려있는 파일 객체가 자동으로 close 하게 됩니다.
아래 처럼 파일이 잘 생성된 것을 확인 할 수 있습니다.

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.