이론 공부

python 이론 정리

Yuco 2023. 3. 30. 18:44

 

1. ORM 장점, 단점

1) ORM(객체 관계 매핑) : 데이터베이스 시스템모델이라는 파이썬의 클래스를 연결하는 다리와 같은 역할
+ 이러한 ORM 기능으로 다양한 데이터베이스 시스템을 지원하며 SQL 문장을 사용하지 않고도 테이블을 조작 가능
+ 설정을 조금만 변경하면 이미 구축한 데이터베이스 시스템을 다른 데이터베이스로 쉽고 편리하게 변경 가능
+ 클래스는 DB에서 테이블과, 각 멤버 객체들은 column에 대응
+ 이후 makemigrations, migrate 명령어 입력해줘야 함 (DB가 변경 되었음을 알리고, 변경된 정보를 DB에 반영)
 
2) 장단점 : 장고에서 쉽고 빠르게 DB를 셋업할 수 있지만, 쿼리문을 직접 작성하지 않아서 복잡한 쿼리를 쓰기가 더 번거로움
 

 

2. 데코레이터는 무엇이고, 왜, 어디서 사용하는지?

- 파이썬에서 함수는 일반 값처럼 변수에 저장될 수 있고, 다른 함수의 인자로 넘어가거나(파라미터 값) 또는 리턴 값으로 사용될 수 있음
- 데코레이터는 호출할 함수를 매개변수로 받는 함수이며, 데코레이터 함수 안에 호출할 함수를 감싸는 함수인 wrapper 함수 만들어 줘야 함

 
1) 정의 : 함수를 꾸며주는 도구
2) 사용하는 이유 : 함수를 수정하지 않은 상태에서 추가 기능을 구현할 때 사용
(함수를 변수에 대입해서 사용하거나, @decorator함수명 어노테이션 붙여서 사용)
+ 일반적으로 함수의 전처리나 후처리에 대한 필요가 있을 때 사용
 

 

3. 컴파일 언어(C)와 스크립트 언어(Python) 언어의 차이?

* 컴파일 / 인터프릿 : 작성한 코드를 컴퓨터가 알아듣기 위해서 0,1 로 번역하는 과정이 필요한데(기계어로 번역), 이 과정을 컴파일 / 인터프릿이라고 하고, 각각을 실행하는 변환기를 컴파일러 / 인터프리터 라고 함
*  컴파일을 하는 언어를 컴파일 언어(C, C++, Java), 인터프릿을 하는 언어를 인터프리터 언어 or 스크립트 언어(Python, JS)라고 함
 
* 런타임 : 프로그램 실행되는 환경을 제공하는 특정한 시스템 (ex. 스택과 힙 구축)

1) 컴파일러런타임 이전에 전체를 스캔하고 실행 파일을 만들어서 실행하므로 속도가 빠름
+ 컴파일 언어는 코드를 작성한 후 컴파일을 하면 컴파일러에 의해 기계어로 변환된 파일이 생성되고 컴퓨터는 그 파일을 실행
+ 소스코드에 문법적 오류가 있으면 컴파일 에러를 발생시켜 디버깅이 수월함 (하지만 일반적으로 문법적 제약이 많아 비교적 어렵고, 운영체제에 따라 다르게 작업해야 함)
 
2) 인터프리터런타임 이후에 코드를 줄 단위로 해석해서 구동하므로 속도가 느리지만, 실행파일(.java)을 만들지 않으므로 메모리 효율이 좋음
+ 별도의 파일 생성 없이 소스 코드가 작성될 때마다 인터프리터가 해당 코드를 기계어로 번역하고 실행
+ 소스코드에 문법적 오류가 있든 없든 일단 실행되기 때문에 디버깅이 비교적 어려움(문법적 제약이 비교적 적어 작성이 비교적 쉽고, 운영체제를 신경 쓸 필요 없이 한 번만 작성하면 됨)

