본문 바로가기
IT 개인학습/Python

Class , Object , Method ( OOP )

by kiimy 2021. 7. 18.
728x90
728x90

Object-Oriented Programming 객체 지향 프로그래밍

클래스를 사용해서 프로그래밍 하는 방법

( 프로그램을 수많은 '객체'라는 단위로 구분하고, 이 객체들의 상호작용하는 방식 )

 

==> 객체를 우선으로 생각하는 언어 

==> 객체를 효율적으로 만들고 사용하는 것이 목적

 

 클래스는 어떤 물건을 찍어내기 위한 일종의 틀 class 

 객체는 그 틀을 이용해서 찍어내는 실제 물건 object

 

프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용

또한 프로그래밍을 더 배우기 쉽게 하고 소프트웨어 개발과 보수를 간편하게 하며,

보다 직관적인 코드 분석을 가능하게 하는 장점

일반적으로 프로그램을 만들때 항상 염두에 둬야할  2가지
1. 같은 코드를 반복하지 않는다.
2. 코드는 항상 바뀔 수 있다는 것을 기억한다.

일반적으로 이런 중복된 코드를 줄이기 위해서 함수를 사용

함수를 사용하면 한번 정의한 함수를 필요한 곳에서 호출만 하면되고, 코드를 수정해야 할때는

한 곳만 수정하면 된다. <OOP> 역시 함수와 비슷하게 반복되는 코드를 없애서 코딩 시간을 줄여 주며,

코드의 관리를 더 간단하게 해준다.

하지만 한번 사용하고 버리는 불필요한 클래스를 만드는 것은 피해야한다.

 

Object

Class기반의 객체지향 프로그래밍 언어는 class 라는 것을 기반으로 객체(object)를 만듬

( 연관되어 있는 변수와 메소드 집합 )

class 상속

https://cord-ai.tistory.com/36

 

Class 상속(inheritance)

상속(inheritance) 국가라는 클래스가 있고, 그것을 상속받은 한국, 일본, 중국, 미국 등의 클래스를 만들 수 있으며, 국가라는 클래스의 기본적인 속성으로 인구라는 속성을 만들었다면, 상속 받은

cord-ai.tistory.com

Object

하나의 객체에는 이름(name)과 속성(Attributes) 기능(Methods) 가 있음

* 학교에서 학생들을 관리하기 위해서 학년을 나누고 반을 나누는 것
* 파이썬에서 이 오브젝트들은 변수에 할당될 수도 있고, 함수의 인자로 전달될 수도 있는
  퍼스트 클래스 오브젝트

 

* 프로그램에서 필요한 요소만을 사용해서 객체를 표현 = 추상화 ( Abstraction )

==> 핵심적인 개념 or 기능을 간추려 내는 것

 

# Class 내부와 외부에서 Class 변수에 접근할 때는 ( 클래스이름.변수이름 )

## 'Class가 가진기능'을 명시적으로 나타내서 변수를 만드는 것 
class 클래스이름():
	클래스변수 = 값
    
# 생성자 ( Constructer )

class 이름():
	def __init__(self, 매개변수)
	# ==> 객체를 생성할 때 처리할 내용 작성가능

__init__ 생성자 

객체 초기화를 위해 클래스 생성시 노출되는 동작을 정의

self == 실제로 인스턴스가 사용할 수 있는 메소드로 선언 

( Class로 만들어진 인스턴스 자체를 말함 ) = 클래스가 객체화 되었을 때, 그 객체를 가르키는 의미

* 메소드안에서 속성값 사용하지 않으면 생략가능

클래스 안에서 self로 시작되는 변수는 클래스의 속성(attribute)이라고 부르며,

클래스 안의 메소드에서 self.변수이름 으로 접근

 

클래스 안에서 메소드를 접근하기 위해서는 self.메소드이름 

class Book(object): # class 선언
    a = ''
    b = ''
    c = ''
    d = ''

    def print_info(self):
        
        print('a', self.a)
        print('b', self.b)

book = Book() # class Book을 book 인스턴스로 = booke은 Book 클래스의 객체가됨
book.a = 'asd'
book.b = 'asdf' 

'''
# 속성값을 가져와 값을 할당 ( a,b 는 인스턴스 속성)
# Book.a ==> 처럼 가져올수 있음 (a 는 클래스 속성) 
    def __init__(self, name):
        self.name = name
# self.name = 클래스속성
'''

book.print_info() 
# print_info에 있는 self 가 book을 뜻함
# 즉 class로 만들어진 인스턴스 자체를 말함

EX ) book = Book('sd')
== >  객체를 생성할때 괄호 안에 인자를 넣어주는데, 
      이것은 클래스의 __init__ 함수에 들어가는 인자를 의미
      즉, __init__ 함수에서 self 뒤에 선언된 인자들을 의미
      __init__ 함수 안에서 'sd'는 self.name 이라는 클래스 속성(attribute)에 저장됨

 

클래스 속성, 인스턴스 속성

class GradeCard:
    scores = list()

    def add_score(self, score):
        self.scores.append(score)


t1 = GradeCard()
t2 = GradeCard()
t1.add_score(100)
t2.add_score(80)

print("t1:", t1.scores)
print("t2", t2.scores)


#예상 값
t1: [100]
t2: [80]

#실제값 
t1: [100, 80]
t2: [100, 80]
출처:  [Take Action]

=> scores는 같은 클래스의 객체들이 공유 

각 객체가 각자 다른 변수를 갖기 원한다면 

생성자에서 멤버변수를(변수 앞에 self를 붙여서) 세팅
출처: https://marobiana.tistory.com/162 [Take Action]

class GradeCard:
    def __init__(self):
        self.scores = list()

    def add_score(self, score):
        self.scores.append(score)


t1 = GradeCard()
t2 = GradeCard()
t1.add_score(100)
t2.add_score(80)

print("t1:", t1.scores)
print("t2", t2.scores)

# 결과 값
t1: [100]
t2: [80]

출처:  [Take Action]
728x90

'IT 개인학습 > Python' 카테고리의 다른 글

Python에서 시간 측정하기(Decorator, Command line)  (0) 2021.09.26
Error, try ... except  (0) 2021.07.18
Class 상속(inheritance)  (0) 2021.07.18
매직메소드  (0) 2021.07.18
Python 함수  (0) 2021.07.18

댓글