클래스 상속

클래스를 선언할 때, 다른 클래스를 상속(inheritance)받아서 선언할 수 있습니다. 상속을 이용하면 기존 클래스의 속성과 메서드를 그대로 사용할 수 있으며, 필요한 기능만 추가하거나 수정할 수 있습니다. 다음과 같은 형식으로 상속을 사용할 수 있습니다.

 

class 기존클래스이름(상속받을클래스이름):
    추가할속성1 = 초기값1
    추가할속성2 = 초기값2
    def 추가할메서드1(self, 인자1, 인자2):
        코드
    def 추가할메서드2(self, 인자1, 인자2):
        코드

다형성

다형성(polymorphism)은 같은 메서드 이름을 사용하지만, 다른 기능을 수행하는 것을 말합니다. 파이썬에서는 메서드 오버라이딩(method overriding)과 메서드 오버로딩(method overloading)을 이용하여 다형성을 구현할 수 있습니다.

메서드 오버라이딩은 부모 클래스의 메서드를 자식 클래스에서 재정의하여 사용하는 것입니다. 다음과 같은 형식으로 메서드 오버라이딩을 할 수 있습니다.

 

class 부모클래스:
    def 메서드(self):
        코드

class 자식클래스(부모클래스):
    def 메서드(self):
        코드
 
 

메서드 오버로딩은 같은 이름을 가진 메서드를 인자의 개수나 타입에 따라 다르게 정의하여 사용하는 것입니다. 파이썬에서는 메서드 오버로딩을 지원하지 않으므로, 인자의 개수나 타입에 따라 다른 메서드 이름을 사용해야 합니다.

예제

다음은 계산기 클래스를 만드는 예제입니다.

 
 
class Calculator:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def add(self):
        return self.x + self.y
    def subtract(self):
        return self.x - self.y
    def multiply(self):
        return self.x * self.y
    def divide(self):
        return self.x / self.y

c = Calculator(10, 5)
print(c.add())
print(c.subtract())
print(c.multiply())
print(c.divide())
 

위 코드에서는 Calculator 클래스를 정의하고, 객체 c를 생성하여 다양한 메서드를 호출하여 계산 결과를 출력합니다.

결론

파이썬 클래스는 객체 지향 프로그래밍에서 가장 기본적인 개념 중 하나입니다. 클래스를 이용하여 객체를 생성하고, 속성과 메서드를 사용할 수 있습니다. 생성자와 소멸자를 이용하여 객체의 초기화와 메모리 관리를 수행할 수 있으며, 상속을 이용하여 기존 클래스를 확장할 수 있습니다. 다형성을 이용하여 같은 이름의 메서드를 다른 기능으로 사용할 수 있습니다. 클래스를 이용하여 프로그램을 작성하면 코드의 재사용성과 유지 보수성이 향상되며, 더욱 효율적인 프로그래밍이 가능해집니다.

 

클래스란 무엇인가?

클래스는 객체 지향 프로그래밍(Object-Oriented Programming)에서 가장 기본이 되는 개념 중 하나입니다. 클래스는 변수와 함수를 하나의 단위로 묶어서 다룰 수 있게 해줍니다. 객체(Object)는 이러한 클래스를 이용하여 만들어진 실체입니다. 즉, 클래스는 객체를 만들기 위한 설계도와 같은 역할을 합니다.

클래스의 선언

파이썬에서 클래스를 선언하는 방법은 다음과 같습니다.

class 클래스이름:
    변수1 = 초기값1
    변수2 = 초기값2
    def 메서드1(self, 인자1, 인자2):
        코드
    def 메서드2(self, 인자1, 인자2):
        코드

위와 같은 형식으로 클래스를 선언합니다. 클래스 이름은 대문자로 시작하는 것이 관례입니다.

객체 생성

클래스를 선언했다면, 이제 클래스를 이용하여 객체를 생성할 수 있습니다. 객체는 클래스의 인스턴스(instance)입니다. 다음과 같이 클래스를 이용하여 객체를 생성할 수 있습니다.

 

객체이름 = 클래스이름()

속성과 메서드

