비트 연산 특수 메서드 이해 및 활용
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
- 대상자: Python 개발자, 객체 지향 프로그래밍에 관심 있는 중급/고급 개발자
- 난이도: 중급 이상 (Python의 특수 메서드(__dunder__)) 이해 필요
핵심 요약
- 비트 연산 특수 메서드 (
__and__
,__or__
,__xor__
)는 커스텀 객체에 비트 연산자(&
,|
,^
)를 적용할 수 있도록 한다. - 사용 사례: 권한 시스템, 상태 관리, 하드웨어/이미지 처리 등에서 효율적으로 활용 가능.
- 반사 메서드 (
__rand__
,__ror__
)는 좌측 피연산자가 처리하지 못할 경우 우측 피연산자가 대체 처리.
섹션별 세부 요약
1. 비트 연산자와 특수 메서드 개요
- 비트 연산자(
&
,|
,^
,~
)는 이진수 수준(0, 1)에서 작동. __and__
,__or__
,__xor__
등은a & b
,a | b
,a ^ b
와 같은 연산을 커스텀 객체에서 처리할 수 있도록 한다.__invert__
는 비트 반전(~a
)을 처리.
2. 특수 메서드 예시 및 구현
Permissions
클래스 예시:
```python
class Permissions:
def __and__(self, other):
return Permissions(self.value & other.value)
```
- 권한 조합:
READ | WRITE
→0b11
,admin_perm & READ
→0b1
3. 반사 메서드(`__rand__`, `__ror__`)
- 좌측 피연산자가 처리하지 못할 경우 우측 피연산자의 반사 메서드가 실행.
- 예시:
5 & Flag()
→Flag().__rand__(5)
호출.
4. 비트 이동 연산(`<<`, `>>`)
__lshift__
,__rshift__
메서드로 비트 이동 구현.- 예시:
BitShifter(0b0010) << 1
→0b100
.
5. 예외 처리 및 주의 사항
__and__
메서드에서int
등 예상치 못한 타입이 입력될 경우NotImplemented
반환.~0b0001
은-0b0010
으로 계산되며, 부호 비트 포함하여 모든 비트를 반전.
결론
- 비트 연산 특수 메서드를 구현하면 커스텀 클래스에 비트 연산을 자연스럽게 적용할 수 있다.
- 권한 시스템, 상태 관리, 성능 최적화 등에서 활용 가능.
NotImplemented
반환과 비트 연산자와 불리언 연산자(and
,or
) 혼동 방지가 중요.