hashSetof() ,arrayListOf(),hashMap()
코틀린은 자신만의 컬렉션 기능을 제공하지않고 자바 컬렉션을 활용해 상호작용이 쉬움.
last() , max() 기능으로 좀더 강력한 기능 있음
(가독성 향상을 위해)
여기서는 한 파일에 모아두고 자바에서 static 메서들 모아두는느낌?(함수)
자바에서는 유틸스 클래스안에 수많은 정적메서드를 선언한적이있다.
코틀린에선 ? 최상위함수를 사용
자동으로 컴파일러가 자동으로 클래스만들어서 정적 메서드 만들어 줌
최상위 프로퍼티는 ? public static final -> const
어떤클래스에 함수를 클래스 밖에 선언된 함수 .
수신 객체 타입: 확장할 클래스 / 수신객체 : 해당 클래스의 인스턴스
확장함수를 만들기 위해 확장할 클래스이름+ 만하면됨. (수신객체타입)
확장함수 안에는 클래스내부에 사용할수있는 프로퍼티만 사용가능(프라이빗, 프로텍티드)
캡슐화를 깨지않는다 ? 프라이빗 멤버는 사용 불가능.
문법적편의? 기존에는 자신을 넘겼어야됬는데 안그러고 선언만하면됨!
적어놓고 나중에 좀더 쉽게설명
새로운 함수를 기존 클래스 추가
기존 클래스 내부 멤버 변수에 접근
객체지향 프로그래밍에서 코드 가독성 증가
class Person(val name: String, val age: Int)
fun Person.isAdult(): Boolean {
return age >= 18
}
코드 중복 제거.
이런 예시들이 있다.
또한 기존 클래스 함수를 건들지 않고 새로운 함수를 정의함으로서. 필요한 기능을 추가가능
라이브러리 한해서 인가? String 클래스의 예를 많이 드는거 같다.
수신 객체의 모든 메소드를 호출할 수 있기 때문에,
"확장함수내부에서는수신객체의모든메소드를호출할 수있다"라고말하면 확장함수내부에서 수신 객체의멤버메소드와 확장함수를모두 호출할수있다는
뜻이다.
이부분이 잘 이해가 되지 않았다.
결론은 .
신 객체의 모든 멤버 메소드와 멤버변수를 접근할수 있다 어렵게 생각할게아니라
그냥 String 내부 모든 함수를 사용해 조합해서 확장함수 내부에서 구현할수 있단말
String 객체는 예시다.
클래스의 일부가 아님! 밖에서 선언 됨!
확장함수는 컴파일(정적)시점에서 변수의 타입!!!! 에 따라 어떤 확장함수가 호출될지 결정됨.
"Test".test() 스트링에 관한 확장함수 호출!
책에서 나온 예시가 인상깊다.
fun View.showofE() =printIn("I'ma view!")
fun Button. showoff () = printin ("I'm a button!")
>›> >›> val view: View = Button ()
>>> view. showoff ()
I'm a view!
오버라이드 되지 않는다! 왜? 실제 타입은 Button 이지만 view의 타입은 View이기 때문
val String.reversed: String
get() = this.reversed()
코틀린은 vararg 변경자를 이용해 자바에서 ... 대신 여러개의 가변인자를 받음.
이 가변은인자를 배열로 바로넘길수 없어 스프레드 연산자 작업을 해줘야됨
배열 앞에 * 를 붙이자
Ex) funlistof<Ty(vararg values:T):Listery{... )
val list=listOf("args:",*args)
자바 split은 정규식을 사용함,
코틀린은 다른 조합의 파라미터를 받는 split확장함수 제공
코틀린은 위 함수에 전달하는 값의 타입따라 정규식이나 일반 텍스트중 ,
문자열을 분리한느지 쉽게 앎
p r i n t i n ( " 12 . 3 4 5- 6 . Am. s p l i t ( " 1 1. 1- ". t o Re g e x ( ) ) ) 4 정규식을 명시적으로 만든다.
간단히 말하면 코틀린은 정규식을 사용하지않고 문자열을 쉽게 파싱함.
중복을 피하기위해 메소드 추출 활용
작은 메소드 많음 -> 메소드간 관계파악 어려움 -> 가독성 저하
그래서 로컬 함수!
함수안에 함수를 사용함으로 중복을 줄임
최종적으론 확장함수로 뽑아서..
확장함수는 언제 써야 베스트 프렉티스일까?
dam코드를 보면 코드가 정말 간결해진다 주로 응답값에서 응답값변환 및 이런 코드에서
좀 더 간결 해짐 .