[Python & NCS] 3. 파이썬 프로그램 구조

GGomBee·2021년 5월 13일
0
post-thumbnail

함수형 프로그래밍과 객체지향 프로그래밍

프로그래밍은 두가지의 범주로 구성된다.

선언형방식에는 함수형과 논리형이 있으며, 대표적인 함수형 프로그래밍 언어에는 자바스크립트가 있다.

명령형방식에는 절차형과 객체지향이 있으며, 대표적인 객체지향 프로그래밍 언어에는 C++, 자바등이 있다.

파이썬은 함수형 프로그래밍 언어와 객체지향 프로그래밍 언어 두가지의 특징을 공유한다.



## 객체지향 프로그래밍(OOP)

객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.

구성요소는 다음과 같다.

클래스(Class) - 스키마 구조에 맞춰 속성(attribute)과 행위(behavior)를 정의한 것으로 사용자 정의 데이터형(user defined data type) 이다. 디스크에 저장된다.

객체(Object) - 클래스의 구조를 실제 메모리상에 할당해서 생성된 주소공간이 인스턴스이다.

메서드(Method) - 객체를 사용하는 방법으로서 객체의 서브루틴(subroutine) 형태로 객체의 속성을 조작하는 데 사용된다.

메시지(Message) - 객체 간의 통신은 메시지를 통해 이루어진다. 서로 다른 메소드사이에 매개변수의 형태로 전달된다.




함수형 프로그래밍(functional programming)

자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다. 명령형 프로그래밍에서는 상태를 바꾸는 것을 강조하는 것과는 달리, 함수형 프로그래밍은 함수의 응용을 강조한다. 프로그래밍이 문이 아닌 식이나 선언으로 수행되는 선언형 프로그래밍 패러다임을 따르고 있다.

구성요소는 다음과 같다

함수 (function) - 소프트웨어에서 특정 동작을 수행하는 일정 코드 부분을 의미한다. 하나의 큰 프로그램을 여러 부분으로 나누어주기 때문에 같은 함수를 여러 상황에서 여러 차례 호출할 수 있으며 일부분을 수정하기 쉽다는 장점을 가진다.



파이썬에서 함수형 프로그래밍 적용

메인 함수는 진입점(엔트리 포인트)이다. 최초 실행함수이다.

def main():

print('Hello Python')

if __name__ == "__main__":

main()

파이썬에서 모듈 적용

모듈이란 함수나 변수 또는 클래스를 모아 놓은 파일이다. 모듈은 다른 파이썬 프로그램에서 불러와 사용할 수 있게끔 만든 파이썬 파일이다. - 점프 투 파이썬

name 변수란?

name이라는 내장변수는 현재 모듈의 이름을 담고있는 내장 변수이다. 이 변수는 직접 실행된 모듈의 경우 main이라는 값을 가지게 되며, 직접 실행되지 않은 import된 모듈은 모듈의 이름(파일명)을 가지게 된다 – 점프 투 파이썬




파이썬에서 패키지 적용

파이썬 패키지는 디렉터리와 파이썬 모듈로 구성이다.

파이썬의 데코레이터는 함수형 2가지, class형 2가지 총 4가지 방식을 통해 작성한다.

1. 함수형 decorator(데코레이터에 인수 전달이 없는 경우 X)

1) main 함수 제작(Decorator함수에 끌려갈 함수)

2) Decorator 함수에 전달받을 함수 받기 & Decorator 함수 안에 main 함수를 매개변수로 갖는 함수 제작(wrapper라고 주로 부름)

3) wrapper에서 전달받은 main 함수를 호출 or return(사용자 마음대로)

4) Decorator함수(wrapper 함수와 같은 위치)에서 wrapper를 return

2. 함수형 decorator(데코레이터에 인수 전달이 있는 경우 O)

1) main 함수 제작(Decorator함수를 먼저 작성해도 상관 없음.)

2) Decorator 함수 제작 인수 전달이 있는 경우엔 main 함수가 아니라 decorator의 매개변수를 먼저 불러옴.(decortator의 변수 지정)

3) decorator 안에 진짜 데코레이터(1.의 구조와같음) 구현 real_deco에서 main함수를 매개변수로 전달받는다.

4) real_deco의 안에 wrapper 생성(wrapper에서 function(main)의 매개변수를 받음.

5) real_deco에서 wrapper를 반환하고 가장 바깥의 main_deco에서 real_deco를 리턴한다.

  1. Class 형 decorator(데코레이터에 인수가 없는 경우 X)

1) init메서드에 main함수(호출할 함수) 저장, self.function = function

2) call(인스턴스를 함수 호출처럼 사용가능하게 만들어줌.)메서드에 호출할 함수의 매개변수를 넘긴다.

3) 메인함수에 매개변수를 넣어서 호출하는 형태로 return

  1. Class 형 decorator(데코레이터에 인수가 있는 경우 O)

1) init메서드에 decorator의 인수 저장

2) call 메서드에 호출할 함수를 전달한다.

3) 메인함수에 매개변수를 넣어서 호출하는 형태로 return

4) call메서드에 wrapper 함수 생성 후 wrapper에 매개변수 전달

5) wrapper 함수에서 전달받은 함수 return

6) call 메서드의 리턴을 return wrapper(매개변수)과 같은 형식으로 한다.

profile
Stay Hungry, Stay Foolish! 겸손한 개발자 고은비입니다. 언제나 성장하기 위해 노력하며 유의미한 데이터로 사용자의 경험을 향상시키는 방법에 관심이 많습니다. 성장하고 싶어요!! 피드백은 언제나 환영입니다!

0개의 댓글