왕초보 Kotlin 기초 공부 #4

생서자 없이 객체를 직접 만들어내는 object.

기존의 Class 는 단지 인스턴스 객체를 만들기 위한 틀이기 때문에
내부에 있는 속성이나 함수를 사용하려면 생성자를 통해 실체가 되는 인스턴스 객체를 만들어야 했습니다.

하지만 여러개의 인스턴스 객체가 필요없고 단 하나의 객체만으로 공통적인 속성과 함수를 사용해야 하는 코드에서는 굳이 class  사용하지 않고 object 사용.


object 로 선언된 객체는 최초사용시 자동으로 생성되며 이후에는 코드 전체에서 공용으로 사용 될 수 있으므로 프로그램이 종로될때까지 공통으로사용할 내용을 묶어사용하는 것이 좋다.

기존의 클래스 안에도 오브젝트를 만들 수 있다.

서로 다른 인스턴스 임에도 companion object인 total을 공유 하므로 모든 인스턴스에서 투표수를 누적 할 수 있다.

이벤트가 일어나는 것을 감시하는 감시자의 역할을 옵저버라고 부른다.
안드로이드의 경우 키의 입력,터치의 발생,데이터의 수신등
함수로 직접 요청하진 않았지만 시스템 또는 루틴에 의하여 발생하는 것을 이벤트라하며
이 이벤트가 발생할때마다 즉각적으로 처리할 수 있도록 하는것을 옵저버 패턴이라 부른다.

이벤트를 수신하는 클래스(class A) 이벤트의 발생 및 전달 클래스(class B) 가 필요

class A는 class B를 참조 할 수 있지만 B는 A를 참조 하지 못한다 그래서
둘 사이에 인터페이스를 만들어 넣는다.
이 인터페이스를 옵저버, 리스너 라고 부른다.
이벤트를 넘겨주는 행위를  callback 이라고 한다.




다형성 음료와 콜라와의 관계
음료라는 클래스 와 이를 상속받은 콜라 클라스가 있을때
콜라의 인스턴스를 만들때는 상속관계에 있는 수퍼 인스턴스 공간에
음료의 객체 공간과 콜라의 추가 공간이 생성된다.
음료의 변수에 지정하면 콜라에선 사용 불가.
콜라 변수에 담으면 콜라 및 음료에서 사용가능
이를 up-casting 그 반대를  down-casting  이라고 부른다.
down-casting  시에는 as 나 is 같은 연산자가 추가로 필요하다.



클래스나 함수에서 사용하는 자료형을 외부에서 지정하기 위해서는 generic 사용
fun <Int> genericFunc(param:Int){}
genericFunc(1)
Int로 자동 추론됨

class GenericClass<Int>(var pref:Int)
GenericClass(1)



캐스팅 없이 사용하므로 성능을 높일 수 있다.

갈수록 이해가 어렵다...
시간을가지고 계속 리뷰 하는 시간이 필요할 것 같습니다.

댓글

이 블로그의 인기 게시물

Finance Index (개인정보처리방침)

왕초보 Kotlin 기초 공부 #1