Language 132

Webfont 의 적용 (Google Fonts)

웹페이지를 작성하다보면 자신이 원하는 형태의 폰트로 글자가 표시되기를 원할 때가 있다. 이 때 좀 더 쉽게 원하는 폰트를 적용시키는 방법은 웹폰트(webfont)를 적용하는 것이다. https://fonts.google.com/ 구글에서는 위 사이트를 통해 다양한 폰트를 제공하고 있고, 쉽게 적용할 수 있도록 가이드를 하고 있다. 크게 원하는 폰트를 고르고, 그 폰트를 자신의 사이트에 적용하는 것이 큰 골자이다. 사이트에 접속하면 2018년 10월 11일 기준으로 900여개의 font를 제공하고 있다. 화면 오른쪽에는 Languages 를 선택하여 해당 언어에 맞는 폰트를 필터링해서 보여준다. 아래 화면은 언어를 Korean으로 필터를 했을 때의 결과로 보여지는 한글 폰트들이다. 폰트를 보면 Senten..

Language/HTML 2018.10.11

Kotlin - Class와 Inheritance(상속)

ClassKotlin은 Java와 마찬가지로 class 를 가지고 있고, class keyword를 통해 선언한다. class Study { ... } class는 class name, header, body로 구성되어 있고, 중괄호 {} 로 둘러 쌓여있다. 단, 만약 optional인 header와 body 중 body가 없을 경우 중괄호 {} 를 다음과 같이 생략해도 된다. class Study 생성자(Constructors) Kotlin의 class는 primary constructor, secondary constructor를 가질 수 있고, primary constructor는 최대 하나, secondary constructor는 복수개로 가질 수 있다. Primary constructor 먼저..

Language/Kotlin 2018.07.25

Kotlin - for/while Loops

for Loops for loop은 iterator를 제공하는 매개체를 통해 반복적으로 무엇인가를 수행할 때 사용된다. C#의 foreach loop와 동일하다. 간단한 사용의 예를 다음과 같다. for (item in collection) print(item) for (item: Int in ints) { // ... } 앞서 말했듯이 일반적으로 iterator() funtion을 member/extension function으로 가지고 있고, next(), hasNext()를 지원하는 매개체를 통해서 반복하게 된다. 반면 iterator가 없어도 사용 가능한 경우가 있는데, range나 array/list를 사용할 때 가능하다. 숫자 범위내에서 반복할 때는 range expression을 아래와 같이..

Language/Kotlin 2018.07.24

Kotlin - when expression

