๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
1๏ธโƒฃ AI•DS/๐Ÿ“’ Deep learning

[Pytorch ๋”ฅ๋Ÿฌ๋‹ ์ž…๋ฌธ] ํŒŒ์ดํ† ์น˜ ๊ธฐ์ดˆ

by isdawell 2022. 9. 14.
728x90

 

 

๐Ÿ“Œ ๊ณต๋ถ€ ์ฐธ๊ณ  ์ž๋ฃŒ : https://wikidocs.net/book/2788

 

PyTorch๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋”ฅ ๋Ÿฌ๋‹ ์ž…๋ฌธ

์ด ์ฑ…์€ ๋”ฅ ๋Ÿฌ๋‹ ํ”„๋ ˆ์ž„์›Œํฌ PyTorch๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋”ฅ ๋Ÿฌ๋‹์— ์ž…๋ฌธํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ฑ…์€ 2019๋…„์— ์ž‘์„ฑ๋œ ์ฑ…์œผ๋กœ ๋น„์˜๋ฆฌ์  ๋ชฉ์ ์œผ๋กœ ์ž‘์„ฑ๋˜์–ด ์ถœํŒ ...

wikidocs.net

 

 

๐Ÿ“Œ ์ฝ”๋”ฉ ์‹ค์Šต 

 

https://colab.research.google.com/drive/11uzhksM-MYSf1_YcMzrOnEL6glhu1OiL?usp=sharing 

 

ํŒŒ์ดํ† ์น˜๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋”ฅ๋Ÿฌ๋‹ ์ž…๋ฌธ.ipynb

Colaboratory notebook

colab.research.google.com

 

 

 

 

 

 

 

โœ… ํŒŒ์ดํ† ์น˜ ๊ธฐ์ดˆ 

 

 

 

1๏ธโƒฃ ํŒŒ์ดํ† ์น˜ ํŒจํ‚ค์ง€ ๊ธฐ๋ณธ ๊ตฌ์„ฑ 


 

โ—‡ torch : ๋„˜ํŒŒ์ด์™€ ์œ ์‚ฌํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๋ฉฐ ๋‹ค์–‘ํ•œ ์ˆ˜ํ•™ ํ•จ์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. 

 

โ—‡ torch.autograd : ์ž๋™ ๋ฏธ๋ถ„์„ ์œ„ํ•œ ํ•จ์ˆ˜๋“ค์ด ํฌํ•จ๋˜์–ด์ ธ ์žˆ๋‹ค. 

 

โ—‡ torch.nn : ์‹ ๊ฒฝ๋ง์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋‚˜ ๋ ˆ์ด์–ด ๋“ฑ์ด ์ •์˜๋˜์–ด์ ธ ์žˆ๋‹ค. RNN, LSTM ๊ฐ™์€ ๋ ˆ์ด์–ด, ReLU ๊ฐ™์€ ํ™œ์„ฑํ™” ํ•จ์ˆ˜, MSELoss ๊ฐ™์€ ์†์‹คํ•จ์ˆ˜๋“ค์ด ์žˆ๋‹ค. 

 

โ—‡ torch.optim: ํ™•๋ฅ ์  ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ• SGD ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ ์ตœ์ ํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๊ตฌํ˜„๋˜์–ด์ ธ ์žˆ๋‹ค. 

 

โ—‡ torch.utils.data : SGD ๋ฐ˜๋ณต ์—ฐ์‚ฐ์„ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฏธ๋‹ˆ๋ฐฐ์น˜์šฉ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด์ ธ ์žˆ๋‹ค. 

 

โ—‡ torch.onnx : ์„œ๋กœ๋‹ค๋ฅธ ๋”ฅ๋Ÿฌ๋‹ ํ”„๋ ˆ์ž„์›Œํฌ ๊ฐ„์— ๋ชจ๋ธ์„ ๊ณต์œ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํฌ๋งท 

 

 

 

 

2๏ธโƒฃ  ํ…์„œ ์กฐ์ž‘ํ•˜๊ธฐ 


 

 

