싱글턴 디자인 패턴중 싱글턴 패턴이 있다. 싱글턴 패턴은 객체를 하나만 생성할 수 있는 클래스이다. 싱글턴 구현 방법은 중 필드에 객체를 생성하고 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 키워드는 초기화 블록을 정의하는..
중복 코드 제거하기 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..
코틀린의 예외 처리 방식 코틀린에서 예외가 발생했을 때 호출 스택을 올라가면서 예외 처리가 나올 때 까지 예외를 다시 던진다. fun checkPercentage(percentage: Int) { if (percentage !in 0..100) { throw IllegalArgumentException( "퍼센트는 0이상 100이하의 숫자여야 합니다" ) } } 위의 함수는 인자로 받은 percentage의 값을 검사하는 함수이다. 코틀린에서는 예외를 던질 때 throw 키워드를 사용하며 자바와 달리 new 키워드를 붙이지 않는다. 예외가 발생하면 예외의 종류와 함께 메시지가 출력된다. val percentage = if(number in 0..100) number else throw IllegalArg..
코틀린의 while은 자바와 동일하다. for는 자바의 for-each의 형태와 비슷하고 for in 와 같은 형식을 가진다. while while (조건) { /*...*/ } do { /*...*/ } while (조건) 코틀린에는 while과 do-while 루프가 있고 둘 다 자바와 동일한 방법으로 사용하면 된다. for java에서 for문은 초깃값, 증가 값, 최종값이 있지만 코틀린은 없다. 대신 코틀린은 범위를 사용한다. 범위는 두 값으로 이뤄진 구간이고 시작값..끝값의 형태로 범위를 생성한다. 이 범위는 시작값과 끝값 모두 포함한다. fun main() { for (i in 1..100) { print("$i ") } } 위의 코드는 1부터 100까지 출력하는 코드이다. 양 끝값이 모두 출..
- Total
- Today
- Yesterday
- mysql
- DGS Framework
- 1차 인터뷰
- graphql
- postman
- Kotlin In Action
- postman tests
- 네이버 2022 공채
- python3
- solidity
- hashcode
- 2차 인터뷰
- squash merge
- Python
- 코틀린
- java
- 코딩테스트
- 확장 함수
- Basic Type
- git
- pm.test
- downTo
- Kotlin
- pm.expect
- go 특징
- postman collection
- github
- Squash and merge
- 주생성자
- string
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |