# (Python 2-4강) String and advanced function concept

### String

* 문자열, 시퀀스 자료형으로 문자형 data를 메모리에 저장한다
* 영문자 한 글자는 1byte의 메모리공간을 사용한다.
* 문자열의 각 문자는 개별주소를 가지며 이 주소를 사용해 할당된 값을 가져오는 인덱싱이 가능하다
* List와 같은 형태로 데이터를 처리한다

### 함수 호출 방식

값에 의한 호출

* 함수에 인자를 넘길 때 값만 넘김
* 함수 내에 인자 값 변경 시, 호출자에게 영향을 주지 않음

참조에 의한 호출

* 함수에 인자를 넘길때 메모리 주소를 넘김.
* 함수 내에 인자 값 변경 시, 호출자의 값도 변경됨

객체 참조에 의한 호출

* 파이썬은 객체의 주소가 함수로 전달되는 방식
* 전달된 객체를 참조하여 변경 시 호출자에게 영향을 주나, 새로운 객체를 만들 경우 호출자에게 영향을 주지 않음

```python
def spam(eggs):
    eggs.append(1) # 기존 객체의 주소값에 [1] 추가
    eggs = [2, 3] # 새로운 객체 생성
    
ham = [0]
spam(ham)
print(ham) # [0, 1]
```

### 변수의 범위

지역변수

* 함수내에서만 사용

전역변수

* 프로그램전체에서 사용
* 전역변수는 함수에서 인자전달 없이 사용가능하다.
  * 그러나 동일한 이름의 변수를 선언하면 지역변수를 우선으로 사용한다
  * 또한, 함수에서 전역변수를 수정할 수 없다.
  * 수정할 시에는 반드시 `global` 키워드를 사용해야 한다

Dynamic typing

처음 함수를 사용하는 사용자가 interface를 알기 쉽게 하기 위해서 type hints 기능을 제공한다

* 장점
  * 사용자에게 인터페이스를 명확히 알려줄 수 있다.
  * 함수의 문서화시 parameter에 대한 정보를 명확히 알 수 있다.&#x20;
  * mypy 또는 IDE, linter 등을 통해 코드의 발생 가능한 오류를 사전에 확인
  * 시스템 전체적인 안정성을 확보할 수 있다.