๐Ÿ”น ๋ฒกํ„ฐ ํ–‰๋ ฌ ํ…์„œ 

 

๋ฒกํ„ฐ : 1์ฐจ์›์œผ๋กœ ๊ตฌ์„ฑ๋œ ๊ฐ’

ํ–‰๋ ฌ : 2์ฐจ์›์œผ๋กœ ๊ตฌ์„ฑ๋œ ๊ฐ’ 

ํ…์„œ : 3์ฐจ์› ์ด์ƒ์œผ๋กœ ๊ตฌ์„ฑ๋œ ๊ฐ’ → ๋ฐ์ดํ„ฐ์‚ฌ์ด์–ธ์Šค ๋ถ„์•ผ ํ•œ์ • 3์ฐจ์› ์ด์ƒ ํ…์„œ๋Š” ๊ทธ๋ƒฅ ๋‹ค์ฐจ์› ํ–‰๋ ฌ ๋˜๋Š” ๋ฐฐ์—ด๋กœ ๊ฐ„์ฃผ 

 

  ๋”ฅ๋Ÿฌ๋‹์„ ๋‹ค๋ฃฐ๋•Œ ํ–‰๋ ฌ ๋˜๋Š” ํ…์„œ์˜ ํฌ๊ธฐ๋ฅผ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์ค‘์š” 

 

 

 

 

 

๐Ÿ”น ๊ธฐ๋ณธ ์„ธํŒ… : 2D Tensor 

 

2D : batch size X dimension 

• ์˜ˆ์‹œ : 64 X 256 

 

  • ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ ํ•˜๋‚˜์˜ ํฌ๊ธฐ๊ฐ€ [3,1,2,5 ... ] ์ด๋Ÿฐ ์ˆซ์ž๋“ค์˜ ๋‚˜์—ด์ด 256๊ฐœ๊ฐ€ ์žˆ์–ด, 256์ด๋ผ๊ณ  ํ•œ๋‹ค๋ฉด, ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ ํ•˜๋‚˜์— ๋ฒกํ„ฐ์˜ ์ฐจ์›์„ 256 ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 
  • ์ด๋Ÿฐ ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ๊ฐ€ 3000๊ฐœ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜๋ฉด, ์ „์ฒด ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๋Š” 3000 X 256 ์ด๊ณ  ํ–‰๋ ฌ ํ˜•ํƒœ์ด๋ฏ€๋กœ 2D ํ…์„œ์— ํ•ด๋‹นํ•œ๋‹ค. 
  • ์ปดํ“จํ„ฐ๋Š” ๋ณดํ†ต ๋ฉ์–ด๋ฆฌ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ, 3000๊ฐœ์—์„œ 64๊ฐœ์”ฉ ๊บผ๋‚ด ์ฒ˜๋ฆฌํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ์ด๋•Œ 64๋ฅผ batch size ๋ผ๊ณ  ํ•œ๋‹ค. 
  • dimension = 256 , batch size = 64 

 

 

 

 

๐Ÿ”น ๋น„์ „ ๋ถ„์•ผ์—์„œ์˜ ํ…์„œ : 3D Tensor 

 

3D : batchsize , width, height 

• ์ž์—ฐ์–ด์ฒ˜๋ฆฌ ๋ณด๋‹ค ๋น„์ „ (์˜์ƒ, ์ด๋ฏธ์ง€) ๋ถ„์•ผ์—์„œ ๋” ๋ณต์žกํ•œ ํ…์„œ๋ฅผ ๋‹ค๋ฃจ๊ฒŒ ๋œ๋‹ค. 

• ์ด๋ฏธ์ง€๋Š” ๊ฐ€๋กœ , ์„ธ๋กœ ๊ทธ๋ฆฌ๊ณ  ์—ฌ๋Ÿฌ ์žฅ์˜ ์ด๋ฏธ์ง€ (batch size) ๋กœ ๊ตฌ์„ฑ๋˜๋ฉด 3์ฐจ์›์˜ ํ…์„œ๊ฐ€ ๋œ๋‹ค. 

 

 

 

