Python 기초 | 객체 지향과 클래스

원준·2023년 5월 23일

파이썬

목록 보기
13/21

1. 객체 지향 (oop, object oriented programing) 이란?

  • 객체와 객체 사이의 상호 작용으로 프로그램을 구성하는 패러다임

2. 객체지향의 특징

1) 객체란??

  • 추상화와 캡슐화의 결과를 말한다.
  • 데이터 필드와 메소드를 가진다.

2) 추상화

  • 공통된 속성이나 기능 도출 (주요한 특징만 남기는 것)
  • 종류 : 변수, 메소드 등

3) 캡슐화

  • 데이터의 구조와 연산을 결합한다.
  • 캡슐 하나에 한꺼번에 합친다.

4) 상속

  • 상위 개념의 특징이 하위 개념에 전달된다.

5) 다형성

  • 유사 객체의 사용성을 그대로 유지

2. 클래스

  • 객체를 정의한 것 (객체의 설계도를 말한다.)

  • 데이터 필드 (멤버 변수, 속성)

    • 객체가 가지고 있는 변수
  • 메소드

    • 객체가 가지고 있는 함수
  • 기본 사용 법

    class 클래스이름:
        클래스 맴버 변수
        메소드
  • 암묵적인 규칙

    • 첫 글자 대문자 사용한다.
    • '_' 쓰지 않는다.
    • 단어가 구분될때 대문자로 구분한다.
  • 클래스 실제 사용 예시

    class Car:
        def move(self):
            print("move")
    
    class SportsCar:
        pass

3. self 매개변수

  • 모든 메소드의 첫번째 매개변수

  • 메소드의 정의에는 사용되지만, 호출에는 사용되지 않는다.

  • 객체 자신을 참조하여 클래스에 정의된 멤버의 접근할때 사용한다.

  • 클래스 안에 있는 메서드는 무조건 self가 들어가야한다.

  • self를 통해 변수를 만들 수 있다.

    • 단, 같은 클래스 내에서만 사용할 수 있고 값 할당 전에 사용시 오류가 발생한다.
  • 사용 예시

    class Person:
        def say(self):
            self.name = "셀프 이름 작성" # name 매개변수에 값을 저장한다.
            print("Hello")
        def eat(self, food):
            self.food = food # 매개 변수 받은 것을 self로 저장한다.
            print(f"{self.food} 먹는다.")
            print(f"{self.name} 출력") # 저장한 self.name을 불러올 수 있다.
            self.sleep()
        def sleep(self):
            print(f"{self.food} 먹고 잔다") # 저장한 self.food를 불러올 수 있다.
    
    person_1 = Person()
    person_1.say()
    person_1.eat("밥")
    person_1.sleep()

4. initializer 초기자

  • 초기화할 때 동작 방법 및 여부

  • init 함수로 무조건 사용 해야한다. (생성과 동시에 초기화를 진행함)

  • 사용 예시

    class Person:
        def __init__(self, name, age, gender, phone): # 매개변수로 받은 값 저장
            self.name = name
            self.age = age
            self.gender = gender
            self.phone = phone
            print("initialize")
        def say_name(self):
            print(self.name)
        def introduce(self):
            print(f"이름 : {self.name}, 나이 : {self.age}, 성별 : {self.gender}")
    
    # 초기화를 하면서 값을 할당 받아 저장한다.
    person_3 = Person("이름", 20, "남자", "010-5555-5555") 
    person_3.say_name() # 초기화 하면서 값을 할당 한 후 사용해보는 메서드
    person_3.introduce()

5. inheritance 상속

  • 부모 클래스의 정의되어 있는 메서드를 전부 사용 할 수 있다.

  • 부모 클래스 중 같은 이름의 메서드를 정의 했다면, 자식 메서드가 사용된다.

    • 메서드 재정의, 메서드 오버라이딩 라고 한다.
  • 사용 예시

    # Animal 클래스
    class Animal:
        def __init__(self, name): #초기자
            self.name = name
            print(f"애니멀 {self.name}이 생성됨.")
        def say(self):
            print("")
        def change_aniimal(self, name):
            self.name = name
            print(f'{self.name}으로 교체 됨')
        # 상속 사용법
    
    # Dog 클래스 (Animal 상속 함)
    # 부모 -> Animal, 자식 -> Dog
    class Dog(Animal):
        def say(self): # 부모에게 같은 메서드가 있어도 재 정의가 가능하다.
            print("ㅁ어멍")
    
    my_dog = Dog("검둥이")
    my_dog.say() # 'ㅁ어멍' 출력
    my_dog.change_aniimal("으응") # 부모의 메서드를 사용 할 수 있다.
    
    # Cat 클래스 (Animal 상속 함)
    class Cat(Animal):
        def say(self):
            print("야야옹")
    
    my_cat = Cat("고얭이")
    my_cat.say()
profile
공부해보자

0개의 댓글