when은 C언어에서의 switch와 완전히 동일하지는 않지만 상당히 유사하다. 기본적인 해당 구문의 사용 예는 다음과 같다. when (x) { 1 -> print("x == 1") 2 -> print("x == 2") else -> { print("x is neither 1 nor 2") } } when 구문에서는 condition이 맞는 branch를 찾을 때 까지 순차적으로 확인한다. 만약 조건을 만족하는 branch가 없을 경우 else branch를 수행하게 된다. 각 조건이 하나하나씩 표현될 수도 있지만 아래와 같이 여러 종류의 조건이 comma(,)로 구분되어 표현될 수도 있다. when (x) { 0, 1 -> print("x == 0 or x == 1") else -> print("ot..

Language/Kotlin 2018.07.23

Kotlin - Kotlin on Android (Android Studio for Windows)

Kotlin에 관심을 가지게 된 이유는 Android를 위한 App build가 가능하다는 점 때문이었다. Kotlin을 개발한 IntelliJ에서 Android Studio 또한 개발하고 있다. 이 때문인지 Android Studio 상에서 Kotlin을 통해 쉽게 android app build가 가능하다. 먼저 Android Studio 3.0 이상에서 기본적으로 지원이 되고, 그 이하 버전에서는 별도로 kotlin plugin 을 설치해 주어야 한다고 한다. The Kotlin plugin is bundled with Android Studio starting from version 3.0. If you use an earlier version, you'll need to install the K..

Language/Kotlin 2018.07.16

Kotlin - Packages

Kotlin은 Java와 마찬가지로 Package 개념을 사용한다. Java에서 그러하듯이 Kotlin에서도 source 파일은 package 선언으로 시작한다. 이에 따라 source 파일 내 class나 function들과 같은 contents들은 package 를 통해 표현이 가능한데, 예를 들어 아래의 baz() 는 foo.bar.baz로, Goo 는 foo.bar.Goo 로 표현이 가능하다. package foo.bar fun baz() {} class Goo {} Package가 명시되지 않았다면 해당 파일의 content들은 이름이 없는 "default" package에 포함되었다고 보면 된다. Default Imports많은 수의 package들이 기본으로 모든 kotlin 파일에 impo..

Language/Kotlin 2018.07.16

Kotlin - Kotlin on JVM (the IntelliJ IDEA Community Edition for Windows)

Kotlin을 제일 쉽게 접할 수 있는 방법 중 하나로 Windows 상에서 IntelliJ IDEA Community Edition을 깔아 코딩해 보는 방법이 있다. 1) The IntelliJ IDEA Community Edition download page 접속. http://www.jetbrains.com/idea/download/index.html 상기 주소로 접속해서 Windows, mmacOS, Linux 중 Windows (기본값)을 선택하고 Community version을 다운로드 받는다. Ultimate version이 있지만 개인 개발자가 사용하기에는 Community version도 부족함이 없다. 2) 다운로드 받은 ideaIC-2018.1.5.exe 설치 다운로드 받은 파일을 ..

Language/Kotlin 2018.07.12

Kotlin - Strings (문자열)

문자열은 String type으로 표현된다. 한번 할당된 문자열은 변하지 않는다. 문자열 내 문자들은 index를 통해 배열을 접근하듯이 접근 가능하다. 아래와 같이 하면 문자열 내 문자를 하나씩 반복 접근 가능하다. for (c in str) { println(c) } String concatenationstring concatenation 은 + operator로 할 수 있다. 문자열로 시작할 경우 다른 type의 값들도 concatenate 가능하다. val s = "abc" + 1 println(s + "def") String literalsKotlin은 두 종류의 string literals를 가지고 있다. escaped stringraw stringescaped string은 escaped c..

Language/Kotlin 2018.07.11

Kotlin - Arrays (배열)

배열은 get, set function과 size property를 가진 Array class로 표현된다. class Array private constructor() { val size: Int operator fun get(index: Int): T operator fun set(index: Int, value: T): Unit operator fun iterator(): Iterator // ... } 배열을 만들기 위해서는 다양한 방법이 있다. arrayOf()arrayOfNulls()Array constructor[] operation Java와는 다르게 Kotlin은 Array의 값이 한번 정해지면 변하지 않는다.

Language/Kotlin 2018.07.11

Kotlin - Characters (문자)

문자는 Char type으로 표현된다. fun check(c: Char) { if (c == 1) { // ERROR: incompatible types // ... } } Character literal은 따옴표로 표시한다. 'a' 특수 문자들은 여타 다른 언어들과 마찬가지로 backslash를 가지고 표현한다. \t, \b, \n, \r, \', \", \\, \$ 일반 ascii 가 아닌 여타 다른 character로 encode 하기 위해서 Unicode escape sequence syntax를 사용한다. character type을 Int type으로 변환 시킬 수 있는 경우도 있다. fun decimalDigitValue(c: Char): Int { if (c !in '0'..'9') thr..

Language/Kotlin 2018.07.10

Kotlin - Numbers (숫자)

Kotlin은 numbers를 다음과 같은 built-in type을 가지고 있다. Type Bit width RangeByte8-128 ~ 127Short16-32768 ~ 32767Int32-2147483648 ~ 2147483647Long64-9223372036854775808 ~ 9223372036854775807Float32 -Double64 - 일부 언어(e.g. C언어)에서는 chararacter 형이 숫자로 표현되기도 하지만 Kotlin에서 문자는 numbers가 아니다. 1) Byte bit width : 8range : -128 ~ 127 (8-bit signed two's complement integer) 일반적으로 memory 사용을 줄이기 위해 [-128, 127] 사이의 int..

Language/Kotlin 2018.07.10

Kotlin - 기본 자료형, 그리고 변수의 선언 및 할당

Kotlin에서는 변수들의 member function과 property를 호출할 수 있다는 점에서 변수들이 object로 되어 있다는 것을 알 수 있다. 일부 type의 경우 내부적으로는 primitive value로 관리될 지라도 사용자는 일반적인 class로 인지한다. (numbers, characters, booleans) Kotlin에서 일반적으로 사용되는 기본 변수 type은 다음과 같다. numberscharactersbooleansarraysstrings Kotlin에서 변수를 선언하고 값을 할당하는 방법은 2가지로 var과 val을 사용하는 방법이 있다. var과 val의 차이 val (Immutable reference) - val을 통해 선언된 변수는 한번 할당되면 수정이 불가능하다...

Language/Kotlin 2018.07.09

Kotlin - Kotlin 이 가지는 의미.

Android java api를 찾아볼 일이 생겨 android developers 에 오랜만에 접속하였다. Android Jetpack 이라는 메뉴가 보였다. Android app을 만들기 위해 Google이 새롭게 내놓은 library/tool의 모음이겠거니 생각이 들었다. Android Jetpack components are a collection of libraries that are individually adoptable and built to work together while taking advantage of Kotlin language features that make you more productive. 하지만 Android jetpack을 설명하는 문구 중에 Kotlin langu..

Language/Kotlin 2018.07.09

Python - package와 module의 차이

Python에 있어 module은 하나의 python 코드 파일을 의미한다. 파일 이름 자체가 module을 나타내는 이름이다. 반면 package는 module을 모아 놓은 directory 구조하고 할 수 있다. module 과 package 사용의 예> import ModuleName import PackageNamefrom PackageName import ModuleName import를 하게 되면 해당 ModuleName 혹은 PackageName 이 Loading 상태인지 확인 후 Loading이 되지 않은 상태라면 다음의 위치에서 존재를 확인한다. 1) sys.path 에 선언된 위치2) 현재 실행 위치 Ubuntu 14.04 python 2.7에서 sys.path를 확인해 보면 다음과 같..

Language/Python 2018.06.16

Python - datetime/time module, 현재 시간 출력 방법

datetime 혹은 time module 중 하나를 이용하여 현재 시간을 표시할 수 있다. 먼저 datetime 을 이용한 현재 시간 표현은 다음과 같다. import datetime now = datetime.datetime.now() print now 결과> $ python now_datetime.py 2018-06-05 10:30:06.986065 반면 time module을 이용하면 좀 더 세분화/정교화하여 표시할 수 있다. import time now = time.localtime() print "%04d/%02d/%02d %02d:%02d:%02d" % (now.tm_year, now.tm_mon, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec) 결과..

Language/Python 2018.06.16

Python - email package, raw email message 다루기

poplib 를 이용해 raw email message를 받아오더라도 MIME (Multipurpose Internet Mail Extensions, 전자 우편을 위한 인터넷 표준 포맷)이기 때문에 막상 출력해 보면 알아보기 힘든 문자열들로 표현되어 있다. 이에 따라 원하는 값을 추출하기 위해 추가적인 코드를 작성하여야 한다. MIME 형식의 raw email message를 parsing 하기 위해서는 python의 email package를 사용하면 된다. poplib의 M.retr()[1] 을 통해 구한 raw email string은 아래의 코드를 통해 하나의 string으로 표현이 가능하다. raw_email = b"\n".join(M.retr(mList+1)[1]) 이렇게 구해진 raw_ema..

Language/Python 2018.06.15

Python - poplib, POP3 를 통한 이메일 수신

이메일을 웹 Interface가 아닌 별도의 프로그램을 통해 수신하기 위해서는 POP3 혹은 IMAP 을 사용하여야 한다. 가볍게는 POP3가 많이 사용되고, 좀 더 구체적인 기능을 위해서는 IMAP을 사용하면 된다. python에서 POP3을 사용해 이메일 수신하는 방법 python2 : https://docs.python.org/2/library/poplib.html python3 : https://docs.python.org/3/library/poplib.html python2나 python3나 POP3를 위한 python library - poplib 를 가지고 있다. 간단하게 네이버 메일에서 POP3를 통해 이메일을 수신하는 코드를 살펴보자. import getpass, poplib M = po..

Language/Python 2018.06.15

Python - divmod(), 두 숫자를 나누어 몫과 나머지를 tuple로 반환하는 함수

divmod >>> divmod(x, y) 두 숫자를 인자로 전달 받아 첫번째 인자를 두번째 인자로 나눈 몫과 나머지를 tuple 형식으로 반환한다. __builtin__ module에 포함된 function 이다. argument x - 복소수(complex)가 아닌 숫자.y - 복소수(complex)가 아닌 숫자. return value 몫과 나머지를 tuple로 반환한다. example 모든 인자가 양의 정수일 경우) >>> divmod(4,2) (2, 0) >>> divmod(8,3) (2, 2) 인자 중 음의 정수가 있을 경우) >>> divmod(10,-3) (-4, -2) >>> divmod(-10,-3) (3, -1) >>> divmod(-10,3) (-4, 2) 인자 중 실수가 있을 경우..

