Zero to Hero
Published 2021. 1. 23. 14:12
코딩을 지탱하는 기술 02 Review

함수

몇 개의 행(코드라인)을 하나의 그룹으로 묶어 이름을 붙인 것

 

장점

1. 프로그램이 정량적으로 짧아진다.

2. 소스코드를 읽는 사람이 동일한 소스코드를 반복해서 읽지 않아도 된다.

3. 프로그램을 쉽게 이해할 수 있다.

4. 재사용을 통해 소모되는 비용(시간 및 메모리)을 감소시킬 수 있다.

 

일반적인 흐름

1. 코드가 진행된다

2. 함수를 만난다.

3. 함수가 저장된 메모리 공간으로 점프를 한다

4. 점프한 뒤 메모리 공간의 코드를 수행한다

5. 수행한 뒤 함수를 호출했던 메모리 주소로 다시 돌아간다.

 

돌아갈 목적지를 기록해두는 전용 메모리를 만들어

"돌아갈 목적지 메모리(레지스터)에 적어둔 번지로 점프하는 명령"을 준비해 "돌아가는 명령어의 위치"를 파악해둘 필요가 없어졌다.

 

거기에 스택을 이용해 마지막에 수행된 함수가 실행 후 돌아갈 메모리 주소를 저장하는 방법으로 특정 함수 호출 중에 다른 함수가 호출되었을 경우에도 함수가 각자 돌아갈 메모리 주소가 살아있게 된다.

 

형(Type)

컴퓨터는 0과 1의 조합으로 이해하는 기계다.

다시 말해서 컴퓨터는 비트열만으로 특정 비트 패턴을 인간이 원하는 형으로 이해할 수 없다.

그래서 이 값이 어떤 종류인지에 대한 정보인 "형" 정보가 별도로 필요하다.

 

3 + 7 = 10

3.0 + 7.0 = 10.0

 

위 두 식은 인간이 보았을 때 의미하는 바가 같다. 하지만 컴퓨터는 정수를 더할 때와, 실수를 더할 때의 연산 방법이 다르다. 다시 말해서 3 + 7을 할 때의 연산 방법을 그대로 3.0 + 7.0에 적용하면 전혀 다른 값이 된다.

 

초기 컴퓨터인 FORTRAN은 변수명 선두가 1~N이면 정수, 그 이외이면 부동 소수점이 들어있다는 규칙을 적용했다.

 

하지만 일반적으로 언어 처리계에 특정한 값의 형을 미리 알려서 컴퓨터에게 기억시키는 방법을 쓰는데 이것이 바로 변수 선언이다.

int x; // x라는 이름이 가리키고 있는 메모리 영역은 정수로 해석해라
float y; // y라는 이름이 가리키고 있는 메모리 영역은 부동소숫점으로 해석해라

 

동적 형 결정

변수명, 값이 저장한 메모리 위치, 해당 메모리 내용 등 어떤 종류의 값인가를 언어 처리계가 한 세트로 가지고 있는 형태.

즉 메타데이터를 값 그 자체와 함께 세트로 가지고 있는 것을 동적 형 결정이라고 한다.

대표적으로 Python은 변수명을 선언할 필요가 없으며 같은 변수에 정수와 부동 소수점을 모두 넣을 수 있다.

 

Python은 모든 값은 정수, 부동 소수점, 문자열 상관없이 모두 PyObject라는 형으로 취급한다.

PyObject 형의 구조 안에는 값의 종류 정보를 저장할 수 있는 공간이 있다.

즉 값을 읽을 때 해당 메모리를 읽어야 하는 방식(정수, 실수 등)이 기록되어 있다.

 

장점

1. 유연한 처리가 가능하다. 실행 전까지 형을 정해두지 않아도 되고, 실행 시에 형이 바뀌는 것도 가능하다

 

단점

1. 컴파일 시에 오류를 발견할 수 있는 정적 형 결정 언어와 비교해볼 때 실행 전에 버그를 발견하는 것이 불가능할 수 있다.

 

코딩을 지탱하는 기술
국내도서
저자 : 니시오 히로카즈 / 김완섭역
출판 : 비제이퍼블릭 2013.10.16
상세보기

 

profile

Zero to Hero

@Doljae

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!