[파이썬] 011_객체 지향 프로그래밍 (Class) & 예외 ⭐️

Soo·2023년 8월 7일
0

✏️ 객체 지향 프로그래밍

  • 객체 = '속성 + 기능'으로 구성
  • 장점 : 객체에만 수정 내용을 넣으면 되므로 코드 재사용, 모듈화 편이
  • '클래스'

💡 클래스(class) 란???

# calculator3.py

class Calculator:
	def __init__(self):
	self.result = 0

	def add(self, num):
      self.result += num
      return self.result

cal1 = Calculator()
cal2 = Calculator()

print(cal1.add(3))
print(cal1.add(4))
print(cal2.add(3))
print(cal2.add(7))

/cal 1, cal 2 : 이를 각각 '객체' 객체라 부름, 각각의 역할 수행 

아래 내용들은 추가로 찾아본 자료인데 너무 클래스 개념을 나 같은 초보 of 초보 눈높이로 설명해줘서 그대로 차용해왔다. 출처는 맨 하단 링크로 확인!!!
(참고로 여기 자료 넘 좋은거 같다👍🏻)

    "

   과자 틀 = 클래스,
   과자 틀로 찍어 낸 과자 = 객체
   여기에서 설명할 클래스는 과자 틀과 비슷하다. 클래스(class)란 똑같은 무언가를 계속 만들어 낼 수 있는 설계 도면(과자 틀), 객체(object)란 클래스로 만든 피조물(과자 틀로 찍어 낸 과자)을 뜻한다. (1개의 클래스로 여러개의 객체를 만들 수 있다.)

    클래스로 만든 객체에는 중요한 특징이 있다. 바로 객체마다 고유한 성격을 가진다는 것이다. 과자 틀로 만든 과자에 구멍을 뚫거나 조금 베어 먹더라도 다른 과자에는 아무런 영향이 없는 것과 마찬가지로 동일한 클래스로 만든 객체들은 서로 전혀 영향을 주지 않는다.

    다음은 파이썬 클래스의 가장 간단한 예이다.

class Cookie:
	pass

    위에서 작성한 Cookie 클래스는 아무런 기능도 가지고 있지 않은 껍질뿐인 클래스이다. 하지만 이렇게 껍질뿐인 클래스도 객체를 생성하는 기능이 있다. ‘과자 틀’로 ‘과자’를 만드는 것처럼 말이다.

    객체는 클래스로 만들고 1개의 클래스는 무수히 많은 객체를 만들어 낼 수 있다. 위에서 만든 Cookie 클래스의 객체를 만드는 방법은 다음과 같다.

a = Cookie()
b = Cookie()

cookie()의 결과값을 리턴받은 a와 b가 바로 객체이다. 마치 함수를 사용해서 그 결과값을 리턴받는 모습과 비슷하다.

<객체와 인스턴스의 차이>
클래스로 만든 객체를 ‘인스턴스’라고도 한다.
그렇다면 객체와 인스턴스의 차이는 무엇일까?
이렇게 생각해 보자. a = Cookie()로 만든 a는 객체이다.
그리고 a 객체는 Cookie의 인스턴스이다.
즉, 인스턴스라는 말은 특정 객체(a)가 어떤 클래스(Cookie)의 객체인지를 관계 위주로 설명할 때 사용한다.
‘a는 인스턴스’보다 ‘a는 객체’라는 표현이 어울리며 ‘a는 Cookie의 객체’보다 ‘a는 Cookie의 인스턴스’라는 표현이 훨씬 잘 어울린다.

"객체 ⊃ 인스턴스"

"

💡 클래스(class) 용어 정리

  • 클래스 : 제품의 설계도, 과자틀

  • 객체 : 설계도로 만든 제품, 쿠키

  • 속성 : 클래스 안의 변수

  • 메서드 : 클래스 안의 함수

  • 생성자 : 객체를 만들때 가장 먼저 실행되는 함수 #__init__ : 생성자 함수

  • 인스턴스 : 메모리에 살아 있는 객체

  • 도트(.) : '~의'로 해석 #ex-객체.메서드() -> 객체의 메서드

    	shark=Monster () #shark라는 객체를 Monster라는 클래스에서 만듬
    	shark.say () #shark의 say 메서드

💡 클래스(class) 만들기

class 클래스(보통 앞글자 대문자) 이름 :
   def 메서드 이름(self,속성값) :
       명령블록

class Monster :
	def __init__(self.name):
    	self.name=name
    def say(self):
    	print(f'나는 {self.name}')
        
        
shark = Monster('상어')
shark.say()
    
#__init__ : 생성자 함수
#self : __init__의 매개변수

💡 상속과 SUPER()

  • 클래스 2는 클래스 1을 상속한다.= 클래스 2는 클래스 1의 기능을 그대로 사용한다.(아니, 그럼 상속받다 아니야?? 왜 말을 어렵게 만든거야..)

    	class Cl1 : 
    		bla
    		bla
      
    	class CL2 (cL1) :	#괄호를 통해 상속 클래스 입력
    		bla
    		bla
  • 오버라이딩 : SUPER ( )
    상위 클래스 (위 예시에서 CL1)의 속성을 초기화한다.

    super( ).__init__(변경 속성값a,변경 속성값b)

💡 추상 클래스

  • 상위 클래스에서 하위 클래스 메서드 구현을 강요
  • 반드시 abc 모듈 import / pass 기능 사용
  • 추상 메서드를 생략하면 기본적인 클래스 기능 작동, 추상메서드를 추가한 후 객체 생성시 에러 발생
from abc import ABCMeta
from abc import abstractmethod

class A(metaclass=ABCMeta) :

	@abstractmethod
    def aaa(self) :
    	pass  #유동적으로 쓸 수 있게 미정으로 두는 것
class B (A) :

	def A(self):
    	print('Actin!')

💡 왜 클래스를 사용해야하는가 (함수와 클래스 차이)

✏️ 예외 (exception)

  • 예외란, 문법적으로 문제는 없으나 실행중 발생하는 예상치 못한 문제 ex - 0 나누기
  • 클래스에만 해당되는 내용 X, 함수에서도 사용 가능
  • 에러 : 소프트웨어적으로 처리할 수 없는 문법적 에러

💡 try ~ except

  • 예외가 발생할 곳을 정확하게 짚어서 입력

    try : 
    	print(10/0) # 예외 발생 지점
    except:
    	Print('pass!') # 대체 실행구 제안
    
    print(10+0)
    print(10-0)
    print(10*0)

💡 try ~ except ~ else

  • 예외가 발생하지 않았을 때 실행할 명령 (예외 미발생시 별도 처리할 명령이 없으면 기입안해도 됨)
  • "try ~ else"로 사용 불가 (try-except-else가 한 세트)

💡 finally

💡 exception 클래스

💡 raise 키워드

💡 사용자 예외 클래스

개체 속성 변경

추가 참고 자료 : 점프 투 파이썬 / 05장 파이썬 날개 달기 / 05-1 클래스
유튜브-스타트코딩- 파이썬 기초 14강


현재 '제로베이스 데이터 취업 스쿨' 수강중

profile
데린이인데요 ໒꒰ྀ ˶ • ༝ •˶ ꒱ྀིა (잘못 된 부분은 너그러이 알려주세요.)

0개의 댓글

관련 채용 정보