본문 바로가기

Software95

[파이썬의 기본] 클래스 메소드(Class Method) & 스태틱 메소드(Static Method) 앞서 클래스를 정의하고 사용하는 기본적인 방법에 대해서 알아봤었는데요. ([파이썬의 기본] 클래스(Class)) 이런 기본적인 메소드의 사용방법을 인스턴스 메소드(Instance Method)라고 합니다. 메소드가 클래스의 인스턴스로 호출이 되고 첫번째 파라미터인 "self"로 인스턴스 자기자신이 자동으로 전달되는 방식입니다. 이 번에는 그외 사용방법인 클래스 메소드(Class Method), 스태틱 메소드(Static Method)에 대해서 정리하겠습니다. Class Methods 클래스 메소드는 클래스에서 호출이되고 인스턴스 메소드가 첫번째 파라미터로 자신의 인스턴스를 "self"로 전달하는 것과는 달리 "cls"라는 파라미터로 자신의 클래스를 전달합니다. 용도는 클래스 생성자에 다른 형태의 파라미터.. 2019. 7. 8.
[파이썬의 기본] 마술 함수(?) 매직 메소드 (Magic Methods ) Magic Methods 매직 메소드는 함수이름 앞과 뒤에 언더스코어(_) 두개가 연속으로 붙어있는 함수를 말합니다. 그러니까 “__name__” 이런식의 형태인데 앞에서 클래스를 예기하면서 컨스트럭터 매소드인 “__init__” 이 그런형태를 취하고 있었습니다. 이런 형태의 마법함수는 파이썬에서 그 이름을 미리 지정해 둔 사저예약함수들도 그 기능이 정해져 있습니다. 사용법 이런 마법함수는 어떤때 사용할까요? 먼저 가장 일반적인 용도는 오퍼레이터의 오버로딩용입니다. 오버로딩이라는 단어에 익숙하신 분들은 그 의미를 금새 알아차리실 수 있을텐데요. 저는 아직 초보라 예제를 보고나서 이해를 했습니다. 얼른 예제를 보겠습니다. 예제: class coordinate: def __init__(self, x, y):.. 2019. 6. 24.
[파이썬의 기본] 파일에서 읽고 쓰기 파일 읽기 파일내용을 읽어오고 파일에 어떤 내용을 저장하기위해서는 우선 파일을 열어주는 과정이 필요합니다. 그리고 사용이 끝나면 파일을 닫아주는 절차까지 마쳐야 합니다. 그렇지 않으면 다른 프로그램에서 그 파일을 접근해서 수정하거나 하지 못하거든요. 바로 코드를 보겠습니다. 예제: f = open("file.txt", "r") file = f.read() print(file) f.close() 이 예제는 “file.txt”에 포함된 모든내용을 화면에 출력해줍니다. 첫줄에서 open()이라는 함수를 이용해서 파일을 읽기전용(r)으로 연다음 “f”이라는 객체로 만들어 주었습니다. 그리고 read()함수를 사용해서 파일 내용을 읽어왔습니다. 파일을 열때 open()함수의 두번쩨 인자로 "r" 옵션이 사용되었는.. 2019. 5. 24.
[파이썬의 기본] 클래스의 상속 클래스의 상속 상속은 클래스들 간에 기능을 공유하는데 사용되는 방법입니다. 예를 들어, 조종사(Pilot)와 의사(Doctor)라는 직업을 가진 사람을 클래스로 표현한다고 생각해봅시다. 조종사는 날아다니고(fly) 의사는 치료(cure)를 하는 전혀 다른 직업의 사람이지만 두 사람 모두 이름이나 나이와 같은 일반적인 속성도 가지고있는 사람이라는 공통점이 있습니다. 이런 경우를 클래스로 표현한다고 하면 다음과 같이 표현할 수 있습니다. 예제: class Person: def __init__(self, name, age): self.name = name self.color = age class Pilot(Person): def job(self): print("I can fly") class Doctor(Pe.. 2019. 5. 24.
[파이썬의 기본] 클래스(Class) 클래스는 객체지향 언어의 대표적 특징이라고들 많이 얘기하는데요. 당연히 파이썬에서도 클래스를 원하는 객체지향프로그램 언어입니다. class c++과 마찬가지로 파이썬에서도 class란 키워드를 사용해서 클래스를 정의하고 클래스 내부에는 매소드라고 부르는 함수로 구성됩니다. 클래스의 형태는 다음과 같습니다. 예제: class chair: def __init__(self, color, legs): self.color = color self.legs = legs table = chair("red", 4) desk = chair("white", 4) print(table.color) 결과: 이 예제는“chair”라는 이름의 클래스가 “color”, “legs”라는 두개 속성을 가지고 있는것으로 정의되었고, “t.. 2019. 5. 22.
[PyQt 파이썬 GUI프로그래밍] Layout으로 창크기에 따라 창요소 크기도 같이 조절되도록 하기 GUI프로그래밍을 도와주는 PyQt에서 창크기에 따라 내부 요소들의 크기들이 자동으로 변경될 수 있도록 하는 방법을 알아보겠습니다. PyQt의 Qt designer를 이용해서 다음과 같은 형태의 프로그램 UI를 디자인했습니다. 키워드를 맨위에 있는 박스에 입력하고 검색버튼을 누르면 아래에 결과가 나타나는 그런 동작을 수행할 UI되겠습니다. 위젯 구성은 다음과 같습니다. 메인 윈도우에 Grid Layout을 먼저 깔고 lineEdit, pushButton, tableWidget을 베치하였습니다. Grid Layout은 내부에 웨젯 배치를 손쉽게 해주기 위해서 그리드형태로 위젯의 위치에 대한 가이드를 잡아주는 역할을 합니다. 그래서 필요한 위젯을 드레그 해서 Grid Layout 위로 가져가면 상하좌우에 하.. 2019. 5. 21.
[파이썬의 기본] 예외처리 (try, except, finally, raise) try, except 명령 예외는 어떤 예기치 못한 문제가 발생했을 때 발생하는 에러 메시지 같은 겁니다. 이런 예외가 발생하면 파이썬 프로그램은 중단됩니다. 이렇게 원치 않는 프로그램 중단을 방지하기 위해서는 적절한 예외처리가 필요한데 “try”, “except”가 바로 그때 사용하는 명령어입니다. 예제: try: var1 = 9 var2 = 0 print (var1 / var2) print("complete") except ZeroDivisionError: print("I can’t divide by ZERO") 위 예제는 크게 “tyr” 블럭과 “except” 블럭으로 나누어져 있습니다. “try” 블럭에서 변수를 2개 생성해서 각각 9와 0을 할당하고 이를 나눈 결과값을 출력하고 곧이어 “comp.. 2019. 4. 24.
[파이썬의 기본] 함수에 사용되는 특별한 기능 - 맵 & 필터(map & filter) 맵, 필터 함수는 리스트와 같은 반복 구조형을 더 다양하게 사용할 수 있도록 도와주는 파이썬 내장함수입니다. 맵(map) 맵은 함수와 이터러블(iterable)을 매개변수로 받고 함수에 이터러블내 맴버 각각을 차례대로 적용한 새로운 이터러블을 반환하는 기능을 수행합니다. 예제: def add_five(x): return x + 5 nums = [11, 22, 33, 44, 55] result = list(map(add_five, nums)) print(result) 결과: 맵 함수가 하는 기능은 람다함수를 이용해서 더 간단히 표현할 수도 있습니다. (람다에 대한 내용은 지난포스팅([파이썬의 기본] 함수에 사용되는 특별한 기능 - 람다(lambda) 함수)에서 확인해주세요.) nums = [11, 22, .. 2019. 4. 24.
[파이썬의 기본] 함수에 사용되는 특별한 기능 - 제너레이터(Generator) 제너레이터(Generator) 제너레이터는 리스트, 튜플과 같은 반복되는 구조의 형태인 이터러블(iterable)의 한 종류인데 함수와 “yield”구문을 사용하여 생성할 수 있습니다. 리스트와는 달리 제너레이터는 임의의 인덱싱이 불가하지만 for 루프를 통해서 반복연산은 가능합니다. 예제: def countdown(): for i in range(3): yield i print(list(countdown())) 결과: “yield” 키워드는 함수의 “return”키워드 대신 사용되는데, 지역변수인 결과값을 소멸시키지 않고 함수를 호출한 caller에게 반환합니다. 위의 예제에서 처럼 유한한 요소를 가진 제너레이터는 “list”함수를 이용해서 리스트형으로 변환도 가능합니다. 끝! 2019. 4. 24.
[파이썬의 기본] 함수에 사용되는 특별한 기능 - 람다(lambda) 함수 람다(Lambdas) 함수 람다함수는 개념적으로는 익명의 함수로 사용즉시 버리는 일시적인 함수이다(?)라고 하는데요. 무슨소리인지 잘 이해가 안가지만 기억할 만한것은 익명의 함수라서 함수 이름조차 없이 사용할 수 있고 그리고 일시적으로 사용하는 함수라서 런타임에 사용가능한 장점이 있는 그런 함수 정도로 개념을 잡고 시작하면 되지 않을까 싶습니다. 이것도 뭔말인가 싶네요 ㅎ “def” 키워드를 사용해서 만드는 일반적인 함수의 생성은 보통 자동적으로 변수에 할당이 됩니다. 정수나 문자열 같이 변수에 할당하는 절차없이 생성할 수 있는 객체들과 다른점인데 “lambda”구문을 이용하면 함수에서도 똑같이 사용할 수 있고 이런 방식을 익명함수라고 한다고 합니다. 이런 방법은 간단한 함수를 다른 함수의 매개변수로 전.. 2019. 4. 24.
파이썬(Python) GUI 프로그래밍의 기본 (PyQt5 Dialog & Main Window 사용) 지난 포스팅에서 Python GUI프로그래밍의 묻지마 튜토리얼을 다룬적 있었습니다. PyQt5로 Python GUI 프로그래밍 시작하기 - Hello World! 출력 Hello world!, 모든 언어의 시작점이죠 지난글에서 준비해둔 파이썬 GUI 개발환경에서 Hello World 출력하기를 실습해 보겠습니다. 새 파이썬 프로젝트 생성 VS를 열어서 새로운 프로젝트를 생성합니다. 파이썬.. kwonkyo.tistory.com 그때는 저도 파이썬의 문법을 하나도 몰랐고 개념도 없었기 때문에 그냥 그런가 보다 했었는데요. 조금 공부를 해보니 코드의 의미가 보이기 시작해서 더 늦기전에 Pyqt5를 사용한 윈도우즈 프로그램의 소스구성에 대한 기본적인 내용을 다루어 보려 합니다. (이미 늦었고 아직도 이해안되는.. 2019. 4. 19.
[파이썬의 기본] 튜플(Tuples) 튜플(Tuples) 파이썬의 또다른 구조체 튜플(Tuples)에 대해서 알아보겠습니다. 튜플은 리스트와 유사한데 몇가지 차이점이 있습니다. 그중 하나가 바로 생성된 이후에는 변경이 안된다는 점입니다. 리스트는 요소를 변경하거나 추가나 삭제가 가능하지만 튜플은 불가능합니다. 그리고 리스트는 대괄호( [, ] )로 표시하지만 튜플은 괄호 ( (, ) )로 표시를 하거나 괄호없이 쉼표(,)로 분리된 요소들로만 표현할 수도 있습니다. 예제: >>> words=(“spam”, “eggs”, “sausages”) >>> print(words[0]) ‘spam’ >>> words=“spam”, “eggs”, “sausages” >>> print(words[0]) ‘spam’ >>> 튜플이 변경은 되지않지만 속도가 리.. 2019. 3. 21.
[파이썬의 기본] 사전(Dictionaries) 사전(Dictionaries) 파이썬의 구조체 사전(Dictionaries)에 대해서 알아봅시다. 사전은 임의의 키값을 데이터와 매핑시킬 때 사용하는 구조체입니다. 리스트와 특징을 비교해 보자면, 리스트는 키값과 데이터가 매칭되어 있는 구조는 동일한데 키값이 0부터 차례대로 1씩증가하는 정수로만 이루어져 있는 것이고 사전은 이 키값이 순차적인 정수값이 아니라 사용자가 임의로 정할수 있다는 것입니다. 사전을 생성하기 위해서는 중괄호( {, } )를 사용하고 콜론( : )으로 키값과 데이터를 연결시켜줍니다. 예제: >>> dic={“apple”:”사과”, ”boy”:”꼬마”} >>> print(dic[“boy”]) 꼬마 >>> 그리고 리스트와 동일한 방법으로 사전의 요소는 새로운 값으로 대체할 수 있습니다... 2019. 3. 21.
[파이썬의 기본] 레인지(range) 레인지(range) 레인지는 연속된 숫자로 이루어진 객체를 만드는 함수 입니다. 다음과 같이 range라는 키워드 다음에 매개변수로 총 3개까지 입력을 받는데 첫번째와 세번째가 생략가능한 형태로 사용될 수 있습니다. 구문: range(param1, param2, param3) param1: 레인지의 시작범위를 지정하는 매개변수 (0일때는 생략가능) param2: 레인지의 마지막 범위를 지정하는 매개변수 (지정된 숫자 바로앞까지 레인지를 생성) param3: 레인지의 간격을 지정하는 매개변수 (생략하면 기본값 1로 처리) 예제: >>>print(list(range(0,3))) [0, 1, 2] >>>print(list(range(3))) [0, 1, 2] >>>print(list(range(3,10,2)).. 2019. 3. 21.
C++ 동적 메모리 (Dynamic Memory) 할당 필요성 동적할당이 왜 필요할까요? 동적메모리 할당은입력갑에 의존적인 프로그램을 만들어야 할 경우 유용하게 쓰일 수 있습니다. 예를들어 사진이나 영상 등 어떤 파일을 읽어야 하는데 읽기 전에는 그 크기를 모르기 때문에 메모리에 얼마나 공간이 필요한지 알수가 없는데 이럴때는 동적할당이 꼭 필요합니다. 다음과 같은 코드를 컴파일 해보면 컴파일 에러가 납니다. int i = 5; int arr[i]; i라는 변수에 5가 할당되니까 정수형 배열 “arr[i]”은 정수형 x 5개 만큼의 크기가 필요하다는 것이 자명한데 왜 에러가 날까요? 이유는 컴파일시에 변수 i 가 정수형이라는 것만 정해지지 여기에 값 5가 들어가는건 프로그램이 실행될 단계에서 일어나는 일이라고 합니다. 그래서 컴파일러는 “i”에 뭐가 들어가있는.. 2019. 2. 28.