본문 바로가기

코틀린

(4)
[Kotlin] Backing Field와 Backing Properties (wordle 미션) 자바의 Property란? 자바에서는 필드와 접근자 메서드(getter, setter)를 묶어 property라 한다. 프로퍼티라는 개념이 생긴 이유는 데이터를 캡슐화하려는 자바 클래스의 목적과 연관이 있다. 자바 클래스는 기본적으로 필드를 private으로 설정하고 외부에서 값을 가져오거나 변경할 때 getter, setter를 제공한다. 이를 통해 캡슐화된 클래스의 고유한 기능은 유지하면서 클라이언트의 요구에 따라 속성 값을 확인하거나 변경할 수 있게 해준다. 코틀린의 Property란? 코틀린에서는 필드에 대한 기본 접근자 메서드를 자동으로 만들어준다. 때문에 필드 대신 프로퍼티라는 말을 사용한다. 원한다면 접근자 메서드를 명시적으로도 선언할 수 있다. Backing Field backing fie..
[Kotlin] mutable collection 사용 줄이기 (wordle 미션) mutable collection 사용 줄이기 wordle에서 mutable collection의 사용을 지양하는 방향으로 리팩토링을 해보라는 피드백을 받았다. 우선 기존의 코드를 보자. 기존 코드 분석 코드를 보면 answerMap, result가 모두 mutable collection을 사용하고 있다. check()와 putTileIfSame() 외의 메서드는 생략했다. class Words(private val values: List, today: LocalDate = LocalDate.now()) { private val answer: Word = findAnswer(today) private var answerMap: MutableMap = mutableMapOf() fun check(word:..
[Kotlin] 확장함수 (wordle 미션) 확장 함수 확장 함수는 어떤 클래스의 멤버 메서드인 것처럼 호출할 수 있지만 그 클래스의 밖에 선언된 함수다. (Kotlin In Action - p.115) 코틀린은 상속이나 데코레이터를 사용하지 않고 클래스를 확장할 수 있는 기능을 제공한다. 확장을 이용하면 수정이 불가능한 서드파티 라이브러리에 대해서도 새로운 함수를 만들 수 있다. 이렇게 만든 함수를 확장 함수라고 하며, 원래 클래스의 메서드인 것처럼 호출할 수 있다. 구현 방법 // this.get(this.length - 1)에서 this 생략 fun String.lastChar(): Char = get(length - 1) // 호출 "Kotlin".lastChar() 확장 함수를 만드는 방법은 간단하다. 구현하려는 함수 이름 앞에 확장할 클..
[Kotlin] Sealed Class (wordle 미션) Sealed Class sealed 클래스는 기본적으로 abstract 클래스이며 sealed 클래스를 상속받는 여러 서브 클래스들을 가질 수 있다. sealed 클래스를 사용하면 보다 엄격하게 상속을 관리할 수 있다. 컴파일 시 컴파일러가 sealed 클래스를 상속받는 서브 클래스들을 모두 파악하고 있기 때문이다. 또한 컴파일 이후에는 서드파티 클라이언트가 sealed 클래스를 확장할 수 없다. 서브 클래스는 class, data class, object 모두 가능하다. 다만 상태 값이 바뀌지 않는 서브 클래스라면 object를 사용하는 것이 좋다. Sealed Class의 특성 sealed 클래스의 서브 클래스들은 반드시 같은 파일 내에 선언되어야 한다. sealed 클래스는 기본적으로 abstrac..