Kotlin/ 클래스

yellow·2021년 4월 12일
0

Kotlin

목록 보기
8/13

OOP (Object Oriented Programming)

  • 객체지향 프로그래밍 : 객체를 만들어서, 객체에게 일을 시키는 방식으로 프로그래밍

Class

  • kotlin에서는 클래스의 멤버변수를 프로퍼티(property)라고 표현한다.

📌 class를 만드는 방법1

  • 생성자를 따로 만들어줄 필요가 없다.
  • constructor 키워드 생략 가능하다.
  • 여기서 생성자는 class 선언과 함께 선언하기 때문에 주생성자(primary constructor)이다.
class Car (var engine: String, var body: String){
	...
}

class Car constructor(var engine: String, var body: String){
	...
}

📌 class를 만드는 방법2

  • 방법1에서 파라미터로 넘겼던 것들을 멤버변수로 선언해주고 생성자(constructor)를 따로 만들어주기
  • 클래스 안에 선언되는 생성자이기 때문에 부생성자(secondary constructor)이다.
class SuperCar{
    var engine : String
    var body : String
    var door : String
        
    constructor(engine: String, body: String, door: String){
        this.engine = engine
        this.body = body
        this.door = door
    }
}

단, 주생성자나 부생성자를 모두 선언해주지 않으면 컴파일러가 기본으로 인자가 없는 생성자를 만들어준다.

📌 class를 만드는 방법3

  • 방법1의 확장
  • 해당 클래스를 만드는 데에 꼭 필요한 것들만 주생성자의 파라미터로 넘겨준다.
  • 추가적으로 필요한 것들은 프로퍼티로 선언해준다.(부생성자의 파라미터로 넘겨줄 수 있다.)
class Car(engine: String, body: String){
    var door: String
    
    constructor(engine: String, body:String, door: String) : this(engine, body){
        this.door = door
    }
}

📌 class를 만드는 방법4

  • 방법2의 확장
class Car{
    var engine: String = ""
    var body: String = ""
    var door: String = ""
        
    constructor(engine: String, body: String){
        this.engine = engine
        this.body = body
    }
        
    constructor(engine: String, body: String, door: String){
        this.engine = engine
        this.body = body
        this.door = door
    }   	
}

📌 class를 통해 객체를 만드는 방법

  • 인스턴스화
fun main(array: Array<String>){
	// 인스턴스화해서 변수에 담아줌
	val bigCar: Car = Car("v9 engine", "big")
    	val superCar: SuperCar = SuperCar("good engine", "big", "white")
}

📌 기능이 있는(멤버 함수가 있는) class 만들고 사용하기

  • 멤버함수를 호출하거나 멤버변수에 접근하고싶다면 "."연산자를 사용하면 된다.
// 이렇게 작성한 class에는 멤버변수가 없음
class RunnableCar(engine: String, body: String){
    fun ride(){
        println("탑승하였습니다.")
    }
    
    fun drive(){
    	println("달립니다.")
    }
    
    fun navi(destination: String){
    	println("$destination 으로 목적지가 설정되었습니다.")
    }
}

fun main(array: Array<String>){
    val runnableCar: RunnableCar = RunnableCar("simple engine", "small")
    
    runnableCar.ride()
    runnableCar.navi("부산")
    runnableCar.drive()
}

📌 init

  • 인스턴스화될 때 가장 먼저 호출되는 멤버함수
  • 객체 초기 셋팅을 할 때 유용하다.
class RunnableCar(engine: String, body: String){

    init{
        ...
    }
    
    fun ride(){
    	println("탑승하였습니다.")
    }
    
    fun drive(){
    	println("달립니다.")
    }
    
    fun navi(destination: String){
    	println("$destination 으로 목적지가 설정되었습니다.")
    }
}

📌 오버로딩 (overloading)

  • 함수의 이름이 동일할 때 처리하는 방법
  • 함수가 받는 파라미터를(개수, 자료형) 다르게 해서 이름이 같은 함수들을 구분하도록 한다.
class TestClass{
    // 파라미터의 개수를 다르게 해서 구분하도록 한다.
    fun test(a: Int){
        ...
    }
        
    fun test(a: Int, b: Int){
        ...
    }
    
}
profile
할 수 있어! :)

0개의 댓글