Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Python] 파이썬에서의 객체지향 ? #66

Closed
Suyeon9911 opened this issue Jun 14, 2022 · 0 comments
Closed

[Python] 파이썬에서의 객체지향 ? #66

Suyeon9911 opened this issue Jun 14, 2022 · 0 comments
Assignees

Comments

@Suyeon9911
Copy link
Owner

파이썬에서의 객체지향이란 무엇일까..?

프로그램이 어떤 작업을 수행하기 위해서는 (1)데이터와 (2)데이터를 조작하는 행위, 두 가지 요소가 필요하다. 일반적으로 데이터는 변수에 넣어서 사용하고 데이터를 조작하는 일은 함수로 구성해서 쉽게 실행할 수 있도록 만들어 놓는다.

객체(object, instance)
멤버(member), 속성(attribute)
메서드(method)

객체(object, instance)는 서로 연관된 데이터와 그 데이터를 조작하기 위한 함수를 하나의 집합에 모아놓은 것을 말한다. 이 때 집합의 원소가 되는 변수나 함수는 멤버(member) 또는 속성(attribute)이라고 한다. 특히 객체의 속성인 함수는 메서드(method)라고 부른다.

예를 들어 사각형의 면적을 구하는 프로그램을 만든다고 하자. 필요한 변수와 함수는 다음과 같다.
가로 길이와 세로 길이라는 두 개의 데이터를 넣을 변수
두 길이를 곱해서 면적을 구하는 함수
객체지향을 사용하지 않고 파이썬으로 구현하면 다음과 같다.

h = 10
v = 20


def area(h, v):
    return h * v


a = area(h, v)
print(a)

위 프로그램에서 사각형의 가로 길이를 나타내는 변수 h, 사각형의 세로 길이를 나타내는 변수 v, 그리고 이 사각형의 면적을 계산하는 함수 area는 제각기 떨어져 있다. 하지만 객체지향 프로그래밍에서는 이 세가지를 하나의 객체(object)로 묶을 수 있다.

다음은 이 프로그램을 객체지향 방식으로 다시 구현한 것이다.

class Rectangle(object):

    def __init__(self, h, v):
        self.h = h
        self.v = v

    def area(self):
        return self.h * self.v

하나의 클래스로 구현 !

실제로 길이 변수들을 저장하고 면적을 계산하는 코드는 다음과 같다.

r = Rectangle(10, 20)
a = r.area()
print(a)

위 프로그램에서 r이 바로 객체이다. 어떻게 위와 같은 코드를 만드는지에 대해서는 곧 자세히 설명할 것이다.

객체 r은 사각형의 가로 길이와 세로 길이를 나타내는 변수 h와 v 그리고 면적을 계산하는 함수 area()가 합쳐져서 만들어진 것이다. 객체 r에 포함된 이 변수들과 함수, 즉 속성을 꺼내려면 객체 이름 뒤에 점(.)을 붙인 다음 속성 이름을 입력하면 된다. 다음과 같이 입력해 보면 알 수 있다.

r.h
r.v
r.area()

클래스(class)

객체지향 프로그래밍에서 객체를 만들려면 객체를 바로 만들지 못하고 항상 클래스(class)라는 것을 만든 후에 그 클래스를 이용하여 객체를 만들어야 한다.

위 예제에서 Rectangle은 클래스이고 r은 Rectangle 클래스로 만들어진 객체이다. 객체와 클래스의 관계는 “붕어빵”과 “붕어빵을 굽는 틀”에 비유할 수 있다. 즉, 정해진 속성, 여기에서는 가로 길이 h와 세로 길이 v라는 속성을 가지도록 사각형 클래스를 한 번 만들어 놓으면 이 속성을 가지는 실제 사각형은 얼마든지 많이 만들 수 있다.

예를 들어 위에서 만들어 놓은 Rectangle 클래스로 다음과 같이 5개의 사각형을 만들 수도 있다.

a = Rectangle(1, 1)   # 가로 1, 세로 1인 사각형
b = Rectangle(2, 1)   # 가로 2, 세로 1인 사각형
c = Rectangle(4, 2)   # 가로 4, 세로 2인 사각형
d = Rectangle(6, 3)   # 가로 6, 세로 3인 사각형
e = Rectangle(8, 5)   # 가로 8, 세로 5인 사각형

이 사각형들의 면적은 다음과 같이 계산한다.

print(a.area())
print(b.area())
print(c.area())
print(d.area())
print(e.area())

1
2
8
18
40

생성자

파이썬에서 클래스를 정의하는 문법은 다음과 같다.

class 클래스이름(object):
    
    def __init__(self, 속성값1, 속성값2, 속성값3):
        self.속성이름1 = 속성값1
        self.속성이름2 = 속성값2
        self.속성이름3 = 속성값3

생성자(constructor)

__init__

이때 속성값 인수는 필요하지 않다면 없어도 된다. 여기에서 class 블럭 안에 정의된 __init__란 함수는 생성자(constructor)라고 하며 클래스 정의에서 가장 중요한 함수이다.

객체를 생성할 때는 클래스이름을 함수처럼 호출해야 하는데, 이때 실제로는 __init__로 정의된 생성자 함수가 호출된다. 생성자 함수 내부에서는 생성자를 호출할 때 넣은 입력 변수, 즉 인자의 값을 속성값으로 저장한다.

상속, 오버라이딩, 오버로딩에 관한 내용까지 보고싶을때 아래 자료를 참고

https://datascienceschool.net/01%20python/02.12%20%ED%8C%8C%EC%9D%B4%EC%8D%AC%20%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D.html

@Suyeon9911 Suyeon9911 self-assigned this Jun 14, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant