TechNote. 354

반도체 기억장치 (semiconductor memory) 방식의 분류에 대한 이해

현대의 Computer 들은 반도체(semiconductor)를 사용해 다수의 기억장치를 구성하고 있다. 흔히 언급되는 CPU 레지스터(Register), 캐시(Cache) 메모리, 주기억장치(Main Memory), SSD 등이 이와 같은 기억장치들이다. 이전의 Computer 들은 기억 장치로 magnetic drum, magnetic core memory 등을 사용하기도 했다. 대부분 사라졌으나 현재까지도 HDD 와 같은 기억장치는 자기(magnetic) 방식 사용하고 있다. 개인적으로 RAM이라 함은 주기억장치로 동일한 의미로 인지하고 있었고, Cache 나 CPU Register 와 같은 기억장치는 별개의 방식으로 구성된 기억장치로 생각하였다. ROM 또한 BIOS 정도로만 인지하였고, SSD ..

카테고리 없음 2019.10.19

컴퓨터 기억 장치들의 종류 및 특징

컴퓨터 내부에는 다양한 기억 장치들이 존재하고 있고, 대표적으로 다음과 같이 장치들이 있다. CPU 레지스터(Register) : CPU 내 위치한 고속 메모리로 극소량의 데이터를 저장할 수 있다. 캐시(Cache) : SRAM 으로 구성되었으며, CPU Core 외에 존재하여 주기억장치와 CPU 간 속도차를 극복하기 위해 사용된다. 주기억장치(Main Memory) : DRAM 으로 구성되었으며, CPU가 직접 접근하여 데이터를 사용할 수 있다. 보조기억장치(HDD, SSD) : CPU가 직접 접근할 수 없고, device controller 등을 통해 접근이 가능하다. 다 같이 기억(저장)한다는 점에서 유사할 텐데 이렇게 다양한 기억장치들이 한 컴퓨터 내에 존재하는 이유는 무엇일까. 하나의 종류로 저..

Python - configparser, 기본적인 설정파일을 다루는 모듈

configparser.ConfigParser() configparser 모듈은 ConfigParser class 를 제공하고, ConfigParser class 는 Microsoft Windows의 INI 와 같은 형식의 설정파일 구조를 다룰 수 있다. [sample.ini] [KeyList] # Set Key Value Key1 = 10 Key2 = 20 Key3 = 30 Key4 = 40 Key5 = 50 [NameList] # Set Name Value Name1 = abc Name2 = bcd Name3 = cde Name4 = def Name5 = efg 위와 같은 형태의 설정 파일을 읽기 위해서 다음과 같은 코드를 사용할 수 있다. from configparser import ConfigPa..

Language/Python 2019.10.11

Android Studio / Github 연동

Android Studio IDE 로 작업을 하면서 코드 형상 관리를 위해 Github 를 사용하는 경우가 있다. Android Studio 와 Github 를 연동하는 방법은 다음과 같다. 확인 진행한 환경 : Android Studio 3.5 git version 2.23.0.windows.1 (git 미설치시 [Windows 내 git 설치] 참고) 현재 작업 중인 프로젝트를 처음으로 github에 연동하는 경우 불필요한 파일을 연동에서 제외 시키기 위한 파일 (.gitignore) 작성 .gitignore 생성을 위한 ".ignore" plugin 설치 제외 파일/폴더 정의를 위한 .gitignore 자동 생성 "Share Project on Github" 를 통한 연동 기타 Trouble sho..

Android 2019.10.08

CPU 레지스터 (Register) 의 이해 및 종류

