본문 바로가기

Kotlin56

Isogram인지아닌지 판단하기 Isogram인지아닌지 판단하기 isogram이란 ? 아이 서 그램 (또한 "패턴이 아닌 단어"로 알려진)는이다 logological 반복 편지 쓰기없는 단어 나 구문 용어. 또한 어떤 사람들은 각 문자가 같은 횟수만큼 나타나는 단어 나 구를 의미하기도합니다. 반드시 한 번만 쓰는 것은 아닙니다. [1] 편리한 단어 자체가있어 단어 모두 감각의 아이 서 그램이다 testCode@RunWith(Parameterized::class)class IsogramTest(val input: String, val expectedOutput: Boolean) { companion object { @JvmStatic @Parameterized.Parameters(name = "{index}: isogram({0})={1.. 2019. 2. 24.
Raindrop - 숫자를 문자열로 변환하기 Raindrop - 숫자를 문자열로 변환하기 번호가 3 인 경우 'Pling'을 출력하십시오.숫자가 5 인 경우 'Plang'을 출력하십시오.숫자가 7 인 경우 'Plong'을 출력하십시오.숫자에 3, 5 또는 7이없는 경우 숫자의 자릿수를 똑바로 전달하십시오.예제들28의 요인은 1, 2, 4, 7 , 14, 28입니다.빗방울 - 말로, 이것은 단순한 "플롱 (Plong)"이 될 것입니다.30의 요인은 1, 2, 3 , 5 , 6, 10, 15, 30입니다.빗방울 - 말로, 이것은 "PlingPlang"이 될 것입니다.34는 4 가지 요소, 즉 1, 2, 17 및 34가 있습니다.빗방울이 말하면, 이것은 "34"가 될 것입니다.b testcode@RunWith(Parameterized::class)cla.. 2019. 2. 23.
Pangram인지 판단하기 Pangram인지 판단하기 Pangram 이란? 팬그램 (그리스어: παν γράμμα 판 그람마[*], '모든 글자'라는 뜻)은 알파벳의 모든 글자들을 사용해서 만든 문장을 뜻한다 - https://ko.wikipedia.org/wiki/%ED%8C%AC%EA%B7%B8%EB%9E%A8 kotlin test 코드를 통해서 Pangram인지 아닌지 판단해보자! testcode@Test fun emptySentence() { assertFalse(Pangram.isPangram("")) } @Test fun perfectLowercasePangram() { assertTrue(Pangram.isPangram("abcdefghijklmnopqrstuvwxyz")) } @Test fun lowercasePan.. 2019. 2. 23.
Kotlin List, Map 출처 - https://brunch.co.kr/@mystoryg/28 List & Map 이번에는 대표적인 콜렉션(Collection)인 list와 키와 값을 가지는 저장 클래스인 map를 살펴보겠습니다. 코틀린에서는 Java를 포함한 다른 언어들과 다르게 list와 map을 읽기 전용(read only) 객체와 수정 가능한(mutable) 객체 두 가지로 형태로 나누어 제공합니다. List 리스트를 만들 때 사용하는 함수는 listOf 입니다. 이렇게 생성 시 읽기 전용 모드가 됩니다.읽기 모드로 생성 시 어차피 변경이 불가능하기 때문에 val로 선언해주는 것이 좋을 것 같습니다. fun main(args: Array) { val name = listOf("Kim", "Hong", "Park") for.. 2019. 1. 23.
Kotlin enum과 when Kotlin enum과 when enumenum은 열거형(enumerated type)이라고 부른다. 열거형은 서로 연관된 상수들의 집합이라고 할 수 있다.enum은 아래와 같이 사용합니다. enum class Color{ RED,ORANGE,YELLOW,GREEN,BLUE,INDIGO} 위는 기본적인 형태이고, 흔히 자바에서 사용할땐 enum값 내부에 멤버 변수를 설정하기도 합니다.enum class Color{ RED(255,0,0),ORANGE(255,165,0),YELLOW(255,255,0),GREEN(0,255,0),BLUE(0,0,255),INDIGO(75,0,130) fun rgb()=(r*256+g) *256+b} fun main(args:Array){ println(Color.BLUE... 2019. 1. 23.
Kotlin 기본 클래스(생성자,오버로딩,상속,오버라이딩,open,abstract,companion object, sealed class Kotlin 기본 클래스Kotlin의 기본 클래스를 정리해 보겠습니다 생성자 class ClassName(name:String){} 생성자의 class ClassName constructor(name: String) { // constructor 생략가능 =constructor를 생략하여 간단하게 class ClassName(name:String) 초기화//init 블럭에서의 초기화class ClassName(name: String) { init { println("Initialized with value ${name}") }} //init 블럭을 사용하지 않고, 변수에 바로 넘겨 class ClassName(name: String) { val upperName = name.toUpperCase()} i.. 2019. 1. 23.
Kotlin - Realm 사용하기 Kotlin - Realm 사용하기Realm은 적은 코드로 데이터베이스를 작성할 수 있습니다. SQLite는 SQL 문법을 어느정도 알고있어야 하는 반번 Realm은 SQL 문법을 전혀 몰라도 사용할 수 있습니다. Realm 데이터베이스 사용 준비Realm 을 사용하려면 먼저 프로젝트수준의 build.gradle 파일을 열고 dependencies 항목에 아래와같이 플러그인을 추가합니다.dependencies { .... classpath 'io.realm:realm-gradle-plugin:5.2.0' } 다음으로 모듈 수준의 build.gradle 파일을 열고 상단에 아래와 같은 두 가지 플러그인을 추가합니다.apply plugin: 'realm-andorid' apply plugin: 'kotlin.. 2019. 1. 7.
Kotlin - 소리 재생하기(MediaPlayer ,SoundPool 클래스, 버전분기) Kotlin - 소리 재생하기(MediaPlayer ,SoundPool 클래스, 버전분기) 안드로이드에서 소리를 재생하는 방법에는 대표적으로 MediaPlayer 클래스와 SoundPool 클래스를 사용하는 방법이 있습니다. MediaPlayer일반적인 소리 파일 전주에는 MediaPalyer 클래스를 사용합니다. 클래스 이름에서 알 수 있듯이 음악파일과 비디오 파일을 모두 재생할 수 있습니다. MediaPlayer로 raw 디렉터리 파일을 재생하는 코드는 다음과 같이 간단합니다.//raw 디렉터리의 do1 파일을 재생하는 예val mediaPlayer = MediaPlayer.create(this,R.raw.do1)button.setOnClickListener{ mdiaPlayer.start() }.... 2019. 1. 5.
Kotlin - 체인모드(ContraintLayout) Kotlin - 체인모드(ContraintLayout) [Ctrl]+ 뷰클릭 으로 여러 뷰들은 선택할 수 있습니다. 여러 뷰들을 선택한 후 우클릭하면 Chains 메뉴에서 Create Vertical Chain 또는 Create Horizontal Chain 을 선택하여 사슬을 연결할 수 있습니다. 위와 같은 Cycle chain mode 아이콘을 클릭할 때마다( 분산 체인(Spread Chain), 체인 내부에서 분산(Spread Inside Chain),가중 체인(Weighted Chain)으로 변경됩니다. 다른 속성들과 결합하여 다음과 같이 다양한 한 형태의 체인 설정이 가능합니다.Packed Chain(중앙 배치 체인) Packed Chain with Bias(편향된 중앙 배치 체인) 등등 2019. 1. 5.
Kotlin - companion object 출처 - https://www.androidhuman.com/lecture/kotlin/2016/07/10/kotlin_companion_object/ 코틀린에는 static이 없다? - companion object코틀린에는 정적(static) 변수 혹은 메소드가 없고, 대신 패키지 내에 함수를 선언하여 사용할 수 있습니다. 자바와 동일한 방식으로 사용하기: companion objectcompanion object를 사용하면 위에서 나열했던 문제 없이 자바에서 정적 변수/메서드를 사용했던 것과 동일하게 사용할 수 있습니다. 다음은 사용 예를 보여줍니다.class Foo { companion object { const val BAR = "bar" fun baz() { // Do something } }.. 2019. 1. 5.
Kotlin - 앱 위젯 만들기 Kotlin - 앱 위젯 만들기앱 위젯이란 런처에 배치하여 빠르게 앱 기능을 제공하는 컴포넌트 입니다. 손전등 위젯 만들기1) 앱 위젯 추가 2) 앱 위젯이 생성한 코드 살펴보기3) 앱 위젯 레이아웃 수정4) 앱 위젯에서 손전등 켜기5) 앱 위젯 배치6) 앱 위젯 사용하기 1. 앱 위젯 추가프로젝트 창의 패키지명에서 우클릭 또는 안드로이드 스튜디오에서 [File] -> [New] -> [Widget] ->[App Widget] 항목 설명 Placement 위젯을 어디에 배치하는지 설정합니다. - Home-screen only : 홈 화면에만 배치 가능 - Home-screen and Keyguard : 홈 화면과 잠금 배치화면에 배치 가능 -Keyguard only(API 17+) : 잠금화면에만 배치 .. 2019. 1. 5.
Kotlin - 서비스( Service ) Kotlin - 서비스( Service )서비스란 안드로이드 4대 컴포넌트 중 하나로 화면이 없고 백그라운드에서 수행하는 작업을 작성하는 컴포넌트입니다. 서비스는 크게 바운드된 서비스와 바운드되지 않은 서비스로 나뉩니다.지금 다룰 서비스는 바운드 되지 않은 서비스입니다. 서비스와 생명주기서비스는 액티비티와 마찬가지로 생명주기용 콜백 메소드를 가지고 있습니다. 서비스를 시작하면 onCreate() 메소드가 호출되고, onStartCommand() 메소드가 호출되며 여기서 서비의 동작을 코드로 작성합니다. 서비스가 종료되면 onDestroy() 메소드가 호출됩니다. - onCreate() : 서비스가 생성 될 때 호출되는 콜백메소드 입니다. 초기화 등을 수행합니다. - onStartCommand() : 서비.. 2019. 1. 5.
Kotlin - 프래그먼트 생성 Kotlin - 프래그먼트 생성프래그먼트를 생성하려면 프로젝트 창에서 패키지를 클릭 후 우클릭 또는 안드로이드 스튜디오 상단 메뉴에서[File]-> [New]->[Fragment]->[Fragment(Blank)]를 클릭합니다. 체크박스들의 역할 - Create layout XML? : XML 레이아웃 파일을 생성합니다. 레이아웃 파일을 보통 같이 만드므로 체크하면됩니다.- Include fragment factory method : 프레그먼트를 생성하는 팩토리 메소드를 포함합니다.프래그먼트를 생성 할 때 인자를 넘겨준다면 체크합니다.- Include interface callbacks? : 액티비티와 상호 작용하는 콜백 인터페이스를 포함합니다.프래그먼트에서 발생한 이벤트를 액티비티에 전달하려면 체크합니다. 2019. 1. 5.
Kotlin - 콘텐츠 프로바이더 사용하기 Kotlin - 콘텐츠 프로바이더 사용하기콘텐츠 프로바이더 란? 데이터베이스, 파일, 네트워크의 데이터를 다른 앱에 공유합니다.콘텐츠 프로바이더란 앱의 데이터 접근을 다른 앱에 허용하는 컴포넌트 입니다. 콘텐츠 프로바이더를 이용해 사진 정보를 얻어오는 방법에 대해 알아보겠습니다. 프로바이더를 이용하여 사진 정보를 가지고 오는 순서는 아래와 같습니다1) 사진 데이터는 외부 저장소에 저장되어 있으므로 외부 저장소 읽기 권한을 앱에 부여합니다.2) 외부 저장소 읽기 권한은 위험 권한으로 실행 중에 사용자에게 권한을 허용하도록 합니다.3) contentResolver 객체를 이용하여 데이터를 Cursor 객체로 가지고옵니다. 위 순서를 기억하며 아래 과정을 진행합니다.1. 프로바이더로 기기의 사진 경로 얻기2... 2019. 1. 4.
Kotlin - 안드로이드 내장센서 사용하기 안드로이드 내장 센서 사용하기 안드로이드 내장 센서 종류(Sensor 클래스) Type센서값설명intTYPE_ACCELEROMETER1가속도 감지, 외부의 충격량과 방향 감지 센서intTYPE_ALL-1모든 센서intTYPE_AMBIENT_TEMPERATURE13주위 온도 감지 센서intTYPE_GAME_ROTATION_VECTOR15보정되지 않은 회전 벡터 센서intTYPE_GEOMAGNETIC_ROTATION_VECTOR20지자기 회전 벡터intTYPE_GRAVITY9축의 방향과 중력 감지intTYPE_GYROSCOPE4회전 정보 감지, 다양한 축의 회전각 감지intTYPE_LIGHT5빛의 세기 감지 센서intTYPE_MAGNETIC_FIELD2자기장 센서intTYPE_MOTION_DETECT30움직.. 2019. 1. 4.
Kotlin - 기타기능(let, with, apply, run 함수) Kotlin - 기타기능(고차함수, 동반객체) 유용한 기타 기능 - 확장 함수 : 원래 있던 클래스에 기능을 추가하는 함수- 형변환 : 숫자형 자료형끼리 쉽게 형변환 가능- 형 체크 : 변수의 형이 무엇인지 검사하는 기능- 고차 함수 : 인자로 함수를 전달하는 기능- 동반 객체 : 클래스의 인스턴스 생성 없이 사용할 수 있는 객체- let() 함수 : 블록에 자기 자신을 전달하고 수행된 결과를 반환하는 함수- with() 함수 : 인자로 객체를 받고 블록에서 수행된 결과를 반환하는 함수- apply() 함수 : 블록에 자기 자신을 전달하고 이 객체를 반환하는 함수- run() 함수 : 익명함수처럼 사용하거나, 블록에 자기 자신을 전달하고 수행된 결과를 반환하는 함수 let() 함수코틀린 기본 라이브러리는.. 2019. 1. 3.
Kotlin - 기타기능(고차함수, 동반객체) Kotlin - 기타기능(고차함수, 동반객체) 유용한 기타 기능 - 확장 함수 : 원래 있던 클래스에 기능을 추가하는 함수- 형변환 : 숫자형 자료형끼리 쉽게 형변환 가능- 형 체크 : 변수의 형이 무엇인지 검사하는 기능- 고차 함수 : 인자로 함수를 전달하는 기능- 동반 객체 : 클래스의 인스턴스 생성 없이 사용할 수 있는 객체- let() 함수 : 블록에 자기 자신을 전달하고 수행된 결과를 반환하는 함수- with() 함수 : 인자로 객체를 받고 블록에서 수행된 결과를 반환하는 함수- apply() 함수 : 블록에 자기 자신을 전달하고 이 객체를 반환하는 함수- run() 함수 : 익명함수처럼 사용하거나, 블록에 자기 자신을 전달하고 수행된 결과를 반환하는 함수 고차함수코틀린에서는 함수의 인수로 함수.. 2019. 1. 3.
Kotlin - 기타기능(확장함수,형변환,형체크) Kotlin - 기타기능(확장함수, 형변환, 형 체크)유용한 기타 기능 - 확장 함수 : 원래 있던 클래스에 기능을 추가하는 함수- 형변환 : 숫자형 자료형끼리 쉽게 형변환 가능- 형 체크 : 변수의 형이 무엇인지 검사하는 기능- 고차 함수 : 인자로 함수를 전달하는 기능- 동반 객체 : 클래스의 인스턴스 생성 없이 사용할 수 있는 객체- let() 함수 : 블록에 자기 자신을 전달하고 수행된 결과를 반환하는 함수- with() 함수 : 인자로 객체를 받고 블록에서 수행된 결과를 반환하는 함수- apply() 함수 : 블록에 자기 자신을 전달하고 이 객체를 반환하는 함수- run() 함수 : 익명함수처럼 사용하거나, 블록에 자기 자신을 전달하고 수행된 결과를 반환하는 함수 확장 함수코틀린은 확장 함수 기.. 2019. 1. 3.
Kotlin - 람다식, SAM변환 Kotlin - 람다식, SAM변환 람다식코틀린은 자바 8과 같이 람다식을 지원합니다. 람다식은 하나의 함수를 표현하는 방법으로 익명 클래스나 익명 함수를 간결하게 표현할 수 있어서 매우 유용합니다. 람다식은 코드를 간결하게 해주는 장점이 있지만 디버깅이 어렵고 남발할 경우 오히려 코드의 가독성이 떨어져 주의해야 합니다. 먼저 두 인수를 받아서 더해주는 add() 메소드입니다.fun add(x:Int,y:Int):Int{ return x+y} 위의 코드는 아래처럼 표현할 수 있습니다. 반환 자료형을 생략하고 블록{}과 return을 생략할 수 있습니다.fun add(x:Int,y:Int)=x+y 또한 아래처럼 표현할 수도 있습니다. 코틀린의 람다식은 다음과 같이 항상 중괄호로 둘러싸여 있습니다. 내용으로.. 2019. 1. 3.
Kotlin - 컬렉션(리스트,맵,집합) Kotlin - 컬렉션(리스트, 맵, 집합)컬렉션은 개발에 유용한 자료구조를 말합니다. 안드로이드 개발에서도 리스트나 맵은 자주 사용되는 구조입니다. 리스트리스트는 배열처럼 같은 자료형의 데이터들을 순서대로 가지고 있는 자료구조입니다. 중복된 아이템을 가질 수 있고 추가, 삭제, 교체 등이 쉽습니다. 요소를 변경할 수 없는 읽기 전용 리스트는 listOf() 메소드로 작성할 수 있습니다.val foods:List = listOf("라면","갈비","밥") 형 추론으로 자료형을 생략할 수 있습니다.val foods=listOf("라면","갈비","밥") 요소를 변경하는 리스트를 작성할 때는 mutableListOf() 메소드를 사용하여 작성합니다. 자바와 다른 점은 특정 요소에 접근할 때 대괄호 안에 요소.. 2019. 1. 3.
Kotlin - null값아님보증(!!), 안전한호출(?.), 엘비스 연산자(?:) Kotlin - null값아님보증(!!), 안전한호출(?.), 엘비스 연산자(?:) null값이 아님을 보증(!!)변수 뒤에 !!를 추가하면 nulll값이 아님을 보증하게 됩니다. 다음과 같이 null 값이 허용되는 name 변수의 경우 String? 타입이기 때문에 String 타입으로 변환하려면 !!값을 붙여서 null 값이 아님을 보증해야 합니다 val name: String?="키다리" val name2: String=name //에러val name3: String?=name //OKval name4: String=name!!//OK 안전한 호출 (?.)메소드 호출 시 점(.) 연산자 대신 ?. 연산자를 사용하면 null 값이 아닌 경우에만 호출됩니다. 다음 코드는 str 변수의 값이 null이 .. 2019. 1. 3.
Kotlin - null 가능성, lateinit ,lazy Kotlin - null 가능성, lateinit, lazy null 가능성기본적으로 객체를 불변으로 보고 null값을 허용하지 않습니다.null값을 호용하려면 별도의 연산자가 필요하고 null을 허용한 자료형을 사용할 때도 별도의 연산자들을 사용하여 안전하게 호출해야 합니다. null 허용?코틀린에서 기본적으로 null 값을 허용하지 않습니다 .따라서 모든 객체는 생성과 동시에 값을 대입하여 초기화 해야합니다. 아래 코드는 초기화 하지 않아 에러가 발생합니다. val a:String에러 Property must be initialized or be abstractCompilation Error 다음 코드는 null 값으로 초기화 해서 에러가 발생합니다. val a: String =nullNull can.. 2019. 1. 3.
Kotlin - 인터페이스 Kotlin - 인터페이스 인터페이스인터페이스는 미구현 메소드를 포함하여 클래스에서 이를 구현합니다.추상 클래스와 비슷하지만 클래스가 단일 상속만 되면 반면 인터페이스는 다중 구현이 가능합니다. 주로 클래스에 동일한 속성을 부여해 같은 메소드라도 다른 행동을 할 수 있게 하는데 사용합니다. 주로 클래스에 동일한 속성을 부여해 같은 메소드라도 다른 행동을 할 수 있게 하는데 사용합니다. 코틀린의 인터페이스는 자바와 거의 사용법이 같습니다 인터페이스의 선언아래와 같이 인터페이스에 추상 메소드를 포함할 수 있습니다. 원래 추상 클래스에서 추상 메소드는 abstract 키워드가 필요한데 인터페이스에서는 생략할 수 있습니다.interface Runnable{ fun run()} 인터페이스는 구현이 없는 메소드 뿐.. 2019. 1. 3.
Kotlin - 클래스의 상속, 내부 클래스, 추상 클래스 Kotlin - 클래스의 상속, 내부 클래스, 추상 클래스 클래스의 상속코틀린에서는 클래스는 기본적으로 상속이 금지됩니다. 상속이 가능하게 하려면 open키워드를 클래스 선언 앞에 추가합니다.아래는 Animal 클래스를 상속받는 Dog 클래스를 나타냅니다.open class Animal { } class dog:Animal(){ } 만약 상속받을 클래스가 생성자를 가지고 있다면 다음과 같이 상속받을 수 있습니다.open class Animal(var name:String) { } class Dog(name:String):Animal(name){ } 부모 클래스의 생성자 프로퍼티를 자식클래스의 생성자로 받아야 합니다. 내부클래스내부 클래스 선언에는 inner를 사용합니다. 내부 클래스는 외부 클래스에 대한.. 2019. 1. 3.