내일배움단 11일메이킹챌린지 4일차

파이썬 객체지향, class

class를 정의하는 문법에 대해 오늘 배웠다.
출처 - 유튜브 동빈나님 강의 : https://www.youtube.com/watch?v=YQhJsWj6ydU&list=PLRx0vPvlEmdD8u2rzxmQ-L97jHTHiiDdy&index=35

객체지향형 프로그래밍에서 객체의 설계도가 되는 것이 클래스class.
class(에 정의된 내용)를 통해 만든 특정 객체를 인스턴스라고 부른다.

클래스는 크게 두가지로 이루어져있다.
클래스 멤버 : 클래스 내부에 포함된 변수
클래스 메소드 : 클래수 내부에 포함된 함수

파이썬 클래스를 정의할 때는 생성자가 반드시 필요하고, 소멸자는 권장된다.
소멸자가 없으면 클래스로 인스턴스가 생성될 때 거기에 할당된 메모리가 계속 할당된 채로 남아있기 때문에,
쓸모를 다 했을 때 소멸(메모리 공간을 다시 쓸 수 있게 반환)될 수 있도록 클래스 내에 정의해주는 것이 소멸자.

클래스 내에서 자기 자신을 표현하기 위해 self 를 사용한다.

생성자: 클래스에 반드시 정의되어있어야 하고, 함수 형태로 정의. 이름은 __init__이어야하고 self라는 매개변수를 가져야한다. 아래 예시처럼.

class Classname:
	# 클래스의 생성자
    def __init__(self, name, color):
    	self.name = name # 클래스의 멤버
        self.color = color # 클래스의 멤버

	# 클래스의 메소드
    def show_info(self):
    	print("이름:", self.name, "/ 색상:", self.color)
        
       ## 일반적으로 Setter 메소드, Setter함수라고 불리는 것이 클래스 내에 많이 작성됨
       ## 인스턴스 내의 멤버(변수)의 값을 바꿀 수 있게 해주는 메소드
    def set_name(self, name):
    	self.name = name    
        
        # 소멸자
    def __del__(self):
    	print("인스턴스를 소멸시킨다")
        
 
car1 = Classname("소나타", "빨간색")
car1.show_info() # 결과 ->  이름: 소나타 / 색상 : 빨간색
print(car1.name, " 사고 싶다!") # 결과 -> 소나타 사고 싶다!
##  "." 을 이용하여 인스턴스 내의 멤버(클래스 안에 정의했던 변수)를 불러올 수 있다.

car2 = Classname("아반떼", "검은색")
car2.show_info() # 결과 -> 이름: 아반떼 / 색상: 검은색
car2.set_name("소나타")
print(car2.name) # 결과 -> 소나타

del car1 # 결과 -> 메모리상에서 할당 해제 되고, 우리는 print문을 넣어두었으므로 해당 내용 출력.

파이썬 class 상속

상속: 다른 클래스의 멤버 변수와 메소드를 물려받아 사용하는 기법
부모와 자식 관계가 존재
자식 클래스: 부모 클래스를 상속 받은 클래스

class Unit:
	
    def __init__(self, name, power):
    	self.name = name
        self.power = power
        
    def attack(self):
    	print(self.name, "이(가) 공격을 수행합니다. [전투력:", self.power, "]")


unit = Unit("홍길동," 375)
unit.attack() # 결과 -> 홍길동 이(가) 공격을 수행합니다. [전투력: 375 ]

#Unit 클래스를 상속받은 Monster클래스


class Monster(Unit):
	
    def __init__(self, name, power, type):
    	self.name = name
        self.power = power
        self.type = type
        
    def show_info(self):
    print("몬스터 이름:", self.name. "/ 몬스터 종류:", self.type)
       
monster = Monster("슬라임", 10, "초급")
monster.attack() #결과 -> 슬라임 이(가) 공격을 수행합니다. [전투력: 10 ]
monster.show_info #결과 -> 몬스터 이름: 슬라임 / 몬스터 종류: 초급

#자식 클래스에서는 부모 클래스의 메소드를 이용할 수 있지만, 부모 클래스는 자식 클래스에서 정의된 메소드 이용 불가
#자식 클래스에서 부모 클래스에 있는 것과 동일한 이름의 메소드나 멤버(변수)를 가진다면 자식클래스의 것을 먼저(우선) 처리(적용)

아무래도

우리 조의 프로젝트가 너무 거대한 것 같다. ㅋㅋ
결제모듈은 넣을 계획이 없지만 그 외엔 거의 본격적인 쇼핑몰 구현에 가까운 프로젝트가 되어서.

이미 강의의 내용은 벗어났고,
앞으로도 필요할 파이썬의 문법을 좀 더 공부했다.

특히 내가 약한 부분인 객체지향형 프로그래밍. OOP.
팀원 중 한분이 관리자페이지 기능 구현을 맡아서 구현하는 중에
flask-admin 모듈(패키지)를 import 했는데,
사실 이용법만 알고 써도 상관은 없지만, 코드가 이해가 안됐다.

일단 파이썬의 class 문법을 몰랐고,
파이썬뿐만 아니라 다른 언어에서도 객체지향형 코드에 대해 어렴풋하게만 이해하고 써온 게 가장 큰 문제.

좋은 웹페이지 즐겨찾기