CPU 레지스터 : 중앙처리장치(CPU) 내에 위치한 기억장치로 많은 수의 레지스터를 CPU내에 포함시키는 것은 어렵기 때문에 특수 목적용 레지스터들과 몇몇 일반 목적용 레지스터만 존재한다. 대표적인 레지스터의 종류 : PC (Program Counter) : 다음 인출(Fetch) 될 명령어의 주소를 가지고 있는 레지스터 AC (Accumulator) : 연산 결과 데이터를 일시적으로 저장하는 레지스터 IR (Instruction Register) : 가장 최근에 인출된 명령어(현재 실행 중인 명령어)가 저장되어 있는 레지스터 SR (Status Register) : 현재 CPU 의 상태를 가지고 있는 레지스터 MAR (Memory Address Register) : PC 에 저장된 명령어 주소가 사용..

CPU 클럭 주파수 (Clock Frequency)

CPU clock frequency 는 CPU 동작 속도를 의미하고, '초당 사이클'을 의미한다. (단위는 Hz) (사이클은 명령어가 요구하는 동작들을 수행하는 단위) Clock Frequency 1초 기준 사이클의 수 1 사이클 기준 걸리는 시간 1 Hz 1초에 1개의 사이클을 수행 1개의 사이클을 수행하는데 걸리는 시간은 1초 100 Hz 1초에 100개의 사이클을 수행 1개의 사이클을 수행하는데 걸리는 시간은 1/100 초 즉, Hz가 높을 수록 더 빠르게 처리하는 것을 알 수 있다.

하이퍼바이저 (hypervisor) 의 이해

하나의 컴퓨터에서 다수의 운영체제를 동시에 실행하기 위한 논리적인 플랫폼을 의미한다. 여기서 대상이 되는 컴퓨터는 호스트 컴퓨터라고 한다. 하이퍼바이저는 Type 에 따라 다음과 같이 두가지 형태로 나뉜다. Type - 1 : Native 혹은 Bare-metal hypervisor Hardware 위에서 바로 Hypervisor가 실행되는 구조 Type - 2 : Hosted hypervisor Type - 1 과 달리 Hardware 와 Hypervisor 사이에 호스트 운영체제가 존재하는 구조

OS 2019.09.16

Python - 지능형 리스트 (List Comprehension)/제너레이터 표현식 (Generator expression) 의 이해 및 비교

지능형 리스트 (List Comprehension) : Python 에서는 리스트 구성을 위해 항목을 하나하나 나열하는 방식외에 구문을 통해 sequence 형태의 데이터를 가공하여 리스트를 구성하는 방법을 제공하고 있다. 지능형 리스트를 사용하게 되면 코드가 간결해지고 상황에 따라서는 성능이 좋은 코드를 작성할 수 있다. 제너레이터 표현식 (Generator expression) : 지능형 리스트 (List Comprehension) 과 유사하지만 별도의 리스트는 생성하지 않고, iterator 를 생성하여 항목을 하나씩 처리할 수 있도록 한다. 지능형 리스트를 만든 후 하나씩 항목을 처리하여도 되지만 별도의 메모리 공간을 차지하지 않는다는 차이점이 있다. 지능형 리스트의 경우 대괄호 [] 를 사용하는..

Language/Python 2019.09.13

[Notepad++] '자동 완성' 기능 끄기

Notepad++ 을 사용하다 보면 앞서 나온 단어를 바탕으로 자동 완성 기능이 동작해 불편한 경우가 있다. Code 짤 때는 같은 변수를 사용하는 경우가 많아 유용할지 모르지만 일반 글을 작성할 때는 불편하여 해당 자동 완성 기능 종료가 필요하였다. 아래 화면과 같이 환경 설정 메뉴를 실행한다. [F10 > 설정 > 환경 설정] 환경 설정 팝업창을 보면 자동 완성 항목을 볼 수 있다. 아래와 같이 필요하지 않은 기능들을 모두 끄고 '닫기'를 선택한다. 이후 설정에서 빠져 나와 글을 작성해 보면 더 이상 자동 완성이 동작하지 않는 것을 볼 수 있다.

[CA] Pipelined Instruction 수행시 발생할 수 있는 Hazard 종류

