1. 인터프리터와 컴파일러에 대해서 설명해주세요. (장단점을 비교해주세요)

    | 장현웅 | Python | 6 | 인터프리터와 컴파일러는 프로그래밍 언어를 컴퓨터가 알아들을 수 있는 형태로 변환하는 두 가지 대표적인 방식입니다.컴파일러는 마치 요리 레시피 책과 같습니다. 컴퓨터가 요리 즉, 파일을 실행을 한다고 치면, 레시피 책에 있는 모든 레시피들, 기계어로 번역되어있는 파일들을 한번에 읽어들이고, 음식을 한 번에 요리합니다. C나 C++과 같은 정적 타입 언어가 컴파일러를 사용합니다.컴파일러를 사용하면 이미 컴퓨터가 바로 실행할 수 있도록 기계어로 변환이 되어있기 때문에 실행이 아주 빠릅니다. 그리고 코드를 컴파일 하는 과정에서 실행 전에 오류를 미리 확인할 수 있습니다. 하지만 코드 컴파일을 마친 후에 코드 수정을 할 경우 수정한 내용에 대해 다시 컴파일을 해야해서 개발 시간이 더 오래 걸릴 수도 있습니다.인터프리터는 마치 동시번역가와 같습니다. 코드를 한 줄씩 읽고 실행하며 결과를 도출하는 방식입니다. Python과 Javascript와 같은 동적 타입 언어가 인터프리터를 사용합니다.인터프리터를 사용하면 코드를 작성하면서 결과를 바로바로 확인할 수 있어서 빠르게 개발할 수 있습니다. 그리고 컴파일러를 사용하는 언어와 달리 대부분의 플랫폼에서 동작이 가능하여 이식하기 쉽습니다. 하지만 코드를 실행하면서 동시에 번역을 하기 때문에 코드 한 줄만 단순히 보면 빨라보일 수 있지만, 실행하는 코드의 양이 방대해질수록 0.01초, 0.1초, 1초의 차이가 쌓여 결과적으로는 상대적으로 실행 속도가 느려질 것입니다. 또한, 코드를 실행하면서 오류가 발견되어야하는데 모든 오류를 미리 방지하기는 어렵기 때문에 컴파일러 언어와 비교했을 때 디버깅이 다소 어려울 수 있습니다. | 모범답안 | 코드를 기계어로 변환(빌드)하는 컴파일 언어의 특징, 한 줄 씩 실행하는 인터프리터 언어의 특징을 잘 설명해 주셨습니다.

    다만, 파이썬이라고 해서 컴파일을 하지 않는 완전한 인터프리터 언어는 아니며 java와 같이 컴파일 언어의 특징과 인터프리터 언어의 특징을 모두 가지고 있는 언어도 있습니다.

    때문에 파이썬은 인터프리터 언어다! 라고 단정짓기는 어려운 부분이 있으며 이러한 언어의 특징들도 미리 알아두면 좋을 것 같습니다. | | --- | --- | --- | --- | --- | --- |

  2. 정적 타입과 동적 타입의 차이에 대해서 설명해주세요. (장단점을 비교해주세요)

    심명희 Python 7 프로그래밍 언어는 대체로 정적타입의 언어와 동적타입의 언어로 나뉘어집니다. 여기에서 먼저 타입이란, 변수의 종류(int, float, bool 등). 즉, 자료형을 말합니다. 이 변수의 타입을 언제 결정하느냐에 따라 언어는 정적타입과 동적타입이 나뉩니다. 정적타입의 언어는 변수의 타입을 작성자가 직접 작성하는 언어로, 대표적인 언어로는 C, C++, Java 등이 있습니다. 정적타입의 언어는 컴파일 시에 변수의 데이터 타입이 결정되기 때문에 런타입에서의 타입오류를 사전에 방지할 수 있고, 코드의 안정성이 높고 실행 속도가 빠르다는 장점이 있습니다. 또한 코드의 가독성이 좋기 때문에 유지 보수에 유리합니다. 하지만 코드를 수정할 때 많은 선언 작업이 필요하고, 동적언어에 비해 개발시간이 더 소요될 수 있다는 단점이 존재합니다.동적타입의 언어는 코드를 실행할 때 알아서 변수 타입을 판단해주는 언어로, 대표적인 언어로를 Python, JavaScript 등이 있습니다. 동적타입의 언어는 실행 시 변수의 타입이 결정되기 때문에 유연성이 좋고, 코드 작성과 수정이 빠르게 이루어질 수 있다는 장점이 있습니다. 하지만 실행 도중 변수에 예상하지 못한 자료형이 들어와 타입오류가 발생할 수 있다는 단점이 있습니다. 모범답안 개발을 하는 과정에서 변수의 타입을 직접 지정해야 하는 정적 타입 언어와 타입을 지정하지 않고 코드가 실행되는 과정에서 타입이 정해지는 동적 타입 언어의 특징과 장/단점을 잘 정리해 주셨습니다.
  3. 클로저(closure)란 무엇이며 어디에 유용한가요?

    명세인 Python 8 클로저는 함수와 그 함수가 정의된 환경을 함께 기억하는 개념입니다. 이는 함수가 다른 함수 내에 중첩됐을 때 내부 함수가 외부 함수의 지역 변수에 접근할 수 있게 됩니다. 즉 클로저를 사용하면 프로그램의 흐름을 변수에 저장할 수 있습니다. 파이썬에서 클로저는 보통 함수 내에 또 다른 함수가 정의될 때 생성됩니다. 이때 내부 함수는 외부 함수의 지역변수에 접근할 수 있으며, 이를 통해 외부 함수의 상태를 기억합니다. 클로저는 데이터 은닉과 보호, 콜백 함수, 팩토리 함수 등의 다양한 상황에서 활용됩니다. 예를 들어 객체 지향 프로그래밍에서 데이터 은닉을 달성하거나, 콜백 함수로서 비동기 작업을 처리하거나 팩토리 함수로 동일한 패턴의 함수를 여러개 생성하는 데에 사용될 수 있습니다. 이렇게 클로저는 파이써에서 함수의 유연성을 높여주는 강력한 개념으로 함수를 이해하고 활용하는데 데 중요한 역할을 합니다. 클로저를 사용하면 코드를 더 간결하게 작성하고 데이터를 보호하며 유연하게 프로그래밍할 수 있습니다. 모범답안 클로저 함수의 정의와 특징에 대해 잘 설명해 주셨습니다.해당 답변과는 별개로 여기에 작성하는 질문에 대한 답변은 블로그 등을 위한 문서 작성이 아닌, 면접에서 답변을 하기 위함입니다.떄문에 구두로는 설명하기 어려운 예제코드 작성과 같은 답변은 최대한 지양 해주시는 것을 권장드립니다.
  4. Generator란 무엇이고 어떻게 사용하나요?

    이기호 Python 9 Generator는 중간에 원하는 부분에서 멈추었다가, 그 부분부터 다시 실행할 수 있는 능력을 가진 함수이다.제너레이터 함수는 함수 호출자에게 함수 실행의 제어권을 양도(yield)할 수 있다. 따라서 yield라는 코드를 사용하고, yield는 제너레이터 함수를 멈추거나 다시 시작하는데 사용하는 키워드이다. 멈출 때까지 명시된 기능을 끝날때 까지 계속 돌려주는것이다.(계속 생산한다는의미에서 제네레이터) 모범답안 제너레이터의 특징과 사용 방법에 대해 잘 정리해 주셨습니다.
    명세인 Python 9 Generator는 이터레이터이자 이터러블을 생성하는 함수를 말합니다. 가장 큰 특징은 일반 함수처럼 처음부터 끝까지 한 번에 실행되는게 아니라, 특정 지점까지 실행한 뒤 내가 원하는 때에 다시 함수를 실행하여 값을 얻을 수 있다는 점입니다. 즉 일반 함수와 달리 당장 필요 없는 값을 얻기 위해 연산하지 않고 값이 필요할 때 연산할 수 있으므로 퍼포먼스 측면에서 효율적입니다. 큰 데이터셋이나 무한한 시퀀스와 같은 경우에 사용하면 유용합니다. 모범답안 일반적인 배열을 사용해 반복문을 돌릴 때와 제너레이터를 사용해 반복문을 돌릴 때 어떤 차이가 있고 왜 제너레이터를 사용해야 하는지에 대해 잘 설명해 주셨습니다.
  5. 데코레이터란 무엇인가요?

    공혜진 Python 10 데코레이터란 함수나 메서드에 적용되어 해당 함나 메서드의 기능을 확장하거나 변경하는 역할을 하는 고차함수입니다.함수를 받아 명령을 추가한 뒤 이를 다시 함수의 형태로 반환하는 함수이며, 함수의 내부를 수정하지 않고 기능에 변화를 주고 싶을 때 주로 사용합니다.또한, 일반적으로 함수의 전처리나 후처리에 대한 필요가 있을 때 사용하여 반복을 줄이고, 메소드나 함수의 책임을 확장하기도 합니다. 모범답안 데코레이터의 특징과 용도를 잘 설명해 주셨습니다.