본문 바로가기

# 02/코틀린

[Kotlin] 코틀린의 다양한 함수들 2 확장 함수 (extension function)- 클래스의 멤버 함수를 외부에서 더 추가할 수 있다. fun 확장대상.함수명(매개변수, ...) : 반환값 {...return 값} fun main() {val source = "Hello World!"val target = "Kotlin"println(source.getLongString(target))} // String을 확장해 getLongString 추가fun String.getLongString(target : String) : String =if (this.length > target.length) this else target 동일한 함수가 멤버에 존재하면 항상 원본 멤버 함수가 우선 사용된다.this는 확장 대상에 있던 자리의 문자열인 so..
[Kotlin] 코틀린의 다양한 함수들 1 익명 함수(anonymous functions)- 함수가 이름이 없는 것 fun (x: Int, y: Int) : Int = x + y // 함수 이름이 생략된 익명 함수 val add : (Int, Int) -> Int = fun(x, y) = x + y // 익명 함수를 사용한 add 선언val result = add (10, 2) // add 의 사용 val add = fun( x : Int, y : Int ) = x + y val add = { x : Int, y : Int -> x + y } // 람다식과 매우 흡사 하지만 !! 일반 익명 함수에서는 return, break, continue가 사용 가능하지만 람다식에서는 사용하기 어렵다. (라벨 표기법과 같이 사용해야 함!)따라서 익명함수를 사..
[Kotlin] 네트워크 호출 구현 람다식 활용 네트워크 처리 결과에 따른 콜백 함수 구현 콜백(callback) 함수란 특정 이벤트가 발생하기까지 처리 되지 않다가 이벤트가 발생하면 즉시 호출되어 처리하는 함수 기존의 자바 코드 // 성공과 실패 콜백 함수를 위한 인터페이스 선언public interface Callback {void onSuccess (ResultType result);void onError (Exception exception);}// networkCall의 선언public void networkCall (Callback callback) {try {// 성공 시 onSuccess 콜백 함수 호출callback.onSuccess(myResult);} catch ( e: Throwable) {// 실패 시 onError 콜백 함수 ..
[Kotlin] 동기화를 위한 코드 구현 람다식 활용 동기화를 위한 코드 구현하기 동기화? - 변경이 일어나면 안 되는 특정 코드를 보호하기 위한 잠금 기법- 동기화로 보호되는 코드는 임계 영역(Critical Section)- Lock을 활용해 임계 영역을 보호 변수를 사용하는 루틴이 많을때 변경될 수 있는 가능성이 많으므로 공유되는 부분을 보호하기 위해 동기화로 잠궈놓는 것임. 여러개의 루틴이 접근하려고 할때 A 루틴이 먼저 접근시 다른 스레드 등이 접근하지 않도록 잠그는 방식 자바의 Lock과 ReentrantLock Lock lock = new ReentrantLock();lock.lock(); // 잠금try { // 보호할 임계 영역의 코드 // 수행할 작업} finally {lock.unlock(); // 해제} Lock은 여러가지 락 관련 함..
[Kotlin] 다른 함수의 참조에 의한 호출 fun sum ( x : Int, y : Int ) = x + y funcParam (3, 2, sum) // 오류! sum은 람다식이 아님 fun funcParam(a : Int, b : Int, c : (Int, Int) -> Int) : Int {return c (a, b)} funcParam(3, 2, ::sum) // sum이 람다식이 아닌 경우 이렇게 호출해주면 됨! fun main() {// 1. 인자와 반환값이 있는 함수val res1 = funcParam (3, 2, ::sum)println(res1) // 2. 인자가 없는 함수hello(::text) // 반환값이 없음 // 3. 일반 변수에 값처럼 할당val likeLambda = ::sumprintln(likeLambda(6,6))..
[Kotlin] 고차 함수와 람다식 fun main () {val res1 = sum (3,2) // 일반 인자val res2 = mul (sum(3,3), 3) // 인자에 함수를 사용println("res1: $res1, res2: $res2")} fun sum (a : Int, b : Int ) = a + bfun mul (a : Int, b : Int ) = a * b fun main() {println( "funcFunc : $ {funcFunc()}")} fun sum (a : Int, b : Int) = a+bfun funcFunc() : Int { // 함수의 반환값으로 함수 사용return sum(2,2)} fun main() {var result : Int // 일반 변수에 람다식 할당val multi = { x : In..
[Kotlin] 함수형 프로그래밍 코틀린은 다중 패러다임 언어함수형 프로그래밍(FP : Functional Programming)객체 지향 프로그래밍(OOP : Object-Oriented Programming) 함수형 프로그래밍코드 간략, 테스트나 재사용성 증가람다식, 고차 함수를 사용해 구성순수 함수 함수를 여러 가지 조합 형태인 매개변수, 인자, 반환값으로 사용할 수 있다. 순수 함수 이해 부작용이 없는 함수동일한 입력 인자에 대해서는 항상 같은 결과를 출력 혹은 반환 한다.값이 예측이 가능해 결정적이다.// 순수 함수의 예fun sum ( a: Int, b: Int ) : Int {return a + b // 동일한 인자인 a, b를 입력 받아 항상 a+b를 출력 ( 부작용이 없음 )} 순수 함수의 조건- 같은 인자에 대하여 항상..
[Kotlin] 함수 선언하고 호출하기 함수를 선언할때는 매개변수 함수를 사용할 때는 인자 fun sum(a: Int, b: Int) : Int {var sum = a + breturn sum} 단! 매개변수에 val이나 var과 같은 선언 키워드는 사용하지 않는다.빨간색 Int가 리턴값의 자료형을 알려줌. 중괄호 안을 함수의 블럭이라 하고 블럭안이 변수 Int a, b 는 지역변수로 메모리상 스택에 존재 fun 함수 이름 ( [변수 이름: 자료형, 변수 이름: 자료형..] ) : [반환값의 자료형] {표현식...[return 반환값]} 반환값의 자료형이 존재하지 않을 때는 Unit, 매개변수 없을시에 생략 가능 일반적인 함수의 모습fun sum(a: Int, b: Int) : Int {return a + b} 간략화된 함수fun sum(a:..