Pipelined Instruction 수행시 발생할 수 있는 Hazard 의 종류 Sturcuctural Hazard Data Hazard Freezing the pipeline Forwarding Compiler Scheduling Control Hazard Optimized branch processing Branch prediction Delayed branch 1) Structural Hazard : 동일 자원(Resouce : Memory or register)에 대해 pipelined 된 다중 instruction이 동시에 접근하는 문제 (기본적으로 하나의 자원에는 하나의 instruction 만이 접근하여 사용할 수 있다.) 즉, 동일 Cycle에 서로 다른 instruction 에서 동일..

카테고리 없음 2019.09.08

Python - pathlib, File/Directory Path 관련 모듈

>>> from pathlib import Path >>> Path("/home/ubuntu") PosixPath('/home/ubuntu') pathlib 는 python 3.4 에서 처음 소개 되었다. 서로 다른 운영체제의 파일 시스템에서도 동일한 코드를 통해 동작할 수 있도록 Object-oriented (객체지향)으로 구현되어 있는 특징이 있다. I/O 동작 포함 여부에 따라 다음과 같이 2가지 형태로 구분된다. PurePath : 실질적인 File system 접근 (I/O 동작) 없이 File/Directory Path 만 계산 PurePosixPath : non-Windows 파일 시스템의 특성에 따라 동작 수행 PureWindowsPath : Windows 파일 시스템의 특성에 따라 동작 ..

카테고리 없음 2019.09.02

Signed / Unsigned 의 비교

signed 의 경우 양/음수를 표현할 수 있는 변수형으로 알고 있고, unsigned 의 경우 양수만 표현할 수 있는 것으로 막연히 알고 있었는데, 코드로 실제 비교해 보았다. #include int main() { signed char a = 0xFF; unsigned char b = 0xFF; printf("a = %d\n", a); printf("b = %d\n", b); } [결과] a = -1 b = 255 2진수 (16진수) 10진수 (signed char) 10진수 (unsigned char) 1111 1111 (0xFF) -1 255 signed char 의 경우 이진수 1111 1111 중 MSB (Most Significant Bit) 는 부호 표현을 위해 사용된다. 이에 2의 보수법..

Language/C 2019.08.24

세마포어 (Semaphore) / 뮤텍스 (Mutex) 의 이해

세마포어 (Semaphore) 다중 프로세스 혹은 다중 쓰레드 간에 발생할 수 있는 교착 상태 (Deadlock) 에 대한 해법 (모든 교착 상태에 대한 해법을 제시하지는 못하지만 고전적인 해법 중 하나) 기본적으로 상호 배제 알고리즘 (Mutual Exclusion) 기반 세마포어는 원자적(atomic)으로 제어되는 정수 변수로 프로세스간 접근할 수 있기 위해 프로세스 외부에 존재한다. Counting semaphore Semaphore S : 정수값을 가지는 변수로 P 와 V 라는 동작(operation)에 의해서만 접근할 수 있다. 세마포어 S는 현재 사용 가능한 자원 (resource)의 수를 의미한다. 이에 0 이면 접근 가능한 자원이 없는 것을 의미한다. P Operation : 임계 구역에 ..

OS 2019.08.22

CRLF / LF / CR 에 대한 이해

CR : Carriage Return (\r) LF : Line Feed (\n) 해당 용어(CR, LF)와 이 용어들의 조합(CRLF)은 새로운 줄 (New line) 으로 바꾸는 방식을 의미한다. CR 과 LF 는 타자기 시절 부터 줄바꿈을 위해 사용하던 방식인데 각각의 의미는 다음과 같다. CR : 현재 커서를 줄 올림 없이 가장 앞으로 옮기는 동작 LF : 커서는 그 자리에 그대로 둔 상황에서 종이만 한 줄 올려 줄을 바꾸는 동작 이 방식(CR + LF)은 타자기 이후 컴퓨터에서도 줄바꿈을 의미할 때도 사용되었으나, 줄바꿈을 할 때 굳이 2 byte 를 사용할 필요가 없기에 메모리/Storage 절약을 위해 CR 혹은 LF 만 사용하기도 하였다. 대표적으로 Microsoft 사의 Windows 는..

