인프런 커뮤니티 질문&답변

lsj59285님의 프로필 이미지
lsj59285

작성한 질문수

문과생도, 비전공자도, 누구나 배울 수 있는 파이썬(Python)!

4.4 클래스의 정의와 호출 part2

같은 클래스지만 다른 메소드 변수에 접근이 가능한 이유

작성

·

477

0

shoot 메소드에서 __init__ 메소드의 파라미터인 wow_height에 접근할 수 있는 이유가 뭐죠?

__init__ 메소드의 파라미터 wow_height는 지역 변수 아닌가요?

자바에서는 같은 클래스 안에 있는 메소드라도 다른 메소드의 변수에 접근할 수 없는 걸로 알고 있거든요.

답변 3

1

DeepingSauce님의 프로필 이미지
DeepingSauce
지식공유자

클래스로 만든 인스턴스 객체는 프로그램이 종료되기 전까지 메모리에서 살아있게 됩니다. 물론 그 객체에 설정한 인스턴스변수 값도 같이 살아있게 됩니다. 이는 클래스를 통해 객체가 만들어질 때 부여한 변수 값들이겠죠. 이러한 기능을 할 수 잇도록 만드는 것이 클래서 정의시 사용하는`self` 라는 기능입니다. 또한 말씀하신 함수들은 클래스(틀)에서 정의된 함수들이기 때문에, 객체별로 당연히 behavior로써 갖고 있게 되고,  내부에서 해당 객체별 상태값(말씀하신 self.변수값)에 접근할 수 있는 것 입니다.

참고로 '클래스(혹은 인스턴스) ""내""에서(e.g. 클래스에 정의된 함수) 인스턴스 변수 접근하는 것은 어떤 언어든지 가능합니다. 다만, 클래스 """외부"""에서 해당 인스턴스 변수를 접근할 수 있냐 없냐는 언어별로 차이가 있다 라고 생각하시면 될 것 같습니다.

1

DeepingSauce님의 프로필 이미지
DeepingSauce
지식공유자

안녕하세요!

클래스의 함수에서 정의하는 변수는 일반 함수 내에서의 변수(지역변수) 와는 성격이 다릅니다.  해당 클래스로 만든 객체가 살아있는 동안 계속 유지가 됩니다. 그렇게 해주는것이 self의 역할입니다.

자바도 비슷하게 인스턴스 변수가 있지만, 기본적으로 자바에는 public, private, protect 등의 문법으로 외부에서 인스턴스변수의 직접 접근을 막을 수 있습니다. 파이썬은 이러한 문법적 제약을 최대한 풀어놓아 최대한 자유롭게 코딩할 수 있도록 만든것이 특징입니다. 물론 각 방법의 장단점도 각각 존재하구요.

도움이 되시길 바랍니다

 

0

lsj59285님의 프로필 이미지
lsj59285
질문자

해당 클래스로 만든 객체가 살아있다는 것이 다른 두 메소드에서 변수를 공유하는 것과 어떤 연관이 있는지... 초보자라 그런지 이해가 잘 안 되네요.

그러니까 결론은 그냥 "파이썬 시스템은 자바와 다르게 동일 클래스 안에 선언된 메소드끼리는 self를 통해 자유롭게 변수에 접근할 수 있도록 만들어졌다."로 이해하고 외우면 되는 건가요?

lsj59285님의 프로필 이미지
lsj59285

작성한 질문수

질문하기