python OOP, 객체

강정우·2022년 7월 19일
0

python

목록 보기
10/13
post-thumbnail

OOP

Object Oriented Programming (OOP) : 객체 조립하여 전체 프로그램을 만드는 것이다.

  • 클래스 : 객체를 만들어내기 위한 설계도 또는 툴, 표현하고자 하는 대상과 연관되어있는 변수와 메소드의 집합니다.
  • 객체 : 소프트웨어 세계에 구현할 대상, 클래스에 선언된 모양 그대로 생성된 실체
    클래스의 인스턴스
    객체는 모든 인스턴스를 대표하는 포괄적인 의미
    oop의 관점에서 클래스의 타입으로 선언 되었을 때 객체라고 부름
    종류를 객체로 잡진 않는다. (type을 객체라고 하진 않는다.)
    클래스로 구현을 해놓은 것이 객체다.
  • 인스턴스 : 설계도(클래스)를 기반으로 소프트웨어 세계에 구현된 구체적인 실체(클래스 객체를 가리키는 변수)
    인스턴스는 객체에 포함됨 - 객체를 소프트웨어에 실체화 한 것.
    oop관점에서 메모리에 할당되어 사용가능하도록 실체화한 것.
    원본(객체)로 부터 생성된 복제본 객체는 클래스의 인스턴스 실행 프로세스는 프로그램 코드의 인스턴스

한마디로

  • 클래스에서 찍어낸 것이 객체이고 객체는 클래스의 인스턴스이다.
  • 객체의 한 종류가 인스턴스 즉, 객체 > 인스턴스의 개념이다.
  • 인스턴스끼리는 독립적으로 돌아간다.

1. class

class 클래스명 [(상속클래스)]:
    클래스 변수(field)
    def 클래스 함수(self[매개변수1, 매개변수3,...]): ==> self는 무조껀 써줘야함.
    실행문
  • python의 클래스는 미리 만들어둔 field값이 아니더라도 main에서 실행하더라도 생성이 된다.
# field 도 method도 없는 class 생성
class SampleClass:
    pass
    
# 객체로써 class 접근
# sampleclass() : 클래스명과 동일한 이름의 함수 -> 생성자
a = SampleClass()
a.var = 100
print(a.var)

#result
## 100
  • 위와 같은 방법은 매우 편하지만 위험하다.

1) self

class SampleClass2:
    var = "python"
    
    # self는 자신이 속해있는 class를 가르킴
    # self는 항상 바뀔 수 있다.
    # 첫번째 파라미터는 무조건 해당 클래스를 가리키는 인스턴스로 할당을 해버림
    def printData(s):
        print(s.var)
a2 = SampleClass2()
a2.printData()

#result
## python 

2) 접근제한자 (__)

  • java의 private의 역할과 같은 임무를 수행한다.
class SampleClass5:
    __name1 = "홍길동"
    name2 = "이순신"
    
sc5 = SampleClass5()

# print(sc5.name1) ==> error
print(sc5.name2)

#reuslt 
## 이순신
  • 그래서 접근하기위해 python의 getter, setter moethod
class SampleClass5:
    __name1 = "홍길동"
    name2 = "이순신"
    
    def setName(self, name):
        self.__name = name
    def getName(self):
        return self.__name
    
st5 = SampleClass5()
# st5.getName()	==> Attribut error
st5.setName("마당쇠")
st5.getName()
  • private 한 변수를 set하기 전에 get함수로 호출하여 난 오류이다.

3) 생성자

class SampleClass5:
    __name = "홍길동"
    
    # 생성자
    def __init__(self,name,age):
        self.__name = name
        self.__age = age
        
    def getName(self):
        return self.__name
    
#st5 = SampleClass5() == > error 발생

  • java의 사용자정의 생성자 처럼 반드시 __init__으로 지정된 매개변수들은 객체 생성당시 반드시 명시되어있어야 한다.

  • 생성자를 이용하여 setter 대신 사용가능 하지만 data가 굉장히 많다면 setter를 사용하지만 그렇지 않다면 constructor를 사용한다.

  • def __main__ : main 함수도 이런식으로 쓰인다.

2. 기타

  • jupyter notebook 자동완성 기능은 tab을 이용하면 사용할 수 있다.
  • invalid literal for int() with base 10 == 형 변환 오류
profile
智(지)! 德(덕)! 體(체)!

0개의 댓글