ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 패스트캠퍼스 환급챌린지 10일차 미션 (2월 10일) : 딥러닝·인공지능 Signature 초격차 패키지 Online. 강의 후기
    패스트캠퍼스 챌린지 2024. 2. 10. 18:47

     

    오늘은 설 연휴입니다. 하지만

    나는 공부합니다.

     

    자 화이팅!

     

    Part1. 딥러닝을 시작하기전에

    CH03-13. 클래스의 이해와 활용

     

    &

     

    CH03-14. 예외처리

     

     

     

    CH03-13. 클래스의 이해와 활용

    자, 3강이 이제 2강밖에 안남았다. 그말인 즉슨, 파이썬 기초가 오늘로써 마무리 된다는 말. 역시 대미를 장식하는 것은

    클래스이다. 자 클래스 함 가보자.

     

    클래스란?

    "객체지향, 즉 복잡한 코드들을 그 객체 중심으로 서술한다고 생각하면 쉽다." 

    위엣 말이 무슨 말인진 헷갈리겠지만 찬찬히 생각해보면 된다.

     

    우선 클래스는 붕어빵 틀에 비유를 하고, 인스턴스를 붕어빵 틀에서 만들어진 붕어빵이라고 설명들을 많이 하신다.

    즉, 인스턴스는 클래스에서 여러개를 찍어 낼 수 있고, 붕어빵 종류에도 슈붕, 팥붕 등 종류가 많은 것처럼

    인스턴스 객체에도 다양한 종류가 있을 수 있다.

     

    여기 강의에서는 사람에 대한 클래스를 정의하고 각기 다른 나이의 2명의 사람을 만들어 낸다.

    (말로 설명하면 어려우니 코드를 함 바보자)

     

    class Human:

       def __init__(self):            ←클래스의 인스턴스가 만들어졌을 때 미리 사용되는 매서드.

           self.age = 0                 ← 즉, 인스턴스의 에이지를 0으로 초기화 하라! 라는 의미

     

      def old(self):                     ← 얘도 우리가 만든 인스턴스가 만들어질 때 사용되는 메서드

          self.age += 1                ← age를 1씩 올려랑

     

    human1 = Human() #사람 1 인스턴스 생성

    human2 = Human() #사람 2 인스턴스 생성

     

    for i in range(10) : #10세

       human1.old()

    for i in range(20): #20세

       human2.old()

     

    print(human1.age)

    print(human2.age)

     

    정답은 뭐 간단하게 10, 20이라고 찍히겠지만 그거시 중요한 것이 아니다. 다른 붕어빵을 처음 우리가 만들어 봤다는 

    것이다.

     

    자, 위에서는 클래스가 나이만으로 인스턴스의 종류를 구별했듯이 클래스에는 다양한 것들을 넣을 수 있다.

    (학생 이라는 클래스에는 학번, 이름, 나이, 성별, 학과 같은 다양한 요소들이 들어갈 수 있다는 것이다.)

     

    그런데 위에 함수에서 우리가 처음 보는 것들이 있다.

     

    __init__ 바로 이것인데, 보통 클래스를 만들 때 클래스 이름과 동일한 매서드가 클래스 안에 지정해 줄 수 있는데,

    파이썬은 이 __init__으로 표기한다고 한다. 즉, 클래스 안에 __init__이라는 것은 하나가 존재하고 

    인스턴스가 생성될 때 이 생성자가 자동으로 실행되는 매서드라고 생각하면 된다.

     

    참, 저 아이의 이름은 생성자이다.

    또, self 라는 뜻은 자기 자신이라는 뜻인데(C#에서 공부할 때 this 와 유사한 것 같다.) 인스턴스 자신을 의미한다.

     

    이것은 해당 인스턴스가 가지는 값과 함수의 인자 값을 구분하기 위해 사용되는데, 복잡할 것 없다. 밑을 보자

     

    class Student :

        def __init__(self, id, name, age, gender, department):  ← 생성자이고 매개변수로 여러가지를 가질 수 있다.

              self.id = id

              self.name = name

              self.age = age

              self.gender = gender

              self.department = department

     

    자, name을 유심히 살펴보자. 저 self.name은 인스턴스의 이름 값을 가지는 변수이고, 우측의 name은 

    저 파라미터(우리 어제 얘기한 유아용 장난감 삼각형 홈에 끼워서 들어온 삼각형 이라고 생각하면 쉽다.)를 통해

    넘어온 값이다. 즉, 우측의 네임은 파라미터로 넘어온 name의 변수이다.

     

    자 저 학생 클래스를 좀 더 추가해보자.

          def show(self):

                print(f"학번: {self.id}")

                print(f"나이: {self.age}") 요론식으로 추가해줄수 있고,

     

          def add_age(self, offset):

               self.age += offset

     

    이런식으로 내가 레고처럼 필요한 정보들을 밑에 쭈욱 만들어 줄 수 있다.

     

    조금더 내용을 추가하자면, 각 우리가 만들어준 매서드는 인자로 self를 무조건! 받게 되어있는데,

     

    이 self는 만들어지는 인스턴스 그 자체라고 보면 된다.

     

    student1.add_age(5) 라고 하였을 때 student1 은 self에 대응되고, 5 값은 offset에 대응된다고 보면 된다.

     

    여기까지는 이해하기 아주 쉽쥬?!

     

    조금 더 들어가보자고. 

     

    만약에 매서드 들끼리 서로 공유하고 싶은 내용이 있으면 어떨까?
    (위의 학생들의 예시로, 이 모든 학생은 '서강대' 소속이다. 라고 하면 매서드들이 모두 접근 할 수 있는

    클래스 변수를 외칠 수 있다.(즉 전역변수처럼 클래스 밑에 바로 넣어버리면 된다)

     

    이와 유사하게 인스턴스 변수라는게 있는데 이건 하나의 인스턴스에 사용되는 변수라고 이해하면 된다.

     

    네임스페이스: 클래스 변수, 메서드, 인스턴스 변수 등 네임스페이스에 속한다는 말을 하는데, 이건

    크고 복잡한 프로그램에서 클래스 이름이 동일 할때 구별하기 위해 사용될 수 있다.
    (말하는 나도 헷갈려서 좀 이따 다시 보자)

     

    자, 이제 이 클래스 변수를 한번 써봅시다.

     

    class Client:

        client_cnt = 0  ← 모두가 쓸수 있는 공공재 클래스 변수다.

     

    def _init(self, id, name, age, gender, point):

        self.id  = id

        self.name = name

        self.point = point

        Client.client_cnt += 1      ← self로 시작하지 않는 얘, 바로 얘가 클래스변수를 매서드에서 갖다 쓴거다.

     

    또, 음... 인스턴스를 정렬하고 싶을 때가 있을 땐 Key속성의 값으로 익명함수를 넣을 수 있다고 한다.

     

    자세한 내용은 사진을 확인하세요.

     

    자 이번에는 상속이다....

    (아니...클래스의 상속까지 이걸 10분안에 설명해주시다뇨 선생님...그것도 강의 하나에...ㅠ)

     

    상속(Inheritance)는 말 그대로 부모님의 유산? 유산이라고 하긴 뭣하지만 무튼 뭔가를 물려받는 다는 말이다.

    우리가 형제, 자매끼리 동일한 부모님의 유전자를 물려받기 때문에 그 유전 인자들이 나타날 수밖에 없다.

     

    이때 두 형제 또는 자매가 공통적인 부분은 부모님으로부터(부모클래스) 매서드를 물려받은것이고,

    각기 다른 특징들은 각기 다른 매서드에서 만들어진걸로 인스턴스된 것이다.(나도 뭔말인지 모르겠다.)

    예시를 보자.

     

    class Human:

        def __init__(self, name, age):

              self.age = age

              self.name = name

     

        def show_hunman(self):

               print(f"이름:{self.name}")

               print(f"이름:{self.age")

     

    class Teacher(Human):                   ← Human이라는 부모 클래스를 상속받았습니다.

          def__init__(self, name, age, teacher_id, subject, salary):            ← 자 부모로부터 상속받은 것을 넣어주고

           super().__init__(name, age)                                  ← 상속받은 걸 그대로 쓸려면 super(). 을 쓰면 된다.

           self.teacher_id = teacher_id

           self.subject = subject

     

    CH03-14. 예외처리

    예외처리란, 말 그대로 코드에서 오류가 났을 때 코드가 멈추는데, 그 밑에 except라는 코드를 별도로 두어

     

    에러가 발생하는 걸 예외처리로 확인할 수 있다는 말이다.. 자 다시한번 봐보자 .

     

    오류에는 여러가지 오류들이 있다.

       예를들어 ① 값을 0으로 나눌려고 할 때, ② 존재하지 않는 인덱스에 접근하려고 할 때 등등등...

     

    arr = [7,5,6]

    print(arr[5]) 이러면 오류가 난다는 말이다. 왜냐면 이 arr에는 인덱스가 2까지밖예 없는데 5를 갖고오라고 하니...

     

    이처럼 예외가 발생하면 프로그램 실행이 중단되는데,

     

    예외처리란, 프로그램의 예외를 처리하는 것을 말한다.(?), 즉 예외가 발생하더라도 프로그램이 종료되지 않도록 처리

     

    try :

       기본적으로 실행할 코드

     

    except:

        예외가 발생했을 때 실행할 코드

     

    이런 형태인데,  앞서 본 0으로 나눌 때 발생하는 예외를 처리할 수 있다.

    예외가 발생하는 순간, 코드 실행이 중단되며, except 문으로 이동하여 코드를 실행한다는데 코드를 한번 보자.

     

    try:

       x = 10

       result = 10/0

       print(result)

     

    except : 

        print("예외발생")

     

    뭐 이렇게 쓴다는 말이다.

     

     

     

     

    10일차 끝.

     

     

    본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

    https://bit.ly/48sS29N

Designed by Tistory.