Language/Python [Python] 변수와 데이터 타입
  • 728x90
    반응형

     

    변수와 데이터 타입


     

     

     

    변수(variable)

    대부분의 프로그램은 데이터를 활용하여 다양한 동작을 수행하며, 이러한 데이터는 컴퓨터의 메모리 공간에 저장될 수 있다. 이때 데이터를 저장한 메모리 공간에 이름을 할당받아야만 나중에 다시 해당 데이터에 접근할 수 있다.

     

     

    이처럼 프로그램에서 사용되는 데이터를 저장해 놓은 일종의 저장 공간을 변수(variable)라고 부른다. 즉, 변수란 데이터를 저장할 수 있도록 이름을 할당받은 메모리 공간을 의미하며, 이렇게 저장된 데이터에는 언제든지 다시 접근하거나 그 값을 변경할 수 있다.

     

     

     

    변수명 생성 규칙

    만약 파이썬에서 변수명으로 if나 while 등을 사용할 수 있으면, 파이썬 인터프리터는 이것이 변수명인지 아니면 조건문이나 반복문을 나타내는 것인지 알 수 없게 된다. 따라서 파이썬 인터프리터는 SyntaxError라는 에러 메시지를 출력하고 프로그램을 강제로 종료시킨다.

     

     

    이처럼 파이썬을 비롯한 모든 프로그래밍 언어에서는 변수의 이름을 짓는데 반드시 지켜야하는 공통된 규칙을 가지고 있다.

     

    다음은 파이썬에서 변수명을 지을 때 지켜야하는 규칙들이다.

     

    1. 변수명은 영문자(대소문자), 숫자, 언더스코어(_)로만 작성할 수 있다.
    2. 변수명은 숫자로 시작할 수 없다. 즉, 반드시 영문자나 언더스코어(_)로 시작해야 한다.
    3. 변수명은 대소문자를 구분한다.
    4. 변수명에는 파이썬에서 미리 정의된 예약어(reserved words)는 사용할 수 없다.

    파이썬에서 미리 정의된 예약어는 다음과 같다.

    False await else import pass
    None break except in raise
    True class finally is return
    and continue for lambda try
    as def from nonlocal while
    assert elif if or yield

     

    💡 Tip : 파이썬에서 변수명은 해당 변수에 저장되는 데이터를 의미할 수 있는 단어를 사용하여 간단명료하게 구서하는 것이 좋으며, 같은 프로그램에서 선언된 변수들의 이름은 가급적 일관되게 작성하는 것이 좋다.

     

     

     

    변수의 타입

    C언어나 자바와 같은 프로그래밍 언어에서는 변수를 선언할 때 반드시 타입이라는 것을 같이 명시해야 한다.

     

    변수의 타입(type)이란 정수나 실수, 문자열 등과 같이 해당 변수에 저장된 데이터의 종류를 나타내며, 변수의 타입을 통해 해당 변수가 프로그램 내에서 어떻게 처리되어야 하는지를 알려주는 지표와 같은 역할을 한다.

     

    C 언어 자바
    int num = 256; double num = 3.14;

     

    하지만 파이썬에서는 변수를 선언할 때 별도로 타입을 명시하지 않아도 변수에 대입되는 데이터의 타입에 따라 변수의 타입을 자동으로 설정해 준다.

     

    🔔 예제)

    var = 7
    
    print(type(var))
    
    var = "문자열"
    
    print(type(var))

     

    실행 결과

    <class 'int'>

    <class 'str'>

     

    위의 예제의 1번 라인에서 변수 var는 정수를 대입하여 선언했으므로, 변수 var의 타입도 정수로 선언된다.

    하지만 4번 라인에서 정수형 변수 var에 문자열을 대입하게 되면, 변수 var의 타입도 문자열로 자동 변경된다.

     

    💡 Tip : type() 함수는 인수로 전달된 데이터나 변수의 타입을 반환하는 함수이다.

     

     

     

    데이터 타입

    변수뿐만 아니라 프로그램에 사용되는 모든 데이터에도 타입이 존재한다. 데이터 타입(data type, 자료형)이란 해당 데이터가 메모리에 어떻게 저장되고, 프로그램 내에서 어떻게 처리되어야 하는지를 명시적으로 알려주는 역할을 한다.

     

    예를 들어 1, 2, 3.14와 같은 숫자들은 숫자형 타입이 되며, "안녕하세요!"와 같은 문자열은 문자열 타입이 되는 것이다.

     

    파이썬에서는 다음과 같은 기본 데이터 타입을 제공하고 있다.

    1. 숫자형 타입(numeric types)
    2. 불리언 타입(boolean types)
    3. 문자열 타입(text sequence types)

    이외에도 리스트(list)와 튜플(tuple), 집합(set), 딕셔너리(dict) 등과 같은 타입 등이 존재한다.

     

     

    숫자형 타입(numeric typeds) : int, float

    숫자형 타입이란 1, 2, 3.14와 같이 숫자의 형태로 이루어진 데이터 타입을 의미한다.

    이중에서 1과 2와 같이 소수점이 없는 숫자형 데이터를 정수형(integer)타입이라고 하며, 3.14와 같이 소수점을 가지고 있는 숫자형 데이터를 실수형(floating-point) 타입이라고 한다.

     

    🔔 예제)

    i = 10
    
    j = 3.14
    
    print(type(i))
    
    print(type(j))

     

    실행 결과

    <class 'int'>

    <class 'float'>

     

    위의 예제에서 변수 i에는 정수 10이 저장되므로 정수형 타입으로 선언된다. 따라서 type() 함수에 인수로 변수 i를 전달하면 int 클래스가 반환된다. 또한, 변수 j는 실수 3.14가 저장되어 실수형 타입으로 선언되므로, type() 함수가 float 클래스를 반환하게 된다. 이처럼 파이썬에서는 각각의 데이터 타입이 하나의 클래스(class)로 작성되어 제공된다.

     

    💡 Tip : 클래스(class)란 객체 지향 프로그래밍에서 객체(object)를 만들어 내기 위한 일종의 설계도라 할 수 있으며, 객체(object)란 실생활에서 우리가 인식할 수 있는 사물로 설명할 수 있다.

     

     

     

     

    산술 연산자(arithmetic operator)

    숫자형 데이터끼리는 더하기(+), 빼기(-), 곱하기(*), 나누기(/)와 같은 산술 연산자를 사용하여 사칙연산을 수행할 수 있다.

     

    파이썬에서 정수형 데이터끼리의 나눗셈을 제외한 사칙 연산은 정수형 데이터를 결과를 반환하며, 실수형 데이터끼리의 사칙 연산은 언제나 실수형 데이터를 결과로 반환한다. 단, 정수형 데이터끼리의 나눗셈의 결과는 정수형이 아닌 실수형으로 반환됨으로 이 점 주의해야 한다.

    마지막으로 실수형 데이터와 정수형 데이터 사이의 사칙 연산은 언제나 실수형 데이터를 결과로 반환한다.

     

    🔔 예제)

    i = 4
    
    j = 2  
    
    print(i + j)
    print(i - j)
    print(i * j)
    
    print(i / j)

     

    실행 결과

    6

    2

    8

    2.0

     

    위 예제의 7번 라인에서 정수 4를 정수 2로 나눈 결과가 정수 2가 아닌 실수 2.0으로 반환되는 것을 확인할 수 있다.

     

    이때 나눗셈의 몫을 실수가 아닌 정수로 얻고 싶다면 나눗셈(/) 연산자가 아닌 몫(//)연산자를 사용해야 한다. 또한, 나눗셈의 나머지를 얻고 싶을 때에는 나머지(%) 연산자를 사용하면 된다.

     

    🔔 예제)

    i = 4
    
    j = 2  
    
    print(i / j)
    print(i // j)
    print(i % j)

     

    실행 결과

    2.0

    2

    0

     

     

     

    불리언 타입(boolean types) : bool

    불리언 타입이란 논리값은 참(True)과 거짓(False) 중 한 가지만을 가질 수 있는 데이터 타입을 의미한다.

     

    💡 Tip : 파이썬에서는 True와 False가 예약어로 미리 지정되어 있기 때문에 첫 문자를 항상 대문자로 사용해야만 한다.

     

    C를 비롯한 대부분의 프로그래밍 언어에서 1은 '참'을 의미하고 0은 '거짓'을 의미한다. 파이썬에서는 이에 대해 데이터의 참과 거짓을 다음과 같이 판단하고 있다.

     

    🔔 예제)

    print(bool(1))        # True
    
    print(bool(0))        # False
    print(bool(None))     # False
    print(bool([]))       # False
    print(bool(()))       # False
    print(bool({}))       # False
    print(bool([1,2,3]))  # True
    print(bool(""))       # False
    print(bool("python")) # True

     

    실행 결과

    True

    False

    False

    False

    False

    False

    True

    False

    True

     

    문자열이나 리스트, 튜플, 딕셔너리 등이 비어있으면 거짓(False)으로 인식되며, 비어있지 않으면 참(True)으로 인식된다.

     

    💡 Tip : bool() 함수는 인수로 전달된 데이터의 참과 거짓을 판단하여 반환한다.

     

     

     

    비교 연산자(relational operator)

    비교 연산자는 피연산자 사이의 상대적인 크기를 판단하는 연산자로, 왼쪽의 피연산자와 오른쪽의 피연산자를 서로 비교하여 어느 쪽이 더 큰지, 작은지, 또는 같은지를 판단한다.

     

    비교 연산자 설명
    < 왼쪽의 피연산자가 오른쪽의 피연산자보다 작으면 True를 반환함.
    <= 왼쪽의 피연산자가 오른쪽의 피연산자보다 작거나 같으면 True를 반환함.
    > 왼쪽의 피연산자가 오른쪽의 피연산자보다 크면 True를 반환함.
    >= 왼쪽의 피연산자가 오른쪽의 피연산자보다 크거나 같으면 True를 반환함.
    == 왼쪽의 피연산자와 오른쪽의 피연산자가 같으면 True를 반환함.
    != 왼쪽의 피연산자와 오른쪽의 피연산자가 같지 않으면 True를 반환함.

     

    비교 연산자로 연산한 결과는 언제나 불리언 타입으로 반환되므로, True나 False중 하나의 값이 반환된다.

     

    🔔 예제)

    i = 100
    j = 10
    
    print(i < j)  # False
    print(i >= j) # True
    print(i == j) # False
    print(i != j) # True

     

    실행 결과

    False

    True

    False

    True

     

     

     

    논리 연산자(logical operator)

    논리 연산자는 주어진 논리식을 판단하여, 참(True)과 거짓(False)을 결정하는 연산자이다.

     

    논리 연산자 설명
    or 논리식 중에서 하나라도 True이면 True를 반환함.
    and 논리식이 모두 True이면 True를 반환함.
    not 논리식의 결과가 True이면 False를, False이면 True를 반환함.

     

    🔔 예제)

    print((100 > 10) or (30 <= 3)) # True or False -> True
    print((10 == 10) and (3 != 3)) # True and False -> False
    print(not (3 <= 3))            # not True -> False

     

    실행 결과

    True

    False

    False

     

    파이썬에서 or 연산자는 첫 번째 논리식의 결과가 False일 때만 두 번째 논리식을 검사한다. 이것은 첫 번째 논리식의 결과가 True이면 두 번째 논리식을 검사하지 않고도 결과가 True임을 바로 알 수 있기 때문이다.

     

    또한, and 연산자는 첫 번째 논리식의 결과가 True일 때만 두 번째 논리식을 검사한다. 첫 번째 논리식의 결과가 Faslse이면 두 번째 논리식의 결과와 상관없이 언제나 결과는 False이기 때문이다.

     

    다음은 논리 연산자의 모든 결과를 나타내는 진리표(truth table)이다.

    A B A and B A or B not A
    True True True True False
    True False False True False
    False True False True True
    False False False False True

     

     

    문잘열 타입(text sequence types) : str

    문자열(string) 이란 문자로 이루어진 데이터의 집합을 의미하며, 파이썬에서는 다음과 같이 다양한 방법으로 문자열을 표현할 수 있다.

     

    1. 큰따옴표(" ")로 감싸기
    2. 작은따옴표('')로 감싸기
    3. 큰따옴표 3개(""" """)로 감싸기
    4. 작은따옴표 3개(''' ''')로 감싸기

    🔔 예제)

    print("파이썬")
    print('Python')  
    
    print("내 이름은 '홍길동'이야!")
    print('내 이름은 "홍길동"이야!')

     

    실행 결과

    파이썬

    Python

    내 이름은 '홍길동'이야!

    내 이름은 "홍길동"이야!

     

    위의 예제처럼 큰따옴표와 작은따옴표의 용법상 차이는 전혀 없으며, 이 두 가지 따옴표를 모두 사용하는 이유는 4번과 5번 라인처럼 문자열 내에서 따옴표를 정확히 표현하기 위함이다.

     

    하지만 따옴표가 등장하는 순서에 따라 정확하게 사용하지 않으면 예상치 못한 문제가 발생할 수 있으므로, 그 사용에 주의를 기울여야 한다.

     

    💡 Tip : $ 정상적인 문자열 : "그녀는 '당신이 너무 멋져요!'라고 말했어."
    $ 잘못된 문자열 : "그녀는 '당신이 너무 멋져요!"라고 말했어.'

     

    위의 잘못된 문자열에 대해 파이썬은 ["그녀는 '당신이 너무 멋져요!"]까지 만을 정상적인 문자열로 인식하고, 나머지 부분인 [라고 말했어.']는 정상적인 문자열로 인식하지 못해 에러를 발생시킬 것이다.

     

     

    여러 줄의 문자열 표현하기

    큰따옴표나 작은따옴표 3개를 연속해서 사용하면 여러 줄의 문자열을 그대로 표현할 수 있다.

     

    🔔 예제)

    print("""큰따옴표 3개는
    여러 줄의 문자열을 표현할 때
    사용합니다.""")  
    
    print('''작은따옴표 3개도
    여러 줄의 문자열을 표현할 때
    사용합니다.''')  
    
    print('여러 줄의 문자열을\n'
    '개행문자를 사용하여 표현하는 것이\n'
    '소스코드의 가독성은 더 좋습니다.')

     

    실행 결과

    큰따옴표 3개는

    여러 줄의 문자열을

    표현할 때 사용합니다.

    작은따옴표 3개도

    여러 줄의 문자열을

    표현할 때 사용합니다.

    여러 줄의 문자열을

    개행문자를 사용하여 표현하는 것이

    소스코드의 가독성은 더 좋습니다.

     

    위 예제의 9번과 10번 라인에 사용된 줄바꿈 문자('\n')는 출력 시 문자열의 라인을 다음 라인으로 바꿔주는 역할을 하며, 이를 사용함으로써 따옴표 3개를 사용하는 표현보다 좀 더 출력 결과와 비슷한 형태로 코드를 작성할 수 있다.

     

     

     

    문자열끼리의 연산

    파이썬에서 숫자처럼 문자열끼리 서로 더하거나 문자열에 숫자를 곱할 수도 있다. 문자열끼리의 더하기(+) 연산은 두 문자열을 서로 연결시켜주며, 문자열과 정수의 곱하기(*) 연산은 해당 문자열을 정수배만큼 반복해서 연결해 준다.

     

    🔔 예제)

    i = "파이썬 "
    j = "문자열"
     
    print(i + j)
    print(i * 3)

     

    실행 결과

    파이썬 문자열

    파이썬 파이썬 파이썬

     

     

     

    문자열에서 문자 선택하기

    문자열은 문자들의 연속된 집합이라고 볼 수 있다. 따라서 파이썬에서는 문자열 내에서 특정 위치의 문자를 손쉽게 선택할 수 있도록 다음 예제와 같이 문자열을 배열로 다룰 수 있게 해준다.

     

    🔔 문법)

    py = "파이썬으로 코딩을 배우자!"  
    
    print(py[0])
    print(py[6])
    print(py[-1])
    print(len(py))

     

    실행 결과

    !

    14

     

    위 예제의 3번 라인처럼 문자열의 첫 번째 문자의 인덱스(index)는 0부터 시작해서 1씩 증가되며, 이때 띄어쓰기(white space)도 하나의 문자로 취급된다. 파이썬에서는 음의 인덱스도 지원하며, 음의 인덱스는 문자열의 마지막 문자를 -1로 놓고 역순으로 증가하게 된다.

     

    💡 Tip : 대부분의 프로그래밍 언어에서는 한글과 영문자의 크기가 서로 다르게 취급하는데, 파이썬에서는 한글과 영문자의 크기를 동일하게 취급한다.

     

     

     

    문자열 자르기

    문자열을 다루다보면 문자열의 일부분만을 사용하거나 문자열의 일부만을 변경해야 할 경우가 생긴다. 이러한 경우 손쉽게 처리할 수 있도록 파이썬에서는 문자열의 일부분을 잘라 반환해주는 문자열 슬라이싱(slicing)을 지원하고 있다.

     

    🔔 예제)

    py = "우리집 강아지 이름은 멍멍이입니다."  
    
    print(py[4])
    print(py[4:7])
    print(py[:4])
    print(py[4:])

     

    실행 결과

    강아지

    우리집

    강아지 이름은 멍멍이입니다.

     

    위 예제의 4번 라인처럼 콜론(:) 기호를 사용하면 문자열의 일부분만을 자를 수 있으며, 이때 콜론의 앞쪽에 위치한 인덱스부터 콜론의 뒤쪽에 위치한 인덱스 바로 앞 문자까지를 반환한다. 이처럼 콜론의 앞쪽에 위치한 인덱스는 곧바로 시작 인덱스가 되지만, 콜론의 뒤쪽에 위치한 인덱스는 해당 인덱스에서 1을 뺀 인덱스가 마지막 인덱스가 된다.

     

    또한, 시작 인덱스나 종료 인덱스 중 하나를 생략하면 손쉽고 빠르게 부분 문자열을 생성할 수 있다.

     

     

     

    특정 문자의 개수 및 위치

    count() 함수는 해당 문자열에 인수로 전달받은 문자가 모두 몇 개 포함되어 있는지를 확인하여 반환한다.

    또한, find() 나 index() 함수를 사용하면, 해당 문자열에 인수로 전달받은 문자가 처음으로 등장하는 인덱스(index)를 알 수 있다.

     

    🔔 예제)

    py = "python programming" 
    
    print(py.count('p'))
    print(py.find('o'))
    print(py.index('o'))
    print(py.find('z'))
    # print(py.index('z'))

     

    실행 결과

    2

    4

    4

    -1

     

    위 예제의 5번과 6번 라인에서 find() 와 index() 함수의 결과는 동일하게 4로 출력된다.

     

    이 두 함수의 차이점은 바로 8번과 9번 라인처럼 해당 문자열에 포함되어 있지 않은 문자를 검색할 때 나타난다. find() 함수는 해당 문자열에 전달받은 문자가 포함되어 있지 않으면 -1을 반환하지만, index() 함수는 ValueError를 발생시키며 프로그램을 강제 종료한다.

     

    따라서 index() 함수를 사용할 때는 반드시 전달받은 문자가 해당 문자열에 포함되어 있는지를 먼저 확인하고 사용해야 한다.

     

     

    문자열의 대소문자 변환

    upper() 함수는 문자열의 모든 문자를 대문자로 변환해주며, lower() 함수는 문자열의 모든 문자를 소문자로 변환시켜 준다.

     

    🔔 예제)

    py = "Python" 
    
    print(py.upper())
    print(py.lower())
    print(py)

     

    실행 결과

    PYTHON

    python

    Python

     

    위 예제의 6번 라인의 실행결과를 보면 원본 문자열은 변하지 않았음을 확인할 수 있다. 이처럼 지금까지 우리가 문자열 다루기 단원에서 살펴본 문자열 함수들은 모두 원본 문자열 그 자체를 변환하는 것이 아니라, 변환된 새로운 문자열을 생성하여 반환해 주는 것이다.

     

     

     

    문자열 변경하기

    replace() 함수는 첫 번째 인수로 전달된 문자열을 해당 문자열에서 찾아 두 번째 인수로 전달된 문자열로 변경해 준다. 이때 해당 문자열에서 첫 번째 인수로 전달된 문자열을 찾을 수 없으면, 원본 문자열을 그대로 반환한다.

     

    🔔 예제)

    py = "파이썬 공부는 너무 재밌어요!"  
    
    print(py.replace("파이썬", "자바"))
    print(py)

     

    실행 결과

    자바 공부는 너무 재밌어요!

    파이썬 공부는 너무 재밌어요!

     

     

     

     

    문자열 나누기

    split() 함수는 전달받은 문자를 기준으로 해당 문자열을 여러 개의 부분 문자열로 나누어 하나의 리스트로 반환한다.

     

    🔔 예제)

    py = "파이썬 공부는 너무 재밌어요!"
    
    print(py.split(' '))
    print(py.split()) 
    
    print(py)

     

    실행 결과

    ['파이썬', '공부는', '너무', '재밌어요!']

    ['파이썬', '공부는', '너무', '재밌어요!']

    파이썬 공부는 너무 재밌어요!

     

    위 예제의 3번 라인에서는 문자열 py를 띄어쓰기를 기준으로 나누고 있다. 또한, 4번 라인처럼 split() 함수에 아무런 인수도 전달하지 않으면, 자동으로 띄어쓰기나 탭 문자, 줄바꿈 문자 등과 같은 공백(white space)을 기준으로 문자열을 나누게 된다.

     

     

     

    728x90
    반응형
상단으로