' 내부 ' 프로그래밍에서 의미합니까?


정답

자동차를 생각해보십시오. 우리는 자동차가 어떻게 작동하는지 이해하지 않고도 자동차를 운전할 수 있습니다. 대부분의 사람들은 후드 아래에있는 자동차의 엔진을 보지 않습니다 (미국에서는 hood 라고 부르지 만, 예를 들어 영국 사람들은 보닛 ).

엔진 외에도 전송

이 있습니다. span>은 엔진에서 생성 된 전력을 전달 하여 구동계 로, 궁극적으로 그 힘을 사용하고 바퀴를 돌립니다. 대부분의 사람들은 이러한 세부 사항을 이해하지 못하며 자동차를 작동하기 위해 필요하지도 않습니다.

프로그래머로서 내부에서 무슨 일이 일어나고 있는지 아는 것은 통찰력을 제공하기 때문에 종종 도움이됩니다.

도움이 될 수있는 두 가지 Python 예제 :

Python의 변수 가 자주 설명됩니다. 초보 프로그래머에게는 데이터를 배치 할 수있는 이름이 지정된 상자 가됩니다. 따라서

x = 1

실제로 상자를 만들고 이름을 x, 상자에 1을 넣습니다. 나중에 상자를 살펴보면 상자에 1이 있음을 알 수 있습니다.

그러나 실제로는 내부

에서 일어나는 일이 아닙니다. 스팬>. 변수 x는 참조 또는 1이 실제로 메모리에 저장되는 위치를 알려주는 레이블입니다. 1이 들어있는 상자에 붙어있는 x가있는 스티커 메모를 생각해보십시오. 상자에 다른 것을 넣기로 결정하면 아마도 2가 될 것입니다. Python은 새로운 상자를 만들고 스티커를 이동합니다. 첫 번째 상자에서 두 번째 상자로 메모하십시오. 이것은 Python의 id() 함수를 사용하여 쉽게 시연 할 수 있습니다.이 함수는 Python의 메모리에서 객체가 어디에 있는지 효과적으로 알려줍니다 (엄격하게 사실은 아니지만 더 이상 도움이되지 않는 다이 그 레션이 필요합니다. 질문에 대한 답변).

>>> x = 1

>>> id(x)

4501308752

>>> x = 2

>>> id(x)

4501308784

x이 (가) 특정 장소에 언제 있었는지 알 수 있습니다. 내용을 변경했는데 x가 실제로 움직였습니다. 이것이 일어나는 이유는 여기서도 중요하지 않은 또 다른 여담입니다. 사실 x는 x가 참조하는 데이터가 이제 다른 위치에 있다는 의미에서 움직였습니다.

초보 Python 프로그래머는 이것을 알지 못하며 더 중요한 것은 이 사실을 알 필요가 없습니다 . 이름이 지정된 상자의 비유를 사용하는 것은 완벽합니다.

두 번째 예는 더 복잡하며 초보자가 이해하기 어려울 수 있습니다.

Python 데이터 모델 은 소위 내장 함수를 내부 클래스 메서드에 매핑합니다. 저는 TV 쇼 Stranger Things를 기준으로 설명하고 싶습니다. 그 쇼에는 위쪽 아래 가 있습니다. 사물은 알아볼 수 있지만 엉망입니다. Python len() 함수를 고려하세요. 이것은 매뉴얼에 내장 함수 로 나열되어있어 무언가의 요소 수를 반환합니다. string ( 컨테이너 ), (컨테이너이기도 함) 등입니다.

Python 초보 프로그래머는 일반적으로 len()가 단순히 내장 함수이며 모든 컨테이너. 실제로 내부 에서 일어나는 일은 Python이 len()에 대한 호출을 거꾸로 \_\_len\_\_()라고합니다. len()에 전달한 개체에 \_\_len\_\_() 메서드가 있으면 작동합니다. 그렇지 않다면 그렇지 않습니다. 예를 들어 정수로 len()를 호출 할 수없는 이유입니다.

>>> len(5)

Traceback (most recent call last):

File "", line 1, in

TypeError: object of type "int" has no len()

초보 파이썬 프로그래머는 이것을 정수가 컨테이너가 아니라는 것을 의미한다는 것을 이해합니다.그러나 len() 함수를 호출 할 수있는 정수 유형을 만드는 것은 쉽습니다.

>>> class MyInt(int):

... # create an "upside down" method for len()

... def \_\_len\_\_(self):

... return 1

...

>>> x = MyInt(13)

>>> x

13

>>> len(x)

1

MyInt라는 새 유형을 만들고 변수

MyInt 유형이며 len()를 호출 할 수 있습니다. 내 len()는 꽤 쓸모가 없지만 () 단지 “컨테이너”가 아닌 모든 객체에 대해 len()를 호출 할 수 있다는 점을 증명합니다. ” 실제로 프로그래머로서 비즈니스 또는 기타 조직을 나타내는 고유 한 개체 Organization를 만들 수 있습니다. Organization 개체에 대해 len()를 호출하고 조직이 존재 한 연수를 반환하도록 할 수 있습니다. .

그래서 내부에서 일어나는 일을 이해함으로써 우리는 프로그래머로서 더 나아갈 수 있습니다.

답변

다른 사람들이“ Under the hood 는 일반적으로 의미합니다.

명확하게해야 할 몇 가지 참고 사항 : 가장 단순한 형태의 컴퓨터는 프로세서와 주 메모리입니다. 프로세서는 매우 특정한 명령을 읽고 메모리의 값을 이동합니다. 메모리는 수많은 셀로 분할되고 각 셀에는 주소가 있습니다.

“내부”컴퓨터의 메모리는 다음과 같습니다.

(출처 : https://chortle.ccsu.edu/AssemblyTutorial/Chapter-10/memory01.gif)

고급 언어로 작업 할 때 (Java 또는 Python 또는 비슷한 것) 사물이 왜 그런지 이해하기가 어렵습니다. 예를 들어 연결 목록을 고려해 보겠습니다. 옆에 다른 풍선을 가리키는 화살표와 함께 숫자가있는 풍선 그림이 표시되었을 수 있습니다.

예 :

이 모든 것이 연결 목록이 배열과 비교하여 작동하는 방식을 이해하는 데 유용합니다. 그러나 “내부”는 많이 다릅니다.

우리가 말했듯이 컴퓨터의 모든 것은 값이있는 메모리 셀입니다. 연결된 목록 노드는 이웃 근처에서 시각화되지만 이웃에서 수백 또는 수천 바이트 떨어져있을 수 있습니다. 후드 아래에서 그림에 보이는 화살표는 실제로 포인터이며 포인터는 메모리의 모든 셀을 참조 할 수 있습니다. 특히 포인터는 목록에서 다음 노드의 주소를 참조합니다.

이 예제가 그가 말하는 내용을 명확히하는 데 도움이되기를 바랍니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다