편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.
최신판 | 당신의 편집 | ||
1번째 줄: | 1번째 줄: | ||
{{ | {{쉽게 알 수 있다 시리즈|이 문서는 정말 쉽습니다.|문서의 내용이 너무 쉬워서 오늘부터 프로그래밍 할 수 있을 것 같습니다.}} | ||
[[분류:프로그래밍 시리즈|파이썬]] | |||
== 초급 단계 == | == 초급 단계 == | ||
25번째 줄: | 25번째 줄: | ||
다만 기본 값 생략은 오른쪽 인자에서부터 좌측으로부터 순서대로 사용이 가능합니다. | 다만 기본 값 생략은 오른쪽 인자에서부터 좌측으로부터 순서대로 사용이 가능합니다. | ||
< | <source lang="python"> | ||
def NumAdd( v , v2 = 1): | def NumAdd( v , v2 = 1): | ||
return v + v2 | return v + v2 | ||
32번째 줄: | 32번째 줄: | ||
print(변수1) | print(변수1) | ||
변수1 = NumAdd(변수1) | 변수1 = NumAdd(변수1) | ||
</ | </source> | ||
==== 람다 함수 ==== | ==== 람다 함수 ==== | ||
람다 | 람다 함수는 특이한 함수인데요, 바로 '''이름이 없는 함수'''입니다. 주로 한번 사용하{{--|고 버리}}는 함수, 함수에 변수로써 넘겨줄 함수에 사용됩니다. | ||
< | <source lang="python"> | ||
lambda 변수 목록: 명령문 | lambda 변수 목록: 명령문 | ||
58번째 줄: | 58번째 줄: | ||
이것은 근성체다? | 이것은 근성체다? | ||
ㄹㄹㄹ ㄹㄹㄹ | ㄹㄹㄹ ㄹㄹㄹ | ||
</ | </source> | ||
==== 함수스택 ==== | ==== 함수스택 ==== | ||
==== 재귀함수 ==== | ==== 재귀함수 ==== | ||
재귀함수란 쉽게 풀어 쓰면 자기호출을 하는 함수라는 뜻입니다. | 재귀함수란 쉽게 풀어 쓰면 자기호출을 하는 함수라는 뜻입니다. | ||
< | <source lang="python"> | ||
def fib(n): | def fib(n): | ||
if n < 2: | if n < 2: | ||
69번째 줄: | 68번째 줄: | ||
else: | else: | ||
return fib(n - 1) + fib(n - 2) | return fib(n - 1) + fib(n - 2) | ||
</ | </source> | ||
위의 코드는 피보나치수를 반환하는 함수입니다. | 위의 코드는 피보나치수를 반환하는 함수입니다. | ||
79번째 줄: | 78번째 줄: | ||
=== 객체지향 === | === 객체지향 === | ||
==== | ==== 객체지향? ==== | ||
객체지향프로그래밍(Object-Oriented Programming)이란 우리가 일상생활에서 생각하는 대로 프로그램 내부의 '객체'를 다루기 위한 기법입니다. | |||
올바르지 않은 표현이지만 자동차를 예로 들면, 자동차는 크게 나누어 바퀴와 차체로 나누어 집니다. | 올바르지 않은 표현이지만 자동차를 예로 들면, | ||
자동차는 크게 나누어 바퀴와 차체로 나누어 집니다. | |||
기능적으로 설명하면 바퀴는 굴러가고 차체는 안에 사람이나 짐을 싣고 동력을 바퀴에 전달하죠. | 기능적으로 설명하면 바퀴는 굴러가고 차체는 안에 사람이나 짐을 싣고 동력을 바퀴에 전달하죠. | ||
90번째 줄: | 91번째 줄: | ||
또 그것을 기능적으로 설명하고, 그 물건을 또 나누고.... | 또 그것을 기능적으로 설명하고, 그 물건을 또 나누고.... | ||
이렇게 해서 모든 부품과 부품의 역할을 설명할 수 있게 하는 것이 객체지향 프로그래밍의 | 이렇게 해서 모든 부품과 부품의 역할을 설명할 수 있게 하는 것이 객체지향 프로그래밍의 첫번째 목적입니다. | ||
==== 클래스 ==== | |||
클래스는 쉽게 말해서 교실입니다. | |||
교실 안에는 여러 사람들(학생)이 모여 있겠죠. | |||
그리고 또한 물건(책상, 의자 등)이 놓여 있고요. | |||
학생을 메소드(함수)라고 치고 물건을 필드(변수)라고 치면, | |||
학생이 물건을 이용해서 무언가를 한다. | |||
= 메소드가 필드를 이용해서 무언가를 한다. | |||
라는 설명이 완성됩니다. | |||
물론 이 설명이 | 물론 이 설명이 완벽한것은 아니지만 대충 비슷한 원리로 생각하시면 될 것 같습니다. | ||
==== 객체 ==== | ==== 객체 ==== | ||
객체란 위에서 설명했듯이, 모든것이 객체가 됩니다. | |||
클래스도 교실이 되고요, 필드(변수)도 객체입니다. | |||
하지만 학생은 객체가 아닙니다. 학생으로 비유한 메소드(함수)는 행동이기 때문에 객체로 보지 않습니다. | |||
==== 모든 것은 객체다 ==== | ==== 모든 것은 객체다 ==== | ||
네, 모든것은 객체입니다. | |||
자바나 C++로 프로그래밍을 조금 배우셨던 분이면 이런 말씀을 하실 수도 있습니다.: int나 float같은건 객체가 아니지 않느냐? | |||
네. 그건 그 언어에서의 이야기고요. 파이썬에서는 모든것이 객체입니다. <ref>이렇게 모든 것이 객체인 언어의 또다른 예로는 [[스칼라]]가 있습니다. {{--|벡터 스칼라 말고}} 공교롭게도{{--|공교롭게도?}} 자바 바이트코드로 컴파일할 수 있고, 자바 API 또한 사용이 가능합니다.</ref> | |||
이전판에서 설명되었던 거지만 int(3.151492)이걸 내장함수라고 설명했던 게 있었는데, 사실 그건 함수가 아니라 클래스 생성자입니다. 그러니까 int타입의 객체를 하나 생성한 겁니다. 이에 대해선 밑에서 설명합니다. | |||
==== 클래스를 만들어 보자 ==== | ==== 클래스를 만들어 보자 ==== | ||
간단한 파이썬의 클래스를 만들어 보겠습니다. | 간단한 파이썬의 클래스를 만들어 보겠습니다. | ||
< | <source lang="python"> | ||
class 동물: | class 동물: | ||
나이 = 0 | 나이 = 0 | ||
158번째 줄: | 154번째 줄: | ||
File "<string>", line 20, in <module> | File "<string>", line 20, in <module> | ||
AttributeError: '동물' object has no attribute '말하기' | AttributeError: '동물' object has no attribute '말하기' | ||
</ | </source> | ||
* "사람(동물)"은 왜 괄호를 쓰고 "동물"은 왜 그대로 쓰죠? | * "사람(동물)"은 왜 괄호를 쓰고 "동물"은 왜 그대로 쓰죠? | ||
:파이썬에서는 클래스를 선언할 때 클래스를 상속받게 됩니다. 이전 글에는 항상 object를 상속받는 것으로 나와 있었으나, "동물"과 같이 적지 않으면 [[암묵의 룰|암묵적]]으로 " object" 클래스를 상속받게 됩니다. 사람은 동물 클래스를 상속받기 위하여 (동물)이라고 코드를 친 것입니다. 상속에 대해서는 뒤에서 더 자세히 설명할께요. | :파이썬에서는 클래스를 선언할 때 클래스를 상속받게 됩니다. 이전 글에는 항상 object를 상속받는 것으로 나와 있었으나, "동물"과 같이 적지 않으면 [[암묵의 룰|암묵적]]으로 " object" 클래스를 상속받게 됩니다. 사람은 동물 클래스를 상속받기 위하여 (동물)이라고 코드를 친 것입니다. 상속에 대해서는 뒤에서 더 자세히 설명할께요. | ||
* 함수안의 self인자는 뭔데 정의할 땐 써놓고 사용할 땐 쓰지 않는 거죠? | * 함수안의 self인자는 뭔데 정의할 땐 써놓고 사용할 땐 쓰지 않는 거죠? | ||
:파이썬의 필드(객체의 내부 변수)를 수정하거나, 값을 확인할 때, 명시적으로 객체의 필드인 것을 알려줘야 합니다. 그래서 self(스스로의) 입니다. 실제로 사용하는 것은 객체가 아니라 다른 곳이기 때문에 자신을 가리키는 "self"를 적지 않습니다. (이건 적으면 에러가 납니다.)<!-- | :파이썬의 필드(객체의 내부 변수)를 수정하거나, 값을 확인할 때, 명시적으로 객체의 필드인 것을 알려줘야 합니다. 그래서 self(스스로의) 입니다. 실제로 사용하는 것은 객체가 아니라 다른 곳이기 때문에 자신을 가리키는 "self"를 적지 않습니다. (이건 적으면 에러가 납니다.) <!-- 이부분 이해가 잘 안돼요. --> | ||
*왜 사람 클래스에선 밥먹기를 만들지 않았는데 잘 되고 동물은 말하기가 안 되는 거죠? | *왜 사람 클래스에선 밥먹기를 만들지 않았는데 잘 되고 동물은 말하기가 안 되는 거죠? | ||
169번째 줄: | 167번째 줄: | ||
===== 사람 객체를 생성해 보자 ===== | ===== 사람 객체를 생성해 보자 ===== | ||
< | <source lang="python"> | ||
철수 = 사람() | 철수 = 사람() | ||
철수.이름 = "철수" | 철수.이름 = "철수" | ||
179번째 줄: | 177번째 줄: | ||
결과: | 결과: | ||
안녕, 나는 철수야. | 안녕, 나는 철수야. | ||
</ | </source> | ||
{{중급 프로그래밍 항목}} | |||