목록Python & Django (23)
Code IT
# 객체지향 프로그래밍에서 절대 빼놓을 수 없는 것, 그리고 가장 어려운 것. 그것은 상속이다. # 사실, 상속을 이해할 때 우리가 흔히 알고있는 그 "상속"을 떠올리면 이해하기가 어렵다. # 부모가 자식에게 물려주는 것을 이해하는 것은 어렵지 않다. # 그러나 반대로 자식이 부모에게 무언가를 얻어가는 것은 이해하기가 쉽지 않다. # "상속"이란 재산권자체를 물려받는 것이기에 역순으로 이해하기가 쉽지 않다는 것이다. # 불행히도, 상속에서는 역순으로 호출해야만 하는 상황이 적지 않다. # 그래서 본 파트는 상속이 아니라 "확장"을 이해시켜주고 싶다. # 확장은 한 클래스가 본래 가지고 있던 멤버변수나 메서드에 무엇인가를 더 추가하거나 # 본래가진 것을 수정하는 것을 말한다. # 집에서 발코니 확장이나 거..
# 클래스의 메서드는 두 가지 형태로 나뉜다. # 1. 인스턴스로 호출하는 "인스턴스 메서드" # 2. 클래로 호출하는 "클래스 메서드" # 지금 껏 만들어 왔던 모든 메서드들은 "인스턴스 메서드"들이다. # 인스턴스 메서드는 주로 멤벼번수들의 값을 참조하고 그 값을 변경시켜가며 # 결과를 만들어 가는 역할을 수행한다. # 클래스 메서드는 주로 변경되지 않는 값. # 즉, 상수나 유틸리티를 대상으로 사용하는 경우가 많다. # 클래스 메서드를 만드는 방법은 단순하다. # 메서드를 정의할 때 self 아귀먼츠를 제거하면 된다. class Util: def hello_in_class(): """ 클래스 메서드 (스태틱 메서드) """ print("반갑습니다.") def hello_in_instance(self..
https://developtip.tistory.com/110 - Python - class 링크된 위의 글에서 self라는 아귀먼트가 메서드마다 등장하고 있다.이 키워드를 보면서 의아해했을 것 같아 추가로 글을 작성한다. 객체지향프로그래밍을 지원하는 언어들은 클래스 내부에 멤버변수와 메서드를 정의하게 된다. 물론 멤버변수 혹은 메서드만 존재하는 클래스도 정의할 수 있다.아무튼, 클래스 내부에 정의되는 멤버변수들은 그 자체로는 큰 의미나 역할이 없다. 이 멤버변수는 항상 메서드라는 행위로만 접근할 수 있고 그 행위에 따라 의미가 변경될 수도 있다. 이 때, 메서드는 클래스(인스턴스) 내부의 멤버변수에 접근이 필요한데 그냥은 접근할 수 없다. class Kona: """ 주석 : 자동차를 클래스로 표현해보..
class Board: articles = [] def print_welcome_message(self): print("""############################ # Welcome to Python Boards # ############################""") def print_menu(self): print("""################################################################## # 1. List # 2. Search # 3. Read # 4. Delete # 5. Write # 0. Quit # ##################################################################""") de..
articles = [] def print_welcome_message(): print("""############################ # Welcome to Python Boards # ############################""") def print_menu(): print("""################################################################## # 1. List # 2. Search # 3. Read # 4. Delete # 5. Write # 0. Quit # ##################################################################""") def input_menu(): id = ..
# 파이썬은 객체지향프로그래밍이 가능한 언어다. # 객체지향프로그래밍은 무엇일까? # 문제를 해결하기 위한 개발 패러다임 중 하나이다. 프로그래밍에서 풀고자 하는 # 업무나 문제를 현실세계를 빗대어 해결해보자 라는 패러다임이다. # 깊이 파고든다면 철학적인 문제까지 가게 되니 이쯤만 해두도록 하자. # 클래스는 현실세계에 존재하는 모든 것들을 표현할 수 있는 하나의 수단이자 단위이다. # 현실세계에 존재하는 모든 것들의 공통점을 곰곰히 생각해보면 아래와 같은 결론에 닿게된다. # 모든 것들은 "속성(가지고 있는 것)"과 속성을 가지고 할 수 있는 # 다양한 "행위(가지고 있는 것을 활용한 행위)"를 가지고 있다. # 객체지향 프로그래밍에서 클래스는 방금 봤던 속성과 행위 중 한 가지 이상을 # 만족할 수..
# while 이나 for 반복문이 정상적으로 종료되었을 때, 반복을 마쳤다. 라는 # 내용을 개발자나 사용자에게 알리고 싶을 때 사용할 수 있는 키워드도 있다. # 바로 if에서 배웠던, else 가 그것이다. # 간단한 코드로 살펴보자. numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] for number in numbers: print(number) print("반복이 정상적으로 종료되었습니다.") # 위 코드는 반복이 종료되면, 즉시 "반복이 종료되었습니다."를 출력한다. # 우리가 하고자했던 것과 동일하다. # 만약 반복문 코드가 아래와 같이 바뀐다면 어떨까? for number in numbers: if number % 5 == 0: break print(number)..
# 파이썬의 반복문은 while 과 for가 제공된다. # while은 보통 "이터러블" 이라는 이름의 객체를 반복할 때 사용된다. # for는 "이터러블"이 아닌 배열의 형태를 띄고 있는 모든 객체를 반복할 수 있다. articles = [ {"id": 1, "subject": "첫 번째 글"}, {"id": 2, "subject": "두 번째 글"}, {"id": 3, "subject": "세 번째 글"} ] def print_article(article): id = article["id"] subject = article["subject"] print(id, subject) for article in articles: print_article(article) # while 반복문 보다 훨씬 더 깔끔..
# 지금까지의 모든 코드는 한번 실행하면 종료되는 방식이였다. # 하지만, 보통의 프로그래밍이라면, 하나의 작업이 한 번이상 반복이 되는 것들이 많다. # 예컨데, 게시판에 게시글을 등록하는 함수 하나가 있다고 해보자. # 게시판에 게시글을 한 번만 등록한다면, 현재까지 작성해왔던 코드로도 충분히 가능하다. # 하지만, 하나의 글을 한 번 이상 등록한다거나, 다른 내용의 글을 한 번 이상 등록되는 # 게시판이 있다면 우리가 써왔던 코드로는 충분하지 않다. # 이럴 때, 반복문을 사용하면 그럴싸한 게시판이 만들어질수도 있다. articles = [ {"id": 1, "subject": "첫 번째 글"}, {"id": 2, "subject": "두 번째 글"}, {"id": 3, "subject": "세 번..
# 사용자가 입력한 값이나 데이터베이스에서 가져온 값 혹은 처리의 결과를 담고있는 # 모든 변수에 있는 값을 특정 조건과 비교해 참/거짓판단에 따라 처리를 다르게 하는 것. # if 문에서 필요한 조건식이라는 것은 "논리연산"과 "비교연산"을 복합한 # 단순하거나 복잡한 조건식을 말한다. # 예컨데, value라는 변수의 값이 3 일때 이 값이 5보다 작은지를 비교하고 그렇다면, # "5보다 작습니다" 라는 것을 출력할 수 있다. value = 3 if value > 5 : print("5보다 작습니다.") else : print("5보다 큽니다.") # 위 문장에서 if는 value 변수의 값이 5 미만 일 경우 "5보다 작습니다." 를 출력하고, # 그렇지 않다면 "5보다 큽니다."를 출력하도록 하는..
# 함수는 한 작업의 묶음이다. 실생활의 예를 든다면 함수는 장보기 쯤으로 표현할 수 있다. # 마트에서 장볼 물건들을 골라 계산대에서 캐셔에게 물건들을 전달하고, 캐셔는 물건들의 # 총 금액을 말하고 지불하기를 요구한다. 그리고 물건들의 금액을 지불하고 마트를 나선다. # 장을 보는 것은 1. 물건을 고른다. 2. 계산한다. 라는 작은 단위의 작업을 하나로 묶어 놓은 것이다. # 파이썬의 함수도 마찬가지로 작은 단위의 작업을 하나로 묶어 놓은 것을 말한다. # 파이썬의 함수는 아래와 같은 형태로 구성된다. 여기서 는 생략가능한 것을 말한다. # def (): # # # 안녕하세요 라는 문장을 출력하는 함수를 만들어보자. def say_hello(): print("안녕하세요") say_hello() # ..
# bool 은 조건에 대한 참과 거짓을 나타낸다. # True, False라는 값을 가지며, 대소문자를 가린다. is_true = True is_false = False print(is_true, is_false) # bool은 주로 비교연산과 논리연산에 의해 결과가 도출된다. # 비교 연산자는 크다, 작다, 같다, 크거나 같다, 작거나 같다, 다르다 가 있다. num_1 = 10 num_2 = 20 # 크다의 경우 ">"로 표현한다. is_valid_answer = num_1 > num_2 print("num_1 > num_2 : ", is_valid_answer) # 작다의 경우 "="로 표현한다. is_valid_answer = num_1 >= num_2 print("num_1 >= num_2 :..
# 파이썬에서 원시값을 가지는 일반 변수를 제외한 나머지 객체들은 모두 메모리를 공유한다. # 원시값을 가지는 일반 변수 a = 10 b = a print(a, b) a = 20 print(a, b) # 메모리를 가지는 객체 instance list_a = [1, 2, 3] list_b = list_a # 메모리 공유 print(list_a, list_b) list_a[0] = 9 # 메모리의 원소값 변경 print(list_a, list_b) # 객체의 메모리를 재할당 할 경우 메모리를 복사되지 않는다. list_c = [1, 2, 3] list_d = list_c print(list_c, list_d) list_c = [4, 5, 6] print(list_c, list_d) # 복사에는 얕은 복사(S..
# list, set, dict는 복합적으로 사용할수 있다. # dict가 list를 가지거나, 반대로 list가 dict를 가질 수도 있다. # 당연하겠지만, set도 가질 수 있고, set 내에 set을 포함한 list, dict도 가질 수 있다. person = { "age": 40, "job": ["Developer", "Proffessor", "Manager"], "language": ("Java", "Python", "Node.js", "React", "Angular")} print(person)
# dict는 Key, Value가 쌍으로 구성되어 있음. # Java의 Map과 유사하다. dict_a = {"a": 1, "b": 3, "c": 5} print(dict_a) # 아래 dict_b 는 위 dict_a 와 동일한 값을 가진다. dict_b = dict(a=1, b=3, c=5) print(dict_b) # dict에서 데이터를 가져올 때에는 dict[키] 를 사용한다. # dict는 배열이나 리스트처럼 인덱스를 가지지 않기 때문에, 인덱스를 사용할 수 없다. print("dict_a[\"a\"] : ", str(dict_a["a"])) print("dict_a[\"b\"] : ", str(dict_a["b"])) print("dict_a[\"c\"] : ", str(dict_a["c"]..
# tuple은 읽기전용 리스트로 이해하면 편하다. # list에 비해 함수는 적지만, 속도는 매우 빠르다. (읽기전용이라서) tuple_1 = (1, 2, 3) print(tuple_1) # tuple은 Undestructor를 통해 각각의 값을 개별 변수에 할당할 수 있다. v1, v2, v3 = tuple_1 print(v1, v2, v3) # Undestructor의 유용한 예 # 값 변경 values = ("A", "B") print(values) # (value_1, value_2) = values 이 코드는 아래 코드와 동일하다. value_1, value_2 = values values = (value_2, value_1) print(values) # 혹은 아래처럼 할 수 있다. num_1..
set_a = {1, 2, 3} set_b = {3, 4, 5} print(set_a) print(set_b) # set 데이터 구조는 중복을 허용하지 않는다. # 아래와 같은 데이터에서 두 번째 1(1번 인덱스)은 무시한다. set_duplicate = {1, 1, 2, 3} print(set_duplicate) # set 데이터 구조는 수학에서의 집합과 성격이 동일하다. # 합,교,차집합이 지원된다. # 합집합 print("합집합") union_set = set_a.union(set_b) print(set_a) print(set_b) print(union_set) print("교집합") intersection_set = set_b.intersection(set_a) print(set_a) print(..
# list는 값의 나열이다. 순서가 존재하며, 여러 종류의 값을 담을 수 있다. # 또한 문자열과 마찬가지로 0 부터 시작하는 인덱스가 존재하며, 슬라이싱도 가능하다. # 리스트 타입의 변수는 대괄호([])를 이용해 만들 수 있다. # 대괄호([])를 이용해 colors 리스트 변수를 만들었다. colors = ['red', 'green', 'gold'] print(colors) # 리스트에 값을 추가하려면 list변수.append(값) 을 사용한다. # list 변수에 .append를 사용하면 리스트 변수의 가장 끝 인덱스에 값이 추가된다. colors.append("blue") print(colors) # 만약, 가장 끝 인덱스가 아닌 처음이나 중간에 값을 넣으려면, insert(index, 값)을..
# 파이썬의 자료형 # 파이썬이 포함할 수 있는 수치형 ==> int, long, float, complex # 일반적인 숫자(10진수)는 int 로 취급한다. year = 2019 month = 1 print(year, month) # 2, 8, 16 진수는 특별한 리터럴이 존재한다. # 2진수 ==> 숫자 앞에 0b를 붙인다. binary_number = 0b11 print("2진수 11 : ", binary_number) # 8진수 ==> 숫자 앞에 0o를 붙인다. octa_number = 0o111 print("8 진수 111 : ", octa_number) # 16진수 ==> 숫자 앞에 0x를 붙인다. hexa_number = 0xffffff print("16 진수 ffffff : ", hexa..
print("hello world") # 아래 코드가 사용되는 경우는 추후 모듈로 사용될 경우에 실행 할 것이냐 말 것이냐를 고려한 코드 # 이 코드가 메인으로 실행되었을 때만 실행된다. 1번 라인의 경우 모든 경우에서 실행된다. if __name__ == "__main__": print("Hello World from __main__")
# 파이썬의 변수에 문자열을 저장하는 방법은 두 가지가 존재한다. # 홑따옴표(') 혹은 쌍따옴표(") # 둘 중 아무거나 하나를 사용할 수 있다. print("string") print('string') # 아래와 같은 표현도 가능하다. print("Hello 'world!'") print('Hello "World!"') # 홑따옴표나 쌍따옴표는 one line 만 작성할 수 있다. 만약 문자열에 들여쓰기나 개행이 필요할 경우 # """ Text """ 혹은 ''' Text '''를 사용할 수 있다. print(""" 영원에 살고 순간에 살아라. 영원히 살 것처럼 일하고 금방 죽을 것처럼 사람들을 대하라. - 리히텐베르크 """ "Hello!") # 혹은 아래와 같은 Escape Strings를 이용할..
# 파이썬의 연산자는 다른 언어와 동일하지만, 몇 가지 다른 것이 있다. # 다른 언어에서는 존재하지 않는 거듭 제곱(**)과 실수 나누기(/)와 정수 나누기 (//)가 존재 한다. pi = 3.14 r = 2 circle_area = pi * ( r ** 2 ) print(circle_area) print("실수 나누기") print( 10 / 2 ) print("정수 나누기") print( 10 // 2 )
# 파이썬에서 변수명은 문자, 숫차, 밑줄을 포함할 수 있다. 단, 숫자로 시작할 수 없다. # 변수명은 word_word_word 식으로 작성한다. Camel Case가 아니니 주의하자. # 파이썬은 인터프리터 언어이기 때문에 변수의 선언에 타입을 지정하지 않는다. # 인터프리터 언어의 특징인 Runtime 실행환경에서 변수의 타입을 추론하여 실행시킨다. # 아래 두 변수는 이름은 같지만, 대소문자가 구분되어 있기 때문에 완전히 다른 변수로 취급된다. friend = 1 Friend = 10 print(friend) print(Friend) # 아래 (a, b)는 Tuple자료형이다. (a, b) = (1, 2) # 아래 [c, d]는 List 자료형이다. [c, d] = [3, 4] # 여러 변수에 ..