프로그래밍/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)
요약
- 클래스는 청사진으로 사용된다. 즉 실질적인 값을 가지고 있지 않는다.
- 실질적인 값을 가지는 인스턴스를 생성
- 클래스와 인스턴스의 차이
- 인스턴스 속성
- __inif__(self)이라는 초기화 함수의 생성과 self가 꼭 들어가야한다.
- 클래스 속성