(SK쉴더스)AI 활용한 클라우드 & 보안 전문가 양성 캠프

[새싹 성동 2기] 5. Python 문법 기초(1)

hunm719 2024. 11. 20. 18:46

목차

 

1. 변수                          

2. 자료형                      

3. 연산자                      

4. 파일                          

5. 객체지향 프로그래밍  

 

 

 

[1] 변수(Variables)

-변수는 데이터를 저장하기 위해 사용하는 공간

-변수는 값을 저장, 재사용, 조작할 수 있음

-변수 선언시 자료형을 명시하지 않아도 값을 기반으로 자료형을 자동으로 추론함(=Dynamic typing)

# 동적 타이핑의 예시
x = 42        # x는 정수(int)
x = "hello"   # x는 이제 문자열(str)

 

-변수의 타입을 자동으로 변환하지 않으며, 타입 간의 불일치가 있을 경우 명시적으로 반환을 요구함(=Strong typing)

# 강력한 타이핑의 예시
x = 42
y = "hello"
print(x + y)  # TypeError 발생: int와 str를 더할 수 없음
print(str(x) + y)  # "42hello" <- 명시적 변환으로 타입 불일치를 해결해야 함

※ Dynamic typing은 변수가 어떤 타입이든 될 수 있다는 "자유도"를 제공함

※ Strong typing은 그 자유도 내에서 "안전성"을 보장함

 

-가변성(Mutable), 불변성(Immutable)

--가변성 : 객체의 값을 변경할 수 있는 특성 (예: list, dictionary, set 등...)

--불변성 : 객체의 값을 변경할 수 없는 특성 (예: 정수, 실수, 문자열, 튜플 등...)

# 가변 객체는 메모리 주소가 유지되며, 같은 객체를 참조한 모든 변수에서 수정된 결과를 공유함
a = [1, 2, 3]
b = a       # b는 a와 같은 객체를 참조
b.append(4) # b를 수정하면 a도 영향을 받음
print(a)    # [1, 2, 3, 4]

# 불변 객체는 값을 변경하면 기존 객체를 수정하는 대신 새로운 객체를 생성함
a = 10
b = a       # b는 a와 같은 객체를 참조
b = b + 1   # b는 새로운 객체를 참조
print(a)    # 10 (a는 영향을 받지 않음)

 

-지역변수(Local Variable), 전역변수(Global Variable)

--지역변수 : 함수 내부에서 선언된 변수로 선언된 함수 내에서만 접근 가능

--전역변수 : 함수 외부에서 선언된 변수로 프로그램 전체에서 접근 가능

# 전역변수 선언
global_var = "전역변수"

def function1():
    # 지역변수 선언
    local_var = "지역변수"
    print(global_var)  # 전역변수 접근 가능
    print(local_var)   # 지역변수 접근 가능

def function2():
    print(global_var)  # 전역변수 접근 가능
    # print(local_var)  # Error! function1의 지역변수는 여기서 접근 불가

# 전역변수를 함수 내에서 수정하고 싶을 때
def function3():
    global global_var  # global 키워드로 전역변수 수정 권한 획득
    global_var = "전역변수가 수정되었습니다"

# 중첩 함수에서의 변수 스코프
def outer_function():
    outer_var = "외부함수 변수"
    
    def inner_function():
        inner_var = "내부함수 변수"
        print(outer_var)  # 외부함수 변수 접근 가능
        print(inner_var)  # 내부함수 변수 접근 가능
    
    inner_function()
    print(outer_var)      # 외부함수 변수 접근 가능
    # print(inner_var)    # Error! 내부함수의 변수는 접근 불가

 

 

[2] 자료형(Data type)

구분 데이터 타입 설명
숫자형 정수형(int)    소수점이 없는 숫자
실수형(float)    소수점을 포함하는 숫자
복소수형(complext)    실수부와 허수부로 구성된 숫자
논리형 불리언(bool)    참(True) 또는 거짓(False)을 나타내는 데이터 타입
시퀀스형 문자열(str)    문자나 단어의 시퀀스
리스트(list)    순서가 있는 가변 시퀀스 타입 ⇐ JavaScript의 배열(array)
튜플(tuple)    순서가 있는 불변 시퀀스 타입
범위(range)    특정 범위 내의 숫자를 생성
매핑형 딕셔너리(dict)    키-값 쌍으로 구성된 매핑 타입 ⇐ JavaScript의 객체(object)
집합형 집합(set)    중복을 허용하지 않는 순서가 없는 컬렉션 타입
프로즌셋(frozenset)    집합과 유사하지만 불변 집합
NoneType    아무 것도 없음을 나타내는 특수한 데이터 타입

