Kotlin

Studying/Kotlin

[Kotlin In Action] 4장. 클래스, 객체, 인터페이스(4) - object 키워드 : 클래스 선언과 인스턴스 생성

✅ object 키워드 : 클래스 선언과 인스턴스 생성 코틀린에서는 object 키워드를 다양한 상황에서 사용하지만 모든 경우 클래스를 정의하면서 동시에 인스턴스(객체)를 생성한다는 공통점이 있음 object 키워드를 사용하는 상황은 다음과 같음 객체 선언(Object Declaration) : 싱글턴을 정의하는 방법 중 하나 동반 객체(Companion Object) : 인스턴스 메서드는 아니지만 어떤 클래스와 관련 있는메서드와 팩토리 메서드를 담을 때 사용 동반 객체 메서드에 접근할 때는 동반 객체가 포함된 클래스의 이름을 사용할 수 있음 java의 static과 같음 객체 식은 자바의 무명 내부 클래스 대신 쓰임 📌 객체 선언 : 싱글턴을 쉽게 만들기 자바에서는 보통 클래스의 생성자를 private..

Studying/Kotlin

[Kotlin In Action] 4장. 클래스, 객체, 인터페이스(3) - 컴파일러가 생성한 메서드 : 데이터 클래스와 클래스 위임

✅ 컴파일러가 생성한 메서드 : 데이터 클래스와 클래스 위임 자바에서는 클래스가 equals, hashCode, toString과 같이 기계적으로 구현할 수 있는 메서드들이 존재 하지만 코틀린에서는 한걸음 더 나가서 이러한 메서드를 기계적으로 생성하는 작업을 보이지 않는 곳에서 해줌 따라서 필수 메서드로 인한 잡음 없이 소스코드를 깔끔하게 유지할 수 있음 📌 모든 클래스가 정의해야 하는 메서드 자동 생성 자바와 마찬가지로 코틀린 클래스도 toString, equals, hashCode 등을 오버라이드하여 사용할 수 있음 만약 어떤 클래스가 데이터를 저장하는 역할만을 수행한다면 위의 메서드들을 반드시 오버라이드해야 함 IDE에서 자동으로 메서드들을 정의해주고, 작성된 메서드의 정확성과 일관성을 검사해줌 하..

Studying/Kotlin

[Kotlin] 코틀린의 Scope Function(범위 지정 함수)

✅ 코틀린의 Scope Function이란? 코틀린 표준 라이브러리에서 제공하는 확장함수 목적 : 간결성, 명료성, 유지보수 용이성 정의 : 객체의 컨텍스트 내에서, 실행 가능한 코드 블럭을 만드는 함수 종류 : let, run, apply, also, with 람다식이 제공된 객체에 범위 지정 함수를 호출할 경우 임시 범위가 생성되며, 이 범위에서 이름 없이 객체에 접근이 가능하다. 다섯가지 범위 지정 함수의 차이점 수신 객체 접근 방법의 차이 : this와 it Return 값 : 수신객체 자체인지, 마지막 행인지(lambda result) 다섯가지 범위 지정 함수를 각 함수의 특징에 맞게 사용하는 것이 좋다. 수신 객체(Receiver) : 확장 함수가 호출되는 대상이 되는 값(객체) 수신 객체 지..

Studying/Kotlin

[Kotlin In Action] 4장. 클래스, 객체, 인터페이스(2) - 뻔하지 않은 생성자와 프로퍼티를 갖는 클래스 선언

