본문 바로가기
Kotlin

오브젝트

by 코드닭 2024. 4. 23.

오브젝트 (Object)

오브젝트를 사용하면 클래스 생성자로 인스턴스화하지 않아도
블록 안의 프로퍼티와 메서드를 호출해서 사용할 수 있다 (Java의 static과 같은 역할)
object 코드 블록 안의 프로퍼티와 메서드는 클래스명에 도트 연산자를 붙여서 생성자 없이 직접 호출 가능하다
오브젝트 = 클래스의 단일 인스턴트, 인스턴스를 생성하지 않는다
오브젝트는 클래스와 다르게 앱 전체에 1개만 생성된다
// 오브젝트 예시
object Student {
	var name : String = "codak"
    fun printName() {
    	println("학생의 이름은 ${name} 입니다")
    }
}

// 위의 클래스 예시와는 다르게 인스턴스를 변수에 담는 과정이 없다

// 프로퍼티와 메서드 직접 호출
Student.name = "cocodak"
Student.printName()
// 실행 = 출력 : 학생의 이름은 cocodak 입니다

 

  • 컴페니언 오브젝트 (companion object)

일반 클래스에 object 기능을 추가하기 위해서 사용한다

클래스를 companion object 블록으로 감싸주면 생성 과정 없이 오브젝트처럼 사용할 수 있다

// 일반 클래스를 컴패니언 오브젝트로 오브젝트 기능 추가하기
class Student {
    companion object {                          //컴페니언 오브젝트 블록
        var name: String = "codak"
        fun printName() {
            println("학생의 이름은 $name 입니다")
        }
    }
}

// 오브젝트 기능이 추가되었기 때문에 별도의 인스턴스 생성이 없다

Student.name = "cocodak"
Student.printName() // 출력: 학생의 이름은 cocodak 입니다

 

 

💡인스턴스를 생성하지 않는 것의 장점
1. 여러 곳에서 동일한 상태를 참조하고 수정 (전역 상태 관리) 

2. 여러 클래스에서 공유할 수 있는 유틸리티 기능을 제공할 때 효과적 (로깅, 설정 관리, 네트워크 요청 등의 기능)

3. 인스턴스를 한 번만 생성하여 사용하기 때문에 메모리 사용을 최적화 (애플리케이션 전체에서 자주 사용되는 객체의 경우 메모리 절약 효과가 더 큼)

4. 인스턴스 생성 과정을 생략할 수 있기 때문에 코드가 간결 (별도의 생성자 호출이나 인스턴스 생성 코드가 필요하지 않음)
💡인스턴스를 생성하지 않는 것의 단점
1. 상태 변화에 측이 어려움, 여러 곳에서 동시에 상태수정 시 예상치 못한 동작 발생가능

2. 테스트(시험가동) 어려움

3. 전역적으로 사용되어서 의존성이 높아짐 = 코드를 유연하게 변경, 유지가 어려움

4. 계속해서 메모리에 남아있기 때문에 메모리 누수 가능성, 잘못된 방식으로 참조되면 심각해질 수 있음

'Kotlin' 카테고리의 다른 글

예외(Exception) 처리  (0) 2024.04.25
데이터 클래스와 다양한 클래스들  (2) 2024.04.23
클래스 조합  (0) 2024.04.23
람다식을 이용해서 고차함수 쉽게 표현  (2) 2024.04.22
형변환  (0) 2024.04.22