개발자 끄적끄적
코틀린OPP 본문
<Class>
- 단순한 클래스 정의
- class 클래스_이름(생성자 인자 리스트)
- 생성자 인자들 중 val/var이 붙은 것은 클래스의 속성이 된다
- 자바와 다르게
- 코틀린은 기본적으로 public class
- 객체를 생성할 때 new 키워드를 쓰지 않는다
- 속성 접근 메소드를 자동으로 만들어주며, 커스텀 접근 메소드를 만들 수도 있다
<Interface>
- 자바의 인터페이스와 비슷하다
- 구현이 있는 메소드 정의 가능
- 자바처럼 default를 붙이진 않는다
- 인터페이스 구현 클래스의 메소드 구현에서 override를 반드시 써야한다
- 클래스르 상속받을 때에도 메소드 오버라이드할 때 override를 쓴다
<기본적으로 상속, 오버라이드 금지>
- interface, abstract class는 기본적으로 상속(구현), 메소드 오버라이드 가능
- class는 기본적으로 상속, 메소드 오버라이드 금지
- 상속이나 오버라이드가 가능하게 하려면 open 키워드 사용
- open class Test()
- 메소드 오버라이드 접근 변경
- final : 오버라이드 금지, 기본적으로 final이다
- open : 오버라이드 가능, 명시적으로 open을 붙여야 오버라이드 가능
- abstract : 반드시 오버라이드 해야한다, abstract class 내에서만 사용 가능
- override : 오버라이드 가능
<기본적으로 공개(public)>
- 코틀린은 클래스와 메소드 모두 기본적으로 public
- 접근(access) 변경자
- public : 기본 접근
- internal : 같은 모듈(gradle의 모듈과 같이 같이 컴파일되는 단위)
- protected : 상속 받은 클래스에서만 접근 가능
- private : 같은 클래스에서만 접근 가능
<중첩(Nested) 클래스>
- 코틀린에서 중첩 클래스는 자바에서 정적(static) 중첩 클래스와 같다
- 자바처럼 내부 클래스를 만들려면 중첩 클래스 앞에 inner 키워드를 사용
<봉인(Sealed) 클래스>
- 특정 클래스를 상속하는 클래스를 제한할 수 있다
<Constructor>
- Primary constructor : 클래스 이름 옆에 정의하는 생성자
- class Person(val name: String)
- Secondary constructor : 클래스 내부에 정의하는 생성자
<Property와 getter/setter>
- Property의 커스텀 setter와 getter를 정의할 수 있다
- public인 속성에 대해 setter를 private으로 하면 클래스 밖에서는 getter만 가능하다
- Interface에 property를 정의할 수 있으나, 이 property는 구현 클래스에서 반드시 오버라이드 해야한다
<Data Class>
- class 정의 앞에 data 키워드 추가
- data class auto-generates equals/hashCode/toString/copy
<object 키워드>
- 클래스 정의 없이 바로 객체를 생성하는 방법
- 싱글톤을 만들거나
- companion object를 만들거나
- anonymous object를 만들 때 사용
- Companion object는 이 객체를 포함하는 클래스의 private 멤버에 접근 가능
<Extension Method/Property>
- 이미 만들어진 클래스의 메소드와 속성을 클래스를 상속하거나 수정하지않고도 추가할 수 있다
- 이렇게 추가된 메소드는 오버라이드가 안된다
- 자바의 기존 Collection들에 다양한 유틸 함수들을 이 방법으로 추가한다
- String의 새로운 유틸 함수 : substringBefore, substringAfter 등
<Extension Method/Property - 계속>
- 속성도 마찬가지로 확장 가능하다
ex)
val String.lastChar : Char
get() = get(length - 1)
fun main(){
println("Hello".lastChar)
}
<연산자 오버로딩>
- 이항 산술 연산자 +,-,*,/,% 오버로딩 가능
- 오버로딩할 때 연산자 이름 plus, minus, times, div, rem
- 단항 연산자
- unaryPlus, unaryMinus, not, inc, dec
- 비교 연산자
- equals, compareTo
<위임(Delegation)>
- 상속과 유사하지만 다른
- 상속은 강한 결합, 위임은 약한 결합
- 상속 불가여도 위임은 가능
- 위임(상속)할 클래스와 동일한 인터페이스를 구현해야한다
- 위임 패턴은 위임(상속)할 객체를 멤버로 만들고 특정 메소드 호출 시 위임 객체의 메소드로 포워드(호출)하는 방식으로 만든다
- 위임 객체의 메소드 각각에 대해 메소드를 새로 만들어서 포워드 해야한다
- 코틀린은 by 키워드로 위임을 쉽게 지원한다
<위임 속성(Delegated Property)>
- by 키워드를 써서 속성의 get/set을 위임 객체의 getValue/setValue로 위임한다
- 이를 이요하여 특별한 성질을 갖는 속성을 만든다
- Lazy 특성 : 값을 처음 접근할 때 생성/계산한다
- Obervable 특성 : 값이 변경될 때 알려주는 리스너를 지정한다
- Map을 이용하여 객체 속성 값을 저장한다
<Generic>
- 자바 제너릭과 비슷하다
'안드로이드 프로그래밍' 카테고리의 다른 글
안드로이드 레이아웃(LayOut) (0) | 2023.03.30 |
---|---|
코틀린FP (0) | 2023.03.23 |
코틀린(Kotlin) 기초 (0) | 2023.03.11 |