[Python] class

손종일·2020년 8월 23일
0

Python

목록 보기
5/13
post-thumbnail

Class

객체를 표현하기 위한 문법이다.
ex) int, list, dict 도 class이다.

Class는 언제 사용할까?

프로그래밍에서는 현실 세계에 있는 개념들뿐만 아니라 컴퓨터 안에서만 쓰이는 개념들도 클래스로 만들어서 표현한다. 집, 자동차, 버튼, 체크 박스 등도 클래스로 표현 가능하다.

Class에서의 객체(Object)

집, 자동차, 버튼, 체크 박스처럼 특정한 개념이나 모양으로 존재하는것을 객체(Object)라 부른다.

Class의 인스턴스(instance)와 객체(Objcect)의 차이점?

  • 보통 객체만 지칭할 때는 객체 라고 부른다.
  • 클래와서 연관지어서 말할 때는 인스턴스(instance)라고 부른다.
  • ex) a = list(range(10)) 이라는 변수가 있으면, a는 객체이다.
  • a는 list 클래스의 인스턴스이다.

Class는 어떻게 생겼을까?

자동차의 마력, 연비, 유류종류, 배기량 등의 데이터를 Class의 속성 (attribute)라고 부르며 자동 주행, 차선 이탈 감지 등의 기능을 메소드(method)라고 부른다.

아래처럼 프로그램을 작성하는 방법을 객체지향 프로그래밍이라고 한다. 객체 지향 프로그래밍은 복잡한 문제를 나누어 객체로 만들고, 객체를 조합해서 문제를 해결하는 것이다. 복잡한 문제를 처리하는데 유용하며 해당 클래스만 수정하면 되므로 유지 보수에도 효율적이다.

클래스 (Class)
   ├── 속성 (attribute)
   │       ├── 마력
   │       ├── 연비
   │       ├── 배기량
   │       └── 유류 종류
   └── 메소드 (method)
           ├── 자동 주행
           └── 차선 이탈 감지

Class에서의 속성(attribute)

속성을 만들 때는 __init__ 메소드 안에서 self속성에 값을 할당한다.
여기서 중요한 점은 속성은 init 메소드에서 만든다는 점과 self에 .을 붙인 뒤 값을 
할당한다는 점이 중요하다. 그러므로 아래 코드와 같이 속성을 사용할 때 self.hello 
처럼 .을 붙여서 사용한다.

self 란?

  • self는 인스턴스 자기 자신을 의미한다.
  • 인스턴스가 생설될 때 self.hello = '안녕' 처럼 자기 자신에 속성을 추가한다.
  • init의 매개변수 self에 들어가는 값은 Person()이라고 할 수 있다.
  • self가 완성된 뒤 sohn에 할당된다.
  • 호출하면 현재 인스턴스가 자동으로 매개변수 self에 들어온다.
  • greeting 메소드에서 print(self.hello) 처럼 속성을 출력할 수 있다.
    0
Class 클래스이름 :
	def __init__(self):
    self.속성 = 값
 ex)
 class Person:
 	def __init__(self):
   		self.hello ="안녕"
-    
    	def greeting(self):
    		print(self.hello)
-            
sohn = Person()
sohn.greeting() // 안녕

인스턴스를 만들 때 값 받는 방법

  • init 메소드에서 self 다음에 값을 받을 매개변수를 지정한다.
  • 아래 코드와 같이 매개변수를 self.속성에 넣어준다.
  • 클래스 바깥에서 속성에 접근할 때는 인스턴스.속성 형식으로 접근한다.
  • 인스턴스를 통해 접근하는 속성을 인스턴스 속성이라 부른다.
Class 클래스이름 :
	def __init__(self, 매개변수1, 매개변수2):
    		self.속성1 = 매개변수1
    		self.속성2 = 매개변수2
ex)
 class Person:
 	def __init__(self, name, age):
   			self.hello ="안녕"
        	self.name = name
        	self.age = age
-    
    	def greeting(self):
    		print(self.hello, self.name)
 sohn = Person('손종일'. 29)
 sohn.greeting() // 안녕 손종일 29
-            
sohn = Person()
sohn.greeting() // 안녕
print(sohn.name) // 손종일

비공개 속성 사용하는 방법

-  비공개 속성은 __속성 같이 이름이 __ 밑줄 두개로 시작해야 한다.
- __속성__ 처럼 밑줄 두개가 양 옆에 왔을 때는 비공개 속성이 아니므로 주의해야 한다.
- 비공개 속성은 중요한 값으로서 바깥에서 함부로 바꾸면 안될 때 사용한다.
/
Class 클래스이름 :
	def __init__(self, 매개변수):
    		self.__속성 =

비공개 속성을 출려하는데 아래의 코드에서는 왜 에러가 날까?

 class Person:
 	def __init__(self, name, age, wallet):
   		self.hello ="안녕"
        	self.name = name
        	self.age = age
        	self.__wallet = wallet # 변수 앞에 __를 넣어서 비공개 속성을 생성
-    
    	def greeting(self):
    		print(self.hello, self.name)
 sohn = Person('손종일'. 29, 10000)
 print(sohn.__wallet) // 'Person' object has no attribute '__wallet'
 		    // class 바깥에서 비공개 속성에 접근하면 위와 같은 에러가 발생

그 이유는 비공개 속성은 클래스 안의 메소드에서만 접근이 가능하기 때문이다.

 class Person:
 	def __init__(self, name, age, wallet):
   		self.hello ="안녕"
        	self.name = name
        	self.age = age
        	self.__wallet = wallet # 비공개 속성
 -       
        def pay(self, amount):
        	self.__wallet += amount
            print(self.__wallet)
sohn = person('손종일', 29, 10000)
soh.pay(5000) // 5000
profile
Allday

0개의 댓글