※ 앞서 JS를 배웠으므로 JS에서는 없었던 특별한 자료형만 자세히 알아보자

 

-튜플(tuple)

 

  • 불변성(Immutable): 생성된 후 값을 변경할 수 없음
  • 순서 유지(Order): 요소들이 입력된 순서를 유지함
  • 중복 허용: 동일한 값을 여러 번 포함할 수 있음
  • 소괄호 ()로 정의하며, 쉼표로 구분

 

# 튜플 정의
my_tuple = (1, 2, 3)
print(my_tuple)          # (1, 2, 3)

# 요소 접근
print(my_tuple[0])       # 1

# 튜플 언패킹
x, y, z = my_tuple
print(x, y, z)           # 1 2 3

# 단일 요소 튜플
single = (5,)            # 요소가 하나인 튜플을 만들 때는 반드시 쉼표를 붙여야 함
print(type(single))      # <class 'tuple'>

# 불변성 확인
my_tuple[0] = 10       # TypeError: 튜플은 값을 변경할 수 없음

 

-레인지(range)

  • 숫자의 연속된 시퀀스를 생성하는 객체
  • 메모리 효율성이 높음: 실제 리스트를 생성하지 않고 필요할 때 계산
  • 순서 유지(Order): 요소가 정해진 순서대로 생성됨
  • 읽기 전용이며, 요소를 수정할 수 없음
  • 반복문에서 숫자를 생성하는데 유용함
# range 정의
r = range(5)             # 0부터 4까지 생성
print(list(r))           # [0, 1, 2, 3, 4]

# 시작과 끝, 간격 지정
r = range(1, 10, 2)      # 1부터 10까지 2씩 증가
print(list(r))           # [1, 3, 5, 7, 9]

# 반복문 활용
for i in range(3):
    print(i)             # 0, 1, 2

 

 

-딕셔너리(dict)

 

  • 키-값 쌍(Key-Value Pair)으로 구성된 자료형
  • 가변성(Mutable): 키-값을 추가, 삭제, 수정 가능
  • 키는 고유해야 하며, 불변 객체(예: 문자열, 숫자, 튜플 등)만 사용 가능
  • 중괄호 {}로 정의함
  • 데이터를 키를 활용해 빠르게 검색할 때 사용하고, JSON과 같은 데이터 구조 표현에 유용함
# 딕셔너리 정의
my_dict = {"name": "Alice", "age": 25}

# 값 접근
print(my_dict["name"])   # Alice

# 값 추가 및 수정
my_dict["age"] = 26
my_dict["city"] = "Seoul"
print(my_dict)           # {'name': 'Alice', 'age': 26, 'city': 'Seoul'}

# 값 삭제
del my_dict["city"]
print(my_dict)           # {'name': 'Alice', 'age': 26}

# 키 확인
print("name" in my_dict) # True
print("city" in my_dict) # False

# 반복문
for key, value in my_dict.items():
    print(key, value)

 

 

-집합(set)

 

  • 순서가 없는(정렬되지 않은) 고유 값들의 집합
  • 중복 허용하지 않음
  • 가변성(Mutable): 요소 추가, 삭제 가능
  • 중괄호 {}로 정의하며, 빈 집합은 set()으로 생성함
  • 중복을 제거하거나 집합 연산(교집합, 합집합, 차집합 등)에 유용함
# 집합 정의
my_set = {1, 2, 3, 3}
print(my_set)            # {1, 2, 3} (중복 제거)

# 요소 추가 및 삭제
my_set.add(4)
my_set.remove(2)
print(my_set)            # {1, 3, 4}

# 집합 연산
set1 = {1, 2, 3}
set2 = {3, 4, 5}
print(set1 | set2)       # 합집합: {1, 2, 3, 4, 5}
print(set1 & set2)       # 교집합: {3}
print(set1 - set2)       # 차집합: {1, 2}

# 중복 제거
nums = [1, 2, 2, 3, 4, 4]
unique_nums = set(nums)
print(unique_nums)       # {1, 2, 3, 4}

 

 

 

 

자료형 정리