본문 바로가기

kotlin39

Mockito-Kotlin 알아보기 Mockito-Kotlin 알아보기 Mockito는 유닛 테스트를 위한 Java mocking framework입니다. Mockito를 사용하여 쉽게 Mock Object를 만들어 관리할 수 있습니다. Mockito는 현재 Kotlin과 함께 작동하지만 구문이 최적이 아닙니다. Kotlin에서는 모든 클래스가 기본적으로 final로 선언되어있어 Mockito는 기본적으로 mocking을 할 수 없는 등의 여러 문제가 있습니다. 그래서 Niek Haarman이 유지 관리하는 mockito-kotlin 라이브러리를 사용하도록 하겠습니다. (글 쓴 시점으로는 Mockito lib는 kotlin을 공식 지원하지는 않지만 추후 제공 계획이 있다고 합니다.) Mockito-Kotlin 기본 사용법 dependenc.. 2019. 10. 28.
[Design Pattern] State Pattern [Design Pattern] State Pattern state pattern에 대하여 알아보고, java와 kotlin 예제를 봐보도록 하겠습니다. State Pattern이란?? State Pattern은 일련의 규칙에 따라 객체의 상태(State)를 변화시켜, 객체가 할 수 있는 행위를 바꾸는 패턴입니다. 상태에 따라 행동이 변화하는 객체엔 모두 적용할 수 있습니다. 특징 State Pattern은 객체의 특정 상태를 클래스로 선언하고, 클래스에서는 해당 상태에서 할 수 있는 행위들을 메서드로 정의합니다. 그리고 이러한 각 상태 클래스들을 인터페이스로 캡슐화하여, 클라이언트에서 인터페이스를 호출하는 방식을 말합니다. State Pattern with Java public interface Powe.. 2019. 10. 21.
[Design Pattern] Chain of Responsibility Pattern [Design Pattern] Chain of Responsibility Pattern Chain of Responsibility Pattern 패턴에 대하여 알아보고, 자바와 코틀린 예제를 알아보도록 하겠습니다. Chain of Responsibility Pattern이란???? 요청 처리가 들어오게 되면 그것을 수신하는 객체가 자신이 처리할 수 없는 경우에는 다음 객체에게 문제를 넘김으로써 최종적으로 요청을 처리할 수 있는 객체의 의해 처리가 가능하도록 하는 패턴입니다. 하나의 예로 자바의 try /catch / finally가 해당됩니다. try 블록 안에서 Exception이 발생하면 catch 블록으로 이동하여 catch블록을 실행하게 되는 것입니다. 구조 ● Handler : 요청을 처리하기 .. 2019. 10. 21.
가변인자 알아보기 ( ... , vararg 가변 인자 알아보기 자바의 가변 인자와 코틀린의 가변 인자를 비교하여 알아보도록 하겠습니다. Java의 가변인자 자바는 오버 로딩을 통하여 매개변수의 개수와 타입이 달라도 같은 이름의 메서드명으로 동일 기능을 구현할 수 있습니다. 그런데.. String divide(String s1, String s2){...} String divide(String s1, String s2, String s3){...} String divide(String s1, String s2, String s3, String s4){...} String divide(String s1, String s2, String s3, String s4, String s5){...} 위와 같이 매개변수가 끝없이 많아진다면..? 위 같은 문제를.. 2019. 10. 18.
[Design Pattern] Mediator Pattern [Design Pattern] Mediator Pattern mediator(중재자) 패턴에 대하여 알아보고 예시를 java로 작성한 예와 kotlin으로 작성한 예를 보도록 하겠습니다. Mediator Pattern 이란? mediator pattern은 클래스 간의 상호작용을 하나의 클래스에 위임하여 처리하는 패턴입니다. M:N의 관계에서 M:1의 관계로 복잡도를 떨어뜨려 유지보수 및 확장성에 유리합니다.(의존성이 적어집니다.) 다른 객체의 존재를 모르는 상태에서도 메시지를 주고받을 수 있습니다. 특징 ConcreteColleague클래스는 Colleague(동료) interface를 구현하고 있는 N개의 객체입니다. ConcreteCollegue 클래스 간 데이터 전달을 위하여 Mediator를 이.. 2019. 10. 18.
[Design Pattern] Singleton Pattern [Design Pattern] Singleton Pattern singleton pattern에 대하여 알아보도록 하겠습니다. 싱글톤이란?? 싱글톤은 단 하나의 인스턴스만 생성하도록 제약을 둔 디자인 패턴입니다. 싱글톤 (Singleton) 은 애플리케이션의 시작부터 종료될 때까지 한 번의 생성(new)으로 고정된 메모리 영역을 가지기 때문에 메모리를 효율적으로 사용할 수 있습니다. 또한 싱글톤의 인스턴스는 전역적으로 사용되기 때문에 다른 클래스의 인스턴스들이 데이터를 공유 변경이 가능하다는 장점이 있습니다. JAVA에서 구현하기 1. Eager Initialization (이른 초기화) 싱글톤 객체를 instance라는 변수로 미리 생성해 놓고 사용하는 방식입니다. 장점 : static으로 생성된 변수.. 2019. 9. 10.
Reflection kotlin - Reflection Reflection에 대하여 알아보도록 하겠습니다. 1) Reflection이란 ?? Reflection의 단어의 뜻은 '반사' 입니다 . 자신을 반사하여 보여준다 !라고 생각하면 될것같습니다 리플렉션은 런타임시 자신의 프로그램 구조에 대한 내성 검사를 허용하는 언어 및 라이브러리 기능 세트입니다. 코틀린은 언어에서 함수와 프로퍼티를 일급 시민으로만들고, 런타임에 함수나 프로퍼티의 타입 또는 이름을 학습하는 것은 단순하게 함수적 스타일 또는 반응적 스타일을 사용하는 것과 밀접하게 연관되어 있습니다. 2) 클래스 참조 가장 흔히 볼수있는 Refection 은 클래스 참조 입니다 . val c =ReflectionTest::class ::연산자로 ReflectionTest.. 2019. 6. 8.
Kotlin 코드 Java로 디컴파일하기 Kotlin 코드 Java로 디컴파일하기 Kotlin은 자바로 만들었습니다.Android Studio에서 제공하는 바이트 코드 디 컴파일을 사용하여 간단하게 컴파일 할 수 있습니다.Kotlin 디 컴파일안드로이드 스튜디오에서 Kotlin 플러그인을 설치, 실시간으로 Kotlin Bytecode 확인이 가능합니다.메뉴 위치는 안드로이드 스튜디오 Tools> Kotlin> Show Kotlin Bytecode를 눌러 주면 Kotlin Bytecode화면을 볼 수 있습니다.당신과 똑같은 순간 Kotlin Bytecode확인. 여기에서 자바 코드를 확인하는 바이트 코드를 확인하세요DecompileJava CPU 에서 컴파일 결과를 확인하십시오! 디 컴파일Kotlin Bytecode는 실시간으로 컴파일 된 결과를.. 2019. 3. 9.
Twofer - 스트링 리턴하기 Twofer - 스트링 리턴하기 TestCode1234567891011121314151617181920212223class TwoferTest { @Test fun noNameGiven() { assertEquals("One for you, one for me.", twofer()) } @Test fun aNameGiven() { assertEquals("One for Alice, one for me.", twofer("Alice")) } @Test fun anotherNameGiven() { assertEquals("One for Bob, one for me.", twofer("Bob")) } @Test fun emptyStringGiven() { assertEquals("One for , one fo.. 2019. 3. 3.
윤년 찾기 윤년 찾기 윤년이란 ? - 태양력의 윤년현재 전 세계 대부분의 나라에서 쓰는 그레고리력은 4년에 반드시 하루씩 윤날(2월 29일)을 추가하는 율리우스력을 보완한 것으로, 태양년과의 편차를 줄이기 위해 율리우스력의 400년에서 3일(세 번의 윤년)을 뺐다.그레고리력의 정확한 윤년 규칙은 다음과 같다.서력 기원 연수가 4로 나누어떨어지는 해는 윤년으로 한다. (1992년, 1996년, 2004년, 2008년, 2012년, 2016년, 2020년, 2024년, 2028년 ...)서력 기원 연수가 4, 100으로 나누어떨어지는 해는 평년으로 한다. (1900년, 2100년, 2200년, 2300년, 2500년...)서력 기원 연수가 4, 100, 400으로 나누어떨어지는 해는 윤년으로 둔다. (1600년, 20.. 2019. 3. 3.
Hamming -DNA 차이 Hamming -DNA 차이 두 DNA 가닥의 해밍 차이를 계산해보는 테스트입니다.돌연변이는 단순히 핵산, 특히 DNA 생성 또는 복제과정에서 발생하는 실수입니다. 핵산은 세포기능에 필수적이기 때문에 돌연변이는 세포 전체에 파급효과를 일으키는 경향이 있습니다. 돌연변이는 기술적으로 실수이지만, 매우 드문 돌연변이는 세포에 유익한 특성을 부여할 수 있습니다. 공통 조상과 함께 서로다른 게놈으로 부터 얻은 2개의 상동 DNA 가닥 사이의 차이 수를 세어 두 가닥 사이의 진화경로에서 발생할수 있는 돌연변이의 최소 수를 측정합니다 이를 해밍거리(Hamming distance)라고 합니다. GAGCCTACTAACGGGAT CATCGTAATGACGGCCT ^ ^ ^ ^ ^ ^^ 위의 DNA가닥 사이의 해밍거리는 7.. 2019. 3. 3.
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.
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 - 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.