→ ์„ธ๋กœ : batch size , ๊ฐ€๋กœ : width, ๋†’์ด : height 

 

 

 

 

 

๐Ÿ”น ์ž์—ฐ์–ด ๋ถ„์•ผ์—์„œ์˜ ํ…์„œ : 3D Tensor 

 

• 3D : batchsize , length, dim 

• ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ๋Š” (batch size, ๋ฌธ์žฅ์˜ ๊ธธ์ด, ๋‹จ์–ด ๋ฒกํ„ฐ์˜ ์ฐจ์›) ์ด๋ผ๋Š” 3์ฐจ์› ํ…์„œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. 

 

 

 

• ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ 3D ํ…์„œ ํ˜•์„ฑ ์˜ˆ์‹œ 

 

4๊ฐœ์˜ ๋ฌธ์žฅ์œผ๋กœ ๊ตฌ์„ฑ๋œ ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ

 

์ปดํ“จํ„ฐ์˜ ์ดํ•ด๋ฅผ ์œ„ํ•ด ๋‹จ์–ด๋ณ„๋กœ ๋‚˜๋ˆ„์–ด ์ค€๋‹ค → 4x3 ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง€๋Š” 2D ํ…์„œ

 

 

์ปดํ“จํ„ฐ๋Š” ์ˆซ์ž๋ฅผ ๋” ์ž˜ ์ดํ•ด ํ•จ → ๊ฐ ๋‹จ์–ด๋ฅผ 3์ฐจ์› ๋ฒกํ„ฐ๋กœ ๋ณ€ํ™˜

 

 

์žฌ๊ตฌ์„ฑํ•œ ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ → 4 x3 x 3 ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง€๋Š” 3D ํ…์„œ

 

 

batch size = 2 , ๊ฐ ๋ฐฐ์น˜์˜ ํ…์„œ ํฌ๊ธฐ = (2 x 3 x 3)

 

 

→ ๊ฐ ๋ฐฐ์น˜์˜ ํ…์„œ ํฌ๊ธฐ = (batch size x ๋ฌธ์žฅ๊ธธ์ด x ๋‹จ์–ด๋ฒกํ„ฐ์˜ ์ฐจ์›) = (2 x 3 x 3) 

 

 

 

๐Ÿ”น ๋„˜ํŒŒ์ด๋กœ ํ…์„œ ๋งŒ๋“ค๊ธฐ 

 

 

 

 

๐Ÿ”น ํŒŒ์ดํ† ์น˜ ํ…์„œ ์„ ์–ธํ•˜๊ธฐ 

 

 

• import torch 

• torch.FloatTensor( [๋ฆฌ์ŠคํŠธ] )

• torch.dim() 

• torch.shape 

 

 

 

๐Ÿ”น ๋ธŒ๋กœํŠธ์บ์ŠคํŒ… ๊ธฐ๋Šฅ 

 

 

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

 

 

 

 

 

๐Ÿ”น ํ–‰๋ ฌ ๊ณฑ์…ˆ 

 

 

• ํ–‰๋ ฌ ๊ณฑ์…ˆ : .matmul 

 

   m1.matmul(m2) 

 

 

• ์›์†Œ๋ณ„ ๊ณฑ์…ˆ : .mul ํ˜น์€

 

  

  m1.mul(m2) 

  m1*m2 

 

 

 

 

 

๐Ÿ”น ํ‰๊ท  

 

• torch.mean() 

• torch.mean(dim=n)    :  ํ•ด๋‹น ํ–‰(0)  ๋˜๋Š”  ์—ด(1) ๋ฐฉํ–ฅ์„ ์ œ์™ธํ•œ ๊ธฐ์ค€์œผ๋กœ ์—ฐ์‚ฐ ์ง„ํ–‰ 

 

 

 

 

 

๐Ÿ”น ๋ง์…ˆ 

 

• torch.sum() 

 

 

 

 

๐Ÿ”น ์ตœ๋Œ€์™€ ์•„๊ทธ๋งฅ์Šค 

 

 

