1. 파이썬의 메모리 관리 방식에 대해 알려주세요.
공혜진 Python 11 파이썬의 메모리 관리는 참조 계수 기반으로 이루어지며, 객체가 생성될 때마다 그 객체를 참조하는 변수의 개수를 추적하는 방식입니다.객체를 참조하는 변수의 개수가 0이 되면 해당 객페의 메모리는 자동으로 해제가 되지만, 2개 이상의 객체가 서로를 참조하는 상황(순환참조)이 발생하게 되면 객체가 더이상 사용되지 않아도 참조 계수가 0이 되지 않아 메모리 누수가 발생할 수 있습니다.이때 메모리 누수가 발생하게 되는데 파이썬은 가비지 컬랙션을 사용하여 해결할 수 있지만, 명시적으로 가비지 컬렉션을 수해아거나, 순환 참조를 방지하는 코드를 작성하는 것이 좋습니다.일반적으로 가비지 컬렉션은 개발자가 직접 호출하지 않아도 자동으로 수행되지만 가끔 명시적으로 가비지 컬랙션을 수행하려는 경우가 생기기도 합니다.이때는 gc 모듈을 사용할 수 있습니다. 모범답안 python에서 사용되는 메모리 관리 방식의 장/단점, 이로 인해 생길 수 있는 문제점과 특징을 잘 설명해 주셨습니다.
  1. 파이썬에서 일급객체가 무엇인지 설명해주세요.
이솔 Python 12 일급 객체란 객체지향 프로그래밍에서 사용되는 개념 중 하나로 변수또는 데이터구조에 할당할 수 있고, 매개변수로 전달도 가능하며, 리턴 또한 가능한 객체를 말합니다. 파이썬을 공부할 때 가장 먼저 배웠던 int float str list 와 같은 기본적인 객체들도 사실은 모두 일급객체라고 할 수 있습니다. 모범답안 일급 객체라는 용어는 파이썬에 국한되는 것이 아닌 프로그래밍 언어에서 사용되는 용어입니다. 때문에 정확한 설명을 위해서는 프로그래밍 언어에서 사용되는 일급 객체의 특징과 이런 특징들이 파이썬에서 어떻게 작용하는지에 대해 관점을 나눠서 설명해 주시면 좋을 것 같습니다.
명세인 Python 12 파이썬에서는 함수를 일급 객체(First-Class Object)로 취급해, 함수가 변수에 할당될 수 있고, 함수의 인자로 전달될 수 있으며, 함수의 반환값으로 사용될 수 있다는 것을 의미합니다. 이 일급 객체는 함수가 변수에 할당될 수 있기에, 변수를 통해 함수를 호출할 수 있습니다. 또한 함수를 다른 함수의 인자로 전달될 수 있다는 특징을 갖고 있습니다. 더불어 함수는 다른 함수의 반환값으로 사용될 수 있습니다. 마지막으로 함수는 리스트, 딕셔너리와 같은 자료구조에 저장될 수 있습니다. 이러한 특징들로 인해 함수를 다양하게 조합하고 활용할 수 있도록 함수형 프로그래밍 스타일을 지원합니다. 또한 파이썬에서 함수를 더 유연하게 다룰 수 있도록 도와줍니다. 모범답안 위와 같습니다.
  1. 객체지향이란 무엇인지? 주요 원칙이 무엇인지 설명해주세요
