인스턴스, 추상 클래스

Anna·2024년 6월 9일
0

코틀린

목록 보기
16/28
post-thumbnail

인스턴스

인스턴스와 객체는 같은 개념이다. 둘 다 클래스의 구체적인 실체를 의미한다.
여기서 클래스의 실체는 클래스의 주생성자 혹은 메서드 등을 클래스에 내포된 모든 구성 요소를 의미한다. 주 생성자는 인스턴스를 생성할 때 초기화되는 주요한 역할을 하고, 클래스에 포함된 함수들은 인스턴스(객체)가 하는 일에 관련된 행동을 정의한다.
즉, 클래스라는 설계도를 바탕으로 메모리에 생성된 실체를 가리킬 때 "객체" 혹은 "인스턴스"라고 부른다.

✍🏻 인스턴스 예제

//Animal이라는 클래스를 정의
class Animal(val name: String)  //인스턴스를 생성할 때 사용되면 초기화 매개변수
{
    fun makeSound()   //인스턴스가 하는 일을 나타낸다. 
    {
        println("$name makes a sound")
    }
}

//Animal 클래스를 사용해 인스턴스를 생성
fun main() 
{
    val dog = Animal("Dog")  
    val cat = Animal("Cat")

    dog.makeSound()  // "Dog makes a sound" 출력
}

val dog = Animal("Dog")
Animal 클래스의 인스턴스를 main에 생성하고, 이를 dog 변수에 할당한다.
Dog라는 문자열이 클래스의 주 생산자에 전달되어 객체가 생성된다.
생성된 객체는 dog 변수에 저장된다.

val animal = Animal()
여기서 주 생산자에 값을 전달하지 않고 클래스를 main에서 호출하여 변수에 저장하는 것도 객체.


추상화(Abstraction)

  • 목표로 하는 것에 대해 필요한 만큼 속성과 동작을 정의하는 과정
  • 복잡한 세부 사항을 숨기고 중요한 부분만을 강조하는 프로그래밍 개념
  • 프로그램의 코드를 더 쉽게 이해하고 유지보수할 수 있도록 도와줌
  • 코틀린에서 추상화는 주로 클래스와 함수를 통해 이루어진다.

추상 클래스

abstract 키워드를 사용하여 정의된다.

  • 추상 클래스는 하나 이상의 추상 메서드 혹은 일반 메서드를 포함할 수 있는 클래스다.
  • 추상 메서드는 선언만 되고 구현은 되어있지 않지만 일반 메서드를 생성할 때는 구현 가능하다.
  • 추상 클래스는 직접적으로 객체를 생성할 수 없다. 대신 추상 클래스를 상속하는 하위 클래스를 통해 객체를 생성가능하다.
  • 추상 클래스에서 선언한 추상 메서드는 하위 클래스에서 반드시 구현해야한다

✍🏻 추상 클래스와 추상 메서드 사용 예제

//Animal라는 추상 클래스를 만들고 파라미터를 문자열 name으로 지정 
abstract class Animal(val name: String) 
{
    abstract fun makeSound()  //추상 메서드
 
    fun sleep()  //구현된 메서드
    {
        println("$name is sleeping")
    }
}

//Animal상속 받는 하위 클래스 Dog
class Dog(name: String) : Animal(name) 
{
    override fun makeSound()   //상위 클래스에 있는 추상 메서드를 구현하기
    {
        println("$name says woof!")
    }
}

fun main() 
{
//Dog클래스의 객체생성 후 변수 dog 할당
    val dog = Dog("Buddy")
//Dog클래스에 있는 makeSound()를 호출
    dog.makeSound()  // 출력: Buddy says woof!
    dog.sleep()      // 출력: Buddy is sleeping
}

0개의 댓글