Language/Python 2018.01.13

Python - callable(), 호출 가능한 object 여부를 판단하는 함수

callable >>> callable(object) 전달받은 object 인자가 호출 가능한지 여부를 판단한다. __builtin__ module에 포함된 function 이다. argument object - 호출 가능 여부를 판단할 object 인자 하나를 넘겨준다. return value 인자로 전달받은 object가 호출 가능한 object일 경우 True, 아닐 경우 False를 반환한다. example 호출 불가능한 변수형 object 와 호출 가능한 함수형 object 의 예) >>> sample = 1 >>> callable(sample) False >>> def funcSample(): ... print('sample') ... >>> sample = funcSample >>> call..

Language/Python 2018.01.12

Python - dir(), object의 속성(attribute) 목록을 보여주는 함수

dir >>> dir([object]) 전달받은 object 인자의 속성 목록(attribute list)를 보여준다. 만약 아무런 인자가 전달되지 않았다면 현재 local scope내 사용 가능한 모듈(module) 혹은 object 목록이 표시된다. __builtin__ module에 포함된 function 이다. argument object (optional) - dir() 함수는 object가 가지는 모든 속성(attribute)들을 반환한다. return value 인자로 전달받은 object의 유효한 속성들의 목록을 반환한다. example dir() 함수 사용시 argument가 없는 경우) >>> dir() ['__builtins__', '__doc__', '__name__', '__pac..

Language/Python 2018.01.12

Python - int(), 정수(integer)를 반환하는 클래스

int >>> int(x=0)>>> int(x, base=10) 전달한 숫자 혹은 문자열, x를 기반으로 정수 값을 돌려준다.만약 인자가 없다면 기본 값 0을 돌려준다. 인자가 숫자일 경우, plain integer, long integer, floating point number가 입력될 수 있다. plain integer의 경우 int 형으로 반환하고, long integer의 경우 long 형으로 반환한다. (참고> plain integer와 long integer 범위)반면 floating point number의 경우는 소수점 이하는 버리고 int 혹은 long 형으로 반환한다. 인자가 앞서 언급한 숫자형이 아니거나 base(진법) 인자가 같이 넘어올 경우 문자열이나 unicode object가..

Language/Python 2018.01.04

Python - slice(), slicing하기 원하는 index를 정의하는 클래스

slice >>> slice(stop) >>> slice(start, stop[, step]) 잘라내기 원하는 index 들을 정의하는 클래스이다. slice object에 대해 한마디로 표현하기가 쉽지 않다. 원활한 이해를 위해 예를 들면 다음과 같다. 먼저, sample = "abcdefghijklmn" 이라는 문자열이 있다고 하자. 이 중 sample[2] 부터 sample[5] 전 까지의 문자열만 빼내고 싶다면 어떻게 하면 될까? (즉, index 2부터 4까지 표시한다.) >>> sample = "abcdefghijklmn" >>> sample[2:5] 'cde' 위와 같이 colon (:) 을 이용하여 추출해 내면 된다. [Slice Notation ":" 을 이용한 나누기] >>> a = "..

Language/Python 2018.01.04

Python - xrange(), 순차적인 숫자를 만들 수 있는 generator를 생성하는 클래스

xrange >>> xrange(stop) >>> xrange(start, stop[, step]) 전달받은 인자를 바탕으로 순차적인 숫자를 만들 수 있는 generator를 생성한다. 기본적인 사용법은 [range 함수] 와 동일하다. 하지만 range 함수는 미리 숫자를 생성하여 list 형태로 메모리에 미리 올려 놓는 반면 xrange 함수는 실제로 사용을 요청받았을 때 숫자를 생성한다. range 함수와는 다르게 불필요하게 메모리에 생성하지 않는다는 장점이 있다. xrange 함수가 리턴하는 형태는 xrange type이다. xrange type은 immutable sequence 로 일반적으로 반복문에 사용된다. xrange type의 장점은 range와는 상관없이 xrange object 자체..

Language/Python 2018.01.03

Python - range(), 순차적인 숫자를 가지는 list를 생성하는 함수

range >>> range(stop) >>> range(start, stop[, step]) 전달받은 인자를 바탕으로 순차적인 숫자를 가지는 list를 생성한다. 인자는 plain integer형 이어야 한다. 인자 중 stop은 반드시 입력되어야 하는 반면, start는 생략되면 기본값으로 0, step은 생략되면 기본값으로 1이 주어진다. 순차적인 숫자가 다음과 같은 규칙으로 생성된다. [start, start + step, start + 2 * step, start + 3 * step, ...] step 이 양수이면 start + i * step 이 stop 보다 작을 때까지,step 이 음수이면 start + i * step 이 stop 보다 클 때까지 생성된다. step은 0이면 안된다. __..

Language/Python 2018.01.03

Python - float(), 실수(float)를 반환하는 클래스

float >>> float(x) 전달한 숫자 혹은 문자열, x를 기반으로 실수 값을 돌려준다. 문자열을 argument로 넘겨줄 경우 해당 문자열은 부호가 있는 정수나 실수여야 한다. ([+|-]nan 또는 [+|-]inf eh argument가 될 수 있다.) 문자열이 아니라면 integer, long integer 또는 float 형의 숫자가 전달되어야 한다. 만약 argument가 전달되지 않는다면 0.0을 반환한다. __builtin__ module에 포함된 class 이다. 예제) 인자로 숫자를 의미하는 문자열이 전달되었을 경우 >>> float("1.2") 1.2 >>> float("-3") -3.0 인자로 [+|-]nan 또는 [+|-]inf 가 전달되었을 경우 >>> float('nan'..

Language/Python 2018.01.02

Python - hasattr(), object의 속성(attribute) 존재를 확인하는 함수

hasattr >>> hasattr(object, name) object의 속성(attribute) 존재를 확인한다. 만약 argument로 넘겨준 object 에 name 의 속성이 존재하면 True, 아니면 False를 반환한다. 내부적으로 getattr(object, name)을 이용하는데 해당 함수 수행시 exception이 발생하는지 하지 않는지를 통해 판단한다. __builtin__ module에 포함된 function 이다. 예제에 앞서 delattr 예제를 위한 object를 다름과 같이 먼저 생성한다. >>> class sample: ... def __init__(self, x): ... self.x = x ... >>> >>> c = sample(1) >>> c.x 1 예제) 해당 ob..

Language/Python 2018.01.02

Python - delattr(), object의 속성(attribute)을 제거하는 함수

delattr >>> delattr(object, name) object에 존재하는 속성을 제거한다. __builtin__ module에 포함된 function 이다. 예제에 앞서 delattr 예제를 위한 object를 다름과 같이 먼저 생성한다. >>> class sample: ... def __init__(self, x): ... self.x = x ... >>> >>> c = sample(1) >>> c.x 1 예제) 기존 속성을 제거하는 경우 >>> delattr(c, 'x') >>> getattr(c, 'x') Traceback (most recent call last): File "", line 1, in AttributeError: sample instance has no attribute..

Language/Python 2018.01.02