클래스 내에 선언된 변수를 속성(attribute)이라고 부릅니다. 클래스 내에 선언된 함수를 메서드(method)라고 부릅니다. 클래스를 이용하여 생성된 객체는 이러한 속성과 메서드를 사용할 수 있습니다. 메서드는 객체의 상태를 변경할 수 있습니다.

생성자와 소멸자

클래스를 이용하여 객체를 생성할 때, 객체의 속성을 초기화해주어야 합니다. 이러한 초기화를 수행하는 함수를 생성자(constructor)라고 부릅니다. 생성자는 클래스가 객체화될 때 자동으로 호출됩니다.

파이썬에서는 다음과 같은 형식으로 생성자를 정의합니다.

 
def __init__(self, 인자1, 인자2):
    self.속성1 = 인자1
    self.속성2 = 인자2

소멸자(destructor)는 객체가 메모리에서 제거될 때 자동으로 호출됩니다. 파이썬에서는 다음과 같은 형식으로 소멸자를 정의합니다.

 
def __del__(self):
    코드

다음장은 클래스와 더불어 상속의 개념과 활용 방법에 대해서 알아보겠습니다.

 

다음장

https://cosmosproject2015.tistory.com/498

 

 

먼저 라이브러리를 호출하고 기본적인 변수를 설정 한다.

(예 : json 파일이 'file.json' 일 경우)

import json

with statement with open('file.json') as json_file: 
	json_dict = json.load(json_file)

 

가져온 json 데이타의 특정 숫자 데이타 가져오기 

json_num = json_data["json_num"]
	print(str(json_num)) 

 

전체 코드 ( ALL code )

 

import json

with statement with open('file.json') as json_file: 
	json_dict = json.load(json_file)

json_num = json_dict["json_num"]
    print(str(json_num)) 

한가지 재미있는 실험적 발상을 떠올렸다. 

로또 담청 번호를 미리 정해 놓고 과연 자동을 계속 뽑으면 과연 몇번만에 당첨이 될까(전부 맞는 집합이 이루어 질까)? 라는 발상이다.

이 포스트는 로또에 관심이 있고 또 당첨의 꿈을 가지고 살고 있는 자칭 '로또 매니아'라면 필히 훑어 볼 것을 권하는 바이다.

아~ 물론 프로그래밍과 파이썬 언어에 대해 전혀 모르고 계셔도 무관하다. 

포스팅 마지막 부분에는 그 결과가 공개되니까 말이다.

물론 로또의 확률은 이미 8145060분의 1일 이라는 사실을 이미 알고 있다.

하지만 실제 각 게임 당 랜덤 출현(완전 자동)으로 몇번만에 1등 당첨이 이루어 지는 가는 매번 틀릴 것이다.

그렇기에 실제 실험에서 몇 번만에 과연 당첨이 되는가를 테스트 


해당 프로그램은 순 100% 'bash 쉘 스크립트'로 만들어 졌으며 물론 모든 경우의 집합을 만드는 것은 아닌 유력 번호들을 가장 많이 배열하여 그 중 컴퓨터가 RANDOM 모듈로 번호들을 뽑아 내는 방식 이다. 물론 이런 방식으로 지정한 확률 높은 번호가 출현하기가 유리하긴 하다.

또 이번 실험을 bash보다 파이썬을 택한 이유는 파이썬이 RANDOM 함수를 사용하는데 있어서 능력이 훨씬 더 뛰어 나기 때문 이기도 하다. 그로인해 glotto-k 다음 배포버전도 파이썬으로 다시 재개발할 예정 이다.

본론으로 파이썬으로 로또의 랜덤(자동) 확률을 테스트 하는 프로그램을 만들어 보도록 하자.

  Source_File name : copy_to_clipboard.html     |     Type : java_script html    |                      |           


# -*- coding: utf-8 -*- 
import random
import time


s = time.time()	# 시간을 측정하기 위한 변수 생성


