본문 바로가기

분류 전체보기

(98)
[파이썬] 네임 맹글링 (name mangling) 네임 맹글링(name mangling)은 파이썬에서 클래스의 속성 이름을 바꾸는 기능입니다. 일반적으로 클래스 내에서 속성 이름을 _ 두 개로 시작하는 것으로 정의하면, 이 속성은 자동으로 네임 맹글링이 되어 _클래스명__속성이름 으로 변경됩니다. 1. 예제 코드 class MyClass: def __init__(self): self.__private_attr = 42 def get_private_attr(self): return self.__private_attr MyClass의 __private_attr 속성은 실제로 _MyClass__private_attr으로 맹글링됩니다. 이렇게 맹글링하는 이유는, 파이썬에서는 클래스의 속성이 기본적으로 public으로 취급됩니다. 하지만, 어떤 경우에는 클래스 ..
[파이썬] 매직 메소드란 파이썬 매직 메소드는 파이썬에서 객체 지향 프로그래밍을 구현하는 데 중요한 역할을 합니다. 이 메소드들은 __로 시작하고 끝나는 특별한 메소드입니다. 이 메소드들은 내부적으로 파이썬 인터프리터에 의해 호출되며, 사용자가 직접 호출하는 것이 아니라 자동으로 호출됩니다. 1. 개념 매직 메소드는 객체의 생성, 소멸, 문자열 표현, 연산자 오버로딩, 컨테이너 타입 지원 등 다양한 기능을 지원합니다. 이를테면, __init__ 메소드는 객체 생성 시 초기화를 위해 호출되며, __str__ 메소드는 객체를 문자열로 변환해 출력하는 데 사용됩니다. 아래는 몇 가지 대표적인 매직 메소드의 예시입니다. __init__(self[, ...]): 객체가 생성될 때 호출되는 생성자 메소드입니다. __del__(self): ..
[파이썬] BFS 예제 코드 BFS(Breadth-First Search)는 그래프에서 너비 우선 탐색을 수행하는 알고리즘으로, 특정 노드에서 시작하여 인접한 노드를 모두 방문한 후에 다음 노드로 이동하는 방식으로 탐색합니다. 즉, 가까운 노드부터 탐색을 시작하여 먼 노드로 이동하며 탐색합니다. BFS는 주로 최단 경로를 찾는 문제에서 사용됩니다. BFS 알고리즘은 큐(Queue) 자료구조를 사용하여 구현할 수 있습니다. 먼저 탐색을 시작하는 노드를 큐에 삽입합니다. 그리고 큐에서 하나의 노드를 꺼내서 해당 노드의 인접한 노드들을 모두 큐에 삽입합니다. 이 때, 이미 방문한 노드를 다시 큐에 삽입하지 않도록 방문한 노드를 체크해야 합니다. 큐가 빌 때까지 이 과정을 반복하며 모든 노드를 탐색합니다. 1. 예제 코드 아래는 Pytho..
[파이썬] DFS 구현 DFS는 깊이 우선 탐색(Depth First Search)의 약자입니다. 이는 그래프에서 모든 노드를 탐색하는 알고리즘 중 하나입니다. 그래프는 노드와 간선으로 구성되며, 간선은 노드와 노드를 연결하는 경로를 나타냅니다. DFS는 특정 노드에서 시작하여 그래프의 모든 노드를 방문하며, 이때 방문한 노드는 스택(stack)에 저장됩니다. 파이썬으로 DFS를 구현할 때에는 일반적으로 재귀 함수(recursive function)를 사용합니다. 이때, 방문한 노드를 저장하기 위해 스택 대신에 파이썬의 리스트(list)를 사용할 수 있습니다. 1. 재귀함수로 구현 # 그래프를 인접 리스트로 구현한 예시입니다. graph = { 'A': ['B', 'C'], 'B': ['A', 'D', 'E'], 'C': ['..
[파이썬] namedtuple 이란 파이썬의 namedtuple은 튜플(tuple)과 딕셔너리(dictionary)의 기능을 합쳐 놓은 자료형입니다. 튜플은 순서가 있는 데이터 집합이며, 한 번 생성된 후에는 수정이 불가능합니다. 딕셔너리는 순서가 없는 key-value 쌍의 데이터 집합입니다. namedtuple은 이 둘의 장점을 모두 갖추고 있습니다. 1. 예시 namedtuple은 collections 모듈에서 제공됩니다. 간단한 예시를 통해 사용 방법을 살펴보겠습니다. from collections import namedtuple Person = namedtuple('Person', ['name', 'age', 'gender']) person1 = Person('Alice', 25, 'Female') person2 = Person(..
[파이썬] URL 인코딩 디코딩 예제 코드 Python에서 URL 인코딩 및 디코딩을 수행하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 urllib.parse 모듈을 사용하는 것입니다. 이 모듈은 URL을 파싱하고 조작하는 기능을 제공합니다. 아래는 urllib.parse 모듈을 사용하여 URL을 인코딩하고 디코딩하는 방법입니다. 1. URL 인코딩 import urllib.parse url = 'http://example.com/?name=홍길동&age=30' # URL 인코딩 encoded_url = urllib.parse.quote(url, safe=':/&?=') # safe 문자열은 인코딩하지 않음 print(encoded_url) # 출력결과: http%3A//example.com/%3Fname%3D%ED%99%8D%EA%B..
[파이썬] XML 파싱, 수정, 생성 하기 Python에서 XML을 파싱하는 방법은 여러 가지가 있지만, 가장 일반적인 방법은 ElementTree 라이브러리를 사용하는 것입니다. ElementTree는 XML 문서를 파싱하고 조작하기 위한 파이썬 표준 라이브러리입니다. 1. XML 파싱 import xml.etree.ElementTree as ET # XML 문자열을 파싱합니다. xml_string = """ Everyday Italian Giada De Laurentiis 2005 30.00 Harry Potter J.K. Rowling 2005 29.99 """ # 파싱합니다. root = ET.fromstring(xml_string) # 모든 책 정보를 출력합니다. for book in root.findall('book'): title =..
[파이썬] 불변객체와 가변객체 파이썬에서는 객체를 가변(mutable)객체와 불변(immutable)객체로 구분할 수 있습니다. 객체의 가변성 여부는 객체의 값이 변경 가능한지 여부를 의미합니다. 1. 불변 객체(Immutable Objects) 불변 객체는 생성 후에는 그 값을 변경할 수 없는 객체입니다. 즉, 한 번 생성된 값은 변경되지 않습니다. 불변 객체의 대표적인 예시로는 숫자(int, float), 문자열(str), 튜플(tuple) 등이 있습니다. 다음은 문자열을 예시로 들어보겠습니다. 문자열은 변경이 불가능하기 때문에, 한 번 생성된 문자열은 값이 변경되지 않습니다. 예를 들어, 다음과 같은 코드에서 s의 값이 변경되지 않습니다. s = 'hello' s[0] = 'H' # TypeError 발생 위 코드에서 s[0] ..