클래스? 변수와 함수의 모음. 한군데에 모아 놓고 이름을 붙여 사용.
//변수_프로퍼티(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 |