출처: 초보자를 위한 코틀린(Kotlin) 200제 / 엄민석 지음 | 정보문화사 | 2018년 05월 20일 출간

문자열: 문자(Char)들을 일렬로 나열한 것

String: 문자열을 저장할 수 있는 타입, 문자 여러개를 큰 따옴표로 감싸면 그 부분은 String 타입이 된다.

package com.practice011

fun main(args: Array<String>): Unit
{
	var str: String = "Hello"
	println(str)	// 출력: Hello

	str = str + "\nKotlin!"
	println(str)	// 출력: Hello\nKotlin!

	println(str[8])	// 출력: t

	val num = 10 * 5 + 3	// 53으로 만든다.
	println(str + num)	// String에 String아닌값을더하면, String으로 출력: Hello\nKotlin!53
}

 

출력

Hello
Hello
Kotlin!
t
Hello
Kotlin!53

 

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html

 

String - Kotlin Programming Language

 

kotlinlang.org

 

출처: 초보자를 위한 코틀린(Kotlin) 200제 / 엄민석 지음 | 정보문화사 | 2018년 05월 20일 출간

문자타입: 문자를 저장할 수 있는 타입

package com.practice010

fun main(args: Array<String>): Unit
{
	var ch: Char = 'A'
	println(ch)		// 출력: A

	ch = '\uAC00'	// 유니코드 사용
	println(ch)		// 출력: 가

	ch = '한'
	//println(ch.toInt())	// 출력 54620, 유니코드 매핑되는 int값
}

'A'  : 문자 한개를 작은따옴표로 감싸면 char 타입 

'\uAC00' : 코틀린에서는 Unicode 사용

https://home.unicode.org/

 

Home

News 🗓 Unicode Standard Releases📝 Public Review Issues

home.unicode.org

출처: 초보자를 위한 코틀린(Kotlin) 200제 / 엄민석 지음 | 정보문화사 | 2018년 05월 20일 출간

package com.practice009

fun main(args: Array<String>): Unit
{
	println(0.1f + 0.1f + 0.1f)		//출력 : 0.3
	println(0.1f + 0.1f + 0.1f + 0.1f + 0.1f + 0.1f + 0.1f + 0.1f + 0.1f + 0.1f)	
	// 출력: 1.0000001
	// 0.1 을 10번 더했다고 1이 아닌 1.0000001 이 출력된다.연산할수록 오차가 거듭되기때문에
	println(0.1f * 10)	// 출력: 1.0, 곱하기 연산은 1번이기때문에 온전하게 값이 출력
}

실수 값은 2진수 유효숫자로 표현되기 때문에 때에 따라 정한 값을 가리킬 수 없다.

실수계산시에는 대략적인 값만 얻을수도 있음

클라우드 서비스의 종류

Google, Amazon 및 Microsoft와 같은 퍼블릭 클라우드 제공 업체는 컴퓨팅, 스토리지, 네트워킹 및 기타 인프라를 배치하여 광범위한 비즈니스 서비스 및 애플리케이션을 실행하기위한 다양한 서비스를 제공합니다.
퍼블릭 클라우드 제공 업체는 크게 네 가지 범주로 분류되는 서비스를 제공합니다.

  • Compute resources
  • Storage
  • Networking
  • Specialized services such as Machine Learning Services

클라우드 고객은 일반적으로 이러한 범주 중 하나 이상에서 서비스를 사용합니다.

컴퓨팅 리소스 Compute Resources

컴퓨팅 리소스는 퍼블릭 클라우드에서 다양한 형태로 제공됩니다.

가상 머신 Virtual Machines

가상 머신은 컴퓨팅 리소스의 기본 단위이며 클라우드 실험을 위한 좋은 출발점입니다.
클라우드 공급자로 계정을 만들고 청구 정보를 제공 한 후 포털 또는 명령 줄 도구를 사용하여 VM을 만들 수 있습니다.

Google Cloud Platform은 다양한 수의 vCPU 및 메모리 양으로 사전 구성된 다양한 VM을 제공합니다. 사전 구성된 오퍼링이 요구 사항을 충족하지 않는 경우 사용자 정의 구성을 작성할 수도 있습니다.

