객체 지향 프로그래밍

객체 지향 프로그래밍(OOP : Object Oriented Programming)

기능을 묶은 하나의 단일 프로그램을 객체라는 코드에 넣어 다른 프로그래머가 재사용할 수 있게 하는 기법

 

1. 객체, 인스턴스, 클래스

  •  객체(Object) : 실생활에 존재하는 물건 또는 개념 
    • 속성 : 객체가 가지고 있는 변수
    • 행동 : 객체가 실제로 작동할 수 있는 함수, 메서드
  • 클래스(Class) : 객체를 생성하는 설계도
  • 인스턴스(Instance) : 여러 속성을 클래스에 담아 실제 생성되는 구체적인 객체

2. 클래스 구현하기

  • 클래스 선언 : 클래스 예약어 클래스 이름 (상속받는 객체명) → class SoccerPlayer(object)
  • 속성의 선언(속성) : __int__ ()함수 : 이 클래스에서 사용할 속성(변수)를 선언하는 함수
    • 첫번째 매개변수는 반드시 self를 사용 : 클래스에서 생성된 인스턴스를 지칭 (값 자체는 받지 않음)
    • self 뒤의 매개변수들은 실제로 클래스가 가진 속성
  • 클래스 내 함수의 선언(행동) : 기존 함수선언과 동일하지만 self를 첫번째 매개변수에 반드시 넣어야함
  • 인스턴스 호출 : 인스턴스이름=클래스이름(__init__()함수의 매개변수 인자들)
    • 생성된 인스턴스와 클래스 내 sef는 같은 역할!!

3. 클래스를 사용하는 이유

  • 클래스를 사용하면 동적으로 데이터를 변환하거나 데이터베이스에 저장하는 등의 다양한 역할 가능
  • 다른 사람들이 결과를 사용할 때 이 데이터가 무엇을 위한 데이터인지 명확히 알 수 있다.

4. 객체 지향 프로그래밍의 특징

  • 상속(Inheritance) : 부모 클래스에 정의된 속성과 메서드를 자식 클래스가 물려받아 사용하는 것
    • super(). : 부모 클래스의 어떤 것을 그대로 가져다 쓰겠다는 의미
    • 변수 추가 시 __init__() 함수 재정의 -> super().__init__(매개변수) 사용

# 전체 UnivStudent 클래스 선언
class UnivStudent(object):
    # 이 클래스에서 사용할 속성(변수)를 선언하는 함수
    def __init__(self,name,major,number): # 첫번쨰 매개변수는 반드시 self
        self.name = name
        self.major = major
        self.number = number
    # 선수의 등번호를 변경해서 출력하는 함수(정확히는 메소드)
    def change_major(self,new_major):
        print("학생의 전공을 변경한다: From %s to %s" % (self.major,new_major))
        self.major = new_major
    # 클래스로 인스턴스를 생성했을 때, 그 인스턴스 자체를 print 함수로 화면에 출력하는 나오는 값(보통 인스턴스의 정보 표시)
    def __str__(self):
        return "Hello. My name is %s. My student number is %d." % (self.name, self.number)

#인스턴스 호출 : 호출하는 순간에 self 자리에 jay가 들어간다.
jay = UnivStudent('jay','economics',2016314812)

print("현재 학생의 전공은:",jay.major)
현재 학생의 전공은: economics
# UnivStudent 클래스의 change_major 함수 호출
jay.change_major("Statistics")
학생의 전공을 변경한다: From economics to Statistics
print("현재 학생의 전공은",jay.major)
현재 학생의 전공은 Statistics
print(jay)
Hello. My name is jay. My student number is 2016314812.
#상속
#부모 클래스
class Person(object): # 부모 클래스 Person 선언
    def __init__(self,name,age,gender):
        self.name = name
        self.age = age
        self.gender = gender
    
    def about_me(self): # 메서드 선언 -> __str__(self)와 동일
        print("저의 이름은",self.name,"이고요, 제 나이는",str(self.age),"살 입니다.")

jay = Person('jay',30, '남자') #인스턴스 선언

jay.about_me()
저의 이름은 jay 이고요, 제 나이는 30 살 입니다.

# 자식 클래스
class Greeting(Person): # 부모 클래스 Person으로부터 상속
    def __init__(self,name,age,gender,hobby,marriage): # 새로운 내용 추가
        super().__init__(name,age,gender) # 부모 객체 사용
        self.hobby = hobby
        self.marriage = marriage # 속성값 추가
    
    def positive(self): #새로운 메서드 추가
        print(self.name,"는 긍정적인 사람입니다.")
    
    def about_me(self): # 부모 클래스 함수 재정의
        super().about_me() # 부모 클래스 함수 사용
        print("제 취미는", self.hobby, "이고", self.marriage, "입니다
        
introduce = Greeting('jay',30,'남자','당구','미혼')
introduce.positive()
jay 는 긍정적인 사람입니다.

introduce.about_me()
저의 이름은 jay 이고요, 제 나이는 30 살 입니다. 제 취미는 당구 이고 미혼 입니다.