• torch.max()[0] : ์ตœ๋Œ€๊ฐ’์„ ๋ฐ˜ํ™˜ 

• torch.max()[1] : ์ตœ๋Œ€๊ฐ’์ด ์œ„์น˜ํ•œ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ 

 

 

 

 

๐Ÿ”น ๋ทฐ View - ์›์†Œ์˜ ์ˆ˜๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ํ…์„œ์˜ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝ 

 

• ๋„˜ํŒŒ์ด์˜ reshape ์™€ ๋น„์Šทํ•œ ์—ญํ• ์„ ํ•œ๋‹ค. 

 

• torch.view( [๋ฐ”๊ฟ€ ์ฐจ์›] ) 

 

 

 

• view ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณ€๊ฒฝ ์ „๊ณผ ํ›„์˜ ํ…์„œ ์•ˆ์˜ ์›์†Œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์œ ์ง€๋˜์–ด์•ผ ํ•œ๋‹ค. 

• ํŒŒ์ดํ† ์น˜์˜ view ๋Š” ์‚ฌ์ด์ฆˆ๊ฐ€ -1๋กœ ์„ค์ •๋˜๋ฉด ๋‹ค๋ฅธ ์ฐจ์›์œผ๋กœ๋ถ€ํ„ฐ ํ•ด๋‹น ๊ฐ’์„ ์œ ์ถ”ํ•œ๋‹ค. 

 

 

 

 

 

๐Ÿ”น ์Šคํ€ด์ฆˆ Squeeze - 1์ธ ์ฐจ์›์„ ์ œ๊ฑฐํ•œ๋‹ค. 

 

• torch.squeeze() 

 

 

 

๐Ÿ”น ์–ธ์Šคํ€ด์ฆˆ Unsqueeze - ํŠน์ • ์œ„์น˜์— 1์ธ ์ฐจ์›์„ ์ถ”๊ฐ€ํ•œ๋‹ค. 

 

• torch.unsqueeze(n) :  n+1 ๋ฒˆ์งธ ์ฐจ์›์— 1์„ ์ถ”๊ฐ€ 

 

 

 

→ view(), squeeze(), unsqueeze() ๋Š” ํ…์„œ์˜ ์›์†Œ์ˆ˜๋ฅผ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ ๋ชจ์–‘๊ณผ ์ฐจ์›์„ ์กฐ์ ˆํ•œ๋‹ค. 

 

 

 

 

๐Ÿ”น ํƒ€์ž… ์บ์ŠคํŒ… 

 

 

• torch.LongTensor : 64๋น„ํŠธ์˜ ๋ถ€ํ˜ธ ์žˆ๋Š” ์ •์ˆ˜ 

• torch.cuda.FloatTensor : GPU ์—ฐ์‚ฐ์„ ์œ„ํ•œ ์ž๋ฃŒํ˜• 

• torch.ByteTensor() : ๊ฐ€๋ น [True, False] ๋ผ๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด [1,0] ์œผ๋กœ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค. 

• .long() ์ด๋‚˜ .float() ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ˜• ๋ณ€ํ™˜์„ ํ•  ์ˆ˜๋„  ์žˆ๋‹ค. 

 

 

 

๐Ÿ”น ์—ฐ๊ฒฐํ•˜๊ธฐ concat 

 

• torch.cat( [x,y] , dim = n ) : x ํ…์„œ์™€ y ํ…์„œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋˜ n ๋ฒˆ์งธ ์ฐจ์›์„ ๋Š˜๋ฆฌ๋„๋ก ์—ฐ๊ฒฐ 

 

 

• ๋”ฅ๋Ÿฌ๋‹์€ ์ฃผ๋กœ ๋ชจ๋ธ์˜ ์ž…๋ ฅ ๋˜๋Š” ์ค‘๊ฐ„ ์—ฐ์‚ฐ์—์„œ ๋‘ ๊ฐœ์˜ ํ…์„œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ๋‘ ํ…์„œ๋ฅผ ์—ฐ๊ฒฐํ•ด์„œ ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋‘ ๊ฐ€์ง€ ์ •๋ณด๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง 

 

 

 

 

