이론

정적 바인딩과 동적 바인딩

벨포트조던 2016. 8. 25.
반응형

http://wookss-blog.tistory.com/6


> 정적 바인딩과 동적 바인딩에 대해 설명하여라.

바인딩(binding) :

- 변수에 변수와 관련된 속성을 연관시키는 것, 즉 이름에 속성을 연관시키는 과정.

- 프로그래밍 용어로서, 각종 값들이 확정되어 더 이상 변경할 수 없는 구속(bind) 상태가 되는 것.

- 함수를 호출하는 부분에서 함수가 위치한 메모리 번지를 연결시켜 주는 것

 

바인딩 시간(binding time) : 바인딩이 일어나는 시간

- 시간에 따라 : 정적 바인딩(static binding) / 동적 바인딩(dynamic binding)으로 분류

바인딩

설명

정적 바인딩

기본개념 : 실행 시간 전에 일어나고 프로그램 실행 과정에서 변하지 않은 상태로 유지되는 바인딩

추가 개념 :

1. 프로그램 내에서 변수, 배열, 라벨, 절차 등의 명칭, 즉 식별자(identifier)가 그 대상인 메모리 주소, 데이터 형 또는 실제 값으로 배정되는 것이 이에 해당되며, 원시 프로그램의 컴파일링 또는 링크 시에 확정되는 바인딩.

2. 컴파일을 해서 실행 파일을 만드는 단계에서 함수를 호출하는 부분과 그 함수가 저장되는 부분을 연결시킵니다.

이와 같이 실행 파일을 만들 때 호출될 함수로 점프할 번지가 결정되어 바인딩 되는 것을 정적 바인딩 이라고 합니다.

동적 바인딩

기본개념 : 실행 시간 중에 일어나거나 프로그램 실행 과정에서 변경되는 바인딩

추가 개념 :

실행 파일을 만들 때는 바인딩이 되지 않고, 보류 상태로 두었다가 프로그램이 실행될 때 바인딩 되도록 할 수가 있습니다.

이렇게, 실행 파일을 만들 때는 호출될 함수로 점프할 번지를 결정하지 않고 빈칸으로 두었다가 프로그램을 실행할 때, 점프할 번지를 즉석에서 결정하여 함수를 실행하도록 하는 것을 동적 바인딩 이라고 합니다.

프로그램 작성에서는 바인딩을 가급적 뒤로 미루도록 권고하고 있다.

 

단점

동적 바인딩의 단점

1. 무시할 수 있을 만큼이긴 하나 정적 바인딩을 하는 경우보다 수행 속도가 떨어지게 된다.

2. 바인딩에 필요한 메모리 번지를 저장할 포인터를 가지고 있어야 한다.

(정적 바인딩시 함수당 4바이트씩 더 필요하게 된다)

 

 

 

 

 

 

> 변수의 할당을 수명에 따라 분류하고 설명하여라.

용어정리

할당

(allocation)

변수에 메모리 공간을 바인딩 하는 과정을 기억장소.

회수

(deallocation)

변수로부터 바인딩이 해제된 메모리 공간을 가용 공간으로 돌려주는 과정.

수명

(lifetime)

변수가 특정 메모리 주소에 바인딩 되어 있는 시간.

변수의 수명은 변수가 메모리 공간에 바인딩 될 때 시작되며 회수될 때 종료된다.

 

변수의 할당은 수명에 따라 크게 정적 할당, 스택기반 할당, 동적 할당으로 분류

 

정적 영역

 

변수 할당과 관련된 메모리 구조

- 정적 영역은 크기가 정해져 있는 반명 스택과 힙은 필요에 따라 서로 반대 방향으로 영역이 성장 할 수 있다.

스택

↓

↑

 

할당 종류

설명

정적 할당

(static allocation)

변수에 메모리 공간이 정적으로 할당되는 것으로, 한번 할당되면 프로그램 실행이 종료될 때까지 할당 상태가 그대로 유지된다.

(주로 전역 변수가 정적 할당)

프로그램을 시작하자마자 공간을 만들고 거기에 접근하는 방식이다. 프로그램 실행 와중에 공간을 만들고 싶은데 이것은 정적 할당으로는 불가능 하다.

동적 할당

(dynamic allocation)

명시적인 명령어에 의해 실행 시간에 할당된다. 동적 할당이 이루어지는 메모리 공간은 힙(heap)인데, 동적으로 할당된 영역은 포인터나 참조 변수를 통해서 참조할 수 있다.

프로그램 실행 도중에 공간을 만들고 싶을 때 보통의 경우로 할당 할 때에는 불가능 하지만, 함수를 호출하는 경우에는 가능하다. 함수인자로 변수를 넘겨, 그 변수로 공간 할당이 가능하다.

 

 

할당방법

할당방법 

할당장소 

기억장소 확보 시기 

기억장소 해제 시기 

 정적 할당

필요한 자료형 변수 선언 

스택(Stack) 

변수가 선언된 함수가 호출될 때 

 변수가 선언된 함수 실행이 종료 될 때

 동적 할당

 new 연산자 이용

(Heap) 

 동적 할당 코드가 실행 될 때

 delete 명령이 실행 될 때,

또는 프로그램이 종료 될 때.

 

할당 종류

설명

스택 기반 할당

(stack based allocation)

변수의 타입은 정적으로 할당되지만 메모리 공간은 실행 시간 중에 할당된다.

스택 기반 할당은 보다 효율적이며, 훨씬 캐시 친화적이다. 현대적 프로세서에서 캐시 소실 비용은 막대하다 따라서 언어와 런타임이 프로그램이 더 나은 데이터를 로컬에서 얻을 수 있도록 도와준다면 퍼포먼스는 향상 될 것이다.

 

 

>이름 상수를 사용할 때 얻어지는 장점에 대해 설명하여라.

이름상수(named constant)

-프로그램 전반에 걸쳐 고정된 값을 가지는 식별자

-변수와는 달리 값이 변경될 수 없음

-판독성과 프로그램의 신뢰성을 증진.

, 소스코드에서 입력한 어떤 한 변수의 값을 일일이 고칠 필요가 없이, 이름 상수를 선언하는 문장만 수정하면 된다. 이름 상수를 선언하여 이름 상수의 입력된 값을 바꾸게 되면 소스코드 내의 이름 상수 변수의 전체를 일제히 바꾸기 때문에 판독성이 높아지게 된다.

반응형

'이론' 카테고리의 다른 글

면접 질문 까먹은거 정리중  (0) 2022.07.01
jsp 웹 프로그래머 면접  (0) 2016.09.01
java 신입면접 질문리스트  (0) 2016.09.01
웹 프로그래머(JAVA, JSP) 면접 예상 질문  (0) 2016.09.01
자바스크립트 클로저  (0) 2016.08.24

댓글