일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- python
- k8s #kubernetes #쿠버네티스
- terminal
- 코루틴 빌더
- preemption #
- 티스토리챌린지
- 코루틴 컨텍스트
- JanusWebRTC
- JanusWebRTCGateway
- kotlin
- pytest
- 달인막창
- 오블완
- PersistenceContext
- 헥사고날아키텍처 #육각형아키텍처 #유스케이스
- 개성국밥
- Value too long for column
- 겨울 부산
- tolerated
- 깡돼후
- PytestPluginManager
- JanusGateway
- VARCHAR (1)
- mp4fpsmod
- vfr video
- Spring Batch
- taint
- 자원부족
- JanusWebRTCServer
- table not found
목록Programming Language/Kotlin (19)
너와 나의 스토리
연산자 오버로딩 자바에는 표준 라이브러리와 밀접하게 연관된 언어 기능이 몇 가지 있다. 예를 들어 for ... in 루프에 java.lang.Iterable을 구현한 객체를 사용할 수 있다. 코틀린에서는 이러한 언어 기능이 어떤 타입(클래스)과 연관되기보다는 특정 함수 이름과 연관된다. 예를 들어 어떤 클래스 안에 plus라는 이름의 특별한 메서드를 정의하면 그 클래스의 인스턴스에 대해 + 연산자를 사용할 수 있다. 이런 식으로 어떤 언어 기능과 미리 정해진 이름의 함수를 연결해주는 기법을 코틀린에서는 관례(convention)라고 부른다. 예: Point 클래스 data class Point(val x: Int, val y: Int) 산술 연산자 오버로딩 이항 산술 연산 오버로딩 Point에서 지원하..
컬렉션과 배열 코틀린 컬렉션은 자바 라이브러리를 바탕으로 만들어졌고 확장 함수를 통해 기능을 추가한다. 널 가능성과 컬렉션 변수 타입 뒤에 ?를 붙이면 그 변수에 널을 저장할 수 있다는 뜻인 것처럼 타입 인자로 쓰인 타입에도 같은 표시를 사용할 수 있다. val numbers1 = ArrayList()? // numbers1이 null이 될 수 있다. val numbers2 = ArrayList() // 컬렉션 안에 null 값을 넣을 수 있다. val numbers3 = ArrayList()? // 널이 될 수 있는 값으로 이뤄진 널이 될 수 있는 리스트 filterNotNull(): 컬렉션에서 널 값을 걸러내는 함수 fun addValidNumbers(numbers: List) { val validN..
코틀린의 원시 타입 코틀린은 원시 타입과 래퍼 타입을 구분하지 않는다. 원시 타입: Int, Boolean 등 자바는 원시 타입(primitive type)과 참조 타입(reference type)을 구분한다. 원시 타입 예: Int, Boolean 등 원시 타입의 변수에는 그 값이 직접 들어간다. 참조 타입 예: String 등 참조 타입의 변수에는 메모리상의 객체 위치가 들어간다. 원시 타입의 값에 대해 메서드를 호출하거나 컬렉션에 원시 타입 값을 담을 수 없다. 자바는 참조 타입이 필요한 경우 특별한 래퍼 타입으로 원시 타입 값을 감싸서 사용한다. 예: Int를 java.lang.Integer로 래핑 [Java] // ArrayList lists = new ArrayList(); -> error A..
타입 시스템(Type system) NULL 가능성(Nullability) NullPointerException(NPE) 오류를 피할 수 있도록 돕는 코틀린 타입 시스템의 특성이다. 코틀린에서는 널이 될 수 있는지 여부를 타입 시스템에 추가함으로써 컴파일러가 여러 가지 오류를 컴파일 시 미리 감지해서 실행 시점에 발생할 수 있는 예외의 가능성을 줄일 수 있다. NULL이 될 수 있는 타입 코틀린의 모든 타입은 기본적으로 널이 될 수 없는 타입이다. 코틀린은 널이 될 수 있는 타입을 명시적으로 지원한다. 타입 옆에 물음표(?)를 표시한다. NULL이 될 수 있는 타입의 변수이지만, 현재 NULL이 아님을 주장할 수 있다. 느낌표 2개(!!)를 변수 뒤에 붙인다. 이 표시를 통해 null이 될 수 없는 변수..
람다 식(lambda expression) 다른 함수에 넘길 수 있는 작은 코드 조각 람다를 사용하면 쉽게 공통 코드 구조를 라이브러리 함수로 뽑아낼 수 있다. 자바에서는 일련의 동작을 변수에 저장하거나 다른 함수에 넘기기 위해 익명 내부 클래스(anonymous inner class)를 사용하곤 했다. 익명 내부 클래스를 사용하면 코드를 함수에 넘기거나 변수에 저장할 수 있기는 하지만 상당히 번거롭다. 이와 달리 함수형 프로그래밍에서는 함수를 값처럼 다루는 접근 방법을 택함으로써 이 문제를 해결한다. 클래스를 선언하고 그 클래스의 인스턴스를 함수에 넘기는 대신 함수형 언어에서는 함수를 직접 다른 함수에 전달할 수 있다. 람다 식을 사용하면 코드가 더욱더 간결해진다. 람다 식을 사용하면 함수를 선언할 필..
컴파일러가 생성한 메서드: 데이터 클래스와 클래스 위임 코틀린 컴파일러는 데이터 클래스에 유용한 메서드를 자동으로 만들어준다. 모든 클래스가 정의해야 하는 메서드 자바와 마찬가지로 코틀린 클래스도 toString, equals, hashCode 등을 오버라이드할 수 있다. 고객 이름과 우편번호를 저장하는 간단한 Client 클래스를 만들어서 예제에 사용하자. class Client(val name: String, val postalCode: Int) 문자열 표현: toString() 자바처럼 코틀린의 모든 클래스도 인스턴스의 문자열 표현을 얻을 방법을 제공한다. 이 기본 구현을 바꾸려면 toString 메서드를 오버라이드해야 한다. class Client(val name: String, val posta..
코틀린의 클래스와 인터페이스는 자바 클래스, 인터페이스와는 약간 다르다. 인터페이스에 프로퍼티 선언이 들어갈 수 있다. 코틀린 선언은 기본적으로 final이며 public이다. 클래스 계층 정의 코틀린 인터페이스 코틀린 인터페이스 안에는 추상 메서드뿐 아니라 구현이 있는 메서드도 정의할 수 있다. -> Java 8의 default 메서드와 비슷 코틀린에서는 default 같은 키워드 따로 추가 안 하고 평범한 메서드처럼 선언하면 됨. 다만, 인터페이스에 필드는 들어갈 수 없다. 단순한 인터페이스를 구현해보자. 자바의 extends와 implements를 코틀린에서는 구분하지 않고 ':'로 모두 처리한다. 코틀린에서는 override 변경자는 선택이 아닌 필수로 사용해야 한다. interface Click..
1. 컬렉션 만들기 간단한 컬렉션들을 만들어보자 val set = hashSetOf(1, 7, 53) val list = arrayListOf(1, 7, 53) val map = hashMapOf(1 to "one", 7 to "seven", 53 to "fifty-three") 코틀린은 자체 컬렉션을 제공하지 않다. -> 기존 자바 컬렉션을 활용할 수 있음 코틀린 컬렉션은 자바 컬렉션과 똑같은 클래스지만 자바보다 더 많은 기능을 쓸 수 있다. 예: 리스트의 마지막 원소 가져오기. 수로 이뤄진 컬렉션에서 최댓값 찾기 val numbers = setOf(1, 14, 2) println(numbers.max()) // output: 14 val set = hashSetOf(1, 7, 53) println(s..