VM을 생성 한 후에는 로그인하여 원하는대로 관리 할 수 ​​있습니다. VM에 대한 전체 액세스 권한이 있으므로 파일 시스템을 구성하고, 영구 저장소를 추가하고, 운영 체제를 패치하거나 추가 패키지를 설치할 수 있습니다.

VM에서 실행할 대상, 다른 사람에게 액세스 권한 및 VM 종료시기를 결정합니다. 관리하는 VM은 사무실에 전체 관리자 권한이있는 서버가있는 것과 같습니다.

물론 서로 다른 운영 체제 및 응용 프로그램을 실행하는 여러 VM을 만들 수 있습니다. 또한 GCP는 분산 백엔드에 단일 액세스 지점을 제공하는로드 밸런서와 같은 서비스를 제공합니다.

응용 프로그램에 고 가용성이 필요한 경우 특히 유용합니다. 클러스터의 VM 중 하나에 장애가 발생하면 작업 부하를 클러스터의 다른 VM으로 보낼 수 있습니다. 오토 스케일러는 워크로드를 기반으로 클러스터에서 VM을 추가하거나 제거 할 수 있습니다.  이를 자동 확장autoscaling이라고합니다.

이를 통해 필요한 것보다 많은 VM을 실행하지 않고도 비용을 제어하고 워크로드가 증가 할 때 충분한 컴퓨팅 용량을 사용할 수 있습니다.

관리되는 Kubernetes 클러스터 - Managed Kubernetes Clusters

Google Cloud Platform은 서버 클러스터를 생성하고 관리하는 데 필요한 모든 도구를 제공합니다.

많은 클라우드 사용자는 서버 클러스터를 유지하고 실행하는 데 필요한 작업이 아니라 자신의 애플리케이션에 집중합니다. 해당 사용자에게는 관리 클러스터가 좋은 옵션입니다.

관리 클러스터는 컨테이너를 사용합니다. 컨테이너는 하나의 컨테이너에서 실행중인 프로세스를 동일한 서버의 다른 컨테이너에서 실행중인 프로세스와 격리시키는 경량 VM과 같습니다.

관리 클러스터에서는 실행하려는 서버 수와 ​​서버에서 실행할 컨테이너를 지정할 수 있습니다. 자동 확장 매개 변수autoscaling parameters를 지정하여 실행중인 컨테이너 수를 최적화 할 수도 있습니다.

관리 클러스터에서 컨테이너의 상태가 모니터링됩니다. 컨테이너가 실패하면 클러스터 관리 소프트웨어가 컨테이너를 감지하고 다른 컨테이너를 시작합니다.

컨테이너는 환경에서 실행중인 여러 마이크로 서비스에 의존하는 응용 프로그램을 실행해야 할 때 유용한 옵션입니다. 서비스는 컨테이너를 통해 배포되며 클러스터 관리 서비스는 모니터링, 네트워킹 및 일부 보안 관리 작업을 처리합니다.

서버리스 컴퓨팅 - Serverless Computing


VM과 관리되는 kubernetes 클러스터 모두 컴퓨팅 리소스를 구성하고 관리하기 위해 어느 정도의 노력이 필요합니다. 서버리스 컴퓨팅은 개발자와 응용 프로그램 관리자가 VM 또는 kubernetes 클러스터를 설정할 필요가없는 컴퓨팅 환경에서 코드를 실행할 수있는 접근 방식입니다.

Google Cloud Platform에는 두 가지 서버리스 컴퓨팅 옵션이 있습니다.
앱 엔진 및 클라우드 기능App Engine and Cloud Functions.App Engine은 웹 사이트 백엔드, POS 시스템 또는 사용자 지정 비즈니스 응용 프로그램과 같이 오랫동안 실행되는 응용 프로그램 및 컨테이너에 사용됩니다.

Cloud Functions는 파일 업로드 또는 메시지 대기열에 메시지 추가와 같은 이벤트에 대한 응답으로 코드를 실행하기위한 플랫폼입니다. 이 서버리스 옵션은 함수로 코딩 된 짧은 프로세스를 실행하거나 VM, 관리 클러스터 또는 App Engine에서 실행될 수있는 장기 실행 애플리케이션을 호출하여 이벤트에 응답해야 할 때 효과적입니다.

저장소 Storage

