생성자는 생략된것
기본 생성자로 생성시 -> getter/setter/멤버변수 자동 생성 하지만 val 은 값을 변경할수 없으므로 setter는 생성되지 않음
var/val 은 주 생성자에게만 쓸수 있다.
멤버 변수 선언시 -> getter/setter 자동 설정
변수 밑에 get() 과 set() 을 설정해 원하는 값을 넣어준다.
val은 변경 불가라 set설정시 오류가 남
= 코틀린은 변수 선언시 값을 무조건 설정해야 하는데 이것을 지연 시키는것
= 초기화하지 않고 사용할수 있다는게 아니라 변수 선언시 초기화 하지 않을수 있다는 의미
1. lateinit( 특정 메서드 호출시 초기화)
2.by Lazy
= 자바의 오버라이딩과 매우 흡사하다. 참조변수가 부모타입이면 부모타입의 변수와 메서드만 사용가능하며 참조 변수가 자식 타입이면 부모,자식 다 사용 가능
코틀린은 변수,메서드 를 따로 지정하지 않으면 private 타입이라 open으로 지정해줘야 오버라이딩이 가능하다.
override open 메서드명 으로 오버라이딩을 한다.
참조변수가 부모타입이면 부모타입의 변수와 메서드만 사용가능하며 참조 변수가 자식 타입이면 부모,자식 다 사용 가능
코틀린은 부모의 멤버 변수도 오버라이딩 가능!
Any클래스는 모든 클래스의 부모 클래스이다.
위 코드에서 나온 toString 말고 다양항 메서드들이 존재한다. 우리의 필요에따라 오버라이딩해 사용하면 된다.
자바와 매우 흡사하다. abstract 를 클래스에 붙여주면 됀다. 추상 클래스에 대해서는 따로 설명하지 않겠다.
추상클래스 타입을 매개변수로 받는 메서드 생성 가능
인터페이스도 자바와 매우 흡사. interface라는 명령어를 사용하며 인터페이스 타입을 매개변수로 받을수 있다.
일반메서드도 생성 및 오버라이딩 가능
구현 클래스 만들때는 ()생략 가능
구현 클래스로 객체 생성시 참조변수 자료타입(인터페이스자료타입) 에 따라각각 사용할수 있는 메서드가 다르다.
= 자바에서 static과 같은 역활
= 객체들이 공유하며 코틀린에서 자바로 자바에서 코틀린으로 사용 가능
= companion objetct{static변수들}
companion object{} 영역안에 있는 변수나 메서드들은 자바의 static으로 처리된다.
자바와 똑같이 클래스이름.변수or메서드 로 호출해준다
= 자바에서는 static 이여도 클래스이름.변수or 메서드/ 객체생성.변수or 메서드 호출이 가능하지만 코틀린은 무조건 클래스이름.변수or 메서드이다.(객체 생성 x)
반대로 코틀린(Companion 이 아닌) 부분을 자바에서 호출하는 부분이다.
코틀린은 모든 변수를 property로 생성해 주기떄문에 getter로 호출해줘야함
코틀린에서 자바static 영역 호출 부분이다. 똑같이 클래스 이름가지고 호출 가능하다.
코틀린Companion 부분을 자바에서 호출 하는 부분이다.
호출시 클래스.Companion.변수 이런식으로 호출되는데 Companion을 뺴고 싶으면 Companion Object 영역에 선언시 @JvmStatic을 선언해주면 됀다.