NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    Python 2. 파이썬 코딩 - 변수란?

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 이전 시간에 간단하게 [ 자료형 ]에 대해 알아봤는데요. 오늘은 변수에 대해 알아보도록 하겠습니다. 변수는 어떤 자료 데이타를 저장하는 장소를 말합니다. 깊이 있게 설명하면 좀 더 복잡하지만, 우선은 이렇게 알고 넘어가도록 하겠습니다. 테스트를 위해 Visual Studio Code(vscode)를 실행하고, 기존 코딩 내용을 모두 삭제하세요. 그리고, 아래와 같이 코딩해줍니다. 아래 코드에서 #은 주석을 의미합니다. 주석은 코드에 영향을 주지 않고, 개발자가 코드를 분석하기 용이하도록 설명을 달아놓는 걸 말합니다.

    # 슈퍼 히어로를 소개해주세요.
    print('아이언맨은 토니 스타크입니다.')
    print('아이언맨은 머리가 좋고, 돈이 많습니다.')
    print('아이언맨은 부자일까요? True')
    
    #result
    아이언맨은 토니 스타크입니다.
    아이언맨은 머리가 좋고, 돈이 많습니다.
    아이언맨은 부자일까요? True

     

    자~ 여기서 한가지 생각해봐야 할 부분이 있습니다. 슈퍼 히어로가 아이언맨이 아닌 배트맨으로 변경되었다고 생각 해보세요. 이 때 3줄 모두 아이언맨이라는 텍스트가 포함되어 있는데요. 모두 변경해줘야겠죠? 지금처럼 단순한 코딩 또는 프로그램인 경우 하나씩 직접 변경해도 크게 문제가 되지는 않습니다. 그러나, 실제 현업에서 사용하는 프로그램은 수천줄에서 수백만줄의 코딩이 있을겁니다. 이걸 사람이 실수 없이 모두 수정한다는건 불가능합니다. 극한의 집중력과 노가다(?)로 바꿀수야 있겠지만... 아무튼 어렵죠^^; 그래서, 변경 또는 입력에 대해 예측 가능한 것들은 변수로 대체할 수 있게 코딩하는게 좋습니다. 아래와 같이 변수를 3개 추가 했습니다.

    # 슈퍼 히어로를 소개해주세요.
    heroName = '아이언맨'
    money = 10000000
    isWealthy = money > 1000000

     

    heroName은 문자형 변수로 "아이언맨"이 메모리에 저장됩니다. money는 숫자형 변수로 천만을 저장하고, isWealthy(부자인지)는 부자인지 판단하는 불리언 변수입니다. 100만보다 크면 부자라고 판단한다는 의미입니다. 이제 출력 부분을 아래와 같이 수정한 후 다시 실행(F5) 해보세요. 여기서 str(isWelthy) 함수를 사용했습니다. str 함수는 숫자형 또는 불리언과 같은 문자가 아닌 다른 형(Type)을 문자로 변환 해줍니다. 

    # 슈퍼 히어로를 소개해주세요.
    heroName = '아이언맨'
    money = 10000000
    isWealthy = money > 1000000
    
    print(heroName + '은 토니 스타크입니다.')
    print(heroName + '은 머리가 좋고, 돈이 많습니다.')
    print(heroName + '은 부자일까요? ' + str(isWealthy))
    
    #result
    아이언맨은 토니 스타크입니다.
    아이언맨은 머리가 좋고, 돈이 많습니다.
    아이언맨은 부자일까요? True

     

    Boolean형인 isWealthy를 그냥 사용하면 아래와 같이 타입 에러가 발생하게 됩니다.

    TypeError: can only concatenate str (not "bool") to str

    erUXUJv.png

     

     

    히어로 네임 아래에 네임 변수를 하나 더 추가 했습니다. 그리고, 각각의 변수 값을 배트맨부르스 웨인으로 변경하고, 다시 실행했는데요. 하단의 결과를 보면 각각의 변수들이 프린트 함수 안에서 변수 값으로 치환된 것을 확인할 수 있습니다.

    N5peJ7Z.png

     

     

    대부분의 언어들이 문자를 연결할 때 "+" 연산자를 사용합니다. 파이썬도 예외는 아니죠. 하지만, 코딩 편의를 위해 각각의 언어마다 다양한 문자 처리 함수들을 제공하고 있습니다. 플레이스홀더(Placeholder, 자리 표시자)를 이용하기도 하고, 파이썬처럼 콤마를 이용하기도 합니다. 아래와 같이 + 연산자를 콤마(,)로 변경하고 실행 해볼까요?

    # 슈퍼 히어로를 소개해주세요.
    heroName = '배트맨'
    name = '부르스 웨인'
    money = 10000000
    isWealthy = money > 1000000
    
    print(heroName, '은 ',  name, '입니다.')
    print(heroName, '은 머리가 좋고, 돈이 많습니다.')
    print(heroName, '은 부자일까요? ', str(isWealthy))
    
    #result
    배트맨 은  부르스 웨인 입니다.
    배트맨 은 머리가 좋고, 돈이 많습니다.
    배트맨 은 부자일까요?  True

     

    참고로, 콤마를 이용한 문자열 연결은 자동으로 타입을 변환해줍니다. 그래서, str 함수를 사용하지 않더라도 에러가 발생하지 않습니다. 하지만, 콤마를 이용하면 무조건 스페이스가 하나 들어가므로 그렇게 자주 사용되지는 않습니다.

    OmdRuJm.png

     

     

    파이썬의 플레이스홀더(Placeholder)를 사용 해볼까요? 중괄호({})를 이용하고, 문자열에 format 함수로 값을 전달합니다.

    GJYtHaM.png

     

     

    아래와 같이 명시적으로 플레이스홀더와 변수를 매칭시킬 수도 있습니다.

    print("{hn}은 {n}입니다.".format(hn = heroName, n = name))

     

    또는 인덱스로 처리도 가능합니다.

    print("{0}은 {1}입니다.".format(heroName, name))

     

    인덱스는 중복하면 아래와 같이 처리됩니다. heroName이 두번 찍혔습니다.

    print("{0}은 {0}입니다.".format(heroName, name))
    
    #result
    배트맨은 배트맨입니다.

     

    아주 간단하게 변수에 대해 알아봤는데요. 사실, 프린트 함수와 같이 사용하다보니 변수에 대한 깊이있는 내용은 학습하기가 어려운 부분이 있습니다. 변수는 공용으로 사용할 값 또는 재사용할 값을 담아두는 메모리 공간입니다. 실생활에서 누군가를 만나서 전화번호를 받았다고 생각 해보세요. 이 번호를 phone이라는 변수에 저장했습니다. 이 변수를 누군가와 공유할수도 있죠? 친구 10명과 변수를 공유했다고 생각 해보세요. 그런데 그 누군가의 전화번호가 변경되었습니다. 그러면, phone에 변경된 전화번호로 업데이트할겁니다. 변수 자체를 사용하면 공유한 친구 10명 모두 자동으로 변경된 전화번호를 가지게 됩니다. 하지만, 쪽지로 공유했다면 친구 10명에게 각각 다시 알려줘야하는 번거로움이 발생합니다.

     

    위의 예가 적절한지는 모르겠지만, 변수는 어떤 공간을 모두가 바라보고 있는겁니다. 실제로 phone의 메모리 주소가 0x000001이라고 가정 해볼께요. 이 공간에 010-1111-1111이 저장되어 있습니다. 변수를 사용한다는 것은 phone 변수에 저장된 010-1111-1111을 사용하는게 아닙니다. 변수의 주소 0x000001를 가지고 있다가(참조) 실제 변수를 사용할 때 해당 주소에 저장되어 있는 내용을 꺼내 쓰는겁니다. 그래서, 실제로 전화번호가 바뀌더라도 변수를 바라보는 코드들은 사용할 때 변수의 주소에 저장되어 있는 마지막 값을 가져오게 됩니다. 이해가... 좀 어렵나요^^;

     

    다음 시간에는 주석에 대해 간단하게 알아보도록 하겠습니다.

     

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.