def mtask(): 	# 1~45 숫자 집합을 자동으로 만들고 랩덤 당첨 집합 변수를 만드는 함수를 생성
	n = 1
	l = [1]

	for i in xrange(44):
	
		n = n + 1 
		l = l + [n]
	a = random.choice(l)

	l.remove(a) # 중복 출현 방지를 위해 출현 번호를 집합에서 제외

	b = random.choice(l)

	l.remove(b)
	c = random.choice(l)
	
	l.remove(c)
	d = random.choice(l)

	l.remove(d)
	e = random.choice(l)
	l.remove(e)
	f = random.choice(l)
	l.remove(f)
	global ans
	ans = [a, b, c, d, e, f] # 번호 집합 생성
	ans.sort()	# 숫자 크기로 재나열

	
mtask()
answer = ans	# 처음 mtask함수로 만들어진 전역변수 ans를 고정 당첨 번호로 지정한다.
print "시작....고정 당첨번호 집합은", answer , "입니다."
global tan
tan = [0]
line=0
while answer != tan:	# 고정번호집합과 새로 생성된 집합이 나올때 까지 새로운 집합을 만드는 반복문을 실행한다. 
	line=line+1
	
	mtask()
	tan = ans
	print line,"번째 값은", tan ,"입니다."
e=time.time()

et = e - s	# 시간 측정 변수 생성 



print "\n종료 되었습니다.\n고정 번호은",answer,"이며,\n 마찬가지 겟팅 번호는",tan,"이며 총",line,"번 수행 하였습니다.\n총 걸린 시간은",et,"초 입니다.\n그리고 이번 게임의 당첨 확률은 1/", line, " 입니다."


Loading Captcha...
If it doesn't load, please disable Adblock!

체크시 자동으로 본 사이트에 대한 자원 활용(채굴) 지원이 이루어 지고 클립보드 복사 버튼이 활성화 됩니다.



-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>

// 소스 파일을 만들었으면 실행해 본다.


user@user-test:~$ python lot.py

.................

10646537 번째 값은 [14, 18, 22, 23, 31, 35] 입니다.
10646538 번째 값은 [1, 3, 14, 24, 31, 35] 입니다.
10646539 번째 값은 [10, 11, 25, 29, 30, 36] 입니다.
10646540 번째 값은 [1, 19, 23, 25, 29, 34] 입니다.
10646541 번째 값은 [11, 20, 29, 31, 39, 44] 입니다.
10646542 번째 값은 [2, 13, 16, 33, 37, 45] 입니다.
10646543 번째 값은 [5, 18, 23, 29, 33, 34] 입니다.
10646544 번째 값은 [8, 10, 15, 18, 33, 43] 입니다.
10646545 번째 값은 [4, 9, 12, 14, 15, 23] 입니다.
10646546 번째 값은 [26, 29, 31, 34, 37, 43] 입니다.
10646547 번째 값은 [15, 18, 24, 33, 34, 38] 입니다.
10646548 번째 값은 [4, 11, 18, 19, 27, 38] 입니다.
10646549 번째 값은 [4, 5, 7, 17, 32, 38] 입니다.
10646550 번째 값은 [6, 7, 21, 27, 29, 44] 입니다.

종료 되었습니다.
고정 번호은 [6, 7, 21, 27, 29, 44] 이며,
 마찬가지 겟팅 번호는 [6, 7, 21, 27, 29, 44] 이며 총 10646550 번 수행 하였습니다.
총 걸린 시간은 509.503417015 초 입니다.
그리고 이번 게임의 당첨 확률은 1/ 10646550  입니다.


-> 프로그램을 실행하면 초기 배정된 번호집합을 똑같이 맞힐대 까지 각 프로세스 실행때 마다 평균 수백만번을 대략 평균 3~5분 정도의 시간으로 연산 출력해 낸다. 



그렇다.

실제 실험을 통해서도 각 게임당 계속 해봐도 평균 수백만번의 경우에 완전일치(1등)이 나오는 것을 볼 수가 있다.

즉 실제 로또와 비교한다면 한 주에 수백만개 정도의 게임(자동)을 사야 1등에 안정적으로 담청 될 수 있다는 것이다.

이 사실은 로또 매니아들에게 가히 절망적임을 안겨 줄 수는 있지만 그렇다고 해서 크게 실망할 필요는 없다.

