# =============================================================================
# 프로시저 프로그램
# <<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