이번 강의에서 가장 힘들었던 것 같다. 함수, 클래스, 클래스의 상속과 다형성 등 많은 것들이 이해가 되지 않았다. 클래스는 Java언어에서 많이 들었는데, 파이썬에서도 클래스를 배우는 줄은 몰랐다. 그렇기에 따로 공부가 필수적이였다.
입력값을 가지고 어떤 일을 수행한 다음에 그 결과물을 내어놓는 것. 프로그래밍을 하다보면 똑같은 내용을 반복해서 작성하는 경우가 많다. 이럴 떄 함수가 필요하다.
함수의 구조
def 함수명(매개변수): <수행할 문장1> <수행할 문장2> ...
def는 함수를 만들 때 사용하는 예약어이며, 함수 이름은 되도록 함수 기능에 따라 작명을 하면 좋다. 매개변수는 이 함수에 입력으로 전달되는 값을 받는 변수이다.
def 함수이름(매개변수): <수행할 문장> ... return 결과값
가장 흔하게 볼 수 있는 형태이다. 매개변수를 수행할 문장에 넣고 return하여 반환해주는 것이다.
1번 예시
>> a = add(3, 4) >> print(a) 7
add 함수는 2개의 입력값을 받아서 서로 더한 결괏값을 돌려준다.
>> def say(): ... return 'Hi' ... >>
2번 예시
>> a = say() >> print(a) Hi
위 함수를 쓰기 위해서는 say()처럼 괄호 안에 아무 값도 넣지 않아야 한다. 이 함수는 입력값은 없지만 결괏값으로 Hi라는 문자열을 돌려준다. a = say()처럼 작성하면 a에 Hi 문자열이 대입되는 것이다.
>> def add(a, b): ... print("%d, %d의 합은 %d입니다." % (a, b, a+b)) ... >>
3번 예시
>> a = add(3, 4) 3, 4의 합은 7입니다.
아마도 여러분은 ‘3, 4의 합은 7입니다.’라는 문장을 출력해 주었는데 왜 결괏값이 없다는 것인지 의아하게 생각할 것이다. 이 부분이 초보자들이 혼란스러워하는 부분이기도 한데 print문은 함수의 구성 요소 중 하나인 <수행할 문장>에 해당하는 부분일 뿐이다. 결괏값은 당연히 없다. <결괏값은 오직 return 명령어로만 돌려받을 수 있다.
>> def say(): ... print('Hi') ... >>
4번 예시
>> say() Hi
매개변수와 인수를 헷갈려하는 경우가 많다.
매개변수: 함수에 입력으로 전달된 값을 받는 변수
인수: 함수를 호출할 떄 전달하는 입력값을 의미
def add(a, b): # a, b는 매개변수 return a+b print(add(3, 4)) # 3, 4는 인수
def say_myself(name, old, man=True): print("나의 이름은 %s 입니다." % name) print("나이는 %d살입니다." % old) if man: print("남자입니다.") else: print("여자입니다.")
위 함수를 보면 매개변수가 name, old, man=True 이렇게 3개다. 그런데 낯선 것이 나왔다. man=True처럼 매개변수에 미리 값을 넣어 준 것이다. 이것이 바로 함수의 매개변수 초깃값을 설정하는 방법이다. 함수의 매개변수에 들어갈 값이 항상 변하는 것이 아닐 경우에는 이렇게 함수의 초깃값을 미리 설정해 두면 유용하다.
객체 지향 프로그래밍은 프로그램 구현에 필요한 객체를 파악하고 각각의 객체들의 역할이 무엇인지를 정의하여 객체들 간의 상호작용을 통해 프로그램을 만드는 것
절차 지향
객체 지향
1. 추상화(abstraction)
2. 캡슐화(encapsulation)
3. 상속성(inheritance)
4. 다형성(polymorphism)
-오버라이딩(Overriding) - 부모클래스의 메소드와 같은 이름을 사용하며 매개변수도 같되 내부 소스를 재정의하는 것
-오버로딩(Overloading) - 같은 이름의 함수를 여러 개 정의한 후 매개변수를 다르게 하여 같은 이름을 경우에 따라 호출하여 사용하는 것
5. 동적바인딩(Dynamic Binding)
1. 소프트웨어의 생산성 향상
이미 만들어진 클래스를 상속받거나 객체를 가져다 재사용하거나, 부분 수정을 통해, 소프트웨어를 작성하는 부담을 대폭 줄일 수 있다.
2. 보안성 향상
객체 지향적 프로그래밍의 캡슐화 특징으로 실제로 구현되는 부분을 외부에 드러나지 않도록 하여 정보를 은닉할 수 있다.
느린 실행 속도
객체 지향 프로그래밍은 캡슐화와 격리구조에 때문에 절차지향 프로그래밍과 비교하면 실행 속도가 느리다. 또한, 객체지향에서는 모든 것을 객체로 생각하기 때문에 추가적인 포인터 크기의 메모리와 연산에 대한 비용이 들어가게 된다.
다음 게시글에 클래스, 모듈, 패키지 등을 자세히 쓰도록 하겠다.
1.필요한 함수를 자유자재로 만들어 간결한 코딩을 짤 수 있는 능력을 키워야 할 것같다.
2.객체 지향 프로그래밍의 장점을 극대화 할 수 있도록 객체에 대해서 더 공부할 필요가 있다.
https://wikidocs.net/24 - 점프 투 파이썬/04-01 함수, 05장 파이썬 날개달기
http://www.incodom.kr/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5 - 객체지향 프로그래밍 특징