✅ 뻔하지 않은 생성자와 프로퍼티를 갖는 클래스 선언 자바에서는 생성자를 하나 이상 선언할 수 있음 코틀린도 비슷하지만 바뀐 부분이 있는데 주 생성자와 부 생성자를 구분함 주 생성자 : 클래스를 초기화할 대 주로 사용하는 간략한 생성자로, 클래스 본문 밖에서 정의 부 생성자 : 클래스 본문 안에서 정의 또한 코틀린에서는 초기화 블록을 통해 초기화 로직을 추가할 수 있음 📌 클래스 초기화 : 주 생성자와 초기화 블록 보통 클래스의 모든 선언은 중괄호 사이에 들어감 클래스 이름 뒤에 오는 괄호로 둘러싸인 코드를 주 생성자라고 부름 생성자 파라미터를 지정하고 파라미터에 의해 초기화되는 프로퍼티를 정의하는 두 가지 목적에 쓰임 class User constructor(_nickname : String) { //..

Studying/Kotlin

[Kotlin In Action] 4장. 클래스, 객체, 인터페이스(1) - 클래스 계층 정의

코틀린의 클래스와 인터페이스는 자바 클래스, 인터페이스와는 약간 다름 예를 들면, 인터페이스에 프로퍼티 선언이 들어갈 수 있음 자바와 달리 코틀린 선언은 기본적으로 final이며 public 중첩 클래스는 기본적으로 내부 클래스가 아님(코틀린 중첩 클래스에는 외부 클래스에 대한 참조가 없음) 코틀린은 짧은 주 생성자 구문으로도 거의 모든 경우를 잘 처리할 수 있을 뿐더러 복잡한 초기화 로직을 수행하는 경우를 대비한 완전한 문법도 존재 프로퍼티도 마찬가지이며, 필요한 경우 접근자를 직접 정의하여 사용할 수 있음 코틀린 컴파일러는 번잡스러움을 피하기 위해 유용한 메서드를 자동으로 만들어줌 클래스를 data로 선언하면 컴파일러가 일부 표준 메소드를 생성 또한, 코틀린 언어가 제공하는 위임(delegation)..

Studying/Kotlin

[Kotlin In Action] 3장. 함수 정의와 호출(5) - 로컬 함수와 확장

많은 개발자들이 좋은 코드의 중요한 특징 중 하나가 중복이 없는 것이라 믿음 그래서 그 원칙에는 반복하지 말라라는 이름도 붙어있음(DRY : Dont' Repeat Yourself) 하지만 자바 코드를 작성할 때 DRY 원칙을 피하기는 쉽지 않음 많은 경우 메서드 추출 리팩토링을 적용해서 긴 메서드를 부분부분 나눠 각 부분을 재활용할 수 있음 하지만 그렇게 코드를 리팩토링하게 되면 클래스 안에 작은 메서드가 많아지고, 각 메서드 사이의 관계를 파악하기 힘들어 코드를 이해하기 더 어려워질 수 있음 리팩토링을 진행하여 추출한 메서드를 별도의 내부 클래스(Inner Class) 안에 넣으면 코드를 깔끔하게 조직할 수는 있지만, 그에 따른 불필요한 준비 코드가 늘어나게 됨 코틀린에는 더 깔끔한 해법이 있다? 코..

Studying/Kotlin

[Kotlin In Action] 3장. 함수 정의와 호출(4) - 문자열과 정규식 다루기

✅ 문자열과 정규식 다루기 코틀린은 다양한 확장 함수를 제공함으로써 표준 자바 문자열을 더 즐겁게 다루게 해줌 또한 혼동이 야기될 수 있는 일부 메서드에 대해 더 명확한 코틀린 확장 함수를 제공함으로써 프로그래머의 실수를 줄여줌 📌 문자열 나누기 많은 개발자가 "12.345-6.A".split(".")의 호출 결과가 [12, 345-6, A] 배열이라고 생각할 것 하지만 위의 코드를 실행할 경우 자바에서는 빈 배열을 반환함 split의 구분 문자열은 실제로는 정규식이기 때문 따라서 마침표(.)는 모든 문자를 나타내는 정규식으로 해석됨 하지만 코틀린에서는 자바의 split 대신에 여러 가지 다른 조합의 파라미터를 받는 split 확장 함수를 제공함으로써 혼동을 야기하는 메서드를 감춤 정규식을 파라미터로 받..

Studying/Kotlin

[Kotlin In Action] 3장. 함수 정의와 호출(3) - 컬렉션 처리

✅ 컬렉션 처리 : 가변 길이 인자, 중위 함수 호출, 라이브러리 지원 📌 자바 컬렉션 API 확장 코틀린 컬렉션은 자바와 같은 클래스를 사용하지만 더 확장된 API를 제공 last와 max등이 모두 확장 함수로 정의 되어있음 코틀린 표준 라이브러리는 수많은 확장 함수를 포함하기 때문에 모두 다 알 필요는 없을 뿐더러, 사용을 원하는 경우 IDE의 코드 완성 기능을 통해 메소드나 함수를 찾아 살펴보며 사용할 수 있음 IDE가 표시해주는 목록에서 원하는 함수만 선택하면 됨 📌 가변 인자 함수 : 인자의 개수가 달라질 수 있는 함수 정의 가변 길이 인자(Varargs)는 메서드를 호출할 때 원하는 개수만큼 값을 인자로 넘기면 자바 컴파일러가 배열에 그 값들을 넣어주는 기능 코틀린의 가변 길이 인자도 자바와 ..

Studying/Kotlin

[Kotlin In Action] 3장. 함수 정의와 호출(2) - 확장 함수와 확장 프로퍼티

✅ 메서드를 다른 클래스에 추가 : 확장 함수와 확장 프로퍼티 기존 코드와 코틀린 코드를 자연스럽게 통합하는 것은 코틀린의 핵심 목표 중 하나 기존 자바 API를 재작성하지 않고도 코틀린이 제공하는 여러 편리한 기능을 사용할 수 있는 방법은?? 확장 함수의 활용 개념적으로 확장 함수는 단순함 확장 함수는 어떤 클래스의 멤버 메서드인 것처럼 호출할 수 있지만 그 클래스의 밖에 선언된 함수 확장 함수를 보여주기 위한 어떤 문자열의 마지막 문자를 돌려주는 메서드 package strings fun String.lastChar() : Char = this.get(this.length - 1) 확장 함수를 만들기 위해선 추가하려는 함수 이름 앞에 그 함수가 확장할 클래스의 이름을 덧붙이기만 하면 됨 클래스 이름을..

Studying/Kotlin

[Kotlin In Action] 3장. 함수 정의와 호출(1) - 컬렉션과 함수 만들기

✅ 코틀린에서 컬렉션 만들기 코틀린의 컬렉션은 자바 컬렉션 구조를 확장해 구현되었음 그렇기 때문에 자바에서 코틀린 함수를 호출하거나 코틀린에서 자바 함수를 호출할 때 자바와 코틀린 컬렉션을 서로 변환할 필요가 없음 코틀린 컬렉션은 자바 컬렉션과 똑같은 클래스 하지만 코틀린에서는 자바보다 더 많은 기능을 사용할 수 있음 ex) 리스트의 마지막 원소를 가져오거나 수로 이뤄진 컬렉션에서 최댓값을 찾을 수 있음 val strings = listOf("first", "second", "third") println(strings.last()) // third val numbers = setOf(1, 14, 2) println(numbers.max()) // 14 코틀린의 컬렉션의 종류는 List, Set, Map ..

Studying/Kotlin

[Kotlin In Action] 2장. 코틀린 기초(4) - 코틀린의 예외 처리

✅ 코틀린의 예외 처리 코틀린의 예외 처리는 자바나 다른 언어의 예외 처리와 비슷함 함수는 정상적으로 종료할 수 있지만 오류가 발생하면 예외를 던질 수 있음 함수를 호출하는 쪽에서는 그 예외를 잡아 처리할 수 있음 // 코틀린의 기본 예외 처리 구문은 자바와 비슷함 if (percentage !in 0..100) { throw IllegalArgumentException ( "A percentage value must be between 0 and 100: $percentage") } 다른 클래스와 마찬가지로 예외 인스턴스를 만들 때도 new를 붙일 필요가 없음 자바와 달리 코틀린의 throw는 식이므로 다른 식에 포함될 수 있음 val percentage = if (number in 0..100) nu..

Studying/Kotlin

[Kotlin In Action] 2장. 코틀린 기초(3) - while과 for 루프

✅ 대상을 이터레이션 : while과 for 루프 코틀린 특성 중 자바와 가장 비슷한 것은 이터레이션 코틀린의 while문은 자바와 동일함 for는 자바의 for-each 루프에 해당하는 형태만 존재 코틀린의 for는 C#과 마찬가지로 for in 형태를 취함 이런 for 루프는 컬렉션에 대한 이터레이션에 가장 많이 쓰임 📌 while 루프 코틀린에는 while과 do-while 루프가 있으며 자바와 큰 차이가 없음 // while while (조건) { // 조건이 참인 동안 본문을 반복 실행 /* ... */ } // do-while do { /* ... */ } while (조건) // 맨 처음 무조건 본문을 한번 실행한 다음 조건이 참인 경우 반복 실행 📌 수에 대한 이터레이션 : 범위와 수열 자..

Dahoonkk
'Kotlin' 태그의 글 목록 (3 Page)