프로그래밍/python

OOP 1탄(Class vs Instance)

luke12 2022. 5. 11. 15:56

List의 한계

여러 객체를 만들 때 아래처럼 코드를 순차적으로 추가한다면 오류가 날 가능성이 높다. 또한 직업이 Software Engineer이 아니라 Designer인 경우라면, 또는 복잡한 객체들을 나타내는 경우. 따라서 List는 완벽한 데이터 구조가 아니고 클래스가 나온 이유이다.

se1 = ["Software Engineer", "Max", 20, "junior", 5000]
se2 = ["Software Engineer", "Lisa", 25, "senior", 5000]

Class

클래스는 기본적으로 무엇을 정의해야하는 청사진이고 파이썬에서 클래스를 정의하는 방법은 아래와 같다.

class SoftwareEngineer:
    pass

Instance

클래스는 데이터 구조의 청사진일뿐이지만 인스턴스는 아래와 같이 정의하고 인스턴스를 생성하여 구체적인 자료를 넣는다.

se1 = SoftwareEngineer()

초기화

클래스의 가장 처음에는 초기화 함수(init)가 들어가서 함수의 초기화를 해야한다.

self.에 담긴 변수들은 인스턴스 속성이라고 한다.

class SoftwareEngineer:

    def __init__(self, name, age, level, salary) :
        self.name = name
        self.age = age
        self.level = level
        self.salary = salary

이후 인스턴스에 값을 넣어주면 인스턴스 속성에 접근할 수 있고 print를 통해서 저장된 값을 출력할 수 있다.

class SoftwareEngineer:

    def __init__(self, name, age, level, salary) :
        self.name = name
        self.age = age
        self.level = level
        self.salary = salary


se1 = SoftwareEngineer("Max", 20, "junior", 5000)
print(se1.name, se1.age)

클래스 속성

인스턴스 속성은 초기화 함수 안에 담겨있었다. 클래스 속성은 아래의 코드처럼 작성을 한다. alias = "Keyboard Magician" 이렇게 코드를 작성하면 클래스의 별칭을 사용할 수 있다.

class SoftwareEngineer:

    alias = "Keyboard Magician"

    def __init__(self, name, age, level, salary) :
        self.name = name
        self.age = age
        self.level = level
        self.salary = salary


se1 = SoftwareEngineer("Max", 20, "junior", 5000)
print(se1.name, se1.age)

클래스 속성과 인스턴스 속성의 가장 큰 차이는 print를 할때 인스턴스 속성은 인스턴스를 생성하고 접근을 해야하지만 클래스 속성은 클래스에서 바로 가져올 수 있다.

class SoftwareEngineer:

    alias = "Keyboard Magician"

    def __init__(self, name, age, level, salary) :
        self.name = name
        self.age = age
        self.level = level
        self.salary = salary


se1 = SoftwareEngineer("Max", 20, "junior", 5000)
print(se1.name, se1.age)
print(SoftwareEngineer.alias)

요약

  1. 클래스는 청사진으로 사용된다. 즉 실질적인 값을 가지고 있지 않는다.
  2. 실질적인 값을 가지는 인스턴스를 생성
  3. 클래스와 인스턴스의 차이
  4. 인스턴스 속성
  5. __inif__(self)이라는 초기화 함수의 생성과 self가 꼭 들어가야한다.
  6. 클래스 속성