๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐ŸŽ› Others.../- c & python & android

Python ๊ณ ๊ธ‰: ๊ฐ์ฒด์™€ ํด๋ž˜์Šค(3) ์ •๋ณด ์€๋‹‰

by Wonit 2019. 12. 8.

get/set ์†์„ฑ๊ฐ’๊ณผ ํ”„๋กœํผํ‹ฐ

 

์ž๋ฐ”์—์„œ ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” private, private์œผ๋กœ ์ ‘๊ทผ ์ œํ•œ๋œ ๋ฉค๋ฒ„์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” getter๊ณผ setter์„ ์ด์šฉํ•˜์˜€๋‹ค.

 

private String name;
private string account;
private String password;

public String getName(){ return this.name; }
public void setname(String name){
    this.name = name;
}

...

ํ•˜์ง€๋งŒ Python์€ ๊ทธ๋Ÿด ํ•„์š”๊ฐ€ ์—†๋‹ค. ์™œ๋ƒ? ๋ชจ๋“  ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋Š” Public์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ ์–ด๋””์„ ๊ฐ€๋Š” ๊ฒŒํ„ฐ ์„ธํ„ฐ์™€ ๊ฐ™์ด ์ ‘๊ทผ์„ ์ œํ•œํ•ด์•ผํ•  ๋•Œ๊ฐ€ ์žˆ๋Š”๋ฐ ๊ทธ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ”„๋กœํผํ‹ฐ์ด๋‹ค.

 

์˜ˆ์ œ_1 ํ”„๋กœํผํ‹ฐ ์ง์ ‘ ์‚ฌ์šฉ

์œ„ java์˜ ์˜ˆ์ œ์ฒ˜๋Ÿผ getter์„ get_name()์œผ๋กœ setter์„ set_name()์œผ๋กœ ์ •์˜ํ•œ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  property๋ฅผ ์ด์šฉํ•˜์—ฌ ์†์„ฑ์„ ์ •์˜ํ•œ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด ์šฐ๋ฆฌ๋Š” __init__()์— ์†์„ฑ์œผ๋กœ ์ •์˜๋œ hidden_name์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

class Robot():
    def __init__(self, input_name):
        self.hidden_name = input_name

    def get_name(self):
        print('inside the getter')
        return self.hidden_name

    def set_name(self, input_name):
        print('inside the setter')
        self.hidden_name = input_name

    name = property(get_name, set_name)

 

์˜ˆ์ œ_2 ๋ฐ์ปค๋ ˆ์ดํ„ฐ๋ฅผ ์ด์šฉํ•œ ํ”„๋กœํผํ‹ฐ ์ •์˜

 

๋ฐ์ปค๋ ˆ์ดํ„ฐ๋ฅผ ์ด์šฉํ•  ๋•Œ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ์ปค๋ ˆ์ดํ„ฐ๋ฅผ ์ด์šฉํ•œ๋‹ค.

  • getter ๋ฉ”์„œ๋“œ ์•ž์— @property ๋ฐ์ปค๋ ˆ์ดํ„ฐ ์ถ”๊ฐ€ํ•˜๊ธฐ
@property
    def name(self):
        print('inside the getter')
        return self.hidden_name
  • setter ๋ฉ”์„œ๋“œ ์•ž์— @name.setter๋ฐ์ปค๋ ˆ์ดํ„ฐ ์ถ”๊ฐ€ํ•˜๊ธฐ
@name.setter
    def name(self, input_name):
        print('inside the setter')
        self.hidden_name = input_name

์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€ name() ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„์„ ๊ฐ™๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

get_name()๊ณผ set_name() ๋ฉ”์„œ๋“œ๋Š” ๋ณด์ด์ง€ ์•Š์ง€๋งŒ ์—ฌ์ „ํžˆ name์„ ์†์„ฑ์ฒ˜๋Ÿผ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

private ๋„ค์ž„ ๋งน๊ธ€๋ง

 

์œ„์˜ ์˜ˆ์ œ์—์„œ hidden_name์†์„ฑ์„ ํ˜ธ์ถœํ–ˆ๋Š”๋ฐ, ์šฐ์—ฐํžˆ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ hidden_name์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ž˜์Šค ์ •์˜ ์™ธ๋ถ€์—์„œ ๋ณผ ์ˆ˜ ์—†๋„๋ก ์†์„ฑ์„ ์ˆจ๊ธฐ๋Š” ๊ฒƒ์ด๋‹ค.

 

๋„ค์ž„ ๋งน๊ธ€๋ง์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ธ๋”์Šค์ฝ”์–ด ๋‘ ๋ฒˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค __name

 
๋„ค์ž„ ๋งน๊ธ€๋ง์„ ํ†ตํ•˜์—ฌ hidden_name์„ __name์œผ๋กœ ๋ฐ”๊ฟ”๋ณด์ž.

 

๋„ค์ž„ ๋งน๊ธ€๋ง์„ ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ

class Robot():
    def __init__(self, input_name):
        self.hidden_name = input_name

    @property
    def name(self):
        print('inside the getter')
        return self.hidden_name

    @name.setter
    def name(self, input_name):
        print('inside the setter')
        self.hidden_name = input_name

game_robot = Robot('jang')

print(game_robot.hidden_name)

 

์–ด์‹œ์ŠคํŠธ ์ฝ”๋“œ๋กœ ๋งˆ์ง€๋ง‰ print(game_robot.hidden_name)์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ๋„ค์ž„ ๋งน๊ธ€๋ง์„ ์ˆ˜ํ–‰ํ•œ ํ›„

 

class Robot():
    def __init__(self, input_name):
        self.__name = input_name

    @property
    def name(self):
        print('inside the getter')
        return self.__name

    @name.setter
    def name(self, input_name):
        print('inside the setter')
        self.__name = input_name

game_robot = Robot('jang')

 

๋” ์ด์ƒ ์šฐ๋ฆฌ๋Š” hidden_name์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.

 

 

๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์Œ ์™„๋ฒฝํžˆ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์˜๋„์ ์ธ ์ง์ ‘ ์ ‘๊ทผ์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.

๋Œ“๊ธ€