싱글턴 디자인 패턴중 싱글턴 패턴이 있다. 싱글턴 패턴은 객체를 하나만 생성할 수 있는 클래스이다. 싱글턴 구현 방법은 중 필드에 객체를 생성하고 private 생성자를 통해서 새로운 객체 생성을 막는 방법이 있다. 코틀린에는 객체 선언(object declaration) 기능을 통해서 싱글턴을 지원한다. object declaration 스다듀밸리라는 클래스에 농부 정보를 저장하는 기능을 생각해보자. 스다듀밸리는 하나만 있는 농장이므로 싱글턴 패턴을 적용할 수 있다. object SdardewValley { val farmers = arrayListOf() fun countFarmers() : Int = farmers.size } 객체 선언은 object로 시작을 한다. object 안에는 주 생성자나..
데코레이터 패턴 데코레이터 패턴은 상속을 허용하지 않는 클래스에 새로운 기능을 추가할 때 사용하는 방법이다. 데코레이터라는 클래스를 생성하고 상속되지 않은 클래스의 인스턴스를 데코레이터의 필드에 놓는다. 그리고 기존의 요청은 인스턴스에게 전달한다. 추가하고 싶은 기능은 데코레이터 클래스에 작성을 하면 된다. 코틀린에서 제공하는 데코레이터 패턴 class CountingSet ( val innerSet: MutableCollection = HashSet() ) : MutableCollection by innerSet { var objectAdded = 0 override fun add(element: T): Boolean { objectAdded++ return innerSet.add(element) } ..
데이터 클래스 data class Client(val name: String, val postalCode: Int) 코틀린에서는 클래스 앞에 data 키워드를 붙이면 toString, equals, hashCode를 자동으로 생성해준다. equals와 hashCode는 주생성자의 프로퍼티들을 사용한다. 물론 자기가 직접 toString, equals, hashCode 메서드를 직접 작성할 수 있고, 이 경우에는 컴파일러가 생성해 주지 않고 직접 작성한 것을 사용한다. 데이터 클래스는 abstract, open, sealed, inner 클래스가 될 수 없다. 위 코드에서 프로퍼티들은 val을 사용했지만, var을 사용해서 생성할 수도 있다. 하지만 데이터 클래스는 모든 프로퍼티가 읽기 전용인 불변 클래스..
코틀린에서도 toString, equals, hashCode 메서드를 오버라이딩할 수 있다. 그리고 이 메서드들은 자바와 같은 역할을 한다. Mac OS의 IntelliJ에서 [Control] + [O]를 입력하면 해당 메서드들을 쉽게 정의할 수 있다. toString toString은 문자열을 표현할 때 사용하는 방법이다. 클래스에 toString을 오버라이딩하지 않으면 인스턴스를 출력할 때 주소값이 출력된다. class Client(val name: String, val postalCode: Int) { override fun toString() = "Client(name=$name, postalCode=$postalCode)" } 위 코드는 Client 클래스에 toString 메서드를 작성한 것이..
추상 프로퍼티 interface User { val nickname: String } 코틀린 인터페이스에는 추상 프로퍼티를 선언할 수 있다. 인터페이스는 상태 저장이나 프로퍼티의 값을 조회할 수 있는 getter과 같은 기능이 없기 때문에 상속 받은 클래스에서 이를 구현해야 한다. 하위 클래스에서 추상 프로퍼티 구현 interface User { val nickname: String } class YoutubeUser(override val nickname: String): User class TwitterUser(val email: String): User { override val nickname: String get() = email.substringBefore('@') } class Tistory..
주 생성자(primary constructor) 다양한 생성자 정의 방법 class User(val nickname: String) 코틀린에서 클래스를 정의할 때 중괄호를 붙여주지 않아도 된다. 클래스 뒤에 오는 괄호로 둘러싸인 코드(val 선언에 해당하는 부분)가 주 생성자이다. 주 생성자는 생성자 파라미터 지정 및 생성자에 의해 초기화되는 프로퍼티 정의에 사용된다. 이 User 클래스를 풀어쓰면 아래와 같다. class User constructor(_nickname: String) { val nickname: String init { nickname = _nickname } } constructor은 주 생성자나 부 생성자 정의를 위해서 사용하는 키워드이다. init 키워드는 초기화 블록을 정의하는..
인터페이스 코틀린에서 인터페이스 정의를 위해서 interface 키워드를 사용한다. 코틀린 인터페이스에는 추상 메서드 뿐만 아니라 자바의 default method처럼 구현이 있는 메서드도 정의할 수 있다. 하지만 필드는 정의할 수 없다. interface Clickable { fun click() fun print() { println("click") } } class Button : Clickable { override fun click() { println("override click") } } 인터페이스 Clickable의 click은 추상 메서드이고 print는 구현된 메서드이다. 그리고 Button은 이 Clickable 인터페이스를 구현하고 있다. 자바에서는 추상 클래스를 상속할 때 exte..
중복 코드 제거하기 class User(val id: Int, val name: String, val address: String) fun saveUser(user: User) { if (user.name.isEmpty()) { throw IllegalArgumentException("Can't save user ${user.id}: empty Name") } if (user.address.isEmpty()) { throw IllegalArgumentException("Can't save user ${user.id}: empty Address") } } 위의 코드는 User를 객체를 저장할 때 name, address의 필드를 검사한다. name, address를 검증하는 조건문은 중복된다. 이렇게 반복..
확장 함수 확장 함수(extension function)는 클래스 밖에 선언되었지만 클래스의 멤버 메서드처럼 호출할 수 있는 함수이다. fun String.lastChar(): Char = this.get(this.length - 1) 위 함수는 마지막 문자열을 돌려주는 확장 함수의 예시이다. 확장 함수 작성시 함수가 어떤 클래스 것인지 receiver type을 지정해 주어야한다. 코드에서는 lastChar 앞에 있는 String이 receiver type이 된다. receiver object는 호출되는 대상이다. 코드에서 this가 이에 해당한다. "kotlin".lastChar() lastChar 함수는 위와 같이 사용할 수 있다. lastChar은 String 클래스 안에 작성되지는 않았지만 St..
split split은 자바에서 문자열을 분리할 때 사용한다. .으로 단어들이 구분된 문자열의 단어들을 분리할 때 split 메서드의 인자로 단순히 "."을 주면 안 된다. 왜냐하면 자바의 split은 파라미터로 정규식을 받기 때문에 "."은 모든 문자를 의미한다. 따라서 numbers의 길이는 0이 된다. 코틀린에서도 문자열을 분리할 때 split을 사용한다. IDE를 사용해서 보면 코틀린의 split은 파라미터로 regex가 아니라 delimiters를 받는다. 이 delimiters는 구분자이다. 따라서 위의 코드에서 numbers의 길이는 4가 된다. 코틀린에서정규식을 사용하기 위해서는 Regex 타입을 사용해야 한다. 따라서 toRegex 메서드를 사용하면 정규식을 사용할 수 있다. 코틀린의..
- Total
- Today
- Yesterday
- go 특징
- 코틀린
- Kotlin
- Squash and merge
- github
- squash merge
- 코딩테스트
- Kotlin In Action
- downTo
- mysql
- 확장 함수
- 네이버 2022 공채
- java
- string
- postman tests
- DGS Framework
- Python
- graphql
- pm.expect
- Basic Type
- pm.test
- postman
- solidity
- hashcode
- 1차 인터뷰
- 주생성자
- python3
- postman collection
- 2차 인터뷰
- git
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |