안드로이드 프로그래밍📱/Kotlin📲 개념

[Kotlin] 클래스와 인스턴스

🥔감자🥔 2025. 2. 13. 17:11

클래스, 인스턴스 어디서 많이 들어본 개념이다. 처음 c++에서 배웠을 때 어려워했던 개념인 객체에 대한 내용임을 알 수 있다. 그러면 코틀린에서도 어떻게 사용하는지 정리해보겠다.

 

가장 대중적으로 쓰이는 예시인 car를 이용해서 정리해보자

class Car {
	var color : String = ""
    var speed : Int = 0
    
    fun upSpeed(value : Int){
    	if(speed + value >= 200)
        	speed = 200
        else
        	speed = speed + value
    }
    fun downSpeed(value : Int){
    	if(speed - value <= 0)
        	speed = 0
        else
        	speed = speed - value
    }
    
    //여기까지 기본 생성 부분
    
    //인스턴스 생성 예시1
    //var myCar1 : Car = Car()
    //myCar1.color = "빨강"
    //myCar1.speed = 0
    
   //생성자 추가
   constructor(color: String, speed: Int){
   	this.color = color
    this.speed = speed
   }
   
   //생성자를 생성했기에 위의 인스턴스 생성 예시1를 아래와 같이 변경해야함.
   var myCar1 : Car = Car("빨강", 0)'
   
   //메소드 오버로딩
   //한 클래스 내에서 메소드의 이름이 같아도 파라미터의 개수나 데이터 형식만 다르면 여러 개를 선언할 수 있음
   
   constrctor(speed: Int){
   	this.speed = speed
   }
    
}

 

위와 같은 코드를 통해 가볍게 복습을 할 수 있다.

 

정적 필드 : 인스턴스를 생성하지 않고 클래스 자체에서 사용되는 변수
정적 메소드 : 메소드 또한 {}안에 작성하면 됨. 인스턴스 생성하지 않고도 클래스명.메소드명()으로 사용 가능

 

추상 클래스 : 인스턴스 생성 불가. abstract 붙여서 지정함.
인스턴스화 : var myCar1 : Car = Car("빨강", 0)
추상 메소드 : 본체가 없는 메소드, 메소드 앞에 abstract 붙여서 지정함.

 

추상을 통해 -> 다형성을 이용한 개발이 가능함!

 

인터페이스 : 추상 클래스와 성격이 비슷함. 상속 X, 구현 O, 코틀린은 다중 상속을 지원하지 않음.

 

abstract class Animal {
	var name : String = ""
    abstract fun move()
    
}

interface iAnimal {
	abstract fun eat()
}

class iCat : Animal(), iAnimal {
	override fun eat()
    	println("생선을 좋아한다.")
        
    override fun move(){
    	println("네 발로 이동한다.")
    }
        
}