OS 2019.08.20

Termius 를 통한 AWS 접속

이제까지는 흔히 ssh를 이용할 때 putty 를 사용하곤 했다. putty 는 기능도 충실하고, 안정적으로 사용해왔었기에 별다른 큰 문제가 없었다. 하지만 여러 ssh 서버에 접속을 하여 다중으로 창을 열 경우 창 관리가 잘 되지 않아 간혹 헤매는 경우가 종종 있었다. 이에 창 관리가 편한 ssh client 를 찾다 보니 termius 에 대해 할게 되었다. termius 의 가장 큰 장점은 Desktop과 Mobile을 포함하여 다양한 OS (macOS, Windows, Linux, iOS, Android)를 지원한다는 것이다. multiplatform 에서 동작하기 때문에 다양한 OS 상에서 ssh 접속에 대해 동일한 경험을 가질 수 있다. Termius 를 설치하고 실행하면 다음과 같은 화면을 ..

[WSL] Windows 10에서 Linux 의 사용

Microsoft 가 Linux 를 WSL (Windows Subsystem for Linux) 라는 방식으로 지원하고 있다. 이전에는 vmware나 virtualbox를 통해 virtual machine 을 통해 windows 를 사용하곤하였지만 이제는 subsystem 이라는 방식으로 Linux를 Windows 에서 사용할 수 있는 것이다. 해당 기능은 Windows 10에서만 지원하는 기능이다. 기존 WSL 이후 WSL 2 가 발표된 상태이다. [WSL] https://docs.microsoft.com/ko-kr/windows/wsl/about [WSL2] https://docs.microsoft.com/ko-kr/windows/wsl/wsl2-index 해당 글에서는 WSL 을 설치하고 최신으로 ..

OS/Windows 2019.08.04

[Publisher Toolbar] Google 게시자 툴바가 아직 초기화되지 않았습니다. 몇 분 후에 다시 시도해 주세요.

가끔 adsense 현황을 확인하기 위해 Chrome 확장 프로그램인 Google Publisher Toolbar를 이용한다. 그런데 아래와 같이 "Google 게시자 툴바가 아직 초기화되지 않았습니다. 몇 분 후에 다시 시도해 주세요." 라는 에러 문구와 함께 정상적으로 내용이 보여지지 않을 때가 있다. 이 때는 Chrome을 다시 껐다 켜도, 몇 분을 기다려도 해결이 되지 않았다. 이에 해결책을 찾아보니 아래와 같이 하면 문제 현상을 없앴을 있다. 1) Publisher Toolbar 에서 마우스 오른 클릭을 하여 "확장 프로그램 관리" 메뉴를 선택한다. 2) Google Publisher Toolbar에 대한 확장 프로그램 관리 페이지가 나오면 제일 위에 "사용" toggle bar를 클릭하여 "사..

[Publisher Toolbar] 이 코드를 복사하여 애플리케이션으로 전환한 다음 붙여넣으세요.

[문제 상황] 오랜만에 adsense에 접속하고 Chrome에 확장 프로그램으로 Publisher Toolbar를 설치하게 되었다. https://chrome.google.com/webstore Chrome 웹 스토어 Chrome에 사용할 유용한 앱, 게임, 확장 프로그램 및 테마를 찾아보세요. chrome.google.com Chrome 웹 스토어에서 Publisher Toolbar를 깔고 아이콘을 눌러보니 아래와 같이 "사용" 버튼을 통해 로그인을 해야 했다. Adsense 가입되어 있는 아이디와 비밀번호를 입력하고 나면 아래와 같은 화면이 나오고 "허용" 버튼을 누른다. 그런데 바로 로그인되고 현재 현황이 나올줄 알았는데, 아래와 같이 "이 코드를 복사하여 애플리케이션으로 전환한 다음 붙여넣으세요...