* 디버깅 : 프로그래밍에서 잘못된 부분을 찾아 고치는 것
 

 

4. 파이썬 컬렉션 

1) 목록(List) : 가변, 서로 다른 자료형, 순서 있음
- 가변(mutable), 이터러블(iterable, 반복할 수 있는)
- 시퀀스(Sequence, 순서 통해서 반복할 수 있는 이터러블 중에서도 순번(인덱스)을 가지고 있으면 시퀀스라고 부름)
[대괄호] 기호 또는 list( ) 함수 사용, 서로 다른 자료형의 요소 저장 가능, 인덱싱, 슬라이싱 사용 가능
-  인덱싱 결과는 요소의 자료형(int, float, str), 슬라이싱의 결과 값은 리스트(list, 부분 목록, 요소가 없어도 결과값은 반드시 목록임)
- append(), insert(), remove(), pop() 등의 함수 사용해서 변경 가능 
 
2) 튜플(Tuple) : 불변, 서로 다른 자료형, 순서 있음
- 여러 개의 데이터를 묶어서 사용하되, 변경이 없어야 하는 경우 튜플 사용
-  불변(immutable, 한 번 만들어지면 수정 불가능), 이터러블(iterable)
- 시퀀스(Sequence, 인덱스 있음)
(소괄호) 기호 또는 tuple( ) 함수 사용, ( ) 생략 가능  + 서로 다른 자료형의 요소 저장 가능
-  인덱싱, 슬라이싱 사용 가능(시퀸스) : 인덱싱 결과는 요소의 자료형(int, float, str), 슬라이싱의 결과 값은 튜플(Tuple, 요소가 없어도 결과값은 반드시 튜플임)
-  원본 값을 아예 변경하는 append( ), insert( ), remove( ), pop( ), clear( ), extend( ), sort( ), reverse( ), del( ) 키워드 전부 사용 불가
- ( - / +, * )연산자는 사용가능(이전의 튜플을 수정하는 게 아니라 새로운 값을 만들어 내는 것이므로) : 새로운 튜플 생성(원본 튜플 그대로 두는 메소드는 가능(index, count))
 
3) 사전(Dictionary) : key는 불변(중복 허용 X) / value는 가변(중복 허용), 서로 다른 자료형, 순서 없음
- 저장할 데이터에 이름표(key)를 붙여서 함께 저장하는 방법, dict는 sequence 아님(min, max, len() 사용할 수 있지만)
- 키-값(key-value) 쌍으로 이루어진 가변 매핑 자료형
{중괄호} 기호 또는 dict() 함수 사용
-  키는 불변 자료형, 값은 어떤 자료형(불변, 가변 상관 없음)이든 사용 가능
-  키는 중복 불가, 값은 중복 가능
 
4) 집합(Set) : 가변, 순서(index)가 없고, 중복을 허용하지 않는 자료형
- {중괄호} 기호 또는 set( ) 함수 사용
- 멤버십 검사, 중복 엔트리 제거 용도로 사용(사용 빈도 제일 낮음)
 

 

5. 파이썬의 접근 제한자

- 자바처럼 접근을 제한하는 접근 제한자를 사용하지 않음 (자바의 접근 제한자 - public / private / protected) 
* 파이썬에서의 밑줄의 의미
1) __ (밑줄 두 개)는 Java에서 Private를 의미 : 자기 자신 클래스 안에서만 사용 가능
2) _(밑줄 한 개)는 Java에서 Protected를 의미 : 자기 자신 클래스와 상속된 클래스에서만 사용 가능 
+ 하지만 실제 접근 제한자로 작동하지는 않아서 함수/변수를 다른 곳에서 호출해도 문제가 발생하지는 않고, 다만, private / protected로 쓸 것을 권장할 뿐! 
 

 

6. 파이썬 생성자

