[python 질문] .net의 collection 같은 처리를 python에서는 어떻게 처리해야 하나요?

조회수 457회

안녕하세요. .Net 관련 개발업무를 하다가 최근 RP4 를 다루어야 되는 일이 생겨서,
최근부터 python 개발을 하고 있습니다.

확실히 자료형이나, 로직처리 하는데 방향성이 다소 다르기 때문에
막히는 부분이 많네요..

질문1) DB의 Rows 데이터를 list로 데이터를 받아서 dictionary 변수에 값을 등록을 했었습니다. 이 과정에서 아래 .Net 처럼 이후 처리를 하고싶어요.
# 중점질문 1 : 전역변수에 선언한 Collection 함수(버퍼)처럼 데이터를 넣고 다른 함수에서 호출하여 조건문, 데이터 추가, 수정, 삭제를 처리해야 합니다.
# 중점질문 2 : DataInfo 구조체처럼 활용하려고 하는데 보통 python 언어에서는 어떤형식으로 이루어지나요?
# 중점질문 3 : 기존 python 에서 DB Select하는 함수에서 결과를 얻었고, 그 결과가 담겨있는 데이터를
다른 함수에서 조건문, 데이터 추가, 삭제를 해야 하는데 애초에 python에서는 불가능한가요?

<전역변수>

private dUserInfoBuffer As New Collection()

Private Sub ListAddFunc()
    # DB에서 조회된 데이터를 담을 버퍼
    Dim mResult  As New Collection
    Dim mDataInfo As New DataInfo
    Dim mObject(10) As String

    mResult = DB.SearchDataInfo()

    For i = 0 To mResult 
            mDataInfo= mResult.Item(1)

            mObject(0) = mDataInfo.Data1
            mObject(1) = mDataInfo.Data2
            mObject(2) = mDataInfo.Data3

            list.items.Insert(mObject)
            dDataInfoBuffer.Add(mDataInfo, mDataInfo.UserID)
    Next
End Sub

#아무 정보를 입력했을 때 버퍼의 내용과 동일한지
Private Sub Input(ByVal vStr As String)    
    If (dDataInfoBuffer.Contains(vStr)) = True Then
            처리
    Else 
            반환
    End If
End Sub 

교재를 구매하여 공부하고 있고 또한.. 인터넷으로 검색하며 조금씩 업무를 진행하고 있는데,
키워드도 못찾고 있어서 그런지 계속 벽이 생기고 그 벽을 못넘고 있습니다.

도움 좀 주세요~

1 답변

  • 사고를 바꾸셔야 합니다. python 은 객체지향이 지원이 되긴 하나 (java, 닷넷에 비해)미흡한 편입니다. 닷넷처럼 코딩하면 파이썬의 장점을 얻기가 힘듭니다.

    1. 전역변수로 컬렉션 변수를 선언할 필요 없이 보통 내장 자료형을 이용하여 바로 파라미터로 넘기면 됩니다. 꼭 클래스를 선언할 필요도 없으니 간단한 경우는 함수로 바로 처리하면 됩니다. 물론 전역 변수로 list 를 두고 컨테이너로 활용해도 됩니다만...좋은 생각은 아닙니다. 클래스 단위로 작업을 잘하려면 magic method 들을 잘 활용하는 것도 중요합니다.

    2. 구조체 같은 형식은 여러가지 방법이 있습니다. 닷넷과 같은 structure 는 없고 대신 class 를 이용할수도 있고 추천하는 방법은 간단하게 namedtuple 을 이용하는 겁니다.

    3. db api 를 보시면 아시겠지만 보통 list 로 리턴됩니다. 물론 많이 사용하는 sqlalchemy 같은 orm 도구를 사용하는 편이 닷넷에서 엔티티 프레임워크를 사용하는 형태와 같으므로 원하는 형태일겁니다. 다만 학습량이 많아지겠죠.

    질문이 너무 범위가 넓어서...원하는 답변이 될련지 모르겠습니다.

    • 친절한 답변 감사드립니다. 객체지향언어를 기준으로 개발을 하다보니, 감이 전혀 잡히질 않네요.. A함수, B함수 두 개가 있는데 A 함수는 이벤트에 따라 동작을 합니다. B는 시스템 초기시 한번만 호출이 됩니다. A 함수에서 B의 결과 값들을 받아서 비교문을 해야하는데 A 함수를 다른 Thread에서 호출이 되고 있어서, B의 결과 값들은 A로 전달을 어떻게 해야하는지 궁금해요.. A의 인자 값들은 Thread에서 필요한 인자를 받아 처리가 되는데... 제가 생각을 전혀 이상하게 하고 있는건지.. 그리고 B의 결과 값은 A 함수 내에서 조건문에 따라 값이 추가, 수정, 삭제가 이루어져야 합니다. 바쁘신 와중에 질문을 드려 죄송합니다. 알 수 없는 사용자 2019.12.4 14:35
    • singleton 객체를 이용하는 방법도 있겠고 __init__.py 를 이용할수도 있을 것 같습니다. 핵심은 한번만 호출이 되는 것이 중요한 것이 아니라 항상 같은 값만 유지하고 있으면 되는 것 아닌가요? 정영훈 2019.12.4 23:40
    • 간단한 해결법이 있었는데, 전혀 몰랐었네요 .. self를 활용한 변수는 class 내의 어느 함수에서든 사용이 가능한지 몰랐네요 ㅠㅠ 간단히 self. 변수로 값을 실어서 이곳 저곳에서 사용하니 해결했습니다 ^^ 감사합니다. 알 수 없는 사용자 2019.12.9 11:17
    • 아...python은 java, c# 과 달리 this 가 묵시적이지 않습니다.꼭 명시를 해야 합니다. python 의 객체지향은 뭐랄까 현재의 모던한 객체지향 언어에 비하면 초기수준입니다. 만약 객체지향 설계가 필요하다면 abc모듈을 활용해보시기 바랍니다. 정영훈 2019.12.9 11:22

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)