DSL 영역 특화 언어 Domain Specific Language 선언적 선언! 깔끔한 API 작성할 수 있게 돕는 코틀린 기능 확장 함수 / 중위 호출 / 연산자 오버로딩 / 관례 / 수신객체지정 람다. 중위 연산자 - 호출할때 읽기 쉽고 표현력이 좀 더 좋게. 함수의 인자는 1개 여야 되고. infix 키워드가 있어야 된다. 관례 코틀린 큐칙을 읽고 유지하며 이해하기 쉬운 코드를 만들기위한 권장 사례 지침? 함수 속성 , 지역변수 카멜 케이스 / 클래스 및 인터페이스 이름은 파스칼 케이스.. 상수는 대문자로만 if else -> when 지향 확장 기능 및 속성을 사용해 기존 클래스 기능 추가. 영역 특화 언어 개념 DSL 은 선언적 개념임 , 원하는 결과를 기술 하고 세부 실행은 엔진에 맡김 . 원하는 결과를 얻기 위
제네릭스 실체화한 파라미터 , 선언지점 변성에 대해 소개 실체화한 타입 파라미터 사용? 타입 인자로 쓰인 구체적인 타입을 실행 시점에 알 수 있다? 요약 제네릭 타입 사용시 타입을 일반화되어 재사용성을 높이지만 사용시점에서 구체적인 타입을 알수 없다. 이 때 실체화한 타입 파라미터를 사용해 실행 시점 타입 인자의 구체적인 타입을 알 수 있다. 선언 지점 변경을 사용하면 타입 인자의 상위/하위 타입을 지정 가능하다 자바에선 ? 임 왜 사용? 일반적으로 제네릭 타입은 컴파일 시점에서 타입 소거가 일어나. 실행시점에 제네릭타입 정보를 알수 없음, 그래서 실체화한 타입파라미터 사용. 타입 정보유지. 선언 지점 변성으로 타입인자 제한해서.. 특정 인자만 사용 가능하도록 제한. 코드 안정성 높임 코드 재사용성 증대 언제 사용 할까?? 주로 인라인 함수에 실체화한 타입 파라미터
고차 함수: 파라미터와 반환값으로 람다 사용 람다를 인자로 받거나 반환하는 고차 함수를 만드는 방법을 다룸 고차함수 정의 함수 타입 람다를 인자로 받는 함수를 정의하려면? 타입을 어떻게 선언할지 알아 보자. // 널이 될수 있는 함수타입 변수도 가능. var canReturnNull: ((Int, Int) -> Int)? = { x, y -> null } // Declare a function type parameter for operation that takes two Int arguments and returns an Int fun twoAndThree(operation: (Int, Int) -> Int) { // Call the operation function with arguments 2 and 3 and store the result in the result variable val resul
코틀린답게 사용하기 연산자 오버로딩 기타 관례 언어의 기능과 미리 정해진 이름의 함수를 연결 기법을 관례라고 함. (ex plus메서드 정의는 + 연산자 사용) 관례를 사용하면 자바 코드를 수정하지 않아도 새로운 기능 추가 가능함. 코틀린린은 관례에 의존 함. 출력값 8 왜 쓸 까? 자바와의 상호 운용성 , 기존 자바 클래스에 새로운 기능을 쉽게 추가가능. 객체 지향과 함수형 프로그래밍 스타일 통합 산술 연산자 오버로딩 원시 타입에만 산술 연산자 사용 가능 이항 산술 연산자 오버로딩 operator fun Point.plus(other: Point): Point {
코틀린 타입시스템 널 가능성 NPE를 피할 수 있게 돕는 특성 Null에 대한 접근 방법을 실행시점 -> 컴파일러 시점으로 옮김 (코틀린) 미리 감지해서 예외를 줄인다! 널이 될 수 있는 타입 널 되는 타입 명시적 지원? 프로퍼티나 변수에 null을 허용하는 방법? 코틀린에선 함수작성시 함수가 널을 허용하나? 실행 시점에 Null 되는 모든 경우 포함 타입 뒤에 ? 붙여줌으로서 Null 참조 가능 그러나 널이 가능한 타입 변수 있으면 연산이 제한됨. fun strLenSafe (s: String?) = s.length () 널이 될수있는 값은 ! 널이될수없는 값타입 변수에 대입 금지! 그럼 왜사용하지? 필요한 널(null) 참조 문제를 최소화할 수 있도록 설계함 널을 명시적으로 표현! 널 관련 문제 방지 안정성 계속해서 Nul
코틀린의 클래스 코틀린 선언은 기본적으로 final , public 코틀린의 인터페이스는 프로퍼티 선언이 들어갈 수 있다 코틀린의 내부클래스는 기본적으로 자바에서 정적 중첩클래스로 선언되 외부클래스 참조X 이는 중첩 클래스가 외부 클래스의 인스턴스에 대한 참조를 갖지 않기 때문 ineer 키워드 사용하면 외부 클래스 인스턴트 참조를 가져서 클래스 멤버 접근가능 왜 기본적으로 정적 중첩클래스 ? 내부 클래스시 외부클래스의 참조를 가지고 있어서 이로인한 메모리 사용량 증가,. 객체지향 설계 -> 바깥 클래스와 결합도가 낮아 의존성 역전원칙을 적용하기 쉬워짐. 바 깥클래스의 인스턴스가 변경되어도 중첩 클래스에는 영향을 주지않음 val outer = OuterClass(2) nested.printFields(outer) // 출력: outerField: 2, nestedFi
코틀린 컬렉션 만들기 hashSetof() ,arrayListOf(),hashMap() 코틀린은 자신만의 컬렉션 기능을 제공하지않고 자바 컬렉션을 활용해 상호작용이 쉬움. last() , max() 기능으로 좀더 강력한 기능 있음 Default Parameter (가독성 향상을 위해) 함수를 호출할때 파라미터가 많은 경우 ? 디폴트 파라미터를 설정해줘서 생략가능하게 할 수 있다 미리 값을 셋팅하는것. joinToString(list,",","", "'"') -> joinToString(list, "; ") 또하나 파라미터 지정인자값을 이름으로 정할 수 있다. 이 경우 순서를 무시할 수 있다. 파라미터 지정인자값 음.. 코드의 가독성이 좋아져서 적용해볼만 하지만..? 실무에선 그냥 안쓰는 추세 같다. IDEA도 잘나오고 개인적으론 딱히 .. 최상위 함수와 프로퍼티 여기서는 한 파일에 모아두고 자바