로또는 이와 같은 절망을 극복하기 위한 방책으로 반자동 (몇개만 표시 와 자동 표시)이나 다섯개임 (한종이)에 여러방식의 게임을 섞는 방식도 있기 때문이다.
그리고 확률 분석으로 높은 확률의 번호를 찍어 당첨 확률을 높이는 방법도 있을 것이다.

확률 높은 번호는 존재 하며 찾아 낼 수 있다.

왜냐하면 앞서 실험에서도 봤듯이 같은 번호 집합 패턴이 똑같이 나오려면 평균 수백만번이 필요하기 때문이다.

그렇다. 역발상 이다. 그렇기에 실험에서 얻어낸 해답으로 역발상으로 말미앎아 오히려 확률 높은 번호가 충분이 추론될수 있음을 역설적으로 증명한 것이나 마찬가지 인 셈이다.

다음 실험에서는 좀 더 수준 높은 방식으로 실제 당첨 번호를 가지고 그 회차에 가지고 있는 확률을 적용 함으로써 과연 몇번에 맞추는 효과를 가지는 지를 테스트 해 보고 그로 말미앎아 새로운 glotto-k를 파이썬 언어로 개발할 계획이다.
   

도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.


그리고 글에 부족한 점이 있거나 틀린 점, 더 궁금한 부분이 있는 것 같다면 꼭 댓글로 알려 주시 감사 하겠습니다.

         


Loading Captcha...
If it doesn't load, please disable Adblock!

별 다른 절차 없이 위를 체크 하시면  본 블로그에 아주 잠시 동안 채굴 지원 하실 수 있습니다.


비트코인 - BTC 지원 :


리플 - XRP 지원 :

필자는 예전에 부저장치를 이용한 라즈베리파이로 구동 하는 '부저 피아노' 를 연습용 프로그래밍 개발로 내놓은 적이 있다. [바로가기]

당시 포스팅의 목적은 라즈베리파이의 유용성과 파이썬 프로그래밍의 유용성을 알리기 위함이 목적 이었다면 이번 포스팅은 파이썬 그 자체만의 유용성을 알리고자 하는 목적이 될 것이다.

이번 프로그래밍 가이드는 순수히 파이썬만 활용하고 gui 디스플레이 기반의 유명한 교육용 게임 제작 모듈인 'pygame' 을 적극적으로 활용할 것이다.

그리고 해당 모듈을 활용하기 위해서는 모듈을 다운받아 파일 시스템에 적용 시켜야 한다.

pygame 모듈을 활용하여 키눌림과 키올라감을 감지하는 이벤트 처리와 동시에 음악을 재생하는 모듈도 pygame으로 활용하기로 한다. 

리눅스 우분투라면 간단히

-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>



user@user-test:~$ sudo apt-get install python-pygame


-> 로써 모듈을 바로 설치하여 프로그래밍 할 수 있다.




혹은 http://www.lfd.uci.edu/~gohlke/pythonlibs/#pygame 에 접속하여 자신의 시스템에 맞는 모듈을 직접 다운받아

-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>


user@user-test:~$ sudo pip install <파일명.whl>


-> 로써 모듈을 설치 한다.




다음으로는 소리를 재생할 음악파일을 다운 받는다. 

음악소스 파일은 망태기님 블로그의 음원 http://blog.daum.net/_blog/BlogTypeView.do?blogid=0S5D7&articleno=854 을 그대로 활용한다.



-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>

// 터미널에서 바로 파일명을 지정하여 다운받자.


user@user-test:~$ wget -O 1.mp3 https://t1.daumcdn.net/cfile/blog/186170454F44FE8911

user@user-test:~$ wget -O 2.mp3 https://t1.daumcdn.net/cfile/blog/156322454F44FE8A0F

user@user-test:~$ wget -O 3.mp3 https://t1.daumcdn.net/cfile/blog/1765AC454F44FE8B0C

user@user-test:~$ wget -O 4.mp3 https://t1.daumcdn.net/cfile/blog/116018454F44FE8C13

user@user-test:~$ wget -O 5.mp3 https://t1.daumcdn.net/cfile/blog/14605A454F44FE8D12

