๐Ÿฅ Python Basic: ๊ฐ์ฒด ์ง€ํ–ฅ ์ดํ•ดํ•˜๊ธฐ

yeeun leeยท2020๋…„ 3์›” 3์ผ
1

Python Basic

๋ชฉ๋ก ๋ณด๊ธฐ
1/6

0. ์‹œ์ž‘ํ•˜๊ธฐ ์•ž์„œ

์ดˆ๋ณด์ž๋กœ์„œ Python์„ ์ฒ˜์Œ ์ ‘ํ•˜๊ฒŒ ๋˜๋ฉด '๊ฐ์ฒด ์ง€ํ–ฅ'์ด๋ผ๋Š” ๋ง์„ ๋งŽ์ด ๋“ฃ๊ฒŒ ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๋Œ€์ถฉ ๊ทธ๋ ‡๋‹ค๋Š” ๊ฒƒ์€ ์•Œ๊ฒ ๊ณ  ๐Ÿ™„ ์šฐ์„  ์Ÿ์•„์ง€๋Š” ๊ธฐ๋ณธ ๊ฐœ๋…์„ ๋ฐฐ์šฐ๋‹ค ๋ณด๋‹ˆ,
์–ธ์–ด์˜ ๊ทผ๊ฐ„์ด ๋˜๋Š” ๋ถ€๋ถ„์„ ๋†“์น˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„ ์ •๋ฆฌ๊ฐ€ ์ž˜ ๋œ ๊ธ€์„ ์ฐพ์•„๋ณด์•˜๋‹ค.
๋ณธ๋ฌธ์€ ๋‹ค์Œ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์„ฑํ•œ ๊ฒƒ์œผ๋กœ, ํ•™์Šต ๋ชฉ์ ์œผ๋กœ ๋‹จ์ˆœ ๋ฒˆ์—ญํ•œ ๊ฒƒ์ด๋‹ˆ ์˜คํ•ด ์—†๊ธธ ๋ฐ”๋ž€๋‹ค๐Ÿ’ก

Mutable vs Immutable Objects in Python by meghamohan on medium
Data model - object, values and types on python documentation

1. ๊ฐ์ฒด ์ง€ํ–ฅ Object-oriented

๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์˜ˆ์‹œ๋ฅผ ์ฐพ๋˜ ์ค‘ ์šฐ์—ฐํžˆ ์ƒํ™œ ์ฝ”๋”ฉ ์ด๊ณ ์ž‰๋‹˜์˜ ์˜ˆ์ „(๋ฌด๋ ค 7๋…„ ์ „) tutorial์„ ๋ณด๋ฉด์„œ ์ข€ ๋” ์ดํ•ด๊ฐ€ ์‰ฝ๊ฒŒ ๊ฐ”๋‹ค. ์•„๋ž˜ ๊ฐœ๋… ์ •๋ฆฌ์— ๋งํฌ๋ฅผ ์ฒจ๋ถ€ํ•œ๋‹ค.

1.1 ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP)

- OOP๋ž€ ๋ฌด์—‡์ธ๊ฐ€

์ถœ์ฒ˜: opentutorials.org ์ด๊ณ ์ž‰

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํ”„๋กœ๊ทธ๋žจ ๋กœ์ง์„ ์ƒํƒœ(state)์™€ ํ–‰์œ„(behave)๋กœ ์ด๋ฃจ์–ด์ง„ ๊ฐ์ฒด๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค. ๊ฐ์ฒด๋Š” ์‰ฝ๊ฒŒ ๋งํ•ด ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๋ฅผ ๊ทธ๋ฃจํ•‘ํ•œ ๊ฒƒ์ธ๋ฐ, ์ด ๊ฐ์ฒด๋“ค์„ ๋ ˆ๊ณ  ๋ธ”๋Ÿญ์ฒ˜๋Ÿผ ์กฐ๋ฆฝํ•ด ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ปดํ“จํ„ฐ์—์„œ ์ชผ๊ฐœ์ ธ ์žˆ๋Š” ํŒŒ์ผ์„ ํด๋”๋กœ ๋ฌถ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, ์—ฐ๊ด€๋˜์–ด ์žˆ๋Š” ๋ณ€์ˆ˜์™€ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ์ฒด๋กœ ๊ทธ๋ฃจํ•‘ํ•จ์œผ๋กœ์จ ๊ด€๋ฆฌ์˜ ํŽธ์˜๋ฅผ ๋„๋ชจํ•œ๋‹ค.

