@property

2025. 1. 11. 22:29· Django/DRF
목차
  1. 1. 기본 개념
  2. 1-1. 사용하는 이유
  3. 1-2. 구성 요소
  4. 1-3. 장단점
  5. 1-4. 예시
반응형

1. 기본 개념

@property를 사용하면, 메서드가 속성처럼 작동한다. 즉 값을 읽거나 쓸 때, 추가적인 로직을 실행할 수 있다.

이를 사용하면 메서드 호출을 속성처럼 사용할 수 있으며, 캡슐화를 유지하면서도 더 직관적인 코드를 작성할 수 있다.

 

1-1. 사용하는 이유

캡슐화 - 클래스 내부의 변수는 숨기고, 외부에서 간접적으로 접근하도록 허용.

데이터 유효성 검증 - 값을 설정하거나 가져올 때, 검증 로직 추가 가능.

인터페이스 유지 - 메서드를 속성처럼 보이게하여 직관적으로 사용가능

코드의 유지 보수성 - 나중에 속성 접근에 로직을 추가하여도 기존의 인터페이스를 깨지 않음.

 

1-2. 구성 요소

Getter: 속성 값을 가지고 오는 메서드 (@property로 데코레이트)

Setter: 속성 값을 설정하는 메서드 (@속성명.setter로 데코레이트)

Deleter: 속성 값을 삭제하는 메서드 (@속성명.deleter로 데코레이트)

 

1-3. 장단점

장점

  • 속성과 메서드를 동일하게 사용할 수 있어 코드가 간결해짐
  • 데이터를 숨기고, 필요한 로직을 추가할 수 있어 캡슐화 강화
  • 객체의 인터페이스를 유지하면서 내부 구현을 자유롭게 변경 가능

단점

  • 과도한 사용은 코드의 가독성을 떨어트림
  • 속성 접근 시 숨겨진 로직이 실행되므로 성능이 중요한 경우 주의 필요

 

1-4. 예시

기본 사용

class Circle:
	def __init__(self, radius):
    	self._radius = radius
        
    @property
    def radius(self):
    	return self._radius
        
    @property
    def radius(self, values):
    	if values < 0:
        	raise ValueError("Radius cannot be negative")
           self._radius = value
           
    @radius.deleter
    def radius(self):
    	del self._radius
        
        

c = Circle(5)
print(c.radius) # 5 (속성처럼 사용)
c.radius = 10 # 값 설정
print(c.radius) # 10
# c.radius = -100 # ValueError 발생

계산된 속성

class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height

    @property
    def area(self):
        return self.width * self.height

    @property
    def perimeter(self):
        return 2 * (self.width + self.height)


rect = Rectangle(4, 5)
print(rect.area)  # 20
print(rect.perimeter)  # 18

읽기전용 속성

class Product:
    def __init__(self, name, price):
        self.name = name
        self._price = price

    @property
    def price(self):
        return self._price  # 읽기만 가능


p = Product("Laptop", 1000)
print(p.price)  # 1000
# p.price = 1200  # AttributeError 발생
반응형
저작자표시 (새창열림)

'Django > DRF' 카테고리의 다른 글

[Django] Locust를 이용한 부하 테스트 회고 (feat. Redis, Celery, Kafka)  (3) 2025.01.11
[DRF] 쿼리 성능 향상 (Feat. ORM 최적화 기법)  (0) 2024.10.29
[Django] 테스트 : pytest-django, factory-boy, facker  (2) 2024.10.21
[Django] 읽기 전용 데이터베이스 설정 및 테스트  (0) 2024.10.11
[Django] 랜덤 객체를 가지고 오는 방법  (1) 2024.09.13
  1. 1. 기본 개념
  2. 1-1. 사용하는 이유
  3. 1-2. 구성 요소
  4. 1-3. 장단점
  5. 1-4. 예시
'Django/DRF' 카테고리의 다른 글
  • [Django] Locust를 이용한 부하 테스트 회고 (feat. Redis, Celery, Kafka)
  • [DRF] 쿼리 성능 향상 (Feat. ORM 최적화 기법)
  • [Django] 테스트 : pytest-django, factory-boy, facker
  • [Django] 읽기 전용 데이터베이스 설정 및 테스트
Jong_seoung
Jong_seoung
기록하자, 머리는 생각하는 곳이지 저장장치가 아니다.
반응형
Jong_seoung
Today_developStory
Jong_seoung
전체
오늘
어제

블로그 메뉴

  • Home
  • Git Hub
  • 분류 전체보기 (351)
    • Theory (16)
    • Java (3)
      • 알고리즘 (2)
      • 문법 (0)
    • Spring (7)
      • 스프링 입문 (6)
      • PickTalk (0)
      • 에러처리 (1)
    • Python (80)
      • 알고리즘 - 이론 (17)
      • 알고리즘 - 내장함수, 라이브러리 등등 (3)
      • 알고리즘 - 백준 (53)
      • 나도코딩 정리 (2)
      • 기타 (5)
    • Django (159)
      • DRF (105)
      • 인프라 (46)
      • DataBases (2)
      • API Docs (6)
    • FrontEnd (22)
      • htmx (2)
      • React (8)
      • 자바스크립트 (12)
    • GIT (16)
    • 기타 (8)
      • 정리 (2)
      • Flutter (1)
      • 마이크로프로세서 - ATmega128 (2)
      • 개발환경 세팅 (3)
    • 자격증 (37)
      • 정보처리기사 (19)
      • SQLD자격증 (18)

인기 글

최근 글

태그

  • alarm
  • BFS
  • CSRF
  • Django
  • django channels
  • django sse
  • django tutorial
  • django 배포
  • django 스웨거 적용
  • Django 이미지 저장

최근 댓글

hELLO · Designed By 정상우.v4.3.0
Jong_seoung
@property
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.