Python - random(), 임의의 수(난수)를 구하는 함수

가장 흔히 사용되는 기능으로 random 값을 생성하는 random() 함수가 있다. 해당 함수를 사용하기 위해서는 별도의 random module을 import 하여 사용해야 한다. 직접 난수를 구하는 로직을 작성해 본 사람을 알겠지만 규칙이 없는 난수를 생성하기는 쉽지가 않다. 질 좋은 난수 생성기더라도 경우의 수를 늘려 생성하다 보면 어느 순간 규칙을 가지는 것을 확인하는 경우가 다수이기 때문이다. 이를 극복하기 위해 난수 생성하는 로직이 제안되고 존재하는데 Python 에서는 Mersenne Twister 라는 난수 생성기를 사용한다. 하지만 이 난수 생성 로직도 특정 상황에서 다음 난수를 예측할 수 있기 때문에 암호 관련 목적으로 random 모듈로 부터 생성된 난수 사용은 권장하지 않고 있다...

Language/Python 2019.03.20

Python - Python 2 에서 Python 3 으로의 전환

PYthon을 처음 접한지 몇년이 지났지만 Python 3에 대한 거부감(?), 두려움(?)은 상당했다. 우선 접하고 있던 Python code들은 모두 2.7을 기준으로 작성되어 있었고, 나 또한 그 틀에서 벗어났을 때 코드가 동작하지 않을 수도 있다는 점에서 상호 호환이 되지 않는 Python 3으로의 전환은 어려웠다. 하지만 수년내 python 2.7 의 지원이 종료될 예정임에 따라, 최근 신규로 작성하는 코드를 모두 Python 3로 작성을 시작해 보았다. 내부적으로는 많은 차이가 있겠지만 자체적으로 느꼈던 차이점은 다음과 같았다. 1. print 문 사용의 변화 기존 python 2에서는 print "ABC" 와 같이 사용이 가능하였으나 Python3 에서는 함수사용과 마찬가지로 중괄호를 넣어줘..

Language/Python 2019.03.19

Python - id(), object의 unique 값(memory address)를 보여주는 함수

Python은 C 언어와 달리 포인터라는 개념이 없다. 하지만 컴퓨터 상에서 돌아가는 언어이기 때문에 내부적으로는 메모리를 사용하고, 이에 대한 주소 정보를 가지고 있다. 그렇다면 포인터 개념을 사용하지 않는 Python에서 해당 메모리 주소는 어떤 용도로 사용되는 것일까? Python은 메모리 주소를 변수를 구별하기 위한 용도로 사용하고 있다. python의 built-in 함수 중 id() 를 이용하면 현재 확인하고자 하는 변수의 메모리 주소를 확인할 수 있다. (CPython의 경우 메모리 주소를 반환하지만, 다른 파이썬 인터프리터는 메모리 주소 이외의 다른 값을 반환할 수 있음) id(object)Return the “identity” of an object. This is an integer w..

Language/Python 2019.03.18

하위 DNS 추가 및 Apache 가상 호스트 생성

1차 도메인 : kr2차 도메인 : technote.kr3차 도메인 : forum.technote.kr DNS 는 가비아나 후이즈와 같은 대행 업체를 통해 구매가 가능하고, 기본적인 설정이 가능하다. 하나의 서버에 여러개의 DNS 주소를 연결하고자 할 때에는 DNS 설정만으로는 불가능하다. 서버 내 가상 호스트를 생성하여 들어 오는 DNS 요청에 따라 적합한 웹으로 연결 시켜 주어야 한다. 전체적인 순서는 다음과 같다. DNS 설정을 통해 연결하기 원하는 주소를 등록(e.g> forum.technote.kr) 하고 해당 주소를 IP 에 mapping 시켜 준다. 해당 IP 주소를 가지는 서버에 웹 서버를 구동하고, 여러개의 DNS 주소를 연결하고자 한다면 웹서버에 가상 호스트를 생성해준다. 1. 가비아나..