์•„๋ž˜ class cat์€ name์ด๋ผ๋Š” property์™€ intro()๋ผ๋Š” ๋ฉ”์†Œ๋“œ(ํ•จ์ˆ˜)๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด์ด๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์ด๋ฆ„๋งŒ ๋„ฃ์œผ๋ฉด ์ž๊ธฐ์†Œ๊ฐœ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค ๊ณ„์† ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ๋Š” ์ง์ ‘ ๋งŒ๋“  ๊ฒƒ์œผ๋กœ ๋งค์šฐ ๊ฐ„๋‹จํ•˜์ง€๋งŒ, ์—ฌ๋Ÿฌ ์ƒํƒœ์™€ ํ–‰์œ„๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด๋“ค์ด ์Œ“์ด๋ฉด ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์ด ๋งŒ๋“ค์–ด์งˆ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

class cat:
   def __init__(self, name):
     self.name=name
   
   def intro(self):
     print('hi my name is '+self.name+ '! meow')
   

marble = cat('marble')   # marble์„ ๊ฐ์ฒด cat์˜ ์ธ์Šคํ„ด์Šค๋กœ ๋งŒ๋“ค๊ธฐ
marble.intro()   # cat ํด๋ž˜์Šค์˜ ์†Œ๊ฐœ ํ•จ์ˆ˜ ํ˜ธ์ถœ 
   

- ์‚ฌ์ „์  ์ •์˜

์ถœ์ฒ˜: ์œ„ํ‚ค๋ฐฑ๊ณผ

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

- ๊ฐ์ฒด์™€ ๋ณ€์ˆ˜

๊ฐ์ฒด๊ฐ€ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๋ฅผ ๊ทธ๋ฃจํ•‘ํ•œ ๊ฒƒ์ด๋ผ๊ณ  ํ–ˆ๋Š”๋ฐ, ๊ทธ๋ ‡๋‹ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „์— Python์—์„œ์˜ ๊ฐ์ฒด์™€ ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ์ถœ์ฒ˜: foobarnbaz ๋Š” C์™€ Python์˜ ๋ณ€์ˆ˜ ๊ฐœ๋… ๊ด€๋ จ ๊ธ€์ธ๋ฐ ๊ทธ๋ฆผ์œผ๋กœ ์ž˜ ์ •๋ฆฌํ•ด๋†“์•˜๋‹ค.

C์–ธ์–ด์—์„œ ๋ณ€์ˆ˜๋Š” ๋ฐ•์Šค์™€ ๊ฐ™๋‹ค. (๊ทธ๋ฆผ1) a = 2 ์€ object 2๋ฅผ ๋ณ€์ˆ˜ a์— ๋„ฃ์€ ๊ฒƒ์ด๋‹ค. ๋ฐ˜๋ฉด Python์—์„œ ๋ณ€์ˆ˜๋Š” ํƒœ๊ทธ์™€ ๊ฐ™๋‹ค. (๊ทธ๋ฆผ2) object 1์— ๋ณ€์ˆ˜ a๋ผ๋Š” ํƒœ๊ทธ๋ฅผ ๋ถ™์ธ ๊ฒƒ์ด๋‹ค.
a = 2, b = a ์ผ ๋•Œ C์–ธ์–ด๋Š” ๋ณ€์ˆ˜๋งˆ๋‹ค ๊ฐ’์ด ์ €์žฅ๋˜์ง€๋งŒ, ํŒŒ์ด์ฌ์€ 2๋ผ๋Š” ๊ฐ์ฒด์— a,b๊ฐ€ ํƒœ๊ทธ๋œ๋‹ค.

