Python Class

Jayce_97·2023년 5월 8일
0

Python 기초

목록 보기
6/10
post-thumbnail

오늘은 파이썬의 클래스에 대해 공부해 보려고합니다.


클래스(Class)란

파이썬은 객체지향(Object oriented) 프로그램밍입니다.
그것의 핵심 기술이 클래스이며, 클래스는 객체(instance)를 만들어내기 위한 틀입니다.
동일한 무언가를 계속해서 만들어낼 수 있는 형태이며 만들어낸 객체들은 모두 고유한 성격을 가집니다. 여기서 중요한 것은 객체별로 갖는 기능은 모두 동일하다는 것입니다.
붕어빵을 예시로 들면, 같은 틀로 만들어낸 여러 개의 붕어빵 중에서 하나를 먹더라도 다른 붕어빵에는 아무 영향을 미치지 않는 것과 동일하다는 것입니다.

클래스를 사용하는 이유는 간단합니다.
계산기를 예시로 들자면, 클래스를 사용하지 않는다면 덧셈만 가능한 계산기, 나눗셈만 가능한 계산기를 만들어야 할 것입니다.
하지만 클래스를 사용한다면 사칙연산이 가능 하도록 클래스 안에 기능을 넣으면 됩니다.
이처럼 클래스를 이용하면 코드를 간결하게 작성할 수 있으며, 특정 기능 또는 특정 변수에만 작용하는 함수를 쉽게 유지 보수할 수 있는 장점이 있습니다.

객체지향의 외의 방법은 절차지향(Procedural Programming)이라고 합니다.
절차지향의 특징으로는 개체를 순차적으로 처리하여 프로그램 전체가 유기적으로 연결되야 한다는 것입니다.
장점으로는 컴퓨터의 처리 구조와 유사해 실행 속도가 빠르다는 것이고
단점으로는 유지보수가 어렵고, 실행 순서가 꼬이면 동일한 결과를 보장하기 어렵습니다. 디버깅 또한 어렵습니다.
반대로 객체지향의 장점은 코드를 재활용 할 수 있고,절차 지향에비해 코딩하기가 간편합니다. 디버깅 또한 쉽습니다.
단점은 처리속도가 절차지향에 비해 느리고, 설계에 시간소요가 많이 들어갑니다.
절차지향의 대표적인 언어는 C언어이며, 객체지향은 Python이 존재합니다.


input

import math

class MyCircle:   
    a=0
    b=0
    r=0
    def set_r(self, r): #첫번째 매개변수 자리에 self, 인스턴스의 시작번지값을 가리킴 
        self.r=r  # 프로퍼티 변수 r 생성 
    
    def length(self):
        self.a=2 * math.pi * self.r 
    
    def area(self):
        self.b = math.pi * self.r * self.r 

    def disp(self):
        print(f'반지름:{self.r}, 둘레:{self.a:.2f}, 넓이:{self.b:.2f}')
        
a=MyCircle() # 클래스이름() 인스턴스 생성 
a.set_r(50)
a.length()
a.area()
a.disp()

output

반지름:50, 둘레:314.16, 넓이:7853.98

이처럼 MyCircle이라는 클래스를 선언만 하여도 그 안의 함수들을 모두 사용 할 수 있게 됩니다.

self는 객체의 인스턴스 그 자체를 말합니다. 자기 자신을 참조하는 매개변수라고 생각하면 됩니다. 객체지향 언어는 모두 이걸 메소드에 안보이게 전달하지만, 파이썬은 클래스의 메소드를 정의할 때 self를 명시합니다. 메소드를 불러올 때 self는 자동으로 전달되고, self를 사용함으로 클래스내에 정의한 멤버에 접근할 수 있게됩니다.
해당내용은 Self이해하기에서 확인 가능합니다.


Class를 활용한 점수 구하기

input

class Point:
    name=''
    kor=0
    eng=0
    mat=0
    tot=0
    avg=0
    grade=''
    def __init__(self,name,kor,eng,mat): #초기화 함수 
        self.name=name
        self.kor=kor 
        self.eng=eng 
        self.mat=mat 
    def calc(self):
        self.tot=self.kor+self.eng+self.mat  #총점
        self.avg=self.tot / 3  #평균 
        if 90 <= self.avg <= 100: # 편리한 비교 기능 
            self.grade='A'
        elif 80 <= self.avg < 90:
            self.grade='B'
        elif 70 <= self.avg < 80:
            self.grade='C'
        elif 60 <= self.avg < 70:
            self.grade='D'
        else:
            self.grade='F'
    def disp(self):
        print('이름\t국어\t영어\t수학\t총점\t평균\t등급')
        print(f'{self.name}\t{self.kor}\t{self.eng}\t{self.mat}\t{self.tot}\t{self.avg:.2f}\t{self.grade}')
        
p4=Point('홍길동',93,80,100)
p4.calc()
p4.disp()

output

이름 국어 영어 수학 총점 평균 등급
홍길동 93 80 100 273 91.00 A

클래스는 정형화 되있는 형식이 있다고 생각하면 좋은거 같습니다. __init__은 최기화 하기위한 함수로써 사용되고 self("자기자신")이라고 생각하고 함수를 구성을 사용할때 사용된다고 생각하시면 어렵지 않습니다. 공부한 사이트 링크입니다. 필요하시다면 보고 이해하시면 더욱 쉬울 것입니다.


이상으로 클래스에 대해도 공부해 보았습니다. 아무래도 클래스부터는 중요한 기초이며 어렵기 시작한 부분이라 이해하기 쉽지않을 거라고 생각합니다. 저 또한 완벽하게 이해하지 못해 링크를 활용하였습니다.파일 입출력에 대해 배워보도록 하겠습니다. 잘못된 점이 있다면 지적 부탁드리며 오늘은 이만 마치겠습니다.

😁 power through to the end 😁

profile
Dreamer

0개의 댓글