study blog

객체지향 프로그래밍(Object Oriented Programming) 본문

Python/4. OOP(class)

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

ivo_lee 2020. 1. 27. 17:40

# 함수 기반의 프로그래밍(절차적 프로그래밍)을 하면 좋음!

- 꽤 예전(1970년부터 지금까지 이 방식으로 프로그래밍을 하고 있음)

- 장점: 프로그래밍이 쉬움빨리 만들 수 있다 / 비용이 적게 듦

- 단점: 처음에는 단점 별로 없어보임

 

# 1990년대 들어오면서 인터넷의 보급  정보량 증가 세상이 급변

- 프로그램의 유지보수 요구가 많아지기 시작

- 절차적 프로그램으로 작성해서 이런 문제가 발생

- 어떤 방식으로 프로그램을 만들면 유지보수측면에서 이점이 있을까?

- 객체지향 paradigm이 시작

 

# 객체지향이 어떤 프로그래밍 방식인지를 인지하기

- 현실세계에 잘 부합하는 (변화에 잘 적응하는) 프로그램을 만들기 위해

- 해결해야 하는 문제(현실세계 문제)를 프로그램으로 똑같이 모델링하자고 생각.

 


 

# 은행프로그램

- 은행프로그램을 구성하는 구성요소를 파악

ex) 텔러, 고객, 은행계좌, 지점, 테이블, ...  분석하는 사람마다 다름 !

- class는 구성요소간의 행위들을 정의하는 프로그래밍 방식

- 은행계좌(객체)를 예로 프로그램으로 표현 (객체 모델링)

 

# 객체들은 크게 2가지로 파악할 수 있음 : 상태, 행위

- 상태: 값으로 표현되는 것

- 행위: 동작으로 표현되는 것

- 은행 계좌가 가지고 있는 값(상태) - 잔액, 예금주, 계좌번호

-                               동작(행위) - 입금, 출금, 조회

 abstraction(추상화)

 

# class 구현해보자.

# class : 객체 모델링의 수단. 우리가 만든 데이터 타입(추상 데이터 타입).
# 클래스 이름은 대문자로 시작(관용적)

class Student:
    # 1. properties  (변수로 표현)
    # 상태(값) : 이름, 학과, 학년, 학번, 성별, (나이, 키, 몸무게 ...)->상태로 간주할 수는 있으나 학생에 부합하다기엔 애매...   
    # class variable의 특징: 모든 객체가 공유하는 변수 -> 이름은 공유하는 변수 아니므로 적절치 못함.
    # 국적 등 모든 학생이 공유하는 변수로 설정해줘야 함
    s_nation = ""  # class variable -> 모든 학생이 이 국적을 공유


    # 2. constructor   (생성자)
    def __init__(self,n):    # 생성자는 반드시 이 이름을 사용해야 함!     
                             # self라는 키워드는 처음에 반드시 와야 함!
                             # 이 생성자는 인자를 1개 받는 함수

        self.s_name = n   # instance variable (객체가 독립적으로 가지고 있는 변수)
        self.s_num = ""    # instance variable (객체가 독립적으로 가지고 있는 변수)
        self.s_major = []
        #Student.s_nation = n   # s_nation쓰려면 지역변수이므로  Student 해줌


    # 3. method     ( 함수로 표현 (함수는 아님) )
    # 행위(동작)     

    def display(self):   # def가 class 안에 있는 것! # display: 학생정보를 출력하는 행위
        print("학생 이름은 : {}".format(self.s_name))
    # def display(self) 하면 해당 클래스가 가지는 일반적인 instance가 된다.    
t = Student("홍길동")   # t라는 객체 생성  ( 저장공간 )    -> 객체 만들 때 생성자가 자동으로 호출됨
                        # class 호출 -> 공간이 만들어짐 -> 이 만들어진 메모리 공간을 instance라고 한다.
                        # 저장공간(instance)-> '객체'라는 표현으로 지칭
                        # 클래스 내부에 정의된 생성자라고 불리는 함수가 호출됨
print(t.s_name)      #홍길동
# t.display()     # 학생 이름은 : 홍길동

k = Student("김연아")  # 또다른 객체 생성 -> 학생이 2명 된 것
print(k.s_name)      #김연아

Student.s_nation = "한국"
print(t.s_nation)   # 한국   # -> 모든 학생의 국적 다 한국
print(k.s_nation)   # 한국  


students = list()
students.append(Student("홍길동") ) 
print(students[0].s_name)

 

Comments