정범수 Python 13 객체 지향이란 실제 현실의 오브젝트를 기반으로 추상화해 객체로 만들어 객체 기반으로 작성하는 것을 의미합니다. 추상화된 클래스와 클래스를 기반으로 생성된 객체가 있으며 5가지 원칙이 있습니다.1. 단일 책임 원칙 : 이는 클래스가 하나의 기능만을 수행해야 함을 의미합니다. 다른 기능을 변경하기 위해 클래스를 변경하는 일이 일어나지 않아야 합니다.2. 개방-폐쇄 원칙 : 클래스는 확장에는 용이하지만 기능을 변경하기 위해 기존 코드를 수정해서는 안 됩니다. 추상화와 상속을 활용해 확장을 하더라도 변경되지 않는 부분만 작성해야 합니다.3. 리스코프 치환 원칙 : 자식 클래스는 언제나 부모 클래스를 대체할 수 있어야 합니다. 즉 부모 클래스가 제공하는 기능은 자식 클래스에 의해 변경되어선 안됩니다. 이 원칙을 준수해야 다형성을 달성할 수 있습니다.4. 인터페이스 분리 원칙 : 하나의 클래스는 하나의 대상에게만 기능을 제공해야 한다는 원칙입니다. 여러 대상이 사용가능한 범용적인 클래스 사용을 지양하고, 메서드를 분리해야 합니다.5. 의존관계 역전 원칙 : 고수준 클래스는 저수준 클래스에 의존하면 안 된다는 원칙입니다. 변하기 쉬운 것이 변하지 않는 것에 의존성을 가져야 한다는 개념입니다. 모범답안 객체 지향 프로그래밍의 특징을 잘 설명해 주셨습니다.
  1. 절차지향 프로그래밍, 함수형 프로그래밍, 객체지향프로그래밍의 차이점이 무엇인가요?

    명세인 Python 14 절차지향, 함수형, 객체지향 프로그래밍의 차이점은 크게 다섯 가지 기준으로 나눌 수 있는데, 프로그래밍 방식 별로 말씀드려보겠습니다.우선 절차지향 프로그래밍의 경우 데이터와 함수가 분리되어 있고, 상태 변이가 일어날 수 있으며, 함수와 프로시저(특정 기능을 수행하는 코드의 묶음)에 중점을 둡니다. 또한 프로그램의 구조가 명령어의 흐름이 중점이 되며, 코드의 재사용성이 떨어집니다. 그리고 함수형 프로그래밍은 함수가 일급 객체로 취급되며 데이터와 함수가 밀접하게 연결되어 있고, 불변성을 강조해 상태 변이를 피합니다. 그리고 함수를 모듈로 사용하며, 함수 간의 평가를 중심으로 프로그램의 구조가 짜입니다. 함수형은 함수의 재사용성이 절차지향에 비해 코드의 재사용성이 높아지며, 확장성이 좋습니다.마지막 객체지향은 데이터와 그 데이터를 처리하는 메소드가 객체에 묶여 있으며, 객체의 상태를 변경할 수 있고, 클래스와 객체를 사용해 모듈화/캡슐화하여 데이터와 메소드를 하나로 묶습니다. 객체 간의 상호작용에 중점으로 구조가 짜였고, 객체의 재사용성이 높고, 상속 등을 통해 확장성이 좋다는 특징을 갖고 있습니다. 모범답안 절차지향, 객체지향, 함수형 프로그래밍 이 가지고 있는 특징을 잘 설명해 주셨습니다.
  2. list comprehension이란? 사용시 장단점을 본인 사용경험에 근거하여 설명해주세요.

    이솔 Python 15 리스트 컴프리헨션은 쉽게 말해 ‘리스트를 쉽게, 짧게 한 줄로 만들 수 있는 파이썬의 문법’이라고 할 수 있습니다. 지금은 조금 익숙해졌지만 코딩테스트문제를 풀기 시작한지 얼마 되지 않았을 때 문제를 풀고 다른사람의 답변을 참고 하려고 하면 해당 코드를 원래 익숙한 형태로 해석부터 해야해서 더욱 시간이 오래 걸렸던 적이 있습니다. 리스트 컴프리헨션은 코드가 짧고 간결해지면서 효율적이지만 이에 익숙하지 않거나 복잡한 표현이나 조건등이 추가될 경우 가독성이 떨어질 수 있습니다. 모범답안 리스트 축약식에 대해 잘 설명해 주셨습니다python에서 주로 사용되는 함수인 map, filter와 비교해 어떤 장/단점이 있는지에 대한 내용도 찾아보시면 좋을 것 같습니다.