48. 파이썬 – 모듈의 정의 그리고 모듈 만들기와 모듈 불러오기

48. 파이썬 – 모듈의 정의 그리고 모듈 만들기와 모듈 불러오기

지난 포스팅에서는 파이썬 클래스 에 대해 마무리를 했고
이번 포스팅부터는 파이썬 모듈에 대해 공부해 보려 합니다.
그중에서 모듈이 어떤건지 모듈의 정의와 모듈 만들기와 모듈 불러오기에 대해 공부해 보겠습니다.

파이썬 모듈

모듈의 정의

모듈이라는 것은 이전에 공부했던 함수나 변수, 또는 클래스를 모아 놓은 파이썬 파일이라고 보시면 됩니다.
다르게 해석하자면 모듈은 다른 파이썬 프로그램에서 불러와서 사용할 수 있게끔 만들어진 파이썬 파일이라고 보시면 됩니다.

파이썬 프로그래밍을 진행을 하다 보면 굉장히 많은 수의 모듈을 사용을 하게 됩니다.
이렇게 사용되는 모듈은 기존에 다른 개발자들이 이미 만들어 놓은 모듈일 수도 있고
우리가 프로그래밍을 하면서 직접 만들어 사용하는 모듈일 수도 있습니다.

모듈 만들기

일단 간단하게 모듈 만들기를 해보겠습니다

Python
# module1.py
def add(x, y):
    return x + y

def subtrack(x, y):
    return x - y

위 코드는 add 와 subtrack 함수만 존재하는 module1.py 파일입니다.
위처럼 파이썬 파일을 만들었는데 이 파일이 모듈입니다.
에디터로 파이썬 파일을 만들었었다면 다른 것이 없습니다.
즉 파이썬 확장자인 ~.py 로 만든 파이썬 파일은 모두 모듈이라고 보시면 됩니다.

모듈 불러오기

방금 위에서 만든 module1.py 파일, 즉 모듈을 파이썬에서 어떻게 불러와야 할까요?
우선 명령프롬프트 창을 열고 모듈을 만든 폴더로 이동을 해서 대화형 인터프리터를 실행해 보겠습니다.

저희는 아나콘다를 통해 비주얼스튜디오코드를 사용하기 때문에 아나콘다 프롬프트를 사용해 보겠습니다.
아나콘다를 통한 비주얼스튜디오코드 에 관한 지난 포스팅이 있으니 참고 해보시기 바라며 다음으로 넘어가겠습니다.

아래 처럼 아나콘다 프롬프트를 실행하고 가상환경을 불러와 줍니다.

conda activate py_study_31010

그리고 모듈을 생성한 폴더로 이동합니다.

d:
cd D:\Dropbox.My_Job.Study.Python
d:
cd D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\
.study_python_3.11.0.TEST\

이동한 폴더에 내용을 확인을 해보고 module1.py 가 있나 확인 해 봅니다.

dir

이제 파일이 있는것을 확인했으니 이제 여기서 파이썬 대화형 인터프리터를 실행해 줍니다.

python
BAT
(base) C:\Users\donnr>conda activate py_study_31010

(py_study_31010) C:\Users\donnr>d:

(py_study_31010) D:\>cd D:\Dropbox.My_Job.Study.Python
(base) C:\Users\donnr>conda activate py_study_31010

(py_study_31010) C:\Users\donnr>d:

(py_study_31010) D:\>cd D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\

