1. 네임스페이스(namespace, 이름공간) (중요도🌟🌟🌟)
: 변수가 객체를 바인딩할 때 그 둘 사이의 관계를 저장하고 있는 공간 (바인딩: 구체적인 값을 할당하는 것)
ex. a = 2
==> a라는 변수가 2라는 객체가 저장된 주소를 가지고 있고, 그러한 연결 관계가 저장된 공간이 바로 네임스페이스
프로그래밍 언어에서 특정한 객체(Object)를 이름(Name)에 따라 구분할 수 있는 범위를 의미. 파이썬 내부의 모든 것은 객체로 구성되며, 이들 각각은 특정 이름과의 매핑 관계를 갖게 되는데 이 매핑을 포함하고 있는 공간을 네임스페이스라고 한다.
네임스페이스가 필요한 이유
프로그래밍을 수행하다보면 모든 변수 이름과 함수 이름을 정하는 것이 중요한데 이때 중복되지 않게 설정해줘야 함.
따라서 네임스페이스라는 개념을 도입하여, 특정한 하나의 이름이 통용될 수 있는 범위를 제한함.
즉, 소속된 네임스페이스가 같은 이름이 다른 개체를 가리키도록 하는 것이 가능해짐.
전역 네임 스패이스 : 모듈별로 존재하며, 모듈 전체에 통용되는 이름을 사용한다.
지역 네임 스페이스 : 함수 및 메소드 별로 존재하며, 함수 내의 지역 변수들이 소속된다.
빌트인 네임 스페이스 : 기본 내장 함수 및 기본 예외들의 이름을 저장하는
2. 클래스 변수(class variable) (중요도🌟🌟)
클래스 변수 선언하는 방법 : 클래스 내부에 변수 설정
클래스 변수를 변경할 때는 항상 클래스명.클래스 변수 형식으로 변경
3. 인스턴스 변수(instance variable) (중요도🌟🌟)
: self.name과 같이 self가 붙어 있는 변수를 인스턴스 변수
4. 메서드
: 특정 데이터 타입/클래스의 객체에 공통적으로 적용 가능한 함수 (클래스 안에 있는 모든 함수는 메서드)
🦄메소드 3가지
ⓐ인스턴스 메서드(instance method)
ⓑ클래스 메서드(@classmethod),
ⓒ정적 메서드(@staticmethod)
5. 인스턴스 메서드(instance method) (중요도🌟🌟)
: 인스턴스 변수를 사용하거나, 인스턴스 변수에 값을 설정하겠다는 의도가 담겨있음(클래스 내부에 정의되는 메소드의 기본)
인스턴스 변수 선언하는 방법 : self.name = name
인스턴스 메소드 호출 시, 첫번째 인자로 인스턴스 자기자신(self)이 자동으로 전달되도록 설계되어있음.
(이게 self.~ 넣는 이유임 self 자리에 인스턴스가 들어오는거)
self : 인스턴스 자기자신임 (self 쓰는 게 암묵적 규칙)
[인스턴스 메서드 호출방법]
- 해당 클래스 안에서는 self.메소드명
- 클래스 밖에서는 객체.메서드명
6. 매직메소드
: 매직메서드는 생성자, 인스턴스를 만들면 특정 상황에 자동으로 호출됨
__init__ :클래스의 인스턴스가 생성될 때, 자동으로 호출되는 함수
init : 초기화 준말인데(인스턴스 변수들의 초기값을 설정), 생성자 역할임.
ex. Person() = Person.__init__(Person)
__del__ : 클래스의 인스턴스가 소멸될 때, 자동으로 호출되는 함수
7. 정적 메서드(static method) (중요도🌟🌟)
: 객체와 독립적이지만, 로직상 클래스 내에 포함되는 메서드. 함수 정의하고 위에 @staticmethod 붙이면 정적 메서드임을 나타냄.
정적 메서드는 메서드의 실행이 외부 상태에 영향을 끼치지 않는 순수 함수를 만들 때 사용. 즉, 인스턴스 상태를 변화시키지 않는 메서드를 만들 때 사용
(순수 함수란, 부수 효과가 없고 입력 값이 같으면 언제나 같은 출력값을 반환함.)
self로 호출 X, 정적 메서드 내부에서 클래스 변수(속성)에는 클래스명.클래스속성명으로 접근 가능
[정적 메서드 호출방법]
- 클래스명.정적메서드명 (주로 사용)
- 객체명.정적메서드명
8. 클래스메서드(class method) (중요도🌟🌟)
: self 대신 cls라고 씀. 함수 정의하고 위에 @classmethod 붙이면 이름 없어도 함수가 실행됨(데코레이텅 기능)
인스턴스 없이 호출이 가능하다는 점에서 정적 메서드와 비슷하지만 약간의 차이점이 있음.
[클래스 메서드 호출방법]
- 클래스명.클래스메서드명
- 객체명.클래스메서드명
🆚정적 메서드 VS 클래스 메서드
🔸인스턴스 메서드는 클래스 변수, 인스턴스 변수 둘다 사용이 가능
정적 메서드 클래스 메서드 인스턴스 변수를 호출할 수 없지만
인스턴스 메소드는 static 변수를 호출할 수 있음클래스메서드는 인스턴스 변수에 접근할 수 없음
(클래스 단위로만 접근)인스턴스 메소드를 호출할 수 없지만
인스턴스 메소드는 static 메소드를 호출할 수 있음인스턴스 메소드를 호출할 수 있음
✴️ 그러면 언제 static을 붙이면 좋은가?
==> 인스턴스 변수를 사용하지 않는 경우에 static 붙인다.
정적 메서드: 인스턴스, 클래스 변수를 전혀 다루지 않는 메서드
->> 사용하는 이유는, 클래스 안의 메서드랑 비슷하다보니 같이 묶어두는거.
일반 함수처럼 동작하지만, 클래스의 이름 공간에 귀속됨(내 생각: 개발자가 보기 편하고 유지보수하기 편하려고)
📁추가 내용
🗝️데코레이터
: 함수나 메서드에 적용되어, 해당 함수나 메서드의 기능을 확장하거나 변경하는 역할
<데코레이터> (함수의 꽃)
"@"를 이용하여 데코레이터함. 함수를 꾸며서 새로운 기능을 부여함. 함수 또는 메서드 위에 위치함
기존 함수를 건드리지 않고, 함수에 기능을 추가할 수 있음.
ex. @property, @setter
📍함수도 인자로 넘길 수 있음. 💡인자 다 받고 싶을 때는 *args, **kargs
'파이썬 > 파이썬 심화' 카테고리의 다른 글
매직메소드 정리 (1) | 2024.08.02 |
---|---|
객체지향 프로그래밍 (0) | 2024.07.30 |