혼자 공부하는 파이썬 개정판 80강 - 클래스 문법 기본

Поділитися
Вставка
  • Опубліковано 18 вер 2024
  • 오늘 최종 코드: gist.github.co...
    내용을 엄청나게 다루었으니[...]
    반복해서 보시는걸 추천드립니다!
    (1) 클래스로 인스턴스 만드는 문법
    (2) 클래스에 변수(인스턴스 변수) 만드는 문법
    (3) 클래스에 함수(인스턴스 함수) 만드는 문법
    만 기억해주시면 됩니다!
    PS. 오늘 목소리가 엄청 안 좋네요 @_@
    생성자
    윤인성 님이 번역하신 "파이썬 매일 코딩"이라는 책에 조금 자세하게 나오지만[...]
    사실 "클래스 이름을 가진 함수"는 __new__()라는 함수를 호출합니다.
    그리고 __new__()에서 __init__()을 호출합니다.
    근데 __new__() 함수는 일반적인 개발자가 만지는 함수가 아닙니다.
    기본적으로 __init__()을 만지고, 여기에서 초기화 등을 진행하므로
    이를 "생성자(contructor)"라고 표현했습니다.
    소문자로 시작하는 클래스
    파이썬에서 대문자로 시작하는 단어는
    모두 "대문자 캐멀케이스를 따른 것"이고, "클래스"입니다.
    하지만 "대문자 캐멀케이스는 클래스이다"이지
    "클래스는 모두 대문자 캐멀케이스이다"는 아닙니다.
    str, list, int, ...처럼
    소문자로 시작하는 클래스도 있습니다!
    여담으로
    type("") 등을 입력하면 [class 'str']가 나왔는데
    문자열도 정수도 부동소수점도 모두 클래스였던 것입니다[따단]
    그리고 클래스였기 때문에
    a = "이름,나이"
    a.split(",")
    처럼 뒤에 쩜을 찍고 함수를 호출할 수 있던 것입니다[따단]
    피즈버즈 엔터프라이즈 에디션
    여담으로 설계는 어느 정도 규모가 있어야 적용해볼 수 있습니다.
    그래서 현재 코드를 보고 클래스의 필요성을 느끼기 힘들 것입니다.
    비슷한 예로
    미국에서는 프로그래밍 초보자 때 "피즈버즈"라는 프로그램을 만듭니다.
    이 프로그램은
    (1) 1부터 100까지 출력하면서
    (2) 3의 배수 때 "피즈"
    (3) 5의 배수 때 "버즈"
    (4) 15의 배수 때 "피즈버즈"
    라고 출력하는 간단한 프로그램입니다.
    그런데 만약 이 코드에 """현존하는 대부분의 설계 패턴을
    때려 넣어보면 어떻게 될까?"""를 구현한 예가 있습니다.
    바로 "피즈버즈 엔터프라이즈 에디션"인데요.
    github.com/Ent...
    10줄 정도의 코드로 작성할 프로그램을
    수 백 개의 파일로 만드는 모습을 볼 수 있는 예제입니다[...]
    이런걸 보면 사실 """아니 그럼 설계는 개쓸모 없는거 아닌가?"""라고 생각하실 수 있는데요.
    이는 이 프로그램이 너무 작은 규모이기 때문입니다.
    실제 기업에서 """어느 정도 규모가 있고
    장기적으로 유지보수 해야 하는 프로그램을 작성해야 한다"""라고 하면
    진짜로 이렇게 여러 설계를 때려 넣어서
    (1) 가독성 좋고
    (2) 유지보수하기 쉬운 프로그램을 만들어야 합니다.
    PS. 사실 피즈버즈 엔터프라이즈 에디션은 과하다 싶을 정도로 때려 넣었습니다[...]
    현재 단계에서는 우리가 100줄 넘는 코드도 작성해본 적이 없으므로
    설계를 도입하는 것이 "개쓸모없는 일"처럼 보입니다.
    따라서 클래스를 배우면
    재빠르게 다음 단계로 넘어가서
    규모가 어느 정도 있는 프로그램을 만들면서
    설계의 필요성을 느끼고
    다시 클래스의 기본부터 설계를 공부해보시는 것도 좋습니다.
    관련 도서로는
    - 도메인 주도 설계
    - 리팩터링 2판
    - 읽기 쉬운 코드가 좋은 코드
    - 클린 코드
    등등이 있습니다[전부 "명서"라고 평가받는 프로그래밍 책입니다][현업에 있어야 조금 쓸모를 느낄 수 있는 레벨의 책이라서 초보자 단계 때는 "그러려니 이런게 있구나"하면서 읽어야 하는 책들입니다][...]