OS/Linux 2019.03.18

폴더와 디렉토리의 차이 (Folder and Directory)

어렸을 적 MS-DOS 사용하던 때에는 폴더라는 용어 자체가 없었던 것으로 기억한다. 하지만 어느 순간 부터 폴더라는 용어가 종종 사용되더니 현재는 기존에 사용하던 디렉토리라는 용어를 오히려 낯설게 만들고 있다. 일반적으로 사용할 때는 폴더나 디렉토리나 크게 구분하지 않고 사용되고 있다. 그럼에도 불구 하고 새로운 용어가 등장하였을 때는 그 차이점이 있었을 것이다. 검색해본 결과 폴더는 디렉토리와 거의 유사하지만 좀 더 넓은 의미로 사용되는 용어였다. 윈도우가 대중화 되면서 탐색기가 널리 사용되고 있다. 탐색기에 보면 폴더는 파일을 담는 그릇이라고 보면된다. 여기까지는 디렉토리와 별반 다름이 없다. 하지만 윈도우 폴더 내에는 네트워크 환경, 내컴퓨터 등 특수한 항목들 까지 포함할 수 있다. 디렉토리의 경..

OS/Windows 2019.02.09

Python - if __name__ == __main__ 의 의미

[Python 스크립트 파일의 실행] python은 C언어나 Java 와 달리 main() 함수가 존재하지 않는다.이에 따라 스크립트 파일을 실행하게 되면 들여쓰기가 되지 않은 line들을 파일 상단 부터 순차적으로 읽어 수행하게 된다. [sample.py]a = 1b = 3c = a + b print(c) def temp(): print("abc") ~/python$ python sample.py4 위에서 보듯이 들여쓰여진 코드인 함수 부분은 수행되지 않았음을 볼 수 있다. [다른 Python 스크립트 파일을 모듈로서 실행] python 스크립트 파일은 또 다른 python 스크립트 파일을 하나의 모듈로써 읽어 들일 수 있다. [sample_call.py]import sample ~/python$ py..

Language/Python 2019.02.08

stetho - 실시간 sqlite db 접근 및 디버깅

sqlite를 이용하여 android 에서 database를 사용하다 보면 database에 쌓이는 실제 값을 확인해야 하는 경우가 종종 있다. android 개발 환경이 상당히 잘 제공되어 있어 기본적으로 실시간 database 확인 방법이 있으리라 생각하고 찾아 보았으나 기본으로 제공하는 툴은 별도로 제공되지 않는 것을 확인하였다. 이에 찾아보니 stetho 라고 facebook 에서 개발하여 공유하는 android application을 위한 debug bridge 가 존재하였다. 다양한 기능이 있겠지만 database 위주로 사용법을 보면 아래와 같다. http://facebook.github.io/stetho/ 1. Android Studio에서 build.gradle 에 아래와 같이 com.f..

Android 2019.01.06

Android - Material icon 의 사용 in Android Studio

개발자들이 UI가 있는 앱을 개발할 때 제일 어려워하는 혹은 곤란해하는 부분이 design 이 아닐까 한다. Design 까지는 아니더라도 앱에 사용되는 이미지나 아이콘등을 구하는 것 또한 쉽지 않은 일이다. 앱 개발시 관련 디자이너가 있다면 좋겠지만 일반적으로 규모가 작은 개발팀의 경우 디자이너가 부재하는 게 일반적이다. 구글에서 이와 같은 개발자들의 고충을 알았는지 디자이너가 없어도 개발자들이 적용가능한 material design을 아래 사이트에서 소개하고 있다. https://material.io/design/ Material design이 발표된지는 몇년 지났지만 최근 관련 icon 을 사용하면서 다시 한번 android studio 에서의 사용법을 정리하고자 한다. 1. 먼저 아래의 주소로 접..

Android 2018.12.27

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