왜 가변성을 제한해야 하는가? 가변성이 있으면 코드의 실행을 추론하기 어려워진다. 멀티스레드 프로그램일 경우에는 적절한 동기화가 필요하다. 변경이 일어나는 지점에서 충돌이 발생가능 테스트하기 어렵다. 일관성 유지 및 복잡성 증가에 대한 문제가 발생한다. Kotlin
Kotlin의 특징 중 하나는 null-safety의 메커니즘으로 인해 Null-Pointer Exception은 Kotlin에서 보기 힘들어 졌다.하지만 Kotlin이 아닌 Java, C 등의 언어와 협업하여 사용할 때는 예외가 발생할 수 있다. 예를 들어 Sprin
상태를 정의할 떄는 변수와 프로퍼티의 스코프를 최소화 하는 것이 좋다. 프로퍼티보다는 지역 변수를 사용하자. 최대한 좁은 스코프를 갖게 변수를 사용하자. 다음과 같은 예제를 보자 왜 변수의 스코프를 좁게 만들어야하냐? 스코프 내부에 스코프가 있을 수도 있기때문에
kotlin의 타입추론은 할당 될 때의 정확하게 오른쪽에 있는 피연산자에 맞게 설정된다.다음과 같은 예를 보자.이경우 animal이 Zebra 타입으로 정의되어 상위클래스인 Animal을 설정하여도 오류가 남을 볼 수 있다.절대로 슈퍼클래스 또는 인터페이스로는 설정되지
직접 오류를 정의하여 사용하는 것보다는 최대한 표준 라이브러리의 오류를 사용하는 것이 좋다.많은 사람들이 잘 알고있는 오류를사용하면 다른 사람들이 API를 더 쉽게 배우고 이해할 수 있다. 일반적으로 사용되는 오류는 다음과 같다.IllegalArgumentExcepti
Kotlin에서는 다음과 같은 확장함수를 지원한다. run apply let with also
null : 값이 부족하다(lack of value)프로퍼티의 값이 null이라는 것은 값이 설정되어 있지 않거나, 제거되어있다는 것을 의미한다. null은 최대한 명확한 의미를 가지고 사용되어야 하고, 개발자는 이에 따라 적절하게 nullable 값을 처리해야 한다.
리소스를 닫아라 더이상 리소스가 필요하지 않을 때, close 메소드를 활용하여 명시적으로 닫아야하는 리소드들이 있다. 코트린/JVM에서 사용하는 이런 리소스가 굉장히 많은데 대표적으론 다음과 같다. InputStream과 OutputStream java.sql.Co
코틀린은 간결성, 짧은 코드를 목표로 설계된 프로그래밍 언어가 아니라 가독성(read-ability)를 목표로 설계된 프로그래밍 언어이다. 어떻게 하면 코틀린에서 제공하는 기능을 사용하여 깨끗하고 의미 있는 코드를 설계할 수 있을까. 그 방법에 대해 알아보자.널리 알려
연산자 오버로드를 할 때는 의미에 맞게 사용하라 연산자 오버로딩은 굉장히 강력한 기능이지만, 큰 힘에는 큰 책임이 따른다라는 말처럼 위험할 수 있다. 팩토리얼을 구하는 함수를 보자. 이 함수는 Int 확장 함수로 정의되어 있음으로 굉장히 편리하게 사용할 수 있다.
infix란? kotlinlang.org - infix Infix 함수는 두개의 변수 가운데 오는 함수를 의미한다. 코틀린에서 기본적으로 정의된 Infix 함수들 중에 Pair를 만드는 to가 있습니다. infix 함수 선언은 다음의 룰을 따라야 한다. 확장함수의
Unit?형은 null 또는 Unit을 가질 수 있다.True와 False를 가지는 Boolean과 비교해 서로 바꿔서 사용할 수 있다.일반적으로 Unit?을 사용하는 것은 이런 경우이다.Unit?을 반환값으로 가지는 함수는 멋지고 창의적으로 보일 수도 있지만, 읽을
프로퍼티란?? kotlinlang-properties 코틀린 클래스에서의 프로퍼티는 수정가능한 프로퍼티var과 read-only 읽기전용 프로퍼티 val로 나뉜다. 프로퍼티를 활용하기 위해서는 이름으로 참조가 가능하다. Getters와 Setters 프로퍼티
Companion 객체 팩토리 함수, 확장 팩토리 함수, 톱레밸 팩토리 함수, 가짜 생성자, 팩토리 클래스의 메서드가 무엇인지 안다면 보지 않아도 됨
아직 너무나 어려운 DSL만들기
지금까지 사용해왔던 인터페이스와 추상클래스의 차이를 알고 있는가?
컴포지션이 무엇인지, 상속과의 차이는 무엇인지 무엇을 활용해야 하는지
class에 data 한정자를 붙이면 무엇이 달라질까?
싱글 추상 메소드가 무엇인지, 그리고 상태패턴에 대해 간단히 톺기
왜 자식코루틴에서 에러가 부모코루틴까지 전달되는가? 코루틴이 돌아가는 방식을 내부소스부터 천천히 톺아보자.
equals, compareTo, hashCode에 적용되는 규칙과 유의점, 이들을 오버라이드 해도 될까?
API의 필수적이지 않는 부분을 확장함수로 추출하라 클래스의 메서드를 정의할 때는 메서드를 멤버로 정의할 것인지, 확장 함수로 정의할 것인지 결정해야 한다. 두 가지 방법은 거의 비슷하고, 호출하는 방법도 비슷하고, 리플렉션으로 레퍼런싱하는 방법도 비슷하다. 또한
객체를 생성하는데 있어 효율적으로 메모리를 관리해보자.
코틀린/JVM 에서의 원시 타입, 참조 타입을 어떻게 다루는가
지금껏 사용해왔던 일급 콜렉션은 잘못됐다.
함수앞의 inline한정자는 무엇이고, 언제 사용해야하는가? 또한 사용함에 따라 장점과 단점이 무엇인지 알아보자.
의미가 명확하지 않는 타입, 여러 측정 단위를 함께 사용하는 경우 인라인 클래스를 활용하자.
사용되지 않은 객체에 null을 부여하고 가비지 컬렉터가 지우도록 하자.
가비지 컬렉터와 레퍼런스에 대해 간단히 알아보자.
효율적인 컬렉션 처리를위해 시퀀스와 이터러블에 대해 얼마나 알고있는가?
효율적인 메모리 사용을 위해 객체생성을 지연시키는 lateinit / lazy가 어떻게 돌아갈까?
효율적인 콜렉션 처리를 위해 1. 시퀀스를 사용하라, 2. 컬렉션 처리 단계수를 제한하라, 3. 기본 자료형 배열을 사용하라, 4. mutable 컬렉션을 사용하라 끝
DSL를 통한 테스트함수 커스텀해보기
디스패쳐와 CSP 그리고 코루틴이 경량 쓰레드라 불리우는 이유에 대하여
Kotlin 2.0.0이 등장하며 K2컴파일러를 지원한다. 기존 컴파일러의 프론트엔드, 백엔드 그리고 K2에서 제공할 New fronted에 대해 설명한다.컴파일러는 소스 코드를 낮은 수준의 기계언어로 변환하는 블랙박스이다.Kotlin의 간단한 if문은 복잡한 자바 바
6/29 (Sa) pm 1:00 - 6/29 (Sa) pm 6:00 건국대학교에서 KotlinConf2024가 열렸다. 코틀린 스프링 개발자가 기억할만한 내용들만 간략하게 정리해보았다.
Kotlin Inline(Value) Class에 대하여 설명한다.