2. ๋ถˆ๋ณ€๊ฐ์ฒด์™€ ๊ฐ€๋ณ€๊ฐ์ฒด

๊ฐ์ฒด๋Š” ๋ถˆ๋ณ€, ๊ฐ€๋ณ€(immutable & mutable) ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๊ตฌ๋ถ„๋˜๊ณ , ํŒŒ์ด์ฌ์€ ์ด๋ฅผ ๋‹ค๋ฅด๊ฒŒ ํ•ธ๋“ค๋งํ•œ๋‹ค. ๊ทธ ๊ฐœ๋…๊ณผ ์ฐจ์ด๋Š” ๋ฌด์—‡์ผ๊นŒ?

2.1 ์ •์˜

  • immutable: objects whose value is unchangeable once they are created ์ƒ์„ฑ ์ดํ›„ ๊ฐ’์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋Š” ๊ฐ์ฒด
  • mutable: objects whose value can change ๊ฐ’์ด ๋ฐ”๋€” ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด

์˜ˆ์‹œ1์—์„œ int type, ์˜ˆ์‹œ2์—์„œ list type์„ ๋“ค์–ด ์„ค๋ช…ํ•ด๋ณด์ž.

2.2 ์˜ˆ์‹œ

- ๋ถˆ๋ณ€๊ฐ์ฒด ์˜ˆ์‹œ

์ •์ˆ˜ int๋Š” ๋ถˆ๋ณ€ ๊ฐ์ฒด์ด๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ 3๋ฒˆ์งธ ์ค„์—์„œ x์— 1์„ ๋”ํ•˜๋ฉด์„œ x๊ฐ€ 11์ด๋ผ๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด์— ํƒœ๊ทธ๋œ๋‹ค. ์ฆ‰, ๊ฐ์ฒด 10์€ ๋ฐ”๋€Œ์ง€ ์•Š๊ณ  x๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋˜ id address๊ฐ€ ๋ฐ”๋€ ๊ฒƒ์ด๋‹ค.

x = 10 
y = x   # id(x) == id(y) == id(10)

x = x + 1

print(x)   # result : 11
print(y)   # result : 10 

id(x) != id(y)   
id(x) != id(10)   

- ๊ฐ€๋ณ€๊ฐ์ฒด ์˜ˆ์‹œ

๋ฆฌ์ŠคํŠธlist๋Š” ๊ฐ€๋ณ€ ๊ฐ์ฒด์ด๋‹ค. pop method๋ฅผ ์‹คํ–‰ํ•˜๋ฉด์„œ x,y์˜ ๊ฐ์ฒด๊ฐ€ ๋ชจ๋‘ [1,2]๋กœ ๋ฐ”๋€Œ์—ˆ๋‹ค. ๋ณ€์ˆ˜๋Š” ์—ฌ์ „ํžˆ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ฐ™์€ id adress๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ , ๊ทธ ๊ฐ์ฒด๋งŒ ๋ฐ”๋€ ๊ฒƒ์ด๋‹ค.

m = [1, 2, 3]
n = m   # id(m) == id(n)

m.pop()   # ๋งˆ์ง€๋ง‰ element๋ฅผ ๋Œ๋ ค์ฃผ๊ณ  ๋ฆฌ์ŠคํŠธ์—์„œ ์‚ญ์ œํ•˜๋Š” method