КОМЕНТАРІ • 36

  • @ilkimable
    @ilkimable Рік тому +2

    파이썬 초보입니다.
    클래스를 이해할려고 많은 강의를 찾아 들어봤지만 클래스가 왜 필요한지 가장 정확하게 가르쳐 주는 것 같습니다.
    다른 분들은 붕어빵틀과 붕어빵이라고만 해서 설계도와 인스턴스라고만 알고 있었는데 어디 소속된 함수인지 변수인지 쉽게 구별하는게 현재 저로서는 가장 유익한 클래스의 장점 같네요. 함수가 많아지다보니 나중에 만든 내가 봐도 무슨 함수인지 헷갈렸는데 이 강의 듣고 클래스만들어 새로 짜니까 함수와 변수가 싹 정리되었습니다.
    초보에게 최고의 강의입니다.

  • @jaekunyoo8509
    @jaekunyoo8509 Рік тому

    안녕하세요. 감사히 잘 봤어요.
    오늘 class(등급, 학급) 내에서 변수 지정이 없어도 기본인 'self(자신)' 의 명명이유를 알게 됐어요.
    0:17 클래스 - 함수와 변수 묶음, 객체를 만드는 설계도
    0:54 설계도 작성과정
    1:02 설계도 - 다른 분들이 대학교에서 빵틀로 비유해서 설명한다고 하시던데 같은 비유이지요. 설계도, 빵틀, 제작기계, 공장 등에서 만든 제품, 각종 빵 등이 객체이겠지요.
    2:16 객체명 지정
    3:23 초기화 함수 및 클래스 내 모든 함수의 첫 매개변수는 자신(self)이다. 예제에서 변수를 지정하는 괄호 안에 기본인 자신과 5개 변수의 총 6개의 변수를 지정하고 이후 변수명을 지정할 때 자신과 5개 변수를 결합하여 자신의 5개 변수를 만들어서 숫자가 줄어든 것도 석연치 않고 자신.이름 = 이름 할거면 자신 넣을 것 없이 이름 하면 되는데 왜 자신을 넣었나 이해불가 혼란했는데, 2:16 객체명 지정하시는데 "아 그렇구나!" 탄성이 나왔어요.
    객체명이 자신이에요. 파이선 설계자께서 객체명의 자리를 미리 준비하신거에요. 뭔가 이유가 있어서 '자신'이라는 이름을 지정하셨을 텐데 그 이유를 몰라서 그러려니 하고 이해 안돼도 그렇게 쓰면 결과는 맞았는데, 대학생 때 본인 책이 서점에서 팔리는 것을 보며 학교 다녔다는 분의 설명을 듣는 순간 번쩍 번뜩 떠 올랐어요.
    객체명을 정하는 것은 색상 등 선택사항(변수들)을 정한 주문 제품명으로 비유하고, 실행후 객체 생성은 변수들의 각각 값들이 포함된 제품의 생산 배달로 비유하면, self는 설계도에 미래 제품명이나 발주자의 이름을 넣을 자리라고 비유하면 되겠어요. 어떤 제품이냐, 혹 누구의 제품이냐 이름을 정하는 것이지요. 문자대로 학급의 학생들의 이름을 붙이는 성명란이기도 하네요.
    4:31 설계도명.초기화(제품명, 변수1, 변수2 ... 변수몇) 이 두 함수 호출 방법은 실제 초기화 함수가 아니라 설명을 위한 일반 함수의 이름이 '초기화'여서 작동 가능하고 2:16 객체명 지정시에도 클래스 '학생'에 초기화 함수가 없어 변수 지정도 없으므로 변수 입력없이 작동함. 클래스가 명시되면 변수 지정의 self 자리에 객체명을 입력한다.
    4:58 제품명.초기화(변수1, 변수2 ... 변수몇) 이 두 함수 호출 방법은 실제 초기화 함수가 아니라 설명을 위한 일반 함수의 이름이 '초기화'여서 작동 가능하고 2:16 객체명 지정시에도 클래스 '학생'에 초기화 함수가 없어 변수 지정도 없으므로 변수 입력없이 작동함. 객체명이 클래스를 대체하면 self 없이 변수들만 입력한다.
    6:48 실제 초기화 함수 설정
    7:12 클래스를 def로 설계시 초기화(__init__)함수에서 변수 지정을 예를 들어 (self, pm1, pm2, pm3)로 총 4개여도 사용시는 self와 변수들의 결합은 필요에 따라 3개 모두 할 수도 있고, 1개도 안 할 수 있으나 객체명을 지정하여 self는 대응되었고 변수들 3개 모두를 입력해야 한다.
    제품(객체)명 = 설계도(클래스)명(변수1, 변수2 ... 변수몇)
    2023년 7월 12일 수 23시 태평양시간

  • @tpag20
    @tpag20 Рік тому

    정말 훌륭한 강의입니다. 배우는 입장에서 어떤 고민을 하는지까지 고려해서 짚어주셔서 감사합니다.

  • @code_champagneShot
    @code_champagneShot Рік тому +1

    눈이 팽팽도는구먼유
    이해안가는부분은 남겨놨다가 나중에 통쨰로 복습하는게 좋나요 ?
    아니면 그 장에서 이해갈떄까지 반복하고 넘어가는게 좋나여?
    입문자인데 언어부터 막히니까 다음 책들이 무섭네유 ㅋㅋㅋ

    • @user-rh1qt9zn7h
      @user-rh1qt9zn7h  Рік тому

      우리가 영어 문법을 100% 알고 외국인과 회화하큰 것이 아닌 것처럼 → 언어 기본에서 모르는게 있어도 일단 넘어간 뒤 → 활용을 계속 해보는 굿이 좋습니다!

  • @김하민-y2w
    @김하민-y2w Рік тому

    영상을 보고 빠졌던 머리카락이 다시 자랐습니다 감사합니다

  • @DrowsyCAT
    @DrowsyCAT Рік тому

    이번 강의는 좋아요 10개는 찍고 싶은 내용입니다.
    내용을 들으면서 데이터 입력을 리스트에서 클래스로 바꾸는 부분에서 '저걸 왜 복잡하게 저렇게 하지?'라고 중얼거렸는데, 바로 그 부분을 짚으셔서 뜨금했습니다.

  • @user-oh7rr4zr2y
    @user-oh7rr4zr2y 4 місяці тому

    안녕하세요 올려주신 영상 보고 혼자 공부하는데 정말 많은 도움이 되었습니다 혹시 c언어는 올리실 계획이 없으실까요 ?? 확인 후 답글 남겨주시면 정말정말 감사하겠습니다

    • @user-rh1qt9zn7h
      @user-rh1qt9zn7h  4 місяці тому

      제가 냈던 C 책이 대학교재라서 ;ㅇ; .... 강의를 따로 찍을 수 없습니다!

  • @걸음이느린아이-n5o
    @걸음이느린아이-n5o Рік тому

    오늘은 여러번 다시 봐야겠군요. 이해는 되는데 뭔가 '왜 그러지'하는 찝찝함이 남네요.
    클래스가 가지는 의미를 다시금 되짚고 보도록 하겠습니다.
    오늘도 감사합니다.

  • @아아-k7x2d
    @아아-k7x2d 4 місяці тому +1

    윤인성 작가님 안녕하세요 저는 현재 작가님의 혼공파 책(개정판)으로 파이썬을 공부하고 있는 사람입니다.
    제가 혼공파 책 (8)클래스 단원의 466쪽과 467쪽을 공부하다가 의문이 생겨서 이렇게 댓글로 질문을 남깁니다.
    제가 앞서 언급한 페이지에서의 표현을 보면 클래스를 만드는데 클래스명을 Student로 한 경우에 이 클래스의 객체를 생성하는 놈인 Student()를 이 책에서는 생성자라고 부르더라고요.
    그런데 제가 구글링도 해보고 다른 책도 찾아보니 생성자는 특정 클래스의 객체를 생성하는 함수인 "Student()" 다르게 말하자면 "클래스명()" 이런 놈이 아니라
    클래스 내에 정의되어 있는 __init__() 함수라고 하더라고요.
    용어 사용에 혼동이 생겨서 이렇게 질문 드립니다.
    특정 클래스의 객체를 생성하는 클래스명()(ex. Student()) 이 함수가 생성자인가요? 아니면 클래스 내에 정의되어 있는 __init__() 함수가 생성자인가요? 아니면 둘 다 생성자인가요?
    좀 자세히 설명해주시면 감사하겠습니다.
    PS 혼공파 책으로 파이썬 공부 정말 잘하고 있습니다 ^^

    • @user-rh1qt9zn7h
      @user-rh1qt9zn7h  4 місяці тому +1

      어떤 사람이 "집 안에서"는 "아빠"라고 불리지만, "집 밖에서"는 "윤 팀장"이라고 불릴 수 있는 것처럼
      Student 클래스도 "집 안에서"는 "__init__()"이 생성자이고, "집 밖에서"는 "Student()"가 생성자입니다!
      둘이 다른게 아니라 결국 같은 것입니다!
      PS. 뭐 내부적으로 더 파고 들면
      Student()를 호출하면 __new__()가 호출되며
      __new__()에서 __init__()을 호출해서
      __new__()가 정확한 의미의 생성자라고 할 수 있겠지만
      이 함수는 우리가 직접 만지는 함수가 아니라서 __init__()을 생성자로 보는 편입니다.

    • @아아-k7x2d
      @아아-k7x2d 4 місяці тому +1

      @@user-rh1qt9zn7h 답변 정말 감사합니다 작가님!!!

  • @JeongWooPark-iz3pb
    @JeongWooPark-iz3pb 4 дні тому

    실제로 활용하며 연습해야겠네요 ^ㅇ^
    2024.09.15 오전 8시

  • @Trapperoftrapperoftrapper
    @Trapperoftrapperoftrapper Рік тому

    명강의 감사드립니다

  • @wooseok_lee
    @wooseok_lee Рік тому

    캡슐화가 왜 필요한건지 항상 궁금했는데 이런 맥락이었군요 감사합니다!!

  • @user-vh3iz5uq1o
    @user-vh3iz5uq1o Рік тому

    안녕하세요. 파이썬 공부 중인 뉴비입니다. 언제나 영상 잘 보고 있습니다.
    클래스를 처음 접하면서 개인적으로 햇갈리는 부분들이 있는데 이에 대해 질문하고 싶어 댓글 달았습니다.
    Q1. class 학생리스트: 에서 def __init__(self): 부분에는 self.students = []가 작성되어 있는데, 학생리스트 클래스를 가진 객체를 생성하면 생성되는 객체마다 students라는 빈 리스트가 만들어지는 건가요?
    Q2. class 학생리스트: 에서 def print(self): 부분의 for 반복문에는 student.print()가 작성되어 있는데, student.print()에서 print() 함수는 학생 클래스에 있는 print() 함수를 사용하는 건가요?
    Q3. 질문2와 연계하여, 클래스를 생성할 때 함수를 만들면서, 객체뒤에 . 과 함께 함수명을 작성하는 것으로 함수를 사용하는 것을 자주 보는데, 새롭게 만든 클래스에 대해서 객체.함수명() 형태로 작성시 객체의 클래스를 스스로 판별하여 해당 클래스의 함수를 호출하는지도 궁금합니다.
    Q4. 질문3과 연계하여, 문자열 부분에서 is~() 함수와 관련된 내용을 다룰 때, 함수 앞에 있는 객체의 타입이 문자열일 경우에만 작동되었는데, 혹여 모든 상황에 대해서 '.함수명()' 형태의 함수들은 . 앞에 있는 객체가 어떤 타입/클래스인지 스스로 판별하여 그 타입/클래스에 정의된 함수를 적용하는 건지도 궁금합니다.
    클래스 관련 초반 설명(인스턴스 설명 부)에서 제가 이해할 수 있는게 생겨서 좋았습니다. 아무것도 모르는 상태에서 클래스와 '인스턴스는 붕어빵틀과 붕어빵 관계야' 라는 비유를 들으면 이해조차 시도할 수 없는 문제가 생겼으니 말이죠...
    몇회 반복하지 않은 상태이지만 강의 중에 제가 이해할 수 없는 내용이나 익숙하지 않은 단어가 연달아 나오는 설명을 들을 때마다 제가 해야할 것이 정해지는 느낌입니다.
    정말 많은 도움이 되고 있습니다. 감사합니다.

    • @user-rh1qt9zn7h
      @user-rh1qt9zn7h  Рік тому

      전부 맞습니다. 실제 동작은 "파이썬 매일 코딩"이라는 책에 좀 자세하게 나오는데
      (1) 함수들은 클래스 이름으로 묶여 좀 다른 곳에 저장됩니다.
      (2) . 연산자를 보면, 일단 "해당 클래스 이름으로 묶인 곳"에 가서 함수를 찾습니다.
      (3) 그리고 함수를 호출합니다.
      .
      그래서 학생목록.print()와 학생.print()는 다른 함수를 호출합니다. 각각의 클래스가 가진 함수를 호출합니다.

    • @user-vh3iz5uq1o
      @user-vh3iz5uq1o Рік тому

      @@user-rh1qt9zn7h 긴글이였는데 답변 감사드립니다. 궁금한 것에 대한 질문의 답을 이렇게 빨리 받을 수 있는 것도 그렇고... 감사합니다!

  • @koeaaoaa4242
    @koeaaoaa4242 4 місяці тому

    학생들 = [학생("인성"),87,88,98,95)...]
    부분을 print(학생들) 하면 출력이 안되는데 이 학생들은 [{학생:인성,수학:12}] 이런식의 딕셔너리 형태로 저장되는건지 아니면 전혀 다른 형태로 저장되는건지 궁금합니다.

    • @user-rh1qt9zn7h
      @user-rh1qt9zn7h  4 місяці тому

      입력하신 전체 코드를 한 번 보여주실 수 있을까요!

  • @jaekunyoo8509
    @jaekunyoo8509 Рік тому

    안녕하세요. 감사히 잘 봤어요.
    전체 영상 마치고 다시 반복해서 기억지속하려 해요.
    2023년 7월 26일 수 19시 태평양 시간

  • @user-st5ht7ko5j
    @user-st5ht7ko5j Рік тому

    감사합니다

  • @jeongyoonkang959
    @jeongyoonkang959 Рік тому

    선생님 9분20초경에 더블클릭으로 vs code에서 텍스트 바꾸는 거는 무슨 단축키인가요? macOS 환경입니다!

    • @user-rh1qt9zn7h
      @user-rh1qt9zn7h  Рік тому

      더블클릭하면 식별자 전체가 선택됩니다.
      그래서 Ctrl + C / Ctrl + V 하고 있는 것입니다!
      코드가 짧고 + 어떤 부분을 변경하는지 조금 보이게 복붙을 사용한건데,
      조금 더 좋은 방법은 변수/함수 식별자 하나 선택하고
      F2 누르시면 이름을 변경하는 메뉴가 나옵니다.
      여기에서 변경하면 관련된 식별자가 한꺼번에 바뀝니다.

    • @jeongyoonkang959
      @jeongyoonkang959 Рік тому

      @@user-rh1qt9zn7h 오 꿀팁 감사합니다^^

  • @hyeyunkim8475
    @hyeyunkim8475 Рік тому

    선생님 class StudentList: 의 끝부분에 있는 students.print()에서 TypeError가 나는데 왜 그럴까요?ㅠ

  • @fpv2831
    @fpv2831 Рік тому

    코딩을 현재 파이썬을 배우고 있는 상황입니다. 하지만 대학교 과 특성상 여러 코딩을 다루다 보니 여쭙고 싶은 내용이 있어 댓글 남깁니다. 코딩으로 매트랩, 파이썬, c,c++,아두이노 이렇게 배우고자 합니다. 배워야하는 입장이고요 ㅠ 모두 윈도우, mac 관련없이 잘 호환이 될까요?
    추가적으로 3d모델링도 잘 아신다면 이거에 대해서도 여쭙고 싶네요.

    • @user-rh1qt9zn7h
      @user-rh1qt9zn7h  Рік тому

      정확하게 어떤 호환성을 묻고 계신 것인지
      모르므로 호환성과 관련된 적절한 답을 드릴 수가 없습니다.
      추가적으로 책의 내용과 관계없는 답변은 드리지 않고 있습니다!
      [한 명 한 명 질문을 모두 받으면 끝이 없어서요 @_@ !]

  • @user-gx3ez4rr2m
    @user-gx3ez4rr2m 3 місяці тому

    언빌리버블!

  • @태웅윤-l9j
    @태웅윤-l9j Рік тому

    class에는 왜 함수가 끝나고 return을 안붙이나요?

    • @user-rh1qt9zn7h
      @user-rh1qt9zn7h  Рік тому

      원래 함수로 return을 안 붙여도 됩니다. 필요한 경우만 사용해주시면 됩니다.

  • @kangsh74
    @kangsh74 Рік тому

    79강 강의영상이 빠진듯 합니다. 확인 좀 부탁 드립니다.

    • @user-rh1qt9zn7h
      @user-rh1qt9zn7h  Рік тому

      앗 재생목록에 추가를 안 했군요! 확인 감사드립니다!

    • @kangsh74
      @kangsh74 Рік тому

      @@user-rh1qt9zn7h회신 감사합니다. 올려주신 강의 +교재 열독 중입니다.