728x90

분류 전체보기 331

코틀린 널 안정성 연산자

fun main() { var data: String? = null println("data length : ${data?.length ?: 0}") } 위 소스는 data가 null이면 0을 반환하고 null이 아니면 length를 이용해 문자열의 개수를 얻는 소느 null 점검 코드를 작성하지 않았는데도 널 안정성을 확보 엘비스 - ?: 연산자 엘비스 연산자란 ?: 기호를 말한다. 이 연산자는 변수가 널이면 널을 반환한다. 변수가 널일 때 대입해야 하는 값이나 실행해야 하는 구문이 있을 때, 엘비스 연산자를 이용한다. fun main() { var data: String? = "kuka" println("data = $data : ${data?.length ?: -1}") data = null pri..

(코틀린) 고차 함수

고차 함수(high order fuction)란 함수를 매개변수로 전달받거나 반환하는 함수를 의미합니다. 일반적으로 함수의 매개변수나 반환값은 데이터입니다. 그런데 데이터가 아닌 함수를 매개변수나 반환값으로 이용하는 함수를 고차 함수라 합니다. 이처럼 함수를 매개변수나 반환값으로 이용할 수 있는 것은 앞에서 살펴보았듯이 함수를 변수에 대입할 수 있기 떄문입니다. 다음 코드에서 hofFun()은 고차 함수입니다. 매개변수를 하나 선언했지만 타입이 함수입니다. 따라서 이 함수를 호출하려면 인자로 함수를 전달해야 합니다. 또한, 반환 타입 역시 함수이므로 호출 결과로 함수를 반환받습니다. fun hofFun(arg: (Int) -> Boolean): () -> String { val result = if(ar..

(코틀린) 람다 함수의 반환

람다 함수도 함수이므로 자신을 호출한 곳에 결괏값을 반환해야 할 때가 있다. 람다 함수에서는 return 문을 사용할 수 없다. val some = {no1: Int, no2, Int -> return no1 * no 2} //오류 대신 람다 함수의 반환값은 본문에서 마지막 줄의 실행 결과이다. fun main() { val some= {no1: Int, no2: Int -> println("in lambda function") no1 * no2 } println("result : ${some(10, 20)}") }

(코틀린) 매개변수가 1개인 람다 함수

fun main() { val some = {no: Int -> println(no)} some(10) } 일반적으로 매개변수가 1개인 람다 함수는 위와 같이 작성한다. Int 타입의 매개변수가 1개인 람다 함수를 선언하고 이를 호출한 코드이다. fun main() { val some: (Int) -> Unit = {println(it)} some(10) } 위 코드를 보면 람다 함수의 중괄호가 안에 화살표가 없으므로 매개변수가 없는 것처럼 보입니다. 하지만 람다 함수 앞에 (Int) -> Unit이 매개변수가 1개인 람다 함수임을 알려 줍니다. 이처럼 람다 함수의 매개변수가 1개일 때는 중괄호 안에서 매개변수 선언을 생략하고 println(it)처럼 it 키워드로 매개변수를 이용할 수 있습니다. 출처 ..

코틀린 컬렉션 타입의 데이터 개수만큼 반복문

fun main() { var data = arrayOf(10, 20, 30) for (i in data.indices){ print(data[i]) if (i !== data.size -1) print(",") } } 위 소스는 배열의 크기만큼 for 문을 반복하게 작성한 소스 indices는 컬렉션 타입의 인덱스 값을 의미하므로 for 문을 반복하면서 0,1,2 값을 i에 대입한다. fun main() { var data = arrayOf(10, 20, 30) for ((index, value) in data.withIndex()){ print(value) if (index !== data.size -1) print(",") } } 위의 소스는 for 문을 반복하면서 인덱스와 실제 데이터를 함께 가져..

코틀린 for~in 반복문

fun main() { var sum: Int = 0 for ( i in 1..10){ sum += i } println(sum) } 위 소스는 for 문을 이용해 1부터 10까지 더하기를 수행한다. i in 1..10 코드는 1부터 10까지 1씩 증가하면서 for 문의 실행 영역을 반복하라는 의미이다. 따라서 총 10번 반복해서 실행한다. for 문의 조건은 이와 같이 단순히 1씩 증가 또는 감소하게 만들 수도 있고 2씩 증가하게 만드는 등 다양하게 작성 가능하다. for (i in 1..10){...} -> 1부터 10까지 1씩 증가 for (i in 1 until 10) {...} -> 1부터 9까지 1씩 증가(10은 미포함) for (i in 2 ..10 step 2) {...} -> 2부터 10..

if~else 표현식(expression)

아래 소스는 if~else 문으로 조건에 맞는 코드를 실행하는 동작 외에 그 결괏값을 result라는 변수에 대입 if~else 문을 표현식으로 사용한 예 if~else 문을 표현식으로 사용하려면 else를 생략할 수 없다. if~else 표현식이 반환하는 결괏값은 각 영역의 마지막 줄에 해당한다. 즉, if나 else 부분을 여러 줄로 작성했더라도 마지막 줄의 실행 결과만 반환한다. fun main() { var data = 10 val result = if (data > 0) { println("data > 0") true } else { println("data

kotlin에서 리스트와 맵 예제

코틀린에서는 가변과 불편이라는 2가지 타입의 클래스를 제공한다. List는 불변 타입이므로 size(), get() 함수만 제공하고 데이터를 추가하거나 변경하는 add(), set() 함수는 제공하지 않는다. 그런데, MutableList는 가변타입이므로 size(), get() 함수 이외에 add(), set() 함수를 이용할 수 있다. MutableList는 mutableListOf() 함수로 만들 수 있다. fun main() { var mutableList = mutableListOf(10,20,30) mutableList.add(3,40) mutableList.add(0,50) println( """ list size : ${mutableList.size} list data : ${mutable..

도로명주소 검색 기능 구현 (feat. Daum PostCode Service)

우편번호 검색 서비스를 직접 자신의 서버에 구현 할 경우, 약 1G에 달하는 데이터를 서버가 들고 있어야 하고, 주기적으로 데이터도 업데이트 해줘야 한다. 검색해보니 Daum에서 제공하는 API는 키도 필요 없고, backend에서 처리 할 필요가 없어져서 여기에 소개 해보려고 한다. 관련링크: https://postcode.map.daum.net/guide Daum 우편번호 서비스 우편번호 검색과 도로명 주소 입력 기능을 너무 간단하게 적용할 수 있는 방법. Daum 우편번호 서비스를 이용해보세요. 어느 사이트에서나 무료로 제약없이 사용 가능하답니다. postcode.map.daum.net 예제 코드 : 구현된 모습 :

Javascript 2023.05.10
728x90