(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>dir
 D 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: 32C2-7736

 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST 디렉터리

2023-04-26  오후 09:45    <DIR>          .
2023-04-26  오후 09:18    <DIR>          ..
2023-04-18  오후 09:45                30 ex_test.txt
2023-04-26  오후 09:45                87 module1.py
2023-04-25  오전 08:20             4,441 test.py
2023-04-18  오후 10:09                30 test.txt
2023-04-18  오후 07:42               102 test_02.py
2023-04-18  오후 10:01                49 write_text.txt
2023-04-17  오후 03:25                 0 신규파일.txt
               7개 파일               4,739 바이트
               2개 디렉터리  326,446,088,192 바이트 남음

(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python
Python 3.10.10 | packaged by Anaconda, Inc. | (main, Mar 21 2023, 18:39:17) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
.study_python_3.11.0.TEST\
(py_study_31010) D:\Dropbox.My_Job.Study.Python
(base) C:\Users\donnr>conda activate py_study_31010

(py_study_31010) C:\Users\donnr>d:

(py_study_31010) D:\>cd D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\

(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>dir
 D 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: 32C2-7736

 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST 디렉터리

2023-04-26  오후 09:45    <DIR>          .
2023-04-26  오후 09:18    <DIR>          ..
2023-04-18  오후 09:45                30 ex_test.txt
2023-04-26  오후 09:45                87 module1.py
2023-04-25  오전 08:20             4,441 test.py
2023-04-18  오후 10:09                30 test.txt
2023-04-18  오후 07:42               102 test_02.py
2023-04-18  오후 10:01                49 write_text.txt
2023-04-17  오후 03:25                 0 신규파일.txt
               7개 파일               4,739 바이트
               2개 디렉터리  326,446,088,192 바이트 남음

(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python
Python 3.10.10 | packaged by Anaconda, Inc. | (main, Mar 21 2023, 18:39:17) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
.study_python_3.11.0.TEST
>dir
D 드라이브의 볼륨에는 이름이 없습니다. 볼륨 일련 번호: 32C2-7736 D:\Dropbox.My_Job.Study.Python
(base) C:\Users\donnr>conda activate py_study_31010

(py_study_31010) C:\Users\donnr>d:

(py_study_31010) D:\>cd D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\

(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>dir
 D 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: 32C2-7736

 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST 디렉터리

2023-04-26  오후 09:45    <DIR>          .
2023-04-26  오후 09:18    <DIR>          ..
2023-04-18  오후 09:45                30 ex_test.txt
2023-04-26  오후 09:45                87 module1.py
2023-04-25  오전 08:20             4,441 test.py
2023-04-18  오후 10:09                30 test.txt
2023-04-18  오후 07:42               102 test_02.py
2023-04-18  오후 10:01                49 write_text.txt
2023-04-17  오후 03:25                 0 신규파일.txt
               7개 파일               4,739 바이트
               2개 디렉터리  326,446,088,192 바이트 남음

(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python
Python 3.10.10 | packaged by Anaconda, Inc. | (main, Mar 21 2023, 18:39:17) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
.study_python_3.11.0.TEST 디렉터리
2023-04-26 오후 09:45 <DIR> . 2023-04-26 오후 09:18 <DIR> .. 2023-04-18 오후 09:45 30 ex_test.txt 2023-04-26 오후 09:45 87 module1.py 2023-04-25 오전 08:20 4,441 test.py 2023-04-18 오후 10:09 30 test.txt 2023-04-18 오후 07:42 102 test_02.py 2023-04-18 오후 10:01 49 write_text.txt 2023-04-17 오후 03:25 0 신규파일.txt 7개 파일 4,739 바이트 2개 디렉터리 326,446,088,192 바이트 남음 (py_study_31010) D:\Dropbox.My_Job.Study.Python
(base) C:\Users\donnr>conda activate py_study_31010

(py_study_31010) C:\Users\donnr>d:

(py_study_31010) D:\>cd D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\

(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>dir
 D 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: 32C2-7736

 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST 디렉터리

2023-04-26  오후 09:45    <DIR>          .
2023-04-26  오후 09:18    <DIR>          ..
2023-04-18  오후 09:45                30 ex_test.txt
2023-04-26  오후 09:45                87 module1.py
2023-04-25  오전 08:20             4,441 test.py
2023-04-18  오후 10:09                30 test.txt
2023-04-18  오후 07:42               102 test_02.py
2023-04-18  오후 10:01                49 write_text.txt
2023-04-17  오후 03:25                 0 신규파일.txt
               7개 파일               4,739 바이트
               2개 디렉터리  326,446,088,192 바이트 남음

(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python
Python 3.10.10 | packaged by Anaconda, Inc. | (main, Mar 21 2023, 18:39:17) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
.study_python_3.11.0.TEST
>python
Python 3.10.10 | packaged by Anaconda, Inc. | (main, Mar 21 2023, 18:39:17) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>>

이처럼 파이썬의 대화형 인터프리터에서는 파이썬 파일을 저장한 폴더로 이동을 해야 모듈을 읽어올 수 있습니다.

Python
>>> import module1
>>> print(module1.add(3, 4))
7
>>> print(module1.subtrack(4, 2))
2
>>>

위 코드처럼 module1.py 로 생성한 모듈을 불러오기 위해 import module1 이라고 했습니다.
실수로라도 .py 를 붙이면 안됨을 명심해 주세요
import 는 만들어져 있는 파이썬 모듈을 사용할 수 있게 해주는 명령입니다.
module1.py 파일에 있는 add 함수와 subtrack 함수를 사용하기 위해 위 코드 처럼 module1.add, module1.subtrack 같이 모듈 이름 뒤에 “.”(도트 연산자) 를 붙이고 함수 이름을 쓰시면 됩니다.

import 는 현재 디렉토리에 있는 파일이나 파이썬 라이브러리가 저장된 디렉토리에 있는 모듈만 불러올 수 있습니다.
파이썬 라이브러리는 파이썬을 설치 할 때 자동으로 설치되는 파이썬의 모듈들을 얘기합니다.

import 사용법

import 의 사용법은 간단합니다.

Python
import 모듈 이름

앞에서 보았듯이 여기에서 모듈 이름은 파일이름 module1.py 에서 .py 확장자를 제거한 module1 만을 말합니다.

모듈 이름 없이 함수 이름 사용

매번 모든 경우에 module1.add, module1.subtrack 처럼 쓰는 것은 아닙니다.
그냥 add, subtrack 처럼 모듈 없이 함수 이름만 쓰고 싶은 경우도 있습니다.
이럴 때 아래 처럼 사용하시면 됩니다.

Python
from 모듈 이름 import 모듈 함수

아래의 코드를 보면 이해가 되실 겁니다.

Python
>>> from module1 import add
>>> add(3, 4)
7
>>>

그러면 add 와 subtrack 함수를 둘 다 사용하려면 어떻게 할까요?

Python
from module1 import add, subtrack
from module1 import *

위 예처럼 두가지 방법이 있습니다.
첫번째 처럼 콤마로 모듈 함수를 불러오는것이 있고
두번째 처럼 “*” 문자를 사용할 수도 있습니다.

* 문자는 모든 것을 의미합니다.
파이썬에서도 마찬가지로 사용됩니다.

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

48. 파이썬 - 모듈의 정의 그리고 모듈 만들기와 모듈 불러오기

47. 파이썬 – 클래스 변수

47. 파이썬 – 클래스 변수

지난 포스팅에서는 메서드 오버라이딩 개념에 대해 이해하고 예제를 통해 알아보았습니다.
이번 포스팅에서는 파이썬 클래스 중 클래스 변수에 대해 공부해 보려 합니다.

파이썬 클래스

클래스 변수

이전까지 공부한 내용에서 객체 변수는 다른 객체들의 영향을 받지 않고 각각 독립적으로 각자의 값을 유지를 하고 있다는 것을 알게 되었습니다.
이제 객체 변수와는 그 성격이 다른 클래스 변수에 대해 공부해 보겠습니다.

클래스 변수 만들기

Python
>>> class MyFamily:
...     lastname = "이"
...

MyFamily 라는 클래스를 선언을 했고 그 안에 lastname 이라는 변수가 바로 클래스 변수 입니다.
클래스 변수는 클래스 안에서 함수를 선언하는 것 처럼 클래스 안에 변수를 선언하고 생성을 하게 됩니다.

Python
>>> print(MyFamily.lastname)

>>>

위 코드처럼 클래스 변수를 print 문을 통해 출력을 해보았습니다.
위 예제에 있는 것 처럼 클래스 변수는 클래스이름.클래스 변수 로 사용하시면 됩니다.

Python
>>> a = MyFamily()
>>> b = MyFamily()
>>> print(a.lastname)

>>> print(b.lastname)

>>>

클래스 변수의 내용 변경하기

또한 위 코드처럼 MyFamily 클래스로 만든 객체를 통해서도 클래스 변수를 사용할 수 있습니다.
그럼 만약에 MyFamily 클래스의 lastname 이라는 클래스 변수의 내용을 다른 문자열로 바꾸면 어떻게 될까요?
아래는 클래스 변수의 내용을 “박” 이라는 문자열로 바꿔본 내용입니다.

Python
>>> MyFamily.lastname = "박"
>>> print(a.lastname)

>>> print(b.lastname)

>>>

클래수 변수의 내용을 변경 했습니다.
결과는 클래스로 만든 객체의 lastname 값도 모두 변경되었음을 확인 할 수 있습니다.
이처럼 클래스 변수는 클래스로 만든 모든 객체에 공유된다는 특성을 가지고 있습니다.

클래스 변수와 같은 이름의 객체 변수를 생성한다면 어떻게 될까?

만약 클래스 변수와 같은 이름의 객체 변수를 생성하면 어떻게 될까요?
아래 코드처럼 이전 사용했던 a.lastname 을 변경해 보겠습니다.

Python
>>> a.lastname = "오"
print(a.lastname)

>>>

얼핏 보면 MyFamily 클래스의 lastname 클래스 변수가 바뀐것 같아 보이지만
a 객체에 lastname 이라는 객체 변수가 새롭게 생성된 것입니다.
이말은 객체 변수는 클래스 변수와 같은 이름으로 생성을 해도 된다는 것입니다.
a.lastname 이라는 객체 변수를 생성을 해도 MyFamily 클래스의 lastname 과는 상관이 없습니다.
아래 코드를 보시면 확인이 되실겁니다.

Python
>>> print(MyFamily.lastname)

>>> print(b.lastname)

>>>

이처럼 MyFamily 클래스의 lastname 값은 변하지 않았습니다.

클래스 변수와 객체 변수

클래스 변수보다는 객체 변수가 훨씬 더 중요합니다.
실제 프로그래밍을 할 때도 클래스 변수 보다는 객체 변수를 주로 사용을 하고 있습니다.

이렇게 이번 포스팅에서는 클래스 변수에 대해 공부해 보았습니다.
여기까지 클래스에 대한 공부를 마무리 하고 다음 포스팅에서는 모듈에 대해 공부를 해보도록 하겠습니다.

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

46. 파이썬 – 메서드 오버라이딩

46. 파이썬 – 메서드 오버라이딩

지난 포스팅에 파이썬 클래스의 상속하는 이유와 방법에 대해 공부 해봤습니다.
이번 포스팅에서는 메서드 오버라이딩 개념에 대해 공부해 보도록 하겠습니다.

파이썬 클래스

메서드 오버라이딩

먼저 이전에 만들었던 사칙연산 클래스인 Four_Calculator 클래스를 예를 들어 실행해 보겠습니다.

Python
>>> a = Four_Calculator(4, 0)
>>> a.divide()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 18, in divide
ZeroDivisionError: division by zero

Four_Calculator 클래스의 a 객체에 숫자 4 와 0 을 입력하고 divide(나누기) 메서드를 호출하게 되면 숫자 4 를 0 으로 나누려는 시도 때문에 이처럼 ZeroDivisionError 오류가 발생하게 됩니다.
그럼 여기서 0 으로 나눌 때 오류가 아니라 0 을 리턴하도록 만들려면 어떻게 해야 할까요?

아래처럼 Four_Calculator 클래스를 상속하는 Safe_Four_Calculator 클래스를 만들어 보도록 하겠습니다.

Python
>>> class Safe_Four_Calculator(Four_Calculator):
...     def divide(self):
...         if self.second == 0: # 나누는 숫자가 0 인 경우 0 을 리턴하도록 수정
...             return 0
...         else:
...             return self.first / self.second
...
>>>

Safe_Four_Calculator 클래스는 Four_Calculator 클래스에 있는 divide 메서드와 동일한 이름으로 다시 만들었습니다.
이런 식으로 부모 클래스(상속한 클래스) 에 있는 메서드를 같은 이름으로 다시 생성하는 것을 메서드 오버라이딩(Overriding, 덮어쓰기) 라고 합니다.
이런 식으로 메서드를 오버라이딩 하게 되면 부모클래스의 메서드 대신해서 오버라이딩한 메서드가 호출되게 됩니다.
이전 포스팅에서 진행했던 상속과는 차이가 있습니다.

Safe_Four_Calculator 클래스에 메서드 오버라이딩 한 divide 메서드는 나눌려고 하는 값이 숫자 0 인 경우에는 0 을 리턴하도록 수정되어 있습니다.
이제 다시 Four_Calculator 클래스 대신 Safe_Four_Calculator 클래스를 사용하여 아까 ZeroDivisionError 가 났던 예제를 수행해 보겠습니다.

Python
>>> a = Safe_Four_Calculator(4, 0)
>>> a.divide()
0

앞서 진행했던 Four_Calculator 클래스와는 다르게 ZeroDivisionError 가 발생하지 않고 우리가 의도한 대로 0 으로 나누려고 하면 0 이 리턴 되는 것을 확인 할 수 있습니다.

여기까지 파이썬 클래스의 메서드 오버라이딩 에 대해 공부해 봤습니다.
메서드 오버라이딩과 클래스의 상속은 비슷하기는 하지만
클래스의 상속같은 경우는 기존 클래스의 기능을 유지한 채 기능을 확장 하는 역할을 했다면
메서드 오버라이딩의 경우 동일한 이름의 메서드를 만들어서 기능을 덮어 씌우는 역할을 한다고 보시면 될 거 같습니다.
메서드 오버라이딩을 하게 되면 부모 클래스의 메서드 대신 오버라이딩한 메서드가 호출 된다는 것도 필히 염두해 두어야 겠습니다.

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

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)

워드프레스에서 포토샵.플러그인 없이 포토스케이프(3.7)로 워터마크 만들기

워드프레스에서 포토샵.플러그인 없이 포토스케이프(3.7)로 워터마크 만들기

이번 포스팅에서는 워드프레스나 블로그를 운영하시는 분들이
나만의 콘텐츠정보를 확인시켜주기 위한 용도로 사용하고 있는 워터마크 만들기에 대해 알아보려 합니다.

워터마크 만들기

포토샵 워터마크 만들기를 안하는 이유

보통은 포토샵 워터마크를 많이들 사용하시리라 봅니다.
그런데 포토샵으로 워터마크를 만들기를 하려다 보면 포토샵 라이센스 문제도 있고
프로그램이 무겁기도 하고 초보자들의 경우에는 설치해서 사용하는데도
시간이 다소 걸릴것 같습니다.
몇번 사용을 해봐도 자주 사용 하는게 아니라면 잘 모르겠는게 당연한 거니깐요
그런 이유로 저도 포토샵은 자주 사용을 안하게 되네요 ㅎ

워드프레스에서의 워터마크 플러그인

저 같은 경우에는 지금 워드프레스를 키우고 있습니다.
워드프레스의 경우 많은 플러그인들이 존재하고
워드프레스를 사용하기에 편하게 많은 편리함을 제공해 주고 있습니다.
그래서 워터마크의 경우에도 다수의 플러그인 들이 존재합니다.
하지만 저와 같은 경우는 플러그인을 사용하려다 보니 이래저래 뭔가 자꾸 어긋나기도 하고
아직 잘 모르기도 하고 그래서 몇 번 플러그인을 설치하고 해보다 다 지워버렸습니다.
머 플러그인이 너무 많으면 워드프레스가 무거워지는 것도 경험해봤기 때문인 것도 있지요

포토스케이프로 워터마크 만들기

포토스케이프 다운로드 및 설치

그래서 제가 선택한 건 꾸준히 잘 사용하고 있는 포토스케이프로 워터마크를 만들어 보려 합니다.
아래는 포토스케이프 공식 홈페이지입니다.

https://zrr.kr/ktaz

일단 포토스케이프를 다운받고 설치해 보세요
설치과정은 워낙 정보가 많기도 하고 간단하기도 하니 따로 설명은 패쓰 하겠습니다.

포토스케이프 투명 배경 만들기

포토스케이프X 에서는 투명배경 만드는 메뉴가 있는데 일반 설치형 포토스케이프에는 투명배경 기능이 없는듯 합니다.
검색을 해보다 보니 포토스케이프에서 투명배경 을 만드는 꼼수가 있더라구요
아래와 같이 해보시기 바랍니다.

아래 보시는 것처럼 사진편집에 들어가셔서 왼쪽 폴더 목록이 나오는데 포토스케이프가 설치된 폴더(저의 경우는 C:\Program Files (X86)\PhotoScape) 에서 ballon 이라는 폴더가 있습니다.
ballon 폴더는 말풍선 이미지들이 저장되어있는데 기본적으로 포토스케이프에서 사용하는 말풍선 이미지는 배경이 투명으로 되어 있습니다.
그래서 이 말풍선 이미지를 활용을 해보겠습니다.
어렵지 않으니 쉽게 따라 오실수 있습니다.

말풍선을 아무거나 선택을 한뒤 포토스케이프 하단에 있는 자르기 메뉴로 가셔서 말풍선 외곽 빈공간을 임의로 선택을 하고 자르기를 해줍니다.

이번 포스팅에서는 워드프레스나 블로그를 운영하시는 분들이 나만의 콘텐츠정보를 확인시켜주기 위한 용도로 사용하고 있는 워터마크 만들기에 대해 알아보려 합니다.

메뉴버튼을 눌러 다른 이름으로 저장을 선택하신후 확장자를 .PNG로.
폴더는 다른 폴더를 선택해서 저장해 주시면 됩니다.

워드프레스에서 포토샵.플러그인 없이 포토스케이프로 워터마크 만들기

그런 다음 확인을 위해 탐색기에서 저장한 워터마크용 투명 배경이미지를 클릭을 해서 보면
아래는 꿀뷰에서 본 화면인데 모자이크 처럼 블록무늬형태가 되어 있다면 정상적으로 투명배경이 설정이 된 것입니다.

배경 투명이미지 확인

이제 저장된 배경이미지를 적절한 사이즈로 변경을 해줍니다.
저의 경우는 400 X 100 으로 지정을 해줬습니다.
크기조절 칸에서 아래 가로:세로 비율 유지 옵션을 체크 해제해 주셔야
원하는 비율로 설정을 하실 수가 있을 겁니다.

워드프레스에서 포토샵.플러그인 없이 포토스케이프로 워터마크 만들기

배경크기 변경을 완료했다면 이제 실제 우리가 워터마크로 적용할 문구를 넣어 줍니다.
저는 단순 텍스트로만 했지만 포토스케이프의 기능을 이용해서 더 다양한 디자인을 적용해 줄 수 도 있습니다.
처음 보는 폰트이지만 디자인이 괜찮아 보여 적용해 봤습니다.
크기는 일단 텍스트를 입력한 후 확인 버튼을 눌러서 나오는 사이즈를 마우스를 이용해 직접 줄였다 크게 늘였다 하실 수도 있습니다.

워드프레스에서 포토샵.플러그인 없이 포토스케이프로 워터마크 만들기

저장을 하실 때 아래 처럼 텍스트가 배경보다 크게 적용을 해서 저장을 하게 되면 배경이 투명하던게 다시 흰색 배경으로 바뀔 수가 있으니 배경사이즈와 워터마크 텍스트 사이즈를 적당하게 조절하셔야 됩니다.

워드프레스에서 포토샵.플러그인 없이 포토스케이프로 워터마크 만들기

꿀뷰 를 이용해 다시 저장된 워터마크를 확인해 봅니다.
배경이 모자이크로 나온 것을 보니 배경이 투명으로 잘 적용된 것 같습니다.

워드프레스에서 포토샵.플러그인 없이 포토스케이프로 워터마크 만들기

워터마크 여러개 파일에 일괄 적용하기

이제 적용된 워터마크를 다른 이미지에 적용해 보겠습니다.
하나의 이미지만 있다면 큰 문제가 없겠지만
지금 이 포스팅처럼 이미지 파일이 여러개 있다면 일일이 워터마크를 적용하는 것도 일입니다.
이 과정도 포토스케이프에서 일괄적으로 처리가 가능합니다.

워터마크 적용할 파일들 전부 가져오기

아래 사진처럼 포토스케이프에서 일괄편집 기능으로 가서 워터마크를 적용할 파일들을 탐색기에서 모두 선택해 마우스로 끌고 와서 아래처럼 목록에 넣어 줍니다.
가지고 온 이미지들이 목록에 다 들어갔다면 목록들을 Ctrl + A 를 눌러 전체를 선택해 줍니다.

워터마크 이미지 추가하기

오른쪽 기본, 필터, 개체 라는 메뉴가 있는데 개체 버튼을 눌러
사진 1 을 선택하고 오른쪽 … 버튼을 눌러 워터마크로 저장한 이미지를 선택해 줍니다
그럼 아래 이미지 처럼 워터마크가 적용 된 미리보기를 보실 수가 있습니다.
사진 추가 메뉴 밑에 있는 모든 사진 저장(변환) 버튼을 클릭 해 줍니다.

워드프레스에서 포토샵.플러그인 없이 포토스케이프로 워터마크 만들기

모든 사진 저장(변환) 하기

모든 사진 저장(변환) 버튼을 클릭하셨으면 아래와 같은 화면이 나옵니다.
설정은 기본 아래와 같이 적용한 상태에서 바로 저장을 눌러줍니다.

워드프레스에서 포토샵.플러그인 없이 포토스케이프로 워터마크 만들기

아래처럼 변환 완료 되었습니다. 라고 나왔다면 모든게 정상적으로 끝난 것 입니다.

워드프레스에서 포토샵.플러그인 없이 포토스케이프로 워터마크 만들기

이제 제가 이 포스팅에서 적용한 것처럼 워터마크가 된 이미지를 불러와서 사용할 수가 있을 겁니다.

VMware 공유폴더 설정(VMware tools) v16.1

VMware 공유폴더 설정(VMware tools) v16.1

일반적인 사용자들은 많이 사용하지는 않겠지만
특수한 목적을 가지고 컴퓨터를 활용을 하다보면 가상 머신을 설치하고 활용하는 경우가 있습니다.
특수한 목적은 프로그램 테스트나 게임도 포함 될 수 있겠네요

VMware 가상머신

그 가상 머신 중에서 저는 VMware 라는 가상 머신을 설치해서 VMware Tools 를 설치하고
기존 윈도우와 VMware 공유폴더 설정을 통해 파일을 공유하고 클립보드(복사, 붙여넣기)를 공유하는 방법에 대해 알아 보겠습니다.

아직은 몇 개 포스팅 밖에 없지만 윈도우 관련 포스팅들도 눈여겨 봐주세요~ ㅎ

일단 저의 경우 VMware 버전 16.1 버전을 사용중이고
이미 설치되어 있는 환경임을 알아주세요

VMware Tools 설치

먼저 가상 머신 VMware 공유폴더 설정 전에 VMware Tools 가 설치가 안되어 있다면 VMware Tools 를 먼저 설치해 주시기 바랍니다
아래는 VMware 공식 홈페이지입니다.

https://zrr.kr/eZG2


VMware Tools 는 아래 이미지 처럼 메뉴에서 VM 메뉴 하단쪽에 위치해 있습니다.
저의 경우는 이미 설치가 되어 있어서 저렇게 나오지만 처음 설치하신 분이라면 Install 로 나오실 겁니다.

VMware 공유폴더 설정(VMware tools) (15)

이제 가상 머신인 VMware 에서 탐색기를 열어 내 컴퓨터를 보시면 운영체제가 설치된 (저의 경우는 윈도우 10) C 드라이블 말고 D 드라이브에 VMware Tools 라고 보이는데 클릭해서 들어가 줍니다.

VMware 공유폴더 설정(VMware tools) (15)

D 드라이브에 들어가셨으면 안에 setup64 라는 파일이 보이실 겁니다. 당연히 exe 실행 파일 입니다

VMware 공유폴더 설정(VMware tools) (15)

실행을 하시면 VMware Tools 설치 마법사가 시작되고 다음을 눌러 설치를 시작해 줍니다.

VMware 공유폴더 설정(VMware tools) (15)

다음에 나오는 설치 유형에서 저는 전체 설치를 했지만 표준 설치를 하셔도 상관은 없을 듯 합니다.

VMware 공유폴더 설정(VMware tools) (15)

설치가 완료되었으면 가상 머신 VMware 의 내 컴퓨터 에서 네트워크를 클릭을 해 봅니다.
그러면 아래와 같은 문구가 노란색으로 표시가 되어 있을 겁니다.

네트워크 검색 및 파일 공유가 꺼져 있어 네트워크 컴퓨터와 장치가 표시되지 않습니다. 변경하려면 클릭하십시오.

VMware 공유폴더 설정(VMware tools) (15)

노란색 경고창 부분을 클릭해 주시면 네트워크 검색 및 파일 공유를 사용할 거냐고 물어보는데
개인 컴퓨터라면 아래 공용 네트워크 부분을 선택하셔도 되고 아니면 위에 개인 네트워크로 설정을 하시면 됩니다.

일단 여기까지 VMware Tools 와 네트워크 공유 설정을 마쳤습니다.

로컬 컴퓨터 공유폴더 만들기

가상 머신이 아닌 내 컴퓨터(로컬 컴퓨터)에서 공유할 폴더를 하나 만들어 놓습니다.
저는 D:\다운로드\VM_Win10x64 라는 폴더를 하나 만들었습니다.

VMeare 공유폴더 설정

이제 VMware 에서 공유폴더를 설정을 해보겠습니다
아래 이미지처럼 메뉴에서 VM 메뉴를 선택해 Setting 메뉴를 열어 줍니다.

VMware-공유폴더-설정VMware-tools

Setting 메뉴에서 위쪽에 Hardware 와 Options 메뉴가 보이는데 Options 메뉴를 클릭해 줍니다
그리고 나오는 설정 메뉴에서 Folder sharing 메뉴가 보이는 데
아래처럼 Always enabled 옵션을 선택해주고
그 아래에 있는 Map as a network drive in Window guests 옵션도 체크를 해서 활성화 해줍니다.
저는 체크를 안 한 상태에서 스크린 샷을 찍어 저렇게 나온 거고 꼭 체크를 해 주시기 바랍니다.

VMware-공유폴더-설정VMware-tools

다음으로 Map as a network drive in Window guests 옵션 밑에 보시면 Add 메뉴가 있을 겁니다
이 Add 버튼을 눌러 우리가 위에서 로컬 컴퓨터에서 공유 폴더로 사용하려 만든 폴더를 선택해야 합니다.
Add 버튼을 클릭해 줍니다
그런 다음 Browse 버튼을 눌러 공유 폴더로 사용하려 만든 폴더를 선택해 줍니다.

VMware-공유폴더-설정VMware-tools

폴더를 선택 했으면 Next 를 눌러 넘어가시고 다음에 나오는 옵션 Enable this share 에 체크가되어 있는 걸 확인하시고 Finish 를 눌러 마무리 해줍니다

VMware-공유폴더-설정VMware-tools

그럼 아래처럼 아까 눌러서 진행했던 Add 버튼 위로 지금 공유폴더로 설정한 폴더가 Folders 에 나오는 걸 확인 할 수 있습니다.
이제 VWware 공유폴더 설정 까지 마무리가 되었습니다.

VMware 공유폴더 설정(VMware tools)

공유폴더 파일 복사 붙여넣기 확인

이제 마지막으로 공유폴더에 파일 등을 복사해서 붙여 넣고 공유가 잘 되는지 확인해 보겠습니다.
먼저 로컬에 있는 폴더에서 파일 한 개를 복사해서 붙여 넣어 봤습니다.

VMware 공유폴더 설정(VMware tools)

그 다음 가상머신 VMware 에 있는 공유폴더를 열어 상태를 확인해 봅니다

VMware 공유폴더 설정(VMware tools)

파일이 잘 붙여넣기 되어 있음을 확인 할 수 있습니다. ㅎ

이상으로 VMware Tools를 설치하고 VMware 공유폴더 설정을 통해 내 로컬 컴퓨터와 가상 머신인 VMware 공유폴더와 파일 복사 붙여넣기 를 하는 과정을 살펴보았습니다

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. 파이썬 클래스 구조와 매개변수