'''  클래스 기초

클래스 선언 '''

class Test: #클래스명은 첫글자는 대문자로 사용한다.
	str = "클래스 개념 잡기" # str은 Test클래스의 요소(attribute, field) 또는 Test클래스의 멤버라고도 한다.
	    #Test는 붕어빵틀과 같다.

test1 = Test() #test1 객체는 Test 클래스에 의해서 만들어진 인스턴스, test1은 Test클래스의 인스턴스
					#test1은 붕어빵과 같다.

print(test1.str)

''' 클래스의 구성

class 클래스명:
	변수    #클래스에 소속된 변수들을 필드(field)라고 부른다.
    
	함수 # 클래스(객체)내에  어떤 기능을 갖을 수 있도록 하는 함수
	       # 이러한 함수들을 클래스의 메소드(method)라고 한다. 

결론적으로 클래스는 필드와 메소드로 구성된다. 
변수나 함수와는 다르게 구별지어서 부르는 것은 클래스나 객체에 
소속되어 있는 대상이라는 것을 나타내기 위함이다.

필드와 메소드 들을 통틀어 클래스의 속성(attribute) 이라고 부른다.

클래스내의 메소드와 일반 함수와의 차이점은 바로 'self' 이다

메소드의 경우 매개 변수의 목록에 항상 추가로 한개의 변수(self)를 맨앞에 추가해야한다.
꼭 self를 사용해야 하는 것은 아니지만, 일반적으로 self를 사용한다. 
(self를 표준으로 사용하고 있다.)

메소드를 호출 할 때 이변수에는 직접 우리가 값을 넘겨 주지 않는다. 
파이썬이 자동으로 self에 값을 할당한다.

self는 C++ 에서의 this 포인터와 같은것, java나 C#에서는 this 참조 같다.

'''

class Person:
	def say(self):
		print("안녕, 친구!!!")

p1 = Person()

p1.say() #self에 대입값을 전달하지 않았음에도 불구하고 에러가 없다. 즉, 파이썬에서 자동으로 전달을 한다는 의미

class Person1:
	pass

p2 = Person1() # 객체화 한다. 즉, 메모리에 객체를 생성한다. 인스턴스화
print(p2)
