|
311 | 311 | }, |
312 | 312 | { |
313 | 313 | "cell_type": "code", |
314 | | - "execution_count": 9, |
| 314 | + "execution_count": 2, |
315 | 315 | "id": "ce18f956", |
316 | 316 | "metadata": {}, |
317 | 317 | "outputs": [], |
318 | 318 | "source": [ |
319 | 319 | "class Vector:\n", |
320 | 320 | " def __init__(self, components):\n", |
321 | 321 | " self.components = tuple(float(x) for x in components)\n", |
322 | | - " self.shape = (len(self.components),)\n", |
| 322 | + " self.shape = (len(self.components), )\n", |
323 | 323 | "\n", |
324 | 324 | " def __repr__(self):\n", |
325 | 325 | " return f\"Vector({list(self.components)!r})\"\n", |
|
375 | 375 | "인스턴스 변수는 객체가 생성될 때 객체 내부에 저장되는 값을 가리키는 변수이다.\n", |
376 | 376 | "인스턴스 변수에 할당되는 값은 클래스의 인스턴스가 생성될 때 지정되며,\n", |
377 | 377 | "생성된 객체의 **속성**<font size='2'>attribute</font>으로 불린다.\n", |
378 | | - "이런 의미에서 인스턴스 변수를 속성 변수라고 부르기도 한다." |
| 378 | + "이런 의미에서 인스턴스 변수를 **속성 변수**라고 부르기도 한다." |
379 | 379 | ] |
380 | 380 | }, |
381 | 381 | { |
|
473 | 473 | }, |
474 | 474 | { |
475 | 475 | "cell_type": "code", |
476 | | - "execution_count": 22, |
| 476 | + "execution_count": 3, |
477 | 477 | "id": "826e6a81", |
478 | 478 | "metadata": {}, |
479 | 479 | "outputs": [], |
|
491 | 491 | }, |
492 | 492 | { |
493 | 493 | "cell_type": "code", |
494 | | - "execution_count": 18, |
| 494 | + "execution_count": 4, |
495 | 495 | "id": "a6f0d7bc", |
496 | 496 | "metadata": {}, |
497 | 497 | "outputs": [ |
|
501 | 501 | "__main__.Vector" |
502 | 502 | ] |
503 | 503 | }, |
504 | | - "execution_count": 18, |
| 504 | + "execution_count": 4, |
505 | 505 | "metadata": {}, |
506 | 506 | "output_type": "execute_result" |
507 | 507 | } |
|
532 | 532 | }, |
533 | 533 | { |
534 | 534 | "cell_type": "code", |
535 | | - "execution_count": 19, |
| 535 | + "execution_count": 5, |
536 | 536 | "id": "1d37cbae", |
537 | 537 | "metadata": {}, |
538 | 538 | "outputs": [ |
|
542 | 542 | "True" |
543 | 543 | ] |
544 | 544 | }, |
545 | | - "execution_count": 19, |
| 545 | + "execution_count": 5, |
546 | 546 | "metadata": {}, |
547 | 547 | "output_type": "execute_result" |
548 | 548 | } |
|
561 | 561 | }, |
562 | 562 | { |
563 | 563 | "cell_type": "markdown", |
564 | | - "id": "969d778c", |
| 564 | + "id": "bc6abff4", |
565 | 565 | "metadata": {}, |
566 | 566 | "source": [ |
567 | 567 | "`Vector([1, 2, 3])` 객체 생성에 사용된 리스트 `[1, 2, 3]`은\n", |
|
575 | 575 | "``` " |
576 | 576 | ] |
577 | 577 | }, |
| 578 | + { |
| 579 | + "cell_type": "markdown", |
| 580 | + "id": "f831c03e", |
| 581 | + "metadata": {}, |
| 582 | + "source": [ |
| 583 | + "**`__init__()` 메서드**\n", |
| 584 | + "\n", |
| 585 | + "클래스의 인스턴스를 생성할 때 `__init__()` 메서드가 가장 먼저 호출되어\n", |
| 586 | + "객체 생성에 필요한 준비작업을 진행한다.\n", |
| 587 | + "이런 의미에서 `__init__()` 메서드를 **생성자**라고 부른다.\n", |
| 588 | + "\n", |
| 589 | + "앞서 설명한 대로 `__init__()`는 주로 생성되는 인스턴스의 \n", |
| 590 | + "인스턴스 변수 선언을, 즉 생성되는 객체의 속성을 지정하는 일을 수행한다.\n", |
| 591 | + "예를 들어, `Vector` 클래스의 인스턴스를 정의하는 아래 코드를 실행한다고 가정하자.\n", |
| 592 | + "\n", |
| 593 | + "```python\n", |
| 594 | + "v = Vector([1, 2, 3])\n", |
| 595 | + "```\n", |
| 596 | + "\n", |
| 597 | + "그러면 파이썬 실행기는 `Vector` 클래스의 `__init__()` 메서드를 아래 형식으로 호출한다.\n", |
| 598 | + "\n", |
| 599 | + "```python\n", |
| 600 | + "__init__(v, [1, 2, 3])\n", |
| 601 | + "```\n", |
| 602 | + "\n", |
| 603 | + "호출 과정에 사용되는 매개변수별 인자는 다음과 같다.\n", |
| 604 | + "\n", |
| 605 | + "- `self=v` : 생성되는 객체를 가리키는 변수\n", |
| 606 | + "- `self.components=[1, 2, 3]` : 벡터의 항목으로 저장될 값들로 구성된 리스트\n", |
| 607 | + "\n", |
| 608 | + "호출된 생성자는 `self.components` 인스턴스 변수에 \n", |
| 609 | + "벡터에 포함될 항목들의 튜플인 `(1.0, 2.0, 3.0)`을 할당하여 저장하고,\n", |
| 610 | + "`self.shape`에는 생성되는 벡터의 모양을 기억하도록 한다.\n", |
| 611 | + "\n", |
| 612 | + "아래 코드는 인스턴스 변수에 할당된 값을 확인하는 방법을 보여준다." |
| 613 | + ] |
| 614 | + }, |
| 615 | + { |
| 616 | + "cell_type": "code", |
| 617 | + "execution_count": 17, |
| 618 | + "id": "5bc85afb", |
| 619 | + "metadata": {}, |
| 620 | + "outputs": [ |
| 621 | + { |
| 622 | + "name": "stdout", |
| 623 | + "output_type": "stream", |
| 624 | + "text": [ |
| 625 | + "Components: (1.0, 2.0, 3.0)\n", |
| 626 | + "Shape: (3,)\n" |
| 627 | + ] |
| 628 | + } |
| 629 | + ], |
| 630 | + "source": [ |
| 631 | + "v = Vector([1, 2, 3])\n", |
| 632 | + "\n", |
| 633 | + "print(f\"{\"Components:\":11} {v.components}\")\n", |
| 634 | + "print(f\"{\"Shape:\":11} {v.shape}\")" |
| 635 | + ] |
| 636 | + }, |
578 | 637 | { |
579 | 638 | "cell_type": "markdown", |
580 | 639 | "id": "ec890e08", |
|
584 | 643 | "\n", |
585 | 644 | "`__init__()` 메서드는 `components` 매개변수로 전달된 값을\n", |
586 | 645 | "`self.components`라는 변수가 가리키도록 한다.\n", |
587 | | - "반면 `self.shape` 변수는 `self.components`가 가리키는 값의 길이(항목의 개수) 정보를 저장하는\n", |
588 | | - "용도로 사용된다.\n", |
| 646 | + "반면 `self.shape` 변수는 `self.components`가 가리키는 벡터의 모양을 저장한다.\n", |
| 647 | + "벡터의 모양은 항목의 개수를 이용해 `(3,)`처럼 길이가 1인 튜플로 표현된다.\n", |
589 | 648 | "\n", |
590 | | - "이처럼 클래스 내부에서 선언되며 `self.`로 시작하는 변수를\n", |
| 649 | + "이처럼 클래스 내부에서 선언되며 `self.`으로 시작하는 변수를\n", |
591 | 650 | "**인스턴스 변수**<font size='2'>instance variable</font>라 부른다.\n", |
592 | | - "인스턴스 변수에 저장된 값은 객체를 생성할 때 지정되며,\n", |
593 | | - "생성된 객체의 속성으로 간주된다.\n", |
| 651 | + "인스턴스 변수에 저장된 값은 일반적으로 `Vector([1, 2, 3])`처럼 객체를 생성할 때 지정되며,\n", |
| 652 | + "앞서 설명한 대로 생성된 객체의 속성으로 객체 자체에 저장된다.\n", |
594 | 653 | "\n", |
595 | 654 | "즉 `Vector([1, 2, 3])`으로 객체를 만들면\n", |
596 | | - "그 객체는 자기 안에 `components`와 `shape`라는 두 값을 저장한다.\n", |
597 | | - "이때 `components`에는 `(1, 2, 3)`이 저장되고,\n", |
598 | | - "`shape`에는 항목의 개수를 항목으로 갖는 튜플 `(3,)`이 저장된다.\n" |
| 655 | + "그 객체는 자기 안에서 `components`에는 `(1, 2, 3)`을\n", |
| 656 | + "`shape`에는 튜플 `(3,)`을 저장한다고 말할 수 있다.\n" |
599 | 657 | ] |
600 | 658 | }, |
601 | 659 | { |
|
605 | 663 | "source": [ |
606 | 664 | "**`self`의 기능**\n", |
607 | 665 | "\n", |
608 | | - "클래스로 만든 객체는 자기만의 값을 저장할 수 있다.\n", |
609 | | - "예를 들어 `Vector([1, 2, 3])`로 만든 객체는 `[1, 2, 3]`에 해당하는 값을 자기 안에 저장해야 한다.\n", |
610 | | - "\n", |
611 | | - "이때 `self`는 아래 설명처럼 \"지금 만들어지는 객체\" 또는 \"지금 메서드를 실행하는 객체\"를 가리킨다.\n", |
| 666 | + "`self`는 아래 설명처럼 \"지금 만들어지는 객체\" 또는 \"지금 메서드를 실행하는 객체\"를 가리킨다.\n", |
612 | 667 | "\n", |
613 | | - "- `self.components`: 생성된 객체 안에 저장된 모음 자료형 값을 가리킨다.\n", |
614 | | - "- `self.shape`: 생성된 객체 안에 저장된 모음 자료형 값의 항목의 개수를 가리킨다.\n", |
615 | | - "- `__init__(self, components)`에서의 `self`: 새로 만들어지는 객체를 가리킨다.\n", |
616 | | - "\n", |
617 | | - "예를 들어, `self.components = components`는\n", |
618 | | - "\"`components` 매개변수의 인자로 입력되는 값을 새로 만들어지는 객체 안에 \n", |
619 | | - "동일한 이름인 `components`로 저장하라\"는 뜻이다." |
| 668 | + "- `self.components`: 생성되는 객체 안에 저장되는 값을 가리킨다.\n", |
| 669 | + "- `self.shape`: 생성되는 객체 안에 저장되는 값을 가리킨다.\n", |
| 670 | + "- `__init__(self, components)`: 인스턴스 변수 지정 등 새로 객체 생성에 필요한 기초 작업을 진행한다." |
620 | 671 | ] |
621 | 672 | }, |
622 | 673 | { |
|
657 | 708 | ":::" |
658 | 709 | ] |
659 | 710 | }, |
660 | | - { |
661 | | - "cell_type": "markdown", |
662 | | - "id": "57cdf5fa", |
663 | | - "metadata": {}, |
664 | | - "source": [ |
665 | | - "**`__init__()` 메서드**\n", |
666 | | - "\n", |
667 | | - "클래스의 인스턴스를 생성할 때 `__init__()` 메서드가 가장 먼저 호출된다.\n", |
668 | | - "이런 의미에서 `__init__()` 메서드를 **생성자**라고 부른다.\n", |
669 | | - "앞서 설명한 대로 `__init__()`는 주로 생성되는 인스턴스의 \n", |
670 | | - "인스턴스 변수 선언을, 즉 생성되는 객체의 속성을 지정하는 일을 수행한다." |
671 | | - ] |
672 | | - }, |
673 | | - { |
674 | | - "cell_type": "markdown", |
675 | | - "id": "39c30b6f", |
676 | | - "metadata": {}, |
677 | | - "source": [ |
678 | | - "예를 들어, `Vector` 클래스의 인스턴스를 정의하는 아래 코드를 실행한다고 가정하자.\n", |
679 | | - "\n", |
680 | | - "```python\n", |
681 | | - "v = Vector([1, 2, 3])\n", |
682 | | - "```\n", |
683 | | - "\n", |
684 | | - "그러면 파이썬 실행기는 `Vector` 클래스의 `__init__()` 메서드를 아래 형식으로 호출한다.\n", |
685 | | - "\n", |
686 | | - "```python\n", |
687 | | - "__init__(v, [1, 2, 3])\n", |
688 | | - "```\n", |
689 | | - "\n", |
690 | | - "호출 과정에 사용되는 매개변수별 인자는 다음과 같다.\n", |
691 | | - "\n", |
692 | | - "- `self=v` : 생성되는 객체를 가리키는 변수\n", |
693 | | - "- `components=[1, 2, 3]` : 벡터의 항목으로 저장될 값들로 구성된 리스트\n", |
694 | | - "\n", |
695 | | - "호출된 생성자는 `self.components` 인스턴스 변수에 `(1.0, 2.0, 3.0)`을 할당한다.\n", |
696 | | - "아래 코드는 인스턴스 변수에 할당된 값을 확인하는 방법을 보여준다." |
697 | | - ] |
698 | | - }, |
699 | | - { |
700 | | - "cell_type": "code", |
701 | | - "execution_count": 25, |
702 | | - "id": "2d0a9471", |
703 | | - "metadata": {}, |
704 | | - "outputs": [ |
705 | | - { |
706 | | - "data": { |
707 | | - "text/plain": [ |
708 | | - "(1.0, 2.0, 3.0)" |
709 | | - ] |
710 | | - }, |
711 | | - "execution_count": 25, |
712 | | - "metadata": {}, |
713 | | - "output_type": "execute_result" |
714 | | - } |
715 | | - ], |
716 | | - "source": [ |
717 | | - "v = Vector([1, 2, 3])\n", |
718 | | - "v.components" |
719 | | - ] |
720 | | - }, |
721 | 711 | { |
722 | 712 | "cell_type": "markdown", |
723 | 713 | "id": "6834872a", |
|
0 commit comments