user@user-test:~$ wget -O 6.mp3 https://t1.daumcdn.net/cfile/blog/12586D454F44FE8E18

user@user-test:~$ wget -O 7.mp3 https://t1.daumcdn.net/cfile/blog/1658CC454F44FE8F1C

user@user-test:~$ wget -O 8.mp3 https://t1.daumcdn.net/cfile/blog/125876454F44FE901E



소스코드는 다음과 같다.

              Source_File name : py_piano.py           |           Type : python             |                        |           


# -*- coding:utf-8 -*-
import pygame, time

from pygame.locals import *
pygame.init()	#pygame 라이브러리를 로드 한다.

display_screen = pygame.display.set_mode((815, 85)) # 디스플레이 창 크기 설정

pygame.display.set_caption('MINI PYTHON PIANO')	# 디스플레이 이름

pygame.mouse.set_visible(1)	# 마우스 커서 활성화

white = (255, 255, 255)	# 색 지정

black = (0, 0, 0)

display_font = pygame.font.Font('/usr/share/fonts/truetype/nanum/NanumBarunGothic.ttf', 32) # 폰트 지정

text = (u"키보드 1~8까지 꾸욱 눌러 보세요. \n Esc키를 누르면 종료 됩니다.")	# 유니코드 인코딩으로 텍스트 설계

display_text = display_font.render(text, True, black, white)	# 설게한 텍스트를 랜더링 한다.

display_text_vis = display_text.get_rect()	# 디스플레이에 표시

display_text_vis.center = (340, 34)	# # 디스플레이에 표시되는 위치 설정

def mp(file):	# 소리 파일을 불러 오는 파일을 불러오는 함수
	pygame.mixer.music.load(file)
	
while True:

	display_screen.fill(white)	# 디스플레이의 배경색 지정
	
	display_screen.blit(display_text, display_text_vis)	# 디스플레이에 텍스트 표시
	
	pygame.display.update()	# 디스플레이를 계속 업데이트 한다.

	for event in pygame.event.get():	# 이벤트 시작
      
      
		if (event.type == KEYDOWN):	# 키를 눌렀을 경우 mp함수가 음악 파일을 불러오고 pygame모듈이 재생
			if (event.key == pygame.K_1):

				mp("1.mp3")
				pygame.mixer.music.play()
 
      
		if (event.type == KEYDOWN):
     			if (event.key == pygame.K_2):

				mp("2.mp3")
				pygame.mixer.music.play()
     
		if (event.type == KEYDOWN):
     			if (event.key == pygame.K_3):

				mp("3.mp3")
				pygame.mixer.music.play()
			
		if (event.type == KEYDOWN):
     			if (event.key == pygame.K_4):

				mp("4.mp3")
				pygame.mixer.music.play()
			
		if (event.type == KEYDOWN):
     			if (event.key == pygame.K_5):

				mp("5.mp3")
				pygame.mixer.music.play()
			
		if (event.type == KEYDOWN):
     			if (event.key == pygame.K_6):

				mp("6.mp3")
				pygame.mixer.music.play()
		if (event.type == KEYDOWN):
     			if (event.key == pygame.K_7):

				mp("7.mp3")
				pygame.mixer.music.play()
		if (event.type == KEYDOWN):
     			if (event.key == pygame.K_8):

				mp("8.mp3")
				pygame.mixer.music.play()
				
		if (event.type == KEYUP):	# 키가 올라갔을때(땠을 때) 재생을 중단 시킴


     			pygame.mixer.music.stop()
      
      
		if (event.type == KEYUP):	# esc 키를 누르고 땠을때 종료 실행
      			if (event.key == pygame.K_ESCAPE):

      				pygame.quit()
	
		if event.type == QUIT:	# 창을 종료 했을때 정상 종료 수행
			pygame.quit()




-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>

// 코딩이 완료 되었다면 실행해 보자.


user@user-test:~$ python py_piano.py



키보드의 키 1~8(도레미파솔라시도) 를 눌러 보고 눌렀다 때 보면서 음의 길이도 조절이 되는지를 테스트해 보자.



도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.