๐Ÿ”น ์Šคํƒํ‚น Stacking 

 

• ์Šคํƒํ‚น์ด ๋งŽ์€ ์—ฐ์‚ฐ์„ ํฌํ•จํ•˜๊ณ  ์žˆ์–ด์„œ, ์—ฐ๊ฒฐํ•˜๋Š” ๊ธฐ๋Šฅ์€ concat ๊ณผ ๋˜‘๊ฐ™์ง€๋งŒ ์Šคํƒํ‚น์„ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ๋” ํŽธ๋ฆฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค. 

 

torch.stack( [x,y,z] )

 

•  ๊ฐ™์€ ๊ธฐ๋Šฅ์„ concat ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด unsqueeze(0) ์œผ๋กœ (1,2) ํฌ๊ธฐ๋กœ ๋ฐ”๊พธ์–ด ์ฃผ์–ด์•ผ ํ•œ ๋‹ค์Œ ์—ฐ๊ฒฐํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๊ฝค๋‚˜ ๋ณต์žกํ•˜๋‹ค 

 

•  dim ์ธ์ž๋ฅผ ์ง€์ •ํ•ด์„œ ํŠน์ • ์ฐจ์›์ด ์ฆ๊ฐ€ํ•˜๋„๋ก ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

๐Ÿ”น 0 ์œผ๋กœ ์ฑ„์›Œ์ง„ ํ…์„œ, 1๋กœ ์ฑ„์›Œ์ง„ ํ…์„œ 

 

• torch.ones_like()  

• torch.zeros_like()  

 

 

 

๐Ÿ”น ๋ฎ์–ด์“ฐ๊ธฐ ์—ฐ์‚ฐ 

 

• ์—ฐ์‚ฐ ๋’ค์— _ ํ‘œ์‹œ๋ฅผ ๋ถ™์ด๋ฉด ๊ธฐ์กด์˜ ๊ฐ’์„ ๋ฎ์–ด์“ฐ๊ธฐ ํ•œ๋‹ค. 

EX :  torch.mul_() 

 

 

 

 

 

3๏ธโƒฃ ํŒŒ์ด์ฌ ํด๋ž˜์Šค Class 


 

 

๐Ÿ”น ํ•จ์ˆ˜์™€ ํด๋ž˜์Šค์˜ ์ฐจ์ด 

 

class Calculator:
    def __init__(self): # ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ ํ˜ธ์ถœ๋  ๋•Œ ์‹คํ–‰๋˜๋Š” ์ดˆ๊ธฐํ™” ํ•จ์ˆ˜. ์ด๋ฅผ ์ƒ์„ฑ์ž๋ผ๊ณ  ํ•œ๋‹ค.
        self.result = 0

    def add(self, num): # ๊ฐ์ฒด ์ƒ์„ฑ ํ›„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜.
        self.result += num
        return self.result

 

• ํด๋ž˜์Šค๋Š” ๋ถ•์–ด๋นต ํ‹€ ๊ฐ™์ด ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•œ ํ›„, ์ด๊ฑธ๋กœ ๊ฐ์ฒด๋ผ๋Š” ๊ฒƒ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. 

 

• ๋‘ ๊ฐœ์˜ ๋ง์…ˆ๊ธฐ๋ฅผ ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€๋ฐ 

 

 

 

• ์ด๋ฅผ ๋งจ ์œ„์—์„œ ์ •์˜ํ•œ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด 

 

cal1 = Calculator()
cal2 = Calculator()

# ๊ฐ์ฒด 2๊ฐœ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  

print(cal1.add(3))
print(cal1.add(4))
print(cal2.add(3))
print(cal2.add(7))

# ๊ฐ์ฒด๋ณ„๋กœ ๋…๋ฆฝ์ ์ธ ์—ฐ์‚ฐ์„ ์‹œํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ๋ณ„๋„์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ž ์ฝ”๋“œ๊ฐ€ ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•ด์ง„๋‹ค. 

 

 

 

 

 

 

 

728x90

๋Œ“๊ธ€