language/Python

[Class] 객체 지향 프로그램(Object Oriented language) 이란?

브라우니란 2023. 11. 27. 19:24

 

Python에 대해서 검색해 보면 다들 객체 지향 언어라고들 한다.

그럼 이 객체 지향 언어가 무엇인지 알아보기 전에 우선 절차적 지향 언어에 대해 알아보자.

 


 

절차적 지향 프로그램(procedural language)


물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법이다. 대표적 언어들에는 C, R, PL/SQL이 있다.

 

단점으로는 재사용할 수 없으며 확장성이 떨어진다. 그리고 유지 보수가 까다롭다.  (이건 개발일을 하다보면서 굉장히 많이 느끼게 된다..) 가장 큰 단점으로는 서로 다른 프로세스에서 따로 사용할 수 없다. 아래의 간단한 Python 코드를 보면 좀 더 이해가 될 것이다.

 

def add(arg):
    global result
    result += arg

# ----------------------------------- #

# session 1
result = 0
  
add(10)
print(result) # 10
    
# ----------------------------------- #
    
# session 2
# but.. session 2에서 혼자 사용하고 싶음

add(40)
print(result) # 50

 

add() 함수를 세션1에서도 사용하고 세션2에서도 사용한다. 근데 여기서 result 변수가 내부적으로 글로벌 변수로 선언이 되어있다. 따라서. 세션1에서 add() 함수를 사용한 후 result 변수에 반영된 결과가 그대로 세션 2에서도 적용이 된다.

 

 

 

 


 

 

 

객체 지향 프로그램(Object Oriented language)

절차적 언어의 여러 단점에서 자유로운 객체 지향 언어에 대해서 알아보자.

객체 지향 프로그램은 절차적(구조적)인 프로그래밍과 다르게 큰 문제를 작은 문제들로 해결할 수 있는 객체들을 만든 뒤,
이 객체들을 조합해서 큰 문제를 해결하는 방법이다. 대표적 언어로는 C++, JAVA, C#, Python이 있다.

 

위와 동일하게 Python으로 설명해보고자 한다. Calculator 클래스를 만든 뒤, 세션1과 세션2에서 각각 사용하였다. 각 세션이 독립적으로 사용되는 것을 볼 수 있다. 

 

# 클래스 생성
class Calculator:
    def __init__(self):
        self.result =  0  # 인스턴스 변수, private variable
    
    def add(self, arg):
        self.result += arg # 형식 매개변수, local variable
        return self.result

# --------------------------------- # 

# 인스턴스 생성

# <<session 1>>
s1 = Calculator()
s1.add(10) # 10
s1.add(20) # 30

s1.result # 40 

# --------------------------------- # 


# <<session 2>>
s2 = Calculator()
s2.add(100) # 100
s2.add(200) # 300

s2.result # 300


# --------------------------------- #

 

 

 

Class 를 생성하는 것은 설계도를 만드는 것이라고 생각하면 된다. 우리가 자동차 설계도 하나를 완성하면, 여러 개의 공장에서는 이 설계도를 바탕으로 수십 수백대의 자동차를 생산해 낸다.

 

self 라는 다소 낯선 단어가 보일 것이다. 이것의 의미는 특정 세션에만 사용되어라는 지시어이다. 이 지시어를 통해 세션1과 세션2가 따로 사용할 수 있었다.

 

def __init__ 내부에 보면 self.result 변수가 생성되었다. 인스턴스 변수라고 불리며 해당 Class를 사용하는 세션에서는 글로벌 변수로 사용할 수 있다

.

Class 내부적으로 다시 def 를 만들 수 있으며, 여기서 선언되는 변수들은 local 변수로 사용된다. 그리고 각 세션1과 세션2에서 클래스를 호출한 후 변수에 담았다. 이를 인스턴스 생성이라고 한다.