퍼블릭 클라우드는 광범위한 애플리케이션 요구 사항에 유용한 몇 가지 유형의 스토리지 서비스를 제공합니다. 이러한 유형에는 다음이 포함됩니다.

■ 객체 저장 Object storage
■ 파일 저장 File storage 
■ 블록 저장 Block storage
■ 캐시 Caches
클라우드 서비스의 엔터프라이즈 사용자는 종종 이러한 서비스의 조합을 사용합니다

객체 스토리지 Object Storage

오브젝트 스토리지는 오브젝트 또는 Blob 측면에서 스토리지 사용을 관리하는 시스템입니다.
일반적으로 이러한 객체는 파일이지만 기존 파일 시스템에 파일이 저장되어 있지 않다는 점에 유의해야합니다. 객체는 버킷으로 그룹화됩니다. 각 객체는 일반적으로 URL을 통해 개별적으로 주소를 지정할 수 있습니다.

오브젝트 스토리지는 서버에 연결된 디스크 또는 SSD (Solid-State Drive)의 크기에 의해 제한되지 않습니다. 디스크에서 사용 가능한 공간의 크기에 관계없이 객체를 업로드 할 수 있습니다. 가용성과 내구성을 향상시키기 위해 여러 개의 객체 사본이 저장됩니다. 경우에 따라 지역에 액세스 할 수없는 경우에도 가용성을 보장하기 위해 객체 사본이 다른 지역에 저장 될 수 있습니다.

객체 스토리지의 또 다른 장점은 서버리스serverless라는 것입니다. VM을 생성하고 스토리지를 연결할 필요가 없습니다. Cloud Storage라고하는 Google Cloud Platform의 객체 저장소는 GCP에서 실행되는 서버와 인터넷에 액세스 할 수있는 다른 장치에서 액세스 할 수 있습니다.

개체 수준에서 액세스 제어를 적용 할 수 있습니다. 이를 통해 클라우드 스토리지 사용자는 객체에 액세스하고 업데이트 할 수있는 사용자를 제어 할 수 있습니다.

파일 저장 File Storage

파일 스토리지 서비스는 파일을위한 계층 적 스토리지 시스템을 제공합니다. 파일 시스템 스토리지는 네트워크 공유 파일 시스템을 제공합니다.  Google Cloud Platform에는 NFS (Network File System) 스토리지 시스템을 기반으로하는 Cloud Filestore라는 파일 스토리지 서비스가 있습니다.

파일 저장소는 파일에 대한 파일 액세스와 같은 운영 체제가 필요한 응용 프로그램에 적합합니다. 파일 스토리지 시스템은 파일 시스템을 특정 VM에서 분리합니다.

파일 시스템, 디렉토리 및 파일은 해당 파일에 액세스 할 수있는 VM 또는 응용 프로그램과 독립적으로 존재합니다.

블록 스토리지 Block Storage

블록 스토리지는 블록이라는 고정 크기 데이터 구조를 사용하여 데이터를 구성합니다. 블록 스토리지는 일반적으로 VM에 연결된 임시 및 영구 디스크에 사용됩니다. 블록 스토리지 시스템을 사용하면 블록 스토리지 위에 파일 시스템을 설치하거나 블록에 직접 액세스하는 애플리케이션을 실행할 수 있습니다.

일부 관계형 데이터베이스는 파일 시스템을 통해 작업하는 대신 블록에 직접 액세스하도록 설계 될 수 있습니다.
Linux 파일 시스템에서 4KB는 일반적인 블록 크기입니다. 

관계형 데이터베이스는 종종 블록에 직접 쓰지만 종종 8KB 이상과 같은 더 큰 크기를 사용합니다.
블록 스토리지는 Google Cloud Platform에서 VM에 연결된 디스크에서 사용할 수 있습니다.

블록 스토리지는 영구적이거나 임시 일 수 있습니다. 영구 디스크는 가상 서버 또는 디스크가 연결된 가상 서버에서 분리 된 경우에도 계속 존재하며 데이터를 저장합니다.

임시 디스크는 VM이 ​​실행되는 동안에 만 존재하며 데이터를 저장합니다.
임시 디스크는 운영 체제 파일과 VM을 종료 할 때 삭제되는 기타 파일 및 데이터를 저장합니다.

