본문 바로가기

Code-note

[자료구조]클래스(class) 개념 이해하기 -python

파이썬을 객체지향 언어로 만들어주는 방법 : 클래스 생성

https://dojang.io/mod/page/view.php?id=2372

- 객체지향 프로그래밍(Object Oriented Programming, OOP) : "객체"들의 모임으로 프로그래밍을 파악
- 클래스(Class) 생성 : 동일한 클래스로 서로 전혀 영향을 주지 않는 독립적인 객체들을 만들수 있다. 
## 클래스 기본 구조
class 클래스 이름:
	def 매서드(self): # self는 객체 초기화
    	기능수행코드

호출인스턴스이름 = 클래스() # 인스턴스가 self로 들어가서 기능을 수행
호출인스턴스이름.매서드() # 호출된 인스턴스 내의 매서드를 사용 가능

# 클래스 기본 구조 : 기능을 담은 클래스를 생성하고 호출하게 되면 인스턴스가 생성된다. 

## 매직 매서드
class greet:
    def __init__(self,name):
        self._name = name
    def hello(self):
        return ("hello {0}".format(self._name))
    def bye(self):
        return ("bye {0}".format(self._name))

k = greet("james")
print(k.hello()) # hello james
print(k.bye()) # bye james
print(dir(k)) # ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_name', 'bye', 'hello']

# 매직 매서드 : 클래스 내에서 특별한 기능을 담당하는 메서드("__MM__"의 형태) ; dir(인스턴스이름) 의 형태로 확인할 수 있다. 

## 클래스의 상속과 오버라이딩
class car1(object):
	def move(self,x):
    	...
class car2(car1):
	def move(self,x):
    	...
class car3(car2):
	def move(self,x):
    	...
k = car3()
k.move(x)

# 클래스 상속: car1의 기능 -> car2로 상속 -> car3로 상속

: 상속을 받으면(파생 클래스) 상속을 해준(기반 클래스) 클래스의 모든 기능 및 값을 사용가능하다.  

# 매서드 오버라이딩: car3를 호출하여 move 메서드 사용 -> 가장 마지막의 car3 내의 move가 수행됨

 

=====================================================================

## 클래스를 생성하는 세가지 방법
1. 변수값을 입력받는 set 함수와, 입력받은 변수값을 리턴하는 get함수로 구성
2. 생성자(__init__)을 사용하여 변수를 입력받아 사용
3. 생성자(__init__)을 사용하여 변수를 입력받고, 받은 변수를 property를 통해 값을 가져와 사용

=====================================================================

 

1. 변수값을 입력받는 set 함수와, 입력받은 변수값을 리턴하는 get함수로 확실하게 구분하며 기본 클래스 생성 (캡슐화 원칙)

-  캡슐화(encalsulation)원칙 : 객체 내부의 데이터를 외부에서 직접적인 접근을 못하게 하고, 필요한 경우의 접근 방법을 제공

class User():
    name = ''
    def set_name(self, name): # name을 변수 값으로 설정하는 함수
        self._name = name
    def get_name(self): # 사용하기 위해 name변수의 값을 리턴하는 함수
        return self._name

user1 = User()
user1.set_name('Jaeseok')
print(user1.get_name())

 

2. 생성자를 이용하여 객체의 값을 초기화 하는 클래스를 생성 (생성자)

- 생성자 __init__ : 사용자가 따로 호출하지 않아도 객체를 생성할 때 자동으로 호출되는 메서드

class User():
    def __init__(self,name):
        self._name = name
    def get_name(self):
        return self._name
user1 = User('Jaeseok')
print(user1.get_name())

 

3. 프로퍼티를 이용하여 메서드를 호출할 필요없이 값을 불러오고 설정할 수 있는 클래스 생성 (프로퍼티)

- 프로퍼티(property) : 데코레이터(decorator) 함수로 속성에 접근하는 방법을 더 간편하고 안전하게 만들기 위한 기능

- @property: 속성에 직접 접근하듯 user.name으로 값을 가져올 수 있도록 한다. 

- @name.setter: 속성의 값을 user.name = 'user_name'으로 할당 할 수 있도록 한다. 

class User():
    def __init__(self,name):
        self._name = name
    @property
    def name(self): # 값 반환 메서드
        return self._name
    @name.setter
    def name(self,value): # 값 설정 메서드
        self._name = value

user1 = User("Jaeseok")
print(user1.name)

 

<참고자료>

- 클래스의 개념:  https://wikidocs.net/28

 

05-1 클래스

초보 개발자들에게 클래스(class)는 넘기 힘든 장벽과도 같은 존재이다. 독자들 중에도 클래스라는 단어를 처음 접하는 이들이 있을 것이다. 그러면 도대체 클래스가 무엇인지, 클…

wikidocs.net

- 객체지향언어 : https://devkingdom.tistory.com/123

 

[Python] Python 은 객체 지향 언어인가?

하이 ㅎㅎ 요즘 Python 의 재미에 푹 빠졌다... ㅎㅎ 어서 기본적인 공부 끝내고 크롤링하고 싶은데 ... 쉽지가 않다. 결론 부터 말하자면 Python 은 객체지향 언어이다. ㅎㅎ 근데 .. 왜이리 파이썬이

devkingdom.tistory.com

- 프로퍼티 : https://blog.naver.com/codeitofficial/221684462326

 

[코드잇] 쉽게 배우는 파이썬 문법 - 프로퍼티(Property) 1편

안녕하세요, 코드잇입니다. 이번 시간에는 파이썬에서 사용되는 프로퍼티(Property)라는 기능을 배워볼게...

blog.naver.com

- 데코레이터 : https://blog.naver.com/codeitofficial/221673642106

 

[코드잇] 파이썬에서 데코레이터(Decorator)란??

안녕하세요, 온라인 코딩 스쿨 코드잇입니다. 오늘은 파이썬에서 사용하는 데코레이터(decorator)를 알아보...

blog.naver.com

- 매직 메소드 : https://wikidocs.net/83755

 

04) 매직 메소드 소개

[TOC] ## 매직 메소드 (Magic method) 클래스 안에 정의된 함수를 우리는 특별히 '메소드(method)'라고 부릅니다. 메소드 중에서 `__`로 시작해서 `_…

wikidocs.net