파이썬(Python)/Flask

파이썬 Static methods란? flask에서의 활용 방법

끄적끄적아무거나 2023. 9. 21. 08:51
반응형

 

 

 

 

파이썬 Static methods란?

 

Static methods(정적 메서드)는 파이썬 클래스 내에서 사용되는 메서드 중 하나로, 해당 클래스의 객체에 바인딩되지 않고 클래스 자체에 바인딩됩니다. 이것은 static method가 해당 클래스의 객체 없이 호출될 수 있다는 것을 의미하며, 객체의 상태를 수정할 수 없다는 것을 의미합니다. static method는 주로 객체 수명과 관련이 없는 유틸리티 기능을 구현하는 데 사용됩니다.

 

 

Flask에서 정적 메서드(Static methods)는 다음과 같은 상황에서 사용될 수 있습니다.

 

유틸리티 함수 구현: Flask 애플리케이션에서 자주 사용되는 공통 작업을 처리하기 위해 정적 메서드를 사용할 수 있습니다. 예를 들어, 데이터베이스 연결, 문자열 처리, 파일 조작 등과 같은 작업을 수행하는 유틸리티 함수를 정적 메서드로 정의할 수 있습니다.

 

헬퍼 함수 구현: Flask 애플리케이션에서 특정 기능 또는 작업을 수행하는 헬퍼 함수를 정의할 때 정적 메서드를 사용할 수 있습니다. 예를 들어, 어떤 데이터를 포맷하거나, 검증하거나, 변환하는 함수를 정적 메서드로 만들어 라우트 핸들러에서 호출할 수 있습니다.

 

클래스 레벨 작업: 특정 Flask 클래스의 여러 메서드에서 공유해야 하는 상태나 동작이 있다면, 이를 정적 메서드로 구현할 수 있습니다. 이렇게 하면 클래스 수준에서 공통 동작을 관리할 수 있습니다.

 

팩토리 메서드: 정적 메서드는 클래스의 인스턴스를 생성하는 데 사용될 수 있습니다. 예를 들어, Flask 애플리케이션에서 여러 가지 구성 옵션으로 인스턴스를 생성하는 팩토리 메서드를 정적 메서드로 구현할 수 있습니다.

 

테스트 목적: Flask 애플리케이션을 테스트하는 데 도움이 되는 테스트 유틸리티 함수를 정적 메서드로 정의할 수 있습니다.

 

 

 

 

 

파이썬 Static methods 예제 코드

예제 코드>>

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mydatabase.db'  # SQLite 데이터베이스 사용
db = SQLAlchemy(app)

# 데이터베이스 모델 정의
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def __init__(self, username, email):
        self.username = username
        self.email = email

    # 정적 메서드로 데이터베이스에 새로운 사용자 추가
    @staticmethod
    def create_user(username, email):
        new_user = User(username=username, email=email)
        db.session.add(new_user)
        db.session.commit()

    # 정적 메서드로 모든 사용자 가져오기
    @staticmethod
    def get_all_users():
        return User.query.all()

if __name__ == '__main__':
    # 데이터베이스 초기화
    db.create_all()

    # 정적 메서드를 사용하여 새로운 사용자 추가
    User.create_user('user1', 'user1@example.com')
    User.create_user('user2', 'user2@example.com')

    # 정적 메서드를 사용하여 모든 사용자 가져오기
    users = User.get_all_users()
    for user in users:
        print(f'ID: {user.id}, Username: {user.username}, Email: {user.email}')

 

19, 26번 라인: 위와 같이 staticmethod를 사용해서 유져를 만들거나 유저 정보를 가저올 때 User라는 클래스 선업 없이 함수에 접속해서 가져올 수 있게 만들어 줍니다. 

 

39번 라인: User 클래스에서 get_all_users 함수를 선언 없이 사용할 수 있습니다.

 

위와 같이 flask와 같은 환경에서 DB에 접속되어 있는 상태에서 클래스 선언 없이 DB에 접근이 가능해 지게 된 것입니다.

 

 

반응형