영구 디스크는 데이터가 블록에 존재하기를 원할 때 사용됩니다
VM과 독립적 인 저장 장치. 이러한 디스크는 VM의 수명주기와 무관하게 사용 가능한 데이터가 있고 빠른 운영 체제 및 파일 시스템 수준 액세스를 지원할 때 유용한 옵션입니다.

객체 스토리지는 또한 데이터를 VM의 수명주기와 독립적으로 유지하지만 운영 체제 또는 파일 시스템 레벨 액세스는 지원하지 않습니다. 객체에 액세스하려면 HTTP와 같은 고급 프로토콜을 사용해야합니다. 블록 스토리지에서 데이터를 검색하는 것보다 오브젝트 스토리지에서 데이터를 검색하는 데 시간이 더 걸립니다.

애플리케이션 요구 사항을 충족시키기 위해 객체 스토리지와 블록 스토리지의 조합이 필요할 수 있습니다. 오브젝트 스토리지는 필요할 때 영구 디스크에 복사되는 대량의 데이터를 저장할 수 있습니다.

이 조합은 필요할 때 운영 체제 및 파일 시스템 기반 액세스와 함께 대용량 스토리지의 이점을 제공합니다.

캐시 Caches

캐시는 데이터에 빠르게 액세스하는 메모리 내 데이터 저장소입니다. 데이터를 검색하는 데 걸리는 시간을 대기 시간이라고합니다. 인 메모리 저장소의 대기 시간은 1 밀리 초 미만으로 설계되었습니다. 비교를 위해 다음과 같은 다른 대기 시간이 있습니다.

■ 주 메모리 참조를 만드는 데 100 나노초 또는 0.1 마이크로 초
■ SSD에서 무작위로 4KB를 읽는 데 150 마이크로 초 소요
■ 메모리에서 1MB를 순차적으로 읽는 데 250 마이크로 초 소요
■ SSD에서 순차적으로 1MB를 읽으려면 1,000 마이크로 초 또는 1 밀리 초가 걸립니다.
■ 디스크에서 1MB를 순차적으로 읽는 데 20,000 마이크로 초 또는 20 밀리 초 소요