print(m)   #result: [1,2]
print(n)   #result: [1,2]
'''''

id(m) == id(n)

3. mutable or not?

์œ„์—์„œ int๋Š” ๋ถˆ๋ณ€ ๊ฐ์ฒด, list๋Š” ๊ฐ€๋ณ€ ๊ฐ์ฒด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ฐ€๋ณ€ ๊ฐ์ฒด์™€ ๋ถˆ๋ณ€ ๊ฐ์ฒด๊ฐ€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅด๋ฉฐ, int, list... ๊ทธ ์™ธ์— ์–ด๋–ค ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค.

3.1 ์–•์€ ๋ณต์‚ฌ, ๊นŠ์€ ๋ณต์‚ฌ

์œ„ ์˜ˆ์‹œ ์ฒ˜๋Ÿผ ๋‹จ์ˆœ ๋ณต์‚ฌ(a = b)๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด mutableํ•œ ๊ธฐ์กด ๊ฐ์ฒด๊ฐ€ ๋ณต์‚ฌ๋œ ๊ฐ์ฒด์™€ ๋™์ผํ•œ ๊ฐ’์„ ๊ฐ€๋ฆฌ์ผœ, ๊ฐ’์ด ๊ฐ™์ด ๋ฐ”๋€” ์ˆ˜ ์žˆ๋‹ค.

>>> a = [1, 2, 3]
>>> b = a
>>> b[1] = 0
>>> b
[1, 0, 3]
>>> a
[1, 0, 3]

- ์–•์€ ๋ณต์‚ฌ

์œ„์™€ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์–•์€ ๋ณต์‚ฌ๋Š” ๊ฐ์ฒด container๋ฅผ ๋ณ„๋„ ์ƒ์„ฑํ•˜์ง€๋งŒ, ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ๊ฐ์ฒด๋“ค์€ ๊ธฐ์กด ๊ฐ’๊ณผ ๊ฐ™๋‹ค. ๊ทธ๋ž˜์„œ ์•„๋ž˜์™€ ๊ฐ™์ด item์„ ์ˆ˜์ •ํ•ด๋„ ๋ณต์‚ฌ๋ณธ๋งŒ ๋ฐ”๋€Œ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์–•์€ ๋ณต์‚ฌ๋Š” b์ฒ˜๋Ÿผ immutable ๊ฐ์ฒด์—๋งŒ ํ•ด๋‹น๋˜๋ฉฐ, ๋งŒ์•ฝ c์ฒ˜๋Ÿผ ๊ฐ์ฒด ๋‚ด๋ถ€๊ฐ€ mutable ํ•˜๋‹ค๋ฉด ๋‹จ์ˆœ ๋ณต์‚ฌ์™€ ๋™์ผํ•œ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•œ๋‹ค.

import copy

a = [1, [1, 2, 3]]
b = copy.copy(a)    # shallow copy ๋ฐœ์ƒ
print(b)    # [1, [1, 2, 3]] ์ถœ๋ ฅ
b[0] = 100
print(b)    # [100, [1, 2, 3]] 
print(a)    # [1, [1, 2, 3]] 

c = copy.copy(a)
c[1].append(4)    # ๋ฆฌ์ŠคํŠธ์˜ ๋‘๋ฒˆ์งธ item(๊ฐ์ฒด ๋‚ด๋ถ€)์— 4๋ฅผ ์ถ”๊ฐ€
print(c)    # [1, [1, 2, 3, 4]] ์ถœ๋ ฅ
print(a)    # [1, [1, 2, 3, 4]] ์ถœ๋ ฅ

- ๊นŠ์€ ๋ณต์‚ฌ

๊นŠ์€ ๋ณต์‚ฌ๋Š” ๋‚ด๋ถ€์— ๊ฐ์ฒด๋“ค๊นŒ์ง€ ๋ชจ๋‘ ์ƒˆ๋กญ๊ฒŒ copy ๋˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—, mutableํ•œ ๋‚ด๋ถ€ ๊ฐ์ฒด๋ฅผ ์ˆ˜์ •ํ•˜๋”๋ผ๋„ ๋ณต์‚ฌ๋ณธ๋งŒ ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค.

>>> a = [[1,2],[3,4]]
>>> b = copy.deepcopy(a) # deep copy ๋ฐœ์ƒ
>>> b[1].append(5) # a์˜ ๋‘ ๋ฒˆ์งธ item์ธ [3,4] ๋ฆฌ์ŠคํŠธ์— 5 ์ถ”๊ฐ€ 
>>> a
[[1, 2], [3, 4]]
>>> b
[[1, 2], [3, 4, 5]] # ๊นŠ์€ ๋ณต์‚ฌ๋กœ ๋ณต์‚ฌ๋ณธ์˜ ๋‚ด๋ถ€ ๊ฐ์ฒด๊นŒ์ง€ ๋ณ„๋„ ์ƒ์„ฑ

3.2 ๋ฐ์ดํ„ฐ ํƒ€์ž…์— ์˜ํ•œ ๊ตฌ๋ถ„

๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๋”ฐ๋ฅธ ๋ถˆ๋ณ€, ๊ฐ€๋ณ€ ์—ฌ๋ถ€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

Mutable objects:
list, dict, set, byte array
Immutable objects:
int, float, complex, string, tuple, frozen set [note: immutable version of set], bytes

์ถ”๊ฐ€๋กœ ๋‚ด์žฅ ํ•จ์ˆ˜์ธ id(), type()์„ ์‚ฌ์šฉํ•ด ๋ณ€์ˆ˜๊ฐ€ ์–ด๋–ค ํƒ€์ž…์˜ ๊ฐ์ฒด์™€ ์—ฐ๊ด€๋˜์–ด ์žˆ๊ณ , ๋ฐ”๋€” ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด์ธ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

  • type(): ๊ฐ์ฒด์˜ data type์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. type(5) # result: <class 'int'>
  • id(x): x๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ. ๊ฐ์ฒด์˜ id๋ฅผ ์ •์ˆ˜ ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • is operator: ๋‘ ๊ฐ์ฒด์˜ id๋ฅผ ๋น„๊ตํ•ด์ค€๋‹ค. x is y #result: True

4. Pass-by-?

๋งˆ์ง€๋ง‰์œผ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜ parameter๊ฐ€ ํ•จ์ˆ˜๋ฅผ ํ†ต๊ณผํ•  ๋•Œ์— ๋Œ€ํ•˜์—ฌ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ด๋‹ค. ์•„์ง 100% ์ดํ•ด๋˜์ง€ ์•Š์•„ ์ฐธ๊ณ ํ•˜๊ธฐ ์ข‹์„๋งŒํ•œ ์ž๋ฃŒ๋งŒ ์˜ฎ๊ฒจ๋†“์•˜๋‹ค.
์ฐธ๊ณ : Robert Heaton & penjee blog

- Pass-by-reference

๋ณ€์ˆ˜์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ํ•จ์ˆ˜๋ฅผ ํ†ต๊ณผํ•œ๋‹ค. ํ•จ์ˆ˜๋ฅผ ํ†ต๊ณผํ•˜๋ฉด ๋ณ€์ˆ˜๋„ ํ•จ๊ป˜ ๋ณ€ํ•œ๋‹ค.

- Pass-by-value:

ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์ด ๋ฉ”๋ชจ๋ฆฌ ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ๋ณต์‚ฌ๋˜์–ด, ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์ด ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ๋ณ€์ˆ˜๋ฅผ ๋ฐ”๊พธ๋ ค๊ณ ํ•  ๋•Œ ๋ณต์‚ฌ๋ณธ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค. ์˜ค๋ฆฌ์ง€๋„์€ untouched ์ธ ์ƒํƒœ์ด๊ณ , ๋ณ€์ˆ˜๋Š” ๋ฆฌํ„ด ๊ฐ’์„ ๋„ฃ์–ด์•ผ ์—…๋ฐ์ดํŠธ ๋œ๋‹ค.

- Object references are passed by value

profile
์ด์‚ฌ๊ฐ„ ๋ธ”๋กœ๊ทธ: yenilee.github.io

0๊ฐœ์˜ ๋Œ“๊ธ€