코틀린 기본 문법
//******************************* 클래스
// 클래스란?
// :붕어빵 틀에 비유할수있고 인스턴스는 클래스를 생성한 객체의 실체인
// 붕어빵에 비유할 수 있습니다. 코틀린에서의 클래스는 자바와 역할은 유사하지만 더 간결함
//클래스 선언
class Person() {
}
val person : Person = Person()
var person1 = Person()
//******************************* 생성자
class Personmen ( val name : String = "철수", var age : Int = 0)
val PMen = Personmen(age = 10)
class Per {
constructor(name : String) {
println(name)
}
}
class Personmen1 ( val name : String = "철수") {
init {
println(name)
}
}
val P = Personmen1()
println(P.name)
//*******************************프로퍼티
//클래스의 속성을 사용할 때는 멤버에 직접 접근하며 이를 프로퍼티라고 함
classPerson(varname:String){
}
valperson= Person("멋쟁이")
person.name="키다리"//쓰기
println(person.name)//읽기
//*******************************접근제한자
//public(생략가능) :전체공개.아무것도 안쓰면 기본public
//private:현재 파일 내부에서만 사용
//internal:같은 모듈 내에서만 사용
//protected:상속받은 클래스에서 사용
classA{
vala=1
private valb=2
protected valc=3
internal vald=4
}
//*******************************상속
//코틀린에서의 클래서는 기본적으로 상속이 금지.
//상속이 가능하게 할려면open키워드를 클래스 선언 앞에 추가
open classAnimal{
valstr="hi"
}
classDog: Animal() {
valsstr="ke"
}
valddog= Dog()
println(ddog.sstr)
println(ddog.str)
open classAni(valname:String){
valstr1=name
}
classDo(name :String) : Ani(name) {
valstr2=this.name
}
valdodo= Do("민수")
println(dodo.str1)
println(dodo.str2)
println(dodo.name)
//*******************************내부 클래스
//내부 클래스 선언은inner를 사용
//내부 클래스는 외부 클래스에 대한 참조를 가지고 있다.
classOuterClass {
vara =10
//내부클래스
inner classOuterClass2{
funsomething() {
a =20//접근가능
}
}
}
varout = OuterClass()
out.OuterClass2().something()
println(out.a)
//*******************************추상클래스
//추상 클래스는 미구현 메소드가 포함된 클래스 말함
//클래스와 미구현 메소드앞에abstract키워드를 붙임
//추상 클래스는 직접 인스턴스화 할수 없고
//다른 클래스가 상속하여 미구현 메소드를 구현해야 함
abstract classA {
abstract funfunc()
funfunc2() {
}
}
classB : A() {
override funfunc() {
println("hello")
}
}
//val a = A() //에러
valb = B()//정상
println(b.func())
funsomething() : String {
return"hello"
}
println(something());
//*******************************인터페이스
//미구현 메소드를 포함하여 클래스에서 이를 구현함
//추상 클래스와 비슷하지만 클래스가 단일 상속만 되는 반면
//인터페이스는 다중 구현 가능
//주로 클래스에 동일한 속성을 부여해 같은 메소드라도
//다른 행동을 할 수 있게 하는 데 사용
open classPerson(valname:String="철수") {
init{
println(name)
}
}
interfaceRunnable{
funrun()
}
valperson2:Person= Person()
classPerson2: Person(),Runnable{
override funrun() {
println("빨리 달린다")
}
}
valaa= Person2()
aa.run()
//******************************* null허용?
//코틀린에서는 기본적으로null값을 허용하지 않음
//모든객체는 생성과 동시에 값을 대입하여 초기화 해야함
//var a : String에러
//val a : String = null에러
vala:String? =null//ok
//******************************* lateinit키워드로 늦은 초기화var
lateinit varaa:String
aa="hello"
println(aa)
//******************************* lazy로 늦은 초기화val
valstr:Stringbylazy{
println("초기화")
"hello"
}
println(str)//초기화
println(str)//실데이터
//******************************* null값이 아님을 보증
//변수뒤에!!를 추가하면null값이 아님을 보증함
valname:String? ="키다리"
//val name2:String = name //에러
valname3:String? =name//ok
valname4:String=name!!//ok
println(name4)
//*******************************안전한 호출
//메서드 호출시.연산자 대신?.연산자를 사용하면null값이 아닌경우만 호출됨
valsstr:String? =null
varupperCase=if(sstr!=null)sstrelse null
//또는
upperCase=sstr?.toUpperCase()
println(upperCase)
upperCase=sstr?.toUpperCase() ?:"널이면 디펄트값부여"//널이면 디펄트값부여
println(upperCase)
'Kotlin > Kotlin 문법' 카테고리의 다른 글
코틀린 기본 문법 4 (0) | 2022.06.02 |
---|---|
코틀린 기본 문법 3 (0) | 2022.05.26 |
코틀린 기본 문법 1 (0) | 2022.05.24 |
코클린 Companion object / object (0) | 2020.12.31 |
코틀린 POJO 데이터 클래스 (0) | 2020.12.31 |
댓글