본문 바로가기
Kotlin/Kotlin 문법

코틀린 기본 문법 2

by MonoSoft 2022. 5. 25.
728x90
반응형

코틀린 기본 문법

 

//******************************* 클래스

// 클래스란?

// :붕어빵 틀에 비유할수있고 인스턴스는 클래스를 생성한 객체의 실체인

// 붕어빵에 비유할 수 있습니다. 코틀린에서의 클래스는 자바와 역할은 유사하지만 더 간결함

//클래스 선언

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)

 

728x90
반응형

'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

댓글