Computer Science/Python :: 파이썬

파이썬 10강 :: 객체지향, 클래스, 인스턴스

HJPlumtree 2023. 4. 29. 17:02

파이썬에서 기억하고 싶은 내용

 

 

객체지향이다!

제대로 알고 싶었다

 

 

객체지향형의 시작점

공통적인 것은 미리 만들어 놓고, 서로 다른 점만 따로 구현하자

이렇게 하면 대형 프로그램을 훨씬 더 효과적으로 개발할 수 있지 않을까?

 

 

객체지향의 개념

객체와 객체의 상호작용으로 프로그램을 구성하는 프로그래밍 패러다임이라고 한다

그럼 객체와 객체의 상호작용이 어떻게 되는지 알아봐야겠네

프로그램을 유연하고 변경이 쉽게 만들어서 대규모 소프트웨어 개발에 사용한다

 

 

그럼 객체 지향의 특징은?

추상화

공통 속성이나 기능을 도출하는 것이 추상화인듯

객체지향의 시작점에서 말했던 공통적인 것!

 

캡슐화

추상화된 것을 묶어준다

데이터 구조와 데이터 연산을 결합하는 것

클래스 구조로 보이네

 

상속

만들어놓은 공통적인 것을 상속받는 것

 

다형성

유사 객체 사용성을 그대로 유지한다

 

 

객체

객체는 추상화와 캡슐화의 결과다

좀 더 살펴보자

 

 

클래스

데이터 필드와 연산을 가지고 있다

객체지향의 특징에 나온 캡슐화랑 비슷한 의미가 나왔다

설계 도면 같은 것

 

 

클래스 정의

초기자(Initializer)

객체의 상태를 초기화하는 특수한 메소드다

항상 __init__으로 명명한다

 

메소드(Method)

클래스 안의 함수를 메소드라고 부른다

연산을 처리해주는 녀석이다

 

클래스 정의)

class 클래스이름:
    초기자 정의
    메소드 정의

 

구문형식 예시)

class 클래스이름:
    def 메소드이름(self, 매개변수리스트):
        코드블럭

 

 

메소드이름 옆 self 뭐니?

가장 첫번째 매개변수로 self 매개변수라고 한다

모든 메소드에 의무적으로 들어간다

객체가 자신을 참조해서 클래스 정의에 포함된 멤버 접근시에 사용된다

 

 

클래스 설계
일반적으로 UML 표기법 사용

 

BMI 클래스 예시)

class BMI :
    def __init__(self, name, age, weight, height) :
        self.name = name
        self.age = age
        self.weight = weight
        self.height = height

    def get_BMI(self) :
        return self.weight / (self.height / 100) ** 2
    
    def get_status(self) :
        BMI = self.get_BMI()
        if BMI >= 25 :
            return "비만"
        elif BMI >= 23 :
            return "과체중"
        elif BMI >= 18.5:
            return "정상"
        else:
            return "저체중"

 

 

만든 클래스를 어떻게 활용할까?

하나.

클래스를 사용하려면 클래스 생성자를 이용해서 클래스의 인스턴스를 생성한다

 

생성자 이용해서 인스턴스 생성 예시)

클래스 이름(초기자 파라미터)

위의 녀석을 생성자라고 부른다

그러면 클래스의 인스턴스(객체)가 생성된다

하지만 저러면 사용 못하지 그냥 생성된거지

 

둘.

생성자로 만들어진 객체를 객체 참조 변수에 넣어준다

객체 참조변수 = 클래스 이름(초기자 파라미터)

결국 클래스 생성자로 생긴 인스턴스를 변수에 저장한다는 의미

 

셋.

객체 데이터 필드로 접근이나 메소드 호출시에는 접근 연산자( . )을 사용한다

 

BMI 클래스 사용 예시)

person1 = BMI("viator", 32, 70, 175)

print(person1.get_BMI(), person1.get_status())

위를 보면 BMI 생성자로 BMI 인스턴스를 만들어 person1에 저장하고

person1의 BMI와 상태를 구하는 메소드에 쩜을 찍어서 접근했다

 

 

모든 것이 다 객체!

파이썬에서는 모든 것이 다 객체다

모든 것이 다 객체니까 간단한 문자열도 다 객체다

문자열을 써놓고 쩜을 찍으면 사용할 수 있는 메소드가 쫘악 나온다

 

문자열은 str 객체 타입이고 lower 메소드를 가지고 있어서 다음 예시도 가능

"YOHOYOHO".lower()

 

 

데이터 필드 감추기

데이터 은닉(Data hiding)이라고도 하는데,

사용자의 데이터 필드 직접 접근/변경을 방지하기 위함이다

 

이를 위해 private 데이터 필드로 정의를 할 수 있다

이 private 데이터 필드에 내부에서만 접근자로 접근하고,

변경자로 값을 변경해주면 조금 나을수도 있겠지

 

private 데이터 필드 정의)

self.__weight
self.__height

 

접근자 예시)

def get_height(self):
    return self.__height

 

변경자 예시)

def set_radius(self, radius):
    self.__r = radius