연습장/이론

Kotlin_ 5. 클래스와 설계

아이른 2024. 1. 17. 16:45

클래스? 변수와 함수의 모음. 한군데에 모아 놓고 이름을 붙여 사용.

//변수_프로퍼티(Property), 함수_메서드(Method)

 

class 클래스명 {

 var 변수  

 fun 함수() {

 }

}

 

프라이머리 생성자(Primary Constructior)

//class 키워드와 같은 위치에 작성.

class Parson(value: String){

 inIt{

 Lod.d(tag:"클래스", msg:"생성자로부터 전달받은 값은 ${value}")

 }

}

//inIt_초기화 값이 필요.

 

세컨더리 생성자(Secondary Constructor)

//constructor 키워드를 함수처럼 class scope안에서 작성.

class Parson {

 constructor (value: String) {

  Lod.d(tag:"클래스", msg:"생성자로부터 전달받은 값은 ${value}")

 }

}

 

Default 생성자

//생성자를 작성하지 않아도 기본 생성자가 동작.

class Student {

 inIt {    //초기화 필요할 시

 }

}

 

클래스의 사용

//클래스명 ()

//생성자를 호출한 후 생성되는 것_ 인스턴스(instance)

var student = Student()  //instance

class Student {

 var name: String = "Lan"

 fun printName() {

  Log.d(tag:"클래스", msg:"Student의 이름은 ${name}입니다")

 }

}

>>도트 연산자로 호출._변수명. ()

student.name = "Lan"

student.printName ()

//student의 이름은 Lan입니다. 

 

오브젝트(object)

//인스턴스화 생략해도 프로퍼티와 메서드 호출 사용 가능. 

//앱전체에 1개만 생성가능.

object Student{

 var name: String = "Lan"

 fun printName() {

  Log.d( tag:"클래스", msg:"Student의 이름은 ${name}입니다" )

 }

}

>>도트 연산자로 호출.

Student.name = "Lan"

Student.printName ()

//첫글자 대문자 사용.

 

컴패니언 오브젝트(companion object)

//일반 클래스에 odject 기능을 추가하기 위해 사용.

//생성자를 통하지 않고 클래스 사용.

class Student {

 companion object {

  var name: String = "Lan"

  fun printName() {

   Log.d(tag:"클래스", msg:"Student의 이름은 ${name}입니다")

 }

}

 fun run() {      //일반 함수가 생성자인 Student() 호출한 다음 변수에 저장 후 사용가능.

  Log.d( tag:"클래스", msg:"Student가 뛰어갑니다" )

 }

}

 

>>companion odjecr 안의 코드

Student.name = "Lan"

Student.printName ()

//Student의 이름은 Lan입니다

>>companion odjecr 밖의 코드

val youngStudent = Student()

youngStudent.run()

//Student가 뛰어갑니다

 

데이터 클래스

date class 클래스명(val 파라미터1:타입 , var 파라미터2:타입)

//date class className(val name:String , var age:Int)

//var className = ClassName("Lan", 20)

 

toString() 메서드

Log.d(tag:"date class", msg:"className은 ${className.toString()}")

 //className은 className(name=Lan, age=20)

 

copy() 메서드

var newName = className.copy()

//값을 복사

 

클래스의 상속과 확장

//클래스의 재사용을 위해 상속을 지원.

//안드로이드에는 Activity라는 클래스가 미리 만들어져 있음.(내부에 여러 기능들이 미리 정의)

 _덕분에 직접 구현하지 않고 Activity 클래스를 상속받아 코드만 추가하여 앱 구현.

class Activity {

 fun drawText()

 fun draw ()

...

}

class MainActivity: Activity(){

 fun onCreate(){

   //안에서 미리 만들어진 기능을 사용.

 }

}

 

클래스의 상속

open class (value: String) {

}

// 상속대상(부모클래스) open 키워드 사용.

class (value: String) : (value) {

}

 // 상속받는대상(자식클래스) 콜론(:) 사용.

 

<예시>

open class parent {

 var money = 5000

 var house = "30평 아파트"

}

class child : parent() {

 fun showMoney() {

  Log.d(tag:"클래스", msg:"money=${money}")

 }

}

//클래스: money=5000

 

var child = Child()  //초기화

 child.showMoney()

//클래스: money=5000

 

오버라이드(override)

//동일한 이름의 메서드나 프로퍼티를 사용할 필요가 있을 경우 사용.

 

메서드 오버라이드

open class BaseClass {
    open fun opened() {
    }
    fun notOpened(){
    }
}
class ChildClass: BaseClass(){
    override fun opened(){
    }
    override fun notOpened(){ 

// notOpened 메서드는 open 키워드가 없으므로 잘못된 사용.
    }
}

프로퍼티 오버라이드

open class BaseClass2 {
    open var opened: String = "I am"
}
class ChildClass2: BaseClass2(){
    override var opened: String = "You are"
}

 

패키지(package): 클래스와 소스파일을 관리하기 위한 디렉터리 구조의 저장 공간.

추상화(abstract): 설계단계에서는 코드작성, 구현단계에서는 메서드 이름만 작성.

class Implements: Design(){

 abstract fun draw()

}

인터페이스(interface): 실행코드 없이 메서드 이름만 가진 추상 클래스.

interface InterfaceName {

 var variable : String

 fun get()

 fun set()

}

접근제한자: 클래스의 멤버에 지정된 접근 제한자에 따라 외부에서 사용 여부가 결정.

제네릭(generic): 타입을 특정해서 안정성을 유지하기 위한 설계도구.

 

'연습장 > 이론' 카테고리의 다른 글

Kotlin_ 1-1. 변수  (0) 2024.01.25
Kotlin_ 6. Null Safety  (0) 2024.01.18
Kotlin_ 4. 함수  (0) 2024.01.17
Kotlin_ 3. 반복문  (1) 2024.01.16
Kotlin_ 2-2. 배열과 컬렉션  (0) 2024.01.16