목록분류 전체보기 (33)
Code IT
최근 어떤 분야에 흥미가 생겨 관련 강의 영상을 결제해 보는 중이다. 거의 10년간 Java만 사용해오다가 C#을 보는 중이다. 뭐 문법자체는 똑같고 사상도 똑같아서 안봐도 되지만, 그래도 결제를 했으니 보는 중이다. 수 차례의 강의 영상이 지나고 분기처리를 다루는 영상으로 왔는데 if 설명을 줄기차게 하고 switch를 다루는 내용이다. 서점에 판매하는 프로그래밍 책이나 인터넷 블로그등에 있는 글들을 보면, 이렇게 설명한다. "if는 조건이 많아지면, 복잡해져요. 그것을 깔끔하게 만들어주는게 switch 에요." 혹자는 위 말이 "반은 맞고 반은 틀렸다" 라고 말할 수 있다. 다만, 생각을 한번 해보자. Java나 C# 같은 상위레벨의 언어를 만든 사람들이 "if는 복잡하니까 switch 만 남겨두자"..
# 객체지향 프로그래밍에서 절대 빼놓을 수 없는 것, 그리고 가장 어려운 것. 그것은 상속이다. # 사실, 상속을 이해할 때 우리가 흔히 알고있는 그 "상속"을 떠올리면 이해하기가 어렵다. # 부모가 자식에게 물려주는 것을 이해하는 것은 어렵지 않다. # 그러나 반대로 자식이 부모에게 무언가를 얻어가는 것은 이해하기가 쉽지 않다. # "상속"이란 재산권자체를 물려받는 것이기에 역순으로 이해하기가 쉽지 않다는 것이다. # 불행히도, 상속에서는 역순으로 호출해야만 하는 상황이 적지 않다. # 그래서 본 파트는 상속이 아니라 "확장"을 이해시켜주고 싶다. # 확장은 한 클래스가 본래 가지고 있던 멤버변수나 메서드에 무엇인가를 더 추가하거나 # 본래가진 것을 수정하는 것을 말한다. # 집에서 발코니 확장이나 거..
# 클래스의 메서드는 두 가지 형태로 나뉜다. # 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] # 여러 변수에 ..
사용자에게 이벤트의 결과 혹은 정보를 보여주기 위해 화면 우측 상단에 띄우는 툴팁입니다. 첨부파일을 받으셔서 사용 방법을 참고해주세요. 라이센스 걱정하지 마시고 자유롭게 수정 및 사용하시면 됩니다. 단, 수정 후 재배포시 여기 블로그의 출처만 작성해주시면 감사하겠습니다. 감사합니다.
img 에서는 alt, p 에서는 title 로 사용할 수 있는 툴팁 기능을 좀 더 개선해서 만든 툴팁입니다. 첨부파일을 받으셔서 사용 방법을 참고해주세요. 라이센스 걱정하지 마시고 자유롭게 수정 및 사용하시면 됩니다. 단, 수정 후 재배포시 여기 블로그의 출처만 작성해주시면 감사하겠습니다. 감사합니다.
웹 프로그래밍을 하다보면, Alert, Confirm을 종종 쓰게 되는데 이 디자인이 투박하기 짝이없어서 그나마 조금 나은, DIV 기반의 Dialog를 만들어 배포합니다. (안타깝게도 IE는 전부 지원하지 않습니다.) 라이센스 걱정하지 마시고 자유롭게 수정 및 사용하시면 됩니다. 단, 수정 후 재배포시 여기 블로그의 출처만 작성해주시면 감사하겠습니다. 감사합니다.
이전 포스팅에서 Git Repository 까지 만들었으니, 이번에는 Git Repository 를 Local 로 Clone 해서 작업을 해보는 포스팅을 하도록 하겠습니다. Subversion과 Git 간의 가장 결정적인 차이는 바로 소스를 내려받고 작업한 뒤 소스를 다시 Commit 하는 과정입니다. 이 과정이 매우 달라요. 그래서 Subversion 만 사용해보신 분들이라면 Git 이 매우 생소하실 수 있습니다. 저도 처음엔 생소했었고, 잘 와닿지 않더라구요. ▲ Subversion 의 협업 방식 ▲ Git의 협업방식 위 그림에서 처럼 둘의 협업방식의 차이가 있습니다. 또 Subversion이 가지지 못한 장점도 있죠. 가령, 하나의 모듈을 개발할 때마다 한번씩 Commit을 했다고 가정한다면, Su..
GitHub 에서 소스를 공개할 "저장소" 를 생성합니다. 먼저 화면 우측 상단의 "+" 아이콘을 클릭 한 후 New Repository를 클릭합니다. 아래 화면이 나타나면 Repository name, Description 을 작성합니다. Repository name 은 프로젝트의 이름입니다. 전 helloWorld 로 작성했습니다. Description 은 프로젝트의 설명인데요. 필수 값이 아니라서 작성하지 않아도 등록이 가능합니다. 그 다음은 프로젝트 소스를 공개할 것인지 공개하지 않을 것인지 선택하는데요. Public 은 공개할 때 선택하고 Private 은 공개하지 않을 때 선택합니다. Public은 무료지만 Private은 유료입니다. 그 다음 Initialize this repository ..
Git 은 저장소에 대한 접근 인증을 SSH Key로 합니다. 이 키를 생성하고 GitHub 에 등록을 해주어야 하지요. 먼저 SSH Key 를 생성합니다. 이전에 설치한 Git Bash 를 실행합니다. 아래 명령어를 작성해서 그림처럼 진행합니다. $ ssh-keygen -t rsa -C 'your_email@example.com' 이제 다음은 SSH Key를 등록할 차례입니다. 우선 Git Bash에서 아래 명령어를 작성해 공개키의 내용을 복사해주세요.$ cat ~/.ssh/id_rsa.pub 공개키의 내용복사는 아래 그림을 참고하세요 위 그림처럼 하면 복사가 됩니다. 복사 한 후 메모장에 붙혀넣기 하고, 줄바꿈을 모두 지워 한줄로 만들어 주세요. 이제 GitHub 으로 접속합니다. Settings로 ..