Python(파이썬) - 인스턴스 변수와 메서드 알아보기 지난시간에는 계산기 제작하는 과정에서 클래스와 생성자를 알아보았는데요 클래스안에서 사용될 인스턴스 변수와 메서드는 무엇이고 어떠한 역할을 하는지 알아보도록 하겠습니다 위 그림은
객체제작때 사용한 그림입니다 함수부분의 sum, sub, multi, dvide 가 바로 메소드 이며, 이번 포스팅부터는 함수를 메서드로 지칭하여 부르도록 하겠습니다 이제 클래스안에 sum 이라는 메소드를 추가해보도록 하겠습니다 class Calc(object): def __init__(self, num1, num2): print(num1,num2) def sum(): C1 = Calc(20,10) 5번째 줄에 보시면 sum이라는 메소드가 추가된것을 확인 하실수 있습니다 문법은 함수문법과 동일합니다. class Calc(object): def __init__(self, num1, num2): print(num1,num2) def sum(): return num1 + num2 C1 = Calc(20,10) print(C1.sum()) 이제 메소드의 전달한 매개변수의 값을 더한 값을 돌려 sum함수의 리턴값으로 만들었으며, print함수를 이용하여 C1의 객체의 sum 함수를 실행하게 되면 에러가 발생하게 됩니다 생성자에 전달받은 num1, num2 의 매개변수는 지역변수이기 때문입니다 위의 코드를 이용하여 메소드를 제작후 실행하였다면 실행이 안되지 않고 에러가 발생 되었을 것입니다 실행이 되지 않는 이유는 생성자로 전달한 매개변수는 지역변수이기 때문입니다 위 그림을 보시면 num1, num2는 지역변수이기때문에 실행이 되지 않았던 것입니다 그렇다면 클래스 안에 모든 메소드들이 변수를 사용하려면 인스턴스 변수를 선언해 주어야 합니다 class Calc(object): def __init__(self, num1, num2): self.n1 = num1 self.n2 = num2 def sum(self): return self.n1 + self.n2 C1 = Calc(20,10) print(C1.sum()) 3, 4번째 줄을 보시면 첫 번째 매개변수를 이용하여 변수를 지정한 것을 보실 수 있습니다 생성자 포스팅에서 말씀드린 것처럼 첫 번째 매개변수가 인스턴스라고 하였습니다 즉 생성자의 첫 번째 매개변수(인스턴스)를 이용하여 인스턴스의 소속되어 있는 변수를 지정하게 되는 것입니다 또한 메소드에서 인스턴스 변수를 사용하기 위해 sum 또한 매개변수 self를 넣어주신 후 사용하시면 됩니다. 실행결과를 보시면 20 + 10의 결과값이 나오는 것을 확인 하실수 있습니다. class Calc(object): def __init__(self, num1, num2): self.num1 = num1 self.num2 = num2 def sum(self): return self.num1 + self.num2 def sub(self): return self.num1 - self.num2 C1 = Calc(20,10) print(C1.sum()) print(C1.sub()) 이번에는 코드상에 빼기 함수를 추가하였으며, 실행결과를 보시면 20 - 10의 결과값이 나오는 것을 확인 하실수 있습니다. 파이썬에서 self 는 c#이나 자바의 this와 같은 역할을 한다. 접근제한이 적용되어 해당 클래스의 변수나 메서드에 접근하여 데이터를 처리하고 가공할 수 있다. C#이나 자바의 this 의 기능을 이해한다면 파이썬의 self를 이해하는데는 어렵지 않을 것이다. 파이썬 클래스 self 파라미터 역할과 사용법python class self parameter파이썬 클래스를 생성하고 초기화할 때 init 메서드를 사용한다. init 메서드는 자바나 C#의 생성자와 비슷한 동작을 한다. 차이가 있다면 파이썬 생성자인 init 함수를 사용할 때 self 파라미터를 인자값 첫번째로 넣어주어야 한다. self 파라미터 역할파이썬의 self 파라미터은 자바나 C#의 this 와 비슷한 역할을 한다. 자바나 c# 에서 this 는 변수명이 비슷하거나 같은 단어로 중복이 될 떄 해당 클래스내의 변수 또는 함수들을 가리킨다. 파이썬의 self도 마찬가지 self 가 작성된 클래스 내의 변수와 메서드 등에 접근할 수 있게 한다. 접근제한이 있다면 해당 클래스에서만 접근이 가능하다. self 생략파이썬에서 생성자 역할을 하는 init 함수를 사용할 때 굳이 self 란 단어를 사용하지 않아도 되지만, 대체되는 다른 단어는 넣어주어야 한다. 어떤 이름을 사용해도 상관없다. 단지, self 란 단어를 대체하여 사용될 뿐이지만 역할은 같다. 샘플코드직접코드를 작성해 본다. self 란 단어를 사용하지 않고 임의의 다른 단어를 사용할 것이다. 클래스에 지정된 init 함수나 클래스 메서드나 인자값을 엉터리로 마구잡이로 넣었다. 그럼에도 파이썬은 self 인자값을 사용했을 때와 같은 역할을 한다.
결과화면을 보자. 무엇을 어떻게 작성하든 self 을 작성했을 때와 동일한 작업을 수행하는 것을 볼 수 있다. 굳이 의미를 부여해 본다.c#이나 자바에 익숙한 사람이라면 개념적으로 금방 이해할 수 있다. 하지만, 명명법에 대해서는 난해할 수 있다. 그렇다면 비슷하게 이름을 작성해 보면 어떨까. 물론, 메서드의 이름과 메서드에 사용하는 인자값의 단어는 의미가 있는 것이 좋다. 위의 코드를 조금만 변경해 본다.
변경된 부분은 클래스의 self 인자값고 메서드의 인자값 뿐이다. 그럼에도 동일한 결과가 나타나는 것을 볼 수 있다. 어쨌든 이름을 다르게 사용하더라도 self 와 같은 역할을 한다라는 것만 이해하자. |