Fundamental 13. n면체 주사위 위젯 만들기

<학습 목적>
1. 파이썬의 클래스 문법
2. 클래스를 활용한 객체 지향 프로그래밍

13.2~13.3 객체, 객체지향 프로그래밍

  1. 파이썬에서는 모든 것이 객체이다.
  2. 객체라고 불리는 것들은 모두 변수에 할당될 수 있고 어떤 함수의 인자로 넘겨질 수 있다.
  3. 파이썬에서 정의된 모든 클래스는 object 클래스를 상속받고 있다.
  4. object 클래스는 변수 할당과 object id값 부여를 담당한다.
  5. id() : 프로그램이 동작하는 동안 객체의 고유값(identity)을 반환한다.
  6. 객체는 상태를 나타내는 속성(attribute) 과 동작을 나타내는 메서드(method) 가 있다.
  7. 객체의 속성은 변수로 구현되고 객체의 메서드는 함수로 구현된다.
  8. 얕은 복사 copy.copy() : 원본 객체의 주소를 복사
  9. 깊은 복사 copy.deepcopy() : 원본 객체의 값을 복사
  10. 객체지향 프로그래밍은 객체를 활용한 모든 프로그래밍을 말한다.
  11. 거의 모든 프로그래밍 언어에서 사용되어 파이썬 또한 객체지향 프로그래밍 기반이다.
  12. 미국의 데니스리치(Dennis Ritchie)가 만든 C언어는 절차지향 프로그래밍 기반이다.
  13. 1995년에 만들어진 Java는 객체지향 프로그래밍 기반이다.

13.4 클래스 기본문법 : 클래스 선언 및 인스턴스화

  1. class mose : id(mose)를 여러 번 출력해도 같은 id값이 나온다.
  2. class mose() : id(mose())를 출력할 때마다 다른 id값이 나온다.
  3. 인스턴스화 : 클래스의 사용을 위해서 클래스로 객체를 만들어주는 과정
  4. 인스턴스화는 선언한 클래스 이름 mose에 ()를 적어준다. 즉, mose()
  5. PEP8 : 파이썬의 코딩 스타일을 개정한 문서
  6. CamelCase : 각 단어의 앞 글자를 대문자로 대치 (Ex. mystage → MyStage)
  7. snake_case : 모든 단어는 소문자, 단어 사이에 언더바 (Ex. mystage → my_stage)
  8. 클래스 이름은 주로 명사, 함수 이름은 주로 동사로 간주한다.

13.5~13.6 클래스 기본문법 : 클래스 속성과 메서드, 생성자

  1. 클래스의 속성은 상태(state)를 표현한다. 속성은 변수로서 나타낸다.
  2. 클래스의 메서드는 동작(behavior)을 표현한다. 메서드는 def 키워드로 나타낸다.
  3. 클래스 속성 접근 방법 : (인스턴스 객체명).(속성명)
  4. 클래스 메서드 호출 방법 : (인스턴스 객체명).(메소드명)
  5. 클래스 메서드 정의 시 self 인자를 사용하지 않으면 오류가 생긴다.
  6. 인스턴스의 속성으로 사용하고 싶은 변수는 self. 를 쓰면 된다.
  7. 객체 안에서 self를 사용하면 인스턴스 객체의 고유 속성을 나타낼 수 있다.
  8. 아래 코드블록과 같이 self. 라는 접두사 없이 일반 변수와 같게 선언된 변수는 메서드 내부에서 사용되어 self. 를 사용한 참조가 불가능하다.
  9. self는 자기 자신을 말하며 클래스에 의해 생성된 객체(인스턴스)를 의미한다.
  10. 메소드를 호출할 때 self 인자를 전달하지 않아도 된다. self 의 값은 대체로 인터프리터가 제공한다.

★11~14★
11. init 메서드 안에 인자를 전달함으로서 인스턴스 객체의 속성을 초기화할 수 있다.

12. init 메서드로 정의된 속성인 color와 category는 클래스를 인스턴스화할 때 값을 설정해줄 수 있다. 이를 초기화라고 한다.
13. init 함수는 생성자(constructor)로 정의한다.
14. init 함수 또한 def 키워드로 정의된 클래스 안의 메서드이므로 self 인자를 써야 한다.

  1. 파이썬의 생성자는 초기화만 수행한다.
  2. 객체의 인스턴스화는 클래스를 사용할 때 변수 할당을 통해 이루어진다.
  3. 앞뒤로 언더바가 2개씩 있는 메서드를 매직 메서드라고 한다. 알아보러 가즈아

13.7 클래스 기본 문법 : 클래스 변수와 인스턴스 변수

  1. 클래스 내 변수를 설정하는 방법은 보통의 변수와 동일하게 변수명을 쓰고 값을 할당하거나 매직 init 메서드 안에 self. 와 함께 설정하는 방법으로 총 2가지이다.
  2. 결론부터 설명하면, 객체 단위로 변경되는 변수는 인스턴스 변수로 선언해야 한다.
  3. 클래스 변수 : 클래스에서 바로 선언된 속성을 말한다.
  4. 클래스에 의해 생성된 모든 객체에서 같은 값을 조회할 때 사용 가능하다.
  5. 인스턴스 변수 : 매직 init 메서드 안에서 self를 사용해 선언된 속성을 말한다.
  6. 즉, 13.6의 코드블록에 따르면 color, catagory는 인스턴스 변수가 된다.
  7. 클래스 변수가 가진 속성은 self에 들어가는 인자들이 공유한다.
  8. 인스턴스 변수가 가진 속성은 self에 들어가는 인자들이 공유하지 않는다.
  9. 위에서 기술한 내용을 쉽게 예를 들자면, Car 클래스에 만들어진 car 객체의 제조사는 항상 같지만, 그 차의 색상이나 종류가 다를 수 있다고 한다면 제조사가 클래스 변수가 되고 색상이나 종류는 인스턴스 변수가 된다. 인스턴스 변수는 초기화가 가능하도록 구현한다.

13.8 객체지향 프로그래밍을 하는 이유

  1. 추상화(abstraction) : 복잡한 자료나 모듈, 시스템 등으로부터 핵심적 개념이나 기능을 뽑아내는 것
  2. 캡슐화(encapsulation) : 객체의 속성과 메서드를 하나로 묶어 실제로 구현한 내용의 일부분을 외부에 숨기거나 은닉하는 것

13.9 클래스의 상속

  1. Car 클래스의 기능을 유지한 채 다른 속성이 추가된 새로운 클래스인 NewCar를 선언할 때 상속 기능을 쓰게 된다.
  2. 상속은 새로운 클래스명 바로 다음 소괄호 안에 상속받을 클래스명을 적는다.
  3. 여기서 기존에 존재하는 Car 클래스를 부모 클래스, 또는 슈퍼 클래스라고 하고, 새롭게 선언한 NewCar 클래스를 자식 클래스, 혹은 서브 클래스라고 한다.
  4. 클래스 상속에 사용되는 3가지 사용법 : 메서드 추가(add), 메소드 재정의(override), 부모 메서드 호출(super())
  5. 메소드 재정의 : 기존에 있는 메서드를 변경하는 것
  6. super() : 파이썬의 내장함수로 자식 클래스에서 부모 클래스의 메서드를 호출할 때 쓴다.
  7. 결국 상속은 기존에 있는 코드를 재사용하기 위해 만들어진 기능이다.
profile
날개를 달고 날아오르자!

0개의 댓글