본문 바로가기

Kotlin56

가변인자 알아보기 ( ... , 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.
Kotlin Property , Custom Getter & Setter Kotlin Property , Custom Getter & Setter 코틀린 프로퍼티에대하여 알아보기전에 먼저 프로퍼티와 필드에 대하여 알아보도록 하겠습니다. Java의 프로퍼티와 필드 객체지향에서 객체는 고유한 속성(==특징)을 가지는 데, 그 속성을 칭하는 단어를 property 라고 합니다. 그리고 이 속성의 실체가 담기는 곳이 필드(멤버 변수)입니다. public class Dog { private String name; private int old; public Dog(String name, int old) { this.name = name; this.old = old; } public String getName() { return name; } public void setName(Strin.. 2019. 10. 7.
Sealed Class Sealed Class Sealed Class란 ? sealed의 뜻은 봉인이라는 뜻으로 enum 클래스의 확장형태입니다. sealed 클래스는 클래스들을 묶은클래스입니다. Kotlin reference 에서 소개하는 예로 Expr 이라는 sealed 클래스를 보도록 하겟습니다. sealed class Expr{ data class Const(val number: Double) : Expr() data class Sum(val e1: Expr, val e2: Expr) : Expr() object NotANumber : Expr() } 먼저, Sealed 클래스 내부에 작성된 클래스는 Sealed클래스를 상속할수 있습니다. sealed클래스의 작점은 when표현식때문입니다. fun eval(expr: E.. 2019. 9. 2.
Fold, Reduce Fold, Reduce kotlin의 fold함수와 reduce함수 무었이 다를까요 ? 한번 알아보도록 하겠습니다! Fold public inline fun Iterable.fold(initial: R, operation: (acc: R, T) -> R): R { var accumulator = initial for (element in this) accumulator = operation(accumulator, element) return accumulator } fold 함수는 누산기의 기능을 합니다. fold함수의 구현을 보면 우선 fold함수는 T타입을 받아서 R타입으로 리턴합니다. 매개변수로는 initial 과 operation이 있습니다 . initial 을 리턴값R을 초기화 하는 값을 받습니.. 2019. 8. 29.
고차함수 (Higher-order-function) ,1급시민[객체,함수] (First-Class Citizen) 고차함수 (Higher-order-function) , fold ,reduce.. 고차함수란 ? 고차함수에 대하여 알아보자 고차함수는 아래의 2가지 조건을 만족하는 함수입니다. 함수를 파라미터로 받는 함수 함수를 리턴하는 함수 1. 함수를 파라미터로 받는 함수 예 class HighOrderFunctionTest { fun simpleHOF(sum: (Int, Int) -> Int, a: Int, b: Int): Int = sum(a, b) @Test fun highOrderFunctionTest() { val result = simpleHOF({ x, y -> x + y }, 10, 20) Assert.assertEquals(30, result) } } simpleHOF 함수는 Int,Int를 받아서 .. 2019. 8. 29.
Reflection kotlin - Reflection Reflection에 대하여 알아보도록 하겠습니다. 1) Reflection이란 ?? Reflection의 단어의 뜻은 '반사' 입니다 . 자신을 반사하여 보여준다 !라고 생각하면 될것같습니다 리플렉션은 런타임시 자신의 프로그램 구조에 대한 내성 검사를 허용하는 언어 및 라이브러리 기능 세트입니다. 코틀린은 언어에서 함수와 프로퍼티를 일급 시민으로만들고, 런타임에 함수나 프로퍼티의 타입 또는 이름을 학습하는 것은 단순하게 함수적 스타일 또는 반응적 스타일을 사용하는 것과 밀접하게 연관되어 있습니다. 2) 클래스 참조 가장 흔히 볼수있는 Refection 은 클래스 참조 입니다 . val c =ReflectionTest::class ::연산자로 ReflectionTest.. 2019. 6. 8.
완벽한 숫자 - 자연수에대한 완벽한 숫자 - 자연수에대한Nicomachus (60 - 120 CE) 분류 체계에 따라 번호가 완전하고 풍부하며 결핍되었는지 확인하십시오. 그리스 수학자 인 니코 마 쿠스 (Nicomachus) 는 자연수에 대한 분류 체계를 고안하여 각자가 분량의 합계 에 기초하여 완벽 하고 풍부 하거나 부족한 범주에 속하는 것으로 나타 냈습니다 . 분량 합은 수 자체를 포함하지 않는 수의 합계로 정의됩니다. 예를 들어, 15의 분량 합은 (1 + 3 + 5) = 9완벽 : 분량 합 = 번호6은 (1 + 2 + 3) = 6이므로 완벽한 수입니다.28은 (1 + 2 + 4 + 7 + 14) = 28이므로 완벽한 수입니다.풍부 : 분랑 합> 수12는 (1 + 2 + 3 + 4 + 6) = 16이기 때문에 풍부한 수입니다... 2019. 3. 27.
비밀 악수 - 10진수와 2진수 비밀 악수 - 10진수와 2진수2진수에 관해서는 당신은 비밀스런 "악수"를 내놓기로 결정했습니다.1 = wink 10 = double blink 100 = close your eyes 1000 = jump 10000 = Reverse the order of the operations in the secret handshake. 십진수가 주어지면 비밀 핸드 쉐이크를위한 적절한 이벤트 시퀀스로 변환합니다.다음은 몇 가지 예입니다.입력 3이 주어지면,이 함수는 3이 11 진법이므로 배열 [ "wink", "double blink"]을 반환합니다.주어진 입력 값 19가 주어지면이 함수는 배열 [ "double blink", "wink"]을 반환 할 것입니다. 19가 이진수로 10011이기 때문입니다. 16 (이.. 2019. 3. 20.
정사각형의 차이 정사각형의 차이 합계의 제곱과 첫 번째 N 개의 자연수의 제곱의 합계 사이의 차이점을 찾습니다.처음 10 개의 자연수의 합의 제곱은 (1 + 2 + ... + 10) ² = 55² = 3025입니다.처음 10 개의 자연수의 제곱의 합은 1² + 2² + ... + 10² = 385입니다.따라서 처음 10 개의 자연수 합계의 제곱과 처음 10 개의 자연수 제곱 합계의 차이는 3025 - 385 = 2640입니다. TestCodeclass SquaresTest { @Test fun squareOfSum1() { assertEquals(1, Squares(1).squareOfSum()) } @Test fun squareOfSum5() { assertEquals(225, Squares(5).squareOfSum.. 2019. 3. 17.
스크래블 스코어 - 주어진 단어에대하여 점수 계산하기 스크래블 스코어 - 주어진 단어에대하여 점수 계산하기 문자의 값Letter Value A, E, I, O, U, L, N, R, S, T 1 D, G 2 B, C, M, P 3 F, H, V, W, Y 4 K 5 J, X 8 Q, Z 10 ex) cabbage (양배추) 는 14점의 가치를 가집니다 .- c 3점 ,a *2 2점, b *2 6점, g 2점 , e 1점 TestCode@RunWith(Parameterized::class)class ScrabbleScoreTest(val input: String, val expectedOutput: Int) { companion object { @JvmStatic @Parameterized.Parameters(name = "{index}: scoreWord(.. 2019. 3. 17.
어구를 약어로 변경하기 어구를 약어로 변경하기 어구를 약어로 변경해보도록 하겠습니다. 예를들어 Portable Network Graphics 라면 PNG로 줄일수있게됩니다 . TestCode @Test fun fromTitleCasedPhrases() { val phrase = "Portable Network Graphics" val expected = "PNG" assertEquals(expected, Acronym.generate(phrase)) } @Test fun fromOtherTitleCasedPhrases() { val phrase = "Ruby on Rails" val expected = "ROR" assertEquals(expected, Acronym.generate(phrase)) } @Test fun fro.. 2019. 3. 14.
스트링 뒤집기 스트링 뒤집기 스트링을 거꾸로 뒤집는 방법! TestCodeclass ReverseStringTest { @Test fun testAnEmptyString() { assertEquals("", reverse("")) } @Test fun testAWord() { assertEquals("tobor", reverse("robot")) } @Test fun testACapitalizedWord() { assertEquals("nemaR", reverse("Ramen")) } @Test fun testASentenceWithPunctuation() { assertEquals("!yrgnuh m'I", reverse("I'm hungry!")) } @Test fun testAPalindrome() { asser.. 2019. 3. 13.
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.
Collection에 대하여 -3 collection에 적용할수 있는 함수들 Collection에 대하여 -3 출처 - https://mdwgti16.github.io/kotlin/kotlin-collection-api2/# zip@Test fun zip() { val fruitList = listOf("strawberry", "grape", "pineapple", "banana", "apple") val priceList = listOf(1500,1000,2000,700,500,10000) assertEquals(listOf("strawberry is 1500won", "grape is 1000won", "pineapple is 2000won", "banana is 700won", "apple is 500won"), fruitList.zip(priceList).map {"${i.. 2019. 3. 9.
Collection에 대하여 -2 collection에 적용할수 있는 함수들 Collection에 대하여 -2 출처 - https://mdwgti16.github.io/kotlin/kotlin-collection-api2/# all@Test fun all() { val fruitList = listOf("strawberry", "grape", "pineapple", "banana", "apple") assertEquals(true, fruitList.all { it.length >= 5 }) assertEquals(false, fruitList.all { it.contains("apple") }) } (AND) 주어진 조건을 모든 원소들이 만족하면 true 아니면 falseany@Test fun any() { val fruitList = listOf("strawberry", "g.. 2019. 3. 9.
Collection에대하여 -1 Collection에대하여 java와 kotlin의 Collection에 대하여 알아보겠습니다. 자료구조 상속,구현도 1 . 다른 언어와 달리 kotlin에서는 변경가능하고 변경 불가능한 콜렉션(list, set, map)을 구분합니다. 예를들어 Kotlin의 List유형은 읽기 전용의 작업을 제공하는 인터페이스입니다. size와 get등의 함수가 내장되어있습니다. 자바와 마찬가지로 Collection를 상속하며 , Iterable도 상속합니다. 목록을 변경하려면 MutableList인터페이스를 이용해 추가할수 있습니다 .이는 Set/ MutableSet및 Map/MutableMap도 동일합니다 ex)val list = listOf() //변경 불가능한 listval mutableList = mutabl.. 2019. 3. 9.
Kotlin - inline, noinline, clossline, reified Kotlin - inline, noinline, clossline일급함수inline, noinline을 이해하기 위해서는 일급함수에 대한 이해가 필수적입니다.이미 알고있으신 내용이면 편하게 스크롤을 내려주세요.일급함수는 스스로 객체로써 취급되는 함수로 다른 함수를 파라미터로 전달받고 반환할 수 있는 함수를 뜻합니다. 이부분은 코드를 보는 편이 더 좋을 것 같습니다.fun print(body:(Int,Int) -> Int) { println(body(5,5))} print({a,b->a}) 위 함수를 보겠습니다. 위 함수는 두개의 정수를 받아 하나의 정수값만을 출력하는 함수입니다. 위와같이 선언을 하게된다면 java에서 아래와 같은 코드로 변환을하여 사용할 수 있습니다. public final void p.. 2019. 3. 9.
우주 시대 - 행나이를 주었을때, 나이를 초로 바꾸어보기 우주 시대 - 행나이를 주었을때,나이를 초로 바꾸어보기 Question - 나이를 주면 몇 초가 될지 계산하십시오.지구 : 궤도주기 365.25일 또는 31557600 초수성 : 궤도주기 0.2408467 지구의년금성 : 궤도주기 0.61519726 지구의년화성 : 궤도주기 1.8808158 지구의년목성 : 궤도주기 11.862615 지구의년토성 : 궤도 기간 29.447498 지구의년천왕성 : 궤도주기 84.016846 지구의년해왕성 : 궤도주기 164.79132 지구의년따라서 누군가가 1,000,000 초의 나이가 들었다고 말하면, 지구 나이가 31.69라고 말할 수 있어야합니다. TestCode@Test fun ageOnEarth() { val age = SpaceAge(1000000000) ass.. 2019. 3. 9.
10억초 더하기 10억초 더하기지금 순간에서 10억초를 더한 시간은 언제일까요 ? 계산해보도록 하겠습니다 . TestCodeclass GigasecondTest { @Test fun modernTime() { val gigaSecond = Gigasecond(LocalDate.of(2011, Month.APRIL, 25)) assertEquals(LocalDateTime.of(2043, Month.JANUARY, 1, 1, 46, 40), gigaSecond.date) } @Ignore @Test fun afterEpochTime() { val gigaSecond = Gigasecond(LocalDate.of(1977, Month.JUNE, 13)) assertEquals(LocalDateTime.of(2009, Mon.. 2019. 3. 3.
RNA를 DNA로 바꾸기 RNA를 DNA로 바꾸기 DNA 가닥이 주어지면 RNA 보체를 돌려줍니다DNA와 RNA 가닥은 모두 핵산 염기 서열입니다.DNA에서 발견되는 4 개의 뉴클레오타이드는 아데닌 ( A ), 시토신 ( C), 구아닌 ( G ) 및 티민 ( T )입니다.RNA에서 발견되는 4 개의 뉴클레오티드는 아데닌 ( A ), 시토신 ( C ), 구아닌 ( G ) 및 우라실 ( U )입니다.DNA 가닥이 주어지면, 전사 된 RNA 가닥은 각 뉴클레오타이드를 보체로 대체하여 형성됩니다 :G -> CC -> GT -> AA -> U TestCodeclass RnaTranscriptionTest { @Test fun cytosineComplementIsGuanine() { assertEquals("G", transcribeToR.. 2019. 3. 3.
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.
영어에서 돼지 라틴어로 번역하기 영어에서 돼지 라틴어로 번역하기 돼지라틴어란? 돼지 라틴어 (Pig Latin)는 혼란스럽게 만들려는 아동용 언어입니다. 몇 가지 간단한 규칙 (아래)을 준수하지만 신속하게 말하면 비 아동 (및 모국어가 아닌 사람들)이 이해하기가 정말 어렵습니다. 규칙 1 : 단어가 모음 소리로 시작하는 경우 "ay"소리를 단어 끝에 추가하십시오. 단어의 시작 부분에있는 "xr"과 "yt"는 모음 소리를 만듭니다 (예 : "xray"-> "xrayay", "yttria"-> "yttriaay").규칙 2 : 단어가 자음으로 시작하는 경우 단어의 끝으로 이동 한 다음 단어 끝에 "ay"소리를 추가하십시오. 자음은 여러 개의 자음으로 구성 될 수 있습니다 (예 : "chair"-> "airchay").규칙 3 : 단어가 자.. 2019. 2. 24.