그리고 글에 부족한 점이 있거나 틀린 점, 더 궁금한 부분이 있는 것 같다면 꼭 댓글로 알려 주시 감사 하겠습니다.

         







파이썬으로 스스로 문제를 만들어 내는 인공지능 수학 선생님 프로그램을 만들기 


파이썬은 프로그래밍 모듈중 계산에 있어서 가장 우수하며 손쉬운 스크립트 방식을 제공한다.


먼저 그러한 점을 직접 확인하기 위하여 터미널을 열고 파이썬 인터프리터를 실행해 보자.


-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>

// 파이썬을 그대로 실행한다.


root@test:~$ python


Python 2.7.12 (default, Jul  1 2016, 15:12:24)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 5*6


-> 여기서 부터 계산 식을 직접 입력해 본다.


>>> 30  


 -> 바로 계산이 되는 것을 확인 할 수 있다.



이렇게 파이썬 모듈에서 간단히 제공하는 인터프리터를 통하여 계산 문제를 수행해 보았다.


이뿐만이 아니라 파이썬은 자체적인 계산모듈을 통하여 사용자가 입력하는 계산 식과 답(결과)가 틀린지를 판단할수 있는 단순하면서도 강력한 기초 정수식 함수 라이버리리를 기본적으로 제공한다.


-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>



// 사용자가 직접 식과 답안을 인터프리터에 제출해 본다.


>>> 5*20 == 15


False


-> 모듈이 판단하여 틀렸다는 메시지를 반환 한다.



// 이번에는 제대로 된 답안을 제출 해 본다.


>>> 5*20 == 100


True


-> 정답이라는 결과를 반환한다.

 da




이러한 파이썬의 기본적인 계산 능력을 활용하여 간단한 산수 문제들을 랜덤으로 제출 해주는 작은 프로그램을 하나를 만들어 보고자 한다. 


Source_File name : matht.py

[Download]

Type : python

클립보드로 복사 → (본문 클릭)

무제


-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>

// 만든 'matht.pt' 파이썬 소스 파일을  실행한다.


root@test:~$ python matht.py


(*)는 곱하기 입니다.
문제 1

64-95

정답을 입력 하세요.


-> 정답을 입력하며 총 열개 문항을 진행해 보자.









github 다운로드

-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>


root@test:~$ git clone https://github.com/cosmosproject15/math_teacher











파이썬에서 명령행의 필드를 인지하여 활용하는 방법에 대하여 알아 보도록 하자.

Bash에서 명령행의 필드를 인지할 때는 '$1(필드의 첫번째)'를 사용하면 되지만 파이썬 에서는 시스템 모듈과 'sys.argv[NUM]'명령을 활용해야 한다.

먼저 간단한 명령행 필드열1만 읽어 들여 간단하게 응용하는 파이썬 소스코딩 부터 해 보도록 하자. 


무제

Source_File name : tp1.py     |     [Download]    |     Type : Python         클립보드로 복사 → (본문 클릭)



그렇다면 이제 저장한 파이썬 파일을 '1' 과 함께 입력 했을때와 다른 것들을 입력했을때를 실행 테스트 해 보자.



// 실행 명령행에 1을 입력해 본다.


root@test:~$ python pb1.py 1

Good!



//  이번에는 다른 문자를 입력해 본다.



root@test:~$ python pb1.py test

Sorry you insert test


-> 입력한 'test'를 텍스트로 그대로 반환한다.




실행 및 테스트에 성공 하였다면 이번에는 명령행의 '필드열 1'과  '필드열 2'를 실행시 입력받아 둘의 숫자를 더하여서 출력하는 프로그램을 만들어 보자.


무제

Source_File name : tp2.py    |     [Download]    |     Type : Python         클립보드로 복사 → (본문 클릭)


테스트를 실시해 본다.



// 실행과 함께 명령행  필드에 두 가지 숫자를 입력한다.


root@test:~$ python tp2.py 3 5

3+5=

8

-> 입력한 각 필드의 출력과 함께 계산된 값이 출력 된다.




도움이 되셨다면 '♡' 버튼을 꼭 눌러 주시면 감사 하겠습니다.




+ Recent posts