Language/Python

231122 Python 절차적(구조적) 지향 프로그램(procedural language), 객체지향프로그램(Object Oriented Language), Class 생성, 인스턴스변수, 인스턴스화

잇꼬 2023. 11. 22. 17:16
728x90
반응형
SMALL

# =============================================================================
# 프로시저 프로그램

# <<session1>> = user1
result = 0
def add(arg):
    global result
    #result = result + arg
    result += arg

add(10)
result

add(20)
result

# <<session2>> = user2
add(40)
result

result1 = 0 
def add(arg):
    global result1
    result1 += arg


user1, user2 에 add()에 영향을 미친다.

# ex) 게임user 별로 아이템을 다른 user도 사용한다고 생각.
# =============================================================================

■  절차적(구조적) 지향 프로그램(procedural language)
    #1) C, R, PL/SQL(ex. PACKAGE)
    #2) 물이 위에서 아래로 흐르는 것처럼 순차적으로 처리가 중요시되며, 
         프로그램 전체가 유기적으로 연결되도록 만드는 포르그래밍 기법이다.
    #3) 단점. 재사용 불가능, 확정성이 떨어짐, 유지보수의 어려움

■ 객체지향프로그램(Object Oriented Language)
    #1) C++, JAVA, C#, PYTHON,
    #2) 구조적인 프로그램과 달리, 큰 문제를 작은 문제들로 해결할 수 있는 객체들을 만든 뒤에, 
         이 객체들을 조합해서 큰 문제를 해결하는 방법

ex) 집을 짓자: 설계 -> 설계도(class)로 시공
클래스 생성 : 설계도

class Calculator:
    def __init__(self): # 내 class에게만 영향을 주는 것, 내 session에서만 영향. 인스턴스화 했을 경우, 무조건 실행
        self.result = 0 # private 변수(package body 변수), 인스턴스 변수(내 session에서만 사용)
        #초기화
    def add(self, arg): # 호출용
        self.result += arg # 형식매개변수, local 변수
        return self.result



인스턴스 생성(메모리생성) : 클래스를 메모리에 만들어서 사용
# <<session1>>

s1 = Calculator() # 인스턴스화 
s1.add(10)
s1.add(20)
s1.result
s1.result = 50 # 내 session에서만 임의적으로 변동 가능
s1.result
s1.add(30)


# <<session2>>

s2 = Calculator()
s2.add(100)
s2.add(200)
s2.result


# <<session3>>

s3 = Calculator()
s3.add(1000)
s3.add(2000)



__init__(self) : 생성자(메소드, 함수)
    #1) 클래스를 인스턴스화 할 때 자동으로 수행되는 생성자이다.
    #2) 인스턴스 변수를 초기화해 줘야 할 때 사용한다.(인스턴스화 했을 경우, 무조건 실행된다)

class hello:
    def __init__(self): # 필수X, 필요에 의해서 작성 
        print('오늘 하루도 수고하셨습니다!')
h = hello() # 인스턴스화 

class hello:
    def message(self):
        print('오늘 하루도 수고하셨습니다!')
h = hello() # 인스턴스화 
h.message()


# 연습

class Person:    
    def myprint(self):
        name = '홍길동' # local variable
        age = 20 # local variable
        print('이름은 {}, 나이는 {}'.format(name, age))
        
p1 = Person()
p1.myprint()
# Person.myprint()
p1.name # 호출X, name 변수는 인스턴스변수가 이니기 때문에 오류발생


# private variable로 변경

class Person:         
    name = '홍길동' # private variable, 인스턴스 변수
    age = 20 # private variable, 인스턴스 변수     
    def myprint(self):
        print('이름은 {}, 나이는 {}'.format(self.name, self.age))
p = Person()
p.myprint()
p.name
p.age
p.name = '박찬호'
p.age = '30'
p.myprint()
# 클래스에 없는 변수 선언 가능
p.job = '오라클 엔지니어'
p.job

# 변수끼리 내 session에서 출력
p.name + ' ' + p.age + ' ' + p.job



# 다른 인스턴스화 했을 경우

p1 = Person()
p1.myprint()
p1.addr = '서울'
p1.addr

# 출력하고자 하는 변수와 연결할 경우
p1.name + ' ' + p1.addr
728x90
반응형
LIST