- 파이썬에서 생성자란 클래스로부터 인스턴스가 생성될 때 자동적으로 실행되도록 하는 것 : 초기화? (__init__( ) 함수)

* 예시
Class ClassExample: 
    def __init__(self, name, age) :  # 생성자(Consturctor) 객체 생성시 자동 수행(객체화 할 때 init 메서드 바로 수행!)
        self.name = name   # self.name은 메소드 내에서 생성한 변수 지칭 / name은 파라미터로 보낸 변수
        self.age = age
        print("[생성자] 이름 : " + self.name + "나이 : " + str(self.age))
 
a = ClassExample("철수", 20)  # 객체화(ClassExample의 정보/결과 값을 a에 담음)

   

7. pass by assignment

파이썬은 call by value일까, call by reference일까? 파이썬은 어떤 값을 전달하느냐에 따라 달라지는 pass by assignment임
 
- 파이썬의 모든 변수는 객체(Object), 파이썬은 특정 변수에 값을 할당할 때, 그 값에 해당하는 object를 만들고 그 object의 주소를 변수에 할당하는 방법을 씀 = 즉, 변수 값의 전달은 기본적으로 pass by address 
- 이 때 파이썬은 해당 변수가 가변(mutable) 타입인지, 불변(immutable) 타입인지 따짐

1) 불변 객체(int, str, 튜플) : 파이썬은 해당 객체의 값이 연산 등의 결과로 변경되어 다른 변수에 할당되어야 할 때, 새로운 값을 객체로 메모리에 할당한 후 그 값(새로운 주소 값)을 변수가 가리키게 함(int 타입의 변수(객체)를 함수의 인자 값으로 넘기면 이 객체는 불변이기 때문에 함수 안에서 새로운 값을 생성(새로운 객체 생성), 결국 호출할 때 쓰인 변수 A 값과 함수 내의 변수 A는 다른 값)
+ 불변 객체의 경우 주소를 전달하는 방식으로 값을 전달하면 본래 변수의 값이 변할 위험이 있기 때문에 새로운 객체러 생성된 값을 사용

2) 가변 객체(리스트, 딕셔너리) : 주소를 전달해도 위험이 없으므로 주소로 값을 전달 

* 따라서 불변 타입의 변수는 call by value로 전달되는 것처럼 보이고(실제로 주소를 가리킴에도), 가변 타입 변수는 call by reference로 전달되는 걸로 보임 = 이게 바로 passed by assignment

 

 

8.  파이썬 조건문

1) if ~ elif ~ else
2) match ~ case
3) 조건 표현식(삼항 연산자) : 조건문을 한 줄로 표현한 방식 x if c else y = c가 True일 경우 x, False일 경우 y 값 출력


 

9. 파이썬 예외처리

- 에러가 발생했을 때 프로그램이 죽지 않도록 함

1) try - except : try 내부에서 에러가 발생했을 때 바로 except 구문으로 넘어감 
- try : 에러가 발생할 것 같은, 예외 처리를 하고 싶은 곳을 찾아서 try 구문에 코드 작성
- except : 에러가 발생했을 때 처리할 코드를 작성
 
2) try - except - else
- else : try 문이 정상적으로 실행되었을 때, 그 이후 else 구문 코드 실행(예외 발생시에는 실행되지 않음, 예외가 발생하지 않은 상황에 뭔가를 처리해주기 위해 else문 필요)
 
3) try - except - finally
- finally : 에러가 발생해도, 발생하지 않아도 무조건 거치는 구문 (예외가 발생하든 안 하든 상관없이 무조건 try 구문이 종료되고 실행되어야 하는 구문)

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

SOLID 원칙  (0) 2023.03.29
기타 개념 정리  (0) 2023.03.29
Java의 Call By Value, Call By Reference  (0) 2023.03.28
캐시 (Cache) / 캐싱 (Caching)  (0) 2023.03.28
AWS, Docker 개념  (0) 2023.03.28