22.10.17 - 파이썬 OOP(객체 지향 프로그래밍)(2)

LaMelo·2022년 10월 17일
0

jupyter

목록 보기
16/29
post-thumbnail

1. self 키워드

  • self는 클래스로 생성한 변수(== 인스턴스) 자신의 주소를 나타내는 키워드입니다.

  • 이렇게 자신의 주소를 나타내야 하는 이유는, 인스턴스는 양식은 같지만 내용물은 독립적으로 저장되기 때문입니다.

  • self 키워드를 이용하게 되면 좀 더 편하게 자료를 불러올 수 있습니다.

      • self 키워드를 이용해서 굳이 여러 줄로 원하는 출력 정보를 기입하지 않고도 한줄로 해결할 수 있다.
    • 강사 정보를 기입 후 출력해보자.
    • 앞에서 def t_info(self)로 세부 정보를 함수로 불러왔을 경우 출력되는 형식을 지정하였다.
      • 실제 출력형태를 보면 t1.t_info()에서 앞에 자칭 100번지로 지정이 되어 있는 t1의 주소를 위 함수의 self로 받아 출력 형식대로 정보를 출력하였다.

2. self 키워드 응용

  • 내용물을 좀 더 편하게 초기화시킬수 있도록 클래스를 다시 정의합니다.
  • 위 3개 변수에 값을 한 줄로 넣어주는 메서드(함수)를 이용해 좀 더 압축적으로 코딩이 가능합니다.
    • 위의 내용을 압축한 함수를 실행시켜 봅시다.
    • save_info라는 함수에 n, s, a라는 변수들을 지정해 놓고 그 자리에 정보를 입력했지만 결과값은 0이 뜨고 말았다.
    • 왜 이런 결과가 도출된 것일까요?
      • 그것은 함수에 변수를 잡을때 self를 붙여주지 않았기 때문에 컴퓨터 입장에서는 클래스 수준에서의 변수를 말하는 것인지 save_info 함수 수준에서의 변수인지 구별하지 못하기 때문입니다.
      • 밑의 그림에서 나오듯 save_info()함수의 변수들에 self가 붙은 것들은 클래스 소속이지 함수의 소속이 아니다.(클래스에서 설정한 형식을 끌어와야 하기 때문에)
      • 클래스 소속의 변수들을 멤버변수라고 하며 필드(feild)라고도 부른다.

  - 이런 식의 구분은 self가 어떻게 활용되는가에 대해 좀 더 보여준다고 생각합니다. self를 붙이게 되면 결과값이 어떻게 될지 봅시다.
  ![](https://velog.velcdn.com/images/ball/post/f7c8b39d-d0aa-4ced-b533-d94930d0bf7d/image.png)
  - 입력한 자료값대로 출력이 되는 것을 알 수 있습니다.
  

3. 생성자 함수

생성자 함수

  • 클래스 내부에 __init__ 이라는 명칭으로 선언한 함수는 생성자 함수가 됩니다.

  • 생성자 함수를 정의하면 사용자가 클래스의 인스턴스를 생성할 때 반드시 입력해야 하는 요소를 강제로 입력해야만 하는 상황을 만들어 줄 수 있습니다.

  • 클래스를 생성한 후 자료값을 안넣고 실행하는 경우가 생김 (출력값이 0으로 뜨거나) 이러한 불편점을 개선하기 위해 클래스 생성 시에 자료값을 넣어주게끔 강제하는 함수이다. -> 사용자 입장에서도 절차가 줄어들어 편하다.

  • 클래스 생성 및 __init__ 함수 생성

  • __init__ 함수는 생성자 함수로 생성시 자동으로 1번만 호출되는 함수입니다.

    • 생성 시에 init 에서 필요로 하는 자료를 입력해야 합니다.
      • class Cat 밑에 함수 __init__을 설정하였기 때문에 class Cat 호출 시 __init__이 불려나온다. (self와 비슷한 개념)
      • __init__ 함수를 생성자 함수라고 한다.
      • 변수 생성과 함께 정보를 입력하지 않으면 오류 출력 : 같이 입력함으로서 효율성을 높일 수 있다.
  • 예제

      1. cat1에 대해서 상세 정보를 조회할 수 있는 get_info()와
      1. print("야옹 야옹")을 실행해주는 함수 meow()를 정의해주시고 호출해주세요.
  • 코드

  • 변수는 특정 대상의 상태 / 메서드는 특정 대상의 행동 : 결과값은 상태(변수)값에 따라 달라진다. 마지막에 나오는 meow함수는 db의 상태에 영향을 받는다.
profile
가즈아~

0개의 댓글