다음은 참조 용 변환입니다.
■ 1,000 나노초는 1 마이크로 초와 같습니다.
■ 1,000 마이크로 초는 1 밀리 초와 같습니다.
■ 1,000 밀리 초는 1 초입니다.
이들 및 기타 유용한 타이밍 데이터는 Jonas Bonér의 "모든 프로그래머가 알아야하는 지연 시간 번호"(https://gist.github.com/jboner/2841832) 확인할 수 있습니다.

1MB의 데이터를 읽는 예를 살펴 보겠습니다. 메모리 내 캐시에 데이터를 저장 한 경우 250 마이크로 초 또는 0.25 밀리 초로 데이터를 검색 할 수 있습니다. 동일한 데이터가 SSD에 저장된 경우 1 밀리 초에서 검색하는 데 4 배의 시간이 걸립니다.

하드 디스크 드라이브에서 동일한 데이터를 검색하는 경우 메모리 내 캐시에서 읽는 동안 20 밀리 초 또는 80 배 정도 기다릴 수 있습니다.
캐시는 애플리케이션에서 읽기 대기 시간을 최소로 유지해야 할 때 매우 유용합니다. 물론, 빠른 검색 시간을 좋아하지 않는 사람은 누구입니까? 데이터를 항상 캐시에 저장하지 않는 이유는 무엇입니까? 세 가지 이유가 있습니다.

■ 메모리는 SSD 또는 하드 디스크 드라이브 (HDD) 저장 장치보다 비쌉니다. 대부분의 경우 SSD 또는 HDD의 영구 블록 스토리지만큼 많은 인 메모리 스토리지를 보유하는 것은 실용적이지 않습니다.
■ 캐시는 일시적입니다. 전원이 꺼 지거나 운영 체제가 재부팅되면 캐시에 저장된 데이터가 손실됩니다. 빠른 액세스를 위해 캐시에 데이터를 저장할 수 있지만 데이터를 유지하는 유일한 데이터 저장소로 사용해서는 안됩니다.
“진정한 시스템”또는 항상 최신의 가장 정확한 버전의 데이터를 보유한 데이터 저장소를 유지하기 위해 어떤 형태의 영구 저장소를 사용해야합니다.
■ 캐시는 실제 시스템과 동기화되지 않을 수 있습니다. 이는 진실 시스템이 업데이트되었지만 새 데이터가 캐시에 기록되지 않는 경우 발생할 수 있습니다. 이 경우 캐시에 의존하는 애플리케이션이 캐시의 데이터가 유효하지 않다는 사실을 감지하기 어려울 수 있습니다. 캐시를 사용하기로 결정한 경우 캐시와 시스템 사이의 일관성에 대한 요구 사항을 충족하는 캐시 업데이트 전략을 설계해야합니다.

네트워킹 Networking

클라우드에서 작업 할 때는 클라우드 리소스와 온-프레미스 시스템 간의 네트워킹 작업을 수행해야합니다.
클라우드 환경에서 여러 개의 VM을 실행중인 경우 어느 시점에서 IP 주소를 관리해야 할 수 있습니다.
사용자 환경의 각 네트워크 액세스 가능 장치 또는 서비스에는 IP 주소가 필요합니다. 실제로 GCP 내의 기기는
외부 주소. 내부 주소는 내부 GCP 네트워크의 서비스에만 액세스 할 수 있습니다.

내부 GCP 네트워크는 VPC (Virtual Private Cloud)로 정의됩니다.
인터넷에서 외부 주소에 액세스 할 수 있습니다.  외부 IP 주소는 고정 또는 임시 일 수 있습니다.
고정 주소는 오랫동안 장치에 할당됩니다.

임시 외부 IP 주소는 VM에 연결되고 VM이 중지되면 해제됩니다.
IP 주소를 지정하는 것 외에도 VPC의 서브 네트워크 및 VM에 대한 액세스를 제어하기 위해 방화벽 규칙을 정의해야하는 경우가 종종 있습니다. 예를 들어, 응용 프로그램 서버 (AS)만이 데이터베이스를 조회 할 수 있도록 액세스를 제한하려는 데이터베이스 서버가있을 수 있습니다.

인바운드 및 아웃 바운드를 제한하도록 방화벽 규칙을 구성 할 수 있습니다.
애플리케이션 클러스터 앞의 애플리케이션 서버 또는로드 밸런서의 IP 주소로의 트래픽. 온 프레미스 데이터 센터와 VPC간에 데이터 및 네트워크 액세스를 공유해야 할 수도 있습니다.

여러 유형의 피어링 중 하나를 사용하여이 작업을 수행 할 수 있습니다. 이는 고유 한 네트워크를 연결하는 일반적인 용어입니다.

전문화 된 서비스 Specialized Services

대부분의 퍼블릭 클라우드 제공 업체는 애플리케이션 블록을 구축하거나 데이터 처리를위한 워크 플로의 일부로 사용할 수있는 전문화 된 서비스를 제공합니다. 전문 서비스의 일반적인 특징은 다음과 같습니다.

■ 서버리스입니다. 서버 나 클러스터를 구성 할 필요가 없습니다.
■ 텍스트 번역 또는 이미지 분석과 같은 특정 기능을 제공합니다.
■ 서비스 기능에 액세스하기위한 API (응용 프로그래밍 인터페이스)를 제공합니다.
■ 다른 클라우드 서비스와 마찬가지로 서비스 사용에 따라 요금이 부과됩니다.

다음은 Google Cloud Platform의 전문화 된 서비스 중 일부입니다.
■ 머신 러닝 서비스 인 AutoML
■ 텍스트 분석을위한 서비스 인 Cloud Natural Language
■ 이미지 분석을위한 클라우드 비전
■ 시계열 데이터에 대한 상관 관계를 계산하기위한 서비스 인 Cloud Inference API.

전문화 된 서비스는 고급 컴퓨팅 기능을 캡슐화하여 자연 언어 처리 및 기계 학습과 같은 도메인의 전문가가 아닌 개발자가 액세스 할 수 있도록합니다. Google Cloud Platform에 더 전문화 된 서비스가 추가 될 것으로 예상됩니다.

불러오는 중입니다...


이것은 Phil Karlton의 유명한 퀴즈에서 기억에 남을 정도로 어려운 디자인 문제입니다.“컴퓨터 과학에는 두 가지 어려운 점이 있습니다. 캐시 무효화와 이름 지정 사항입니다.”(https://martinfowler.com/ https://martinfowler.com/bliki/ TwoHardThings.html
컴퓨터 과학 유머의이 희귀 한 예에 대한 리프에 대해서는 참조하십시오.)

 

출처: https://www.amazon.com/Google-Cloud-Certified-Associate-Engineer/dp/1119564417

불러오는 중입니다...

 

 

출처: 초보자를 위한 코틀린(Kotlin) 200제 / 엄민석 지음 | 정보문화사 | 2018년 05월 20일 출간

출처: https://kotlinlang.org/docs/reference/basic-types.html

 

Basic Types: Numbers, Strings, Arrays - Kotlin Programming Language

 

kotlinlang.org

정수를 저장할수 있는 타입 Int, 실수를 저장할 수 있는 Double 타입이외도 더 많은 종류의 타입이 존재.

부동소숫점 방식 Floating Point: 실수를 표현하는 방식. 

package com.practice008

// 소실수를 표현하는 방식: 부동소수점(Floating Point) 방식

fun main(args: Array<String>): Unit
{
	val a: Byte = 125	// Byte타입 변수 선언, Int 타입이지만, Byte범위내라서 ok
	val b: Short = (100 + 200) * 100	//Short 타입변수 선언, 소괄호먼저, 범위내 ok
	var c: Int = 12_4354_6538	// Int 타입변수 선언, 언더스코어(_)는 숫자를 좀더 알아보기 쉽게표현, 
	//println(c)	// 고대로출력해보면 , 1243546538 나온다
	c = 0xFF_88_88	// 변수 c에 담긴 값을 16진수로 인식 
	c = 0b01010010_01100011_01110101_01000101	// 2진수로 인식
	var d: Long = -543_7847_3984_7238_4723	// Long 타입변수 선언, Int값을 넘으면 자동으로 Long타입

	c = a + b	// Int 타입 = Byte타입+Short타입, 결과는 byte와 short 모두 int 범위내이므로 결과는 Int타입
	d = c + 10L	// 정수값(정수리터럴)에 L을 붙이면 무조건 Long타입이 된다. 결과값도 long 범위내이므로 long타입

	var e: Float = 67.6f	// f를 붙이는건 float 타입 
	val f: Double = 658.4	// Doulbe 선언과 동시에 저장
	e = (e + f).toFloat()	// e+f를 더하면 Double타입 720.056 이 나오기때문에 float 타입으로 e를 변환
	println(e)		// 출력 : 726.0, 기존에 저장된 67.6은 지워진다.
}

출력

726.0

## 구글 자격증 취득 지원 제도

https://inthecloud.withgoogle.com/cloud-certification?utm_medium=email&utm_source=other&utm_campaign=partner.443.opencourse.targetedmessages.marketing~partner.443._VxZBs2jSCiyJC4yjQYvhw#!/%23training

 

Cloud Learner

The Professional Cloud Architect certification demonstrates your mastery of developing robust and secure cloud solutions that are aligned to business objectives. SKILL LEVEL: Experienced RECOMMENDED EXPERIENCE: 3 or more years Certification exam format: 2

inthecloud.withgoogle.com

 

위 사이트를 참고하면, 취득하고자 하는 자격증을 선택 후, 등록하고 무료교육과정( 퀵랩/ Couresera 온라인 강의)를 

지원해준다.

우선 가장 기본이 되는 자격증 Associate Cloud Engineer 을 선택 후 등록하면,

등록된 이메일 계정으로 아래와 같이 추천하는 학습 과정을 확인 할 수 있다.

기본 필수 과정인 

GCP Essentials Quest* (Required) 와   Cloud Architecture Quest* (Required) 를 수료 하면

그리고 자격증 시험을 등록하는 과정에서 시험비용 $125 중에서 $25 달러 할인 쿠폰을 제공한다.

시험을 통과하면 Google Store에서 사용가능한 $100 바우처를 제공한다고 한다.

영문 시험이지만, 도전해볼만 한 과정이다.

출처: 초보자를 위한 코틀린(Kotlin) 200제 / 엄민석 지음 | 정보문화사 | 2018년 05월 20일 출간

package com.practice007

// 비트 연산자
fun main(args: Array<String>): Unit
{
	println(15 and 7)	// 15와 7을 비트단위로 and 연산 , 15&7, 출력 7
	println(5 or 2)		// 5와 2를 비트단위 or 연산, 5|2, 출력 7
	println(15 xor 5)	// 15와 5를 비트단위 xor 연산, 15^5 ,출력 10
	println(32767.inv())	// 32767를 비트단위로 반전, 출력 -32768
	println(1 shl 3)	// 1을 왼쪽으로 3칸 시프트, 1<<3 , 출력 8
	println(8 shr 1)	// 8을 오른쪽으로 1칸 시프트, 8>>1, 출력 1
	println(-17 ushr 2)	// 부호 유지하고, -17을 오른쪽 2칸 시프트, -17 >>>2 , 출력  1073741819
}

## 코틀린의 비트연산자는 기존의 익숙한 c/c++ 이나 java와 다르게 문자로 되있다.

ddshl - signed shift left (equivalent of << operator) 
shr - signed shift right (equivalent of >> operator) 
ushr- unsigned shift right (equivalent of >>> operator) 
and - bitwise and (equivalent of & operator) 
or - bitwise or (equivalent of | operator) 
xor - bitwise xor (equivalent of ^ operator) 
inv - bitwise complement (equivalent of ~ operator)

## 추가 샘플 코드

1 shl 2   // Equivalent to 1.shl(2), 출력 = 4
16 shr 2  // 출력 = 4
2 and 4   // 출력 = 0
2 or 3    // 출력 = 3
4 xor 5   // 출력 = 1
4.inv()   // 출력 = -5

 

출처: 초보자를 위한 코틀린(Kotlin) 200제 / 엄민석 지음 | 정보문화사 | 2018년 05월 20일 출간

## 코틀린의 증감 연산자는 다른 언어와 비슷하다 

package com.practice006

// 증감연산자
fun main(args: Array<String>): Unit
{
	var a = 10
	var b = 5

	println(a++ + b)	// a 후위 증가 연산 > b 더한 값 출력 , 15
	println(a)	// a는 이미 증가된 상태라 11
	println(--b)	// 전위 감소하고 난 뒤의 b는, 4

	10.inv()
}

 

## 출력은 아래와 같다 

15
11
4

 

 

 

 

출처: 초보자를 위한 코틀린(Kotlin) 200제 / 엄민석 지음 | 정보문화사 | 2018년 05월 20일 출간

package com.practice005

fun main(args: Array<String>): Unit
{
	// + 더하기, - 빼기, * 곱하기, / 나눈 값 몫, % 나눈 나머지 값
	val num: Int = 15 -4 * 3
	val num2: Int = 65 % 7
	val num3: Double = 7.5/5+22.25
	//	val num4: Double = num/num2 + 0.7
	// int 와 double은 상속 관계가 아니므로 캐스팅이 안됨. 그래서 toDouble메소드를 사용해서 변환
	val num4: Double = num.toDouble() /num2 + 0.7
	
	println(num)
	println(num2)
	println(num3)
	println(num4)
}

val num: Int = 15 -4 * 3    [출력: 3]

val num2: Int = 65 % 7     [출력: 2]

val num3: Double = 7.5/5+22.25   [출력:23.75]

// val num4: Double = num/num2 + 0.7 

// int 와 double은 상속 관계가 아니므로 캐스팅이 안됨. 그래서 toDouble메소드를 사용해서 변환해야 한다.

val num4: Double = num.toDouble() /num2 + 0.7   [출력: 1.7]

num(int타입).toDouble (double 타입으로 변환) 

 

출처: 초보자를 위한 코틀린(Kotlin) 200제 / 엄민석 지음 | 정보문화사 | 2018년 05월 20일 출간

package com.practice004

fun main(args:Array<String>): Unit
{
	val variable = 10 + 12 - 5
	println(variable)
}

변수 뿐만 아니라 리터럴에도 타입이 있다.

그래서 표현식의 결과 값에도 타입이 생긴다. 표현식의 타입을 이해하는게 중요하다.

왜냐하면 변수에 값을 저장하려면 그 변수의 타입과 표현식의 타입이 일치해야한다.

예를 들면 val something:Double = 결과 값이 Double 인 표현식만 가능 

+ Recent posts