Kotlin, 15. 객체

이도현·2023년 8월 10일
0

Kotlin 공부

목록 보기
14/20

객체선언, object

  • 싱글톤을 만들 때 사용
    	>- 싱글톤: 오직 한 개의 인스턴스만 운영하는 객체
    • class 키워드 없이 클래스 정의
    • 자동으로 인스턴스화 됨
    • 클래스명으로 접근
object Game{
  init {
  	println("방문을 환영합니다.")
  }
  
  fun play() {
    while(true) { 
    	// 게임을 시작
    }
  }
}
fun main(args: Array<String>) {
	Game.play()
}

객체 표현식

  • 익명 객체/익명 구현 객체를 만들 때 사용
val abandonedTownSquare = object : TownSquare() {
	override fun load() = "환영받을 것을 예상헀겠지만 여기는 아무도 없군요...")
}

동반 객체, companion object

  • 최상위 수준에서는 사용할 수 없음
  • 내부 클래스로서 정의
  • 자체적으로는 클래스 명을 가지지 않음
  • 하나의 클래스에는 하나의 동반 객체만 정의 가능
  • Java의 static 멤버에 해당
    	>- 자신을 포함하는 클래스가 메모리에 로드될 때 같이 생성됨.
    - 자신의 속성과 함수 중 하나가 사용될 때 초기화 됨.
    • 자신을 포함하는 클래스명으로 접근
class PremadeWorldMap {
	...
  companion object {
    private const val MAPS_FILEPATH = "nyethack.maps"
    
    fun load() = File(MAPS_FILEPATH).readBytes()
  }
}
PremadeWorldMap.load()

중첩 클래스

  • 클래스 내부에서 정의된 클래스
    - 이름ㅇ르 가짐
  • 다른 클래스에서는 사용되지 않고, 해당 클래스 내부에서만 사용되는 경우

내부클래스, inner

  • 이름을 가짐
  • 외부 클래스의 인스턴스가 있어야만 인스턴스화 할 수 있음
  • 외부 클래스의 속성에 자유롭게 접근 가능

데이터 클래스, data

  • 데이터를 저장하기 위해 특별히 설계된 클래스
  • toString, quals, copy 등의 메서드가 데이터를 기반으로 자동 생성
    	>- toString() : 클래스명(속성1=값1, ...) 형태의 문자열로 리턴
    • equals(): 데이터 속성이 모두 같은 값인지 비교 결과를 리턴
    • copy(): 데이터 값을 복사한 새로운 객체 리턴
      • 지명 호출 방식으로 매개변수를 통해 수정된 값을 가지게 할 수 있음

enum 클래스

  • 일련의 상수값을 정의하는 열거형 정의
enum class Direction{
	NORTH,
    EAST,
    SOUTH,
    WEST
}

fun getDirectionName(direction: Direction) = when(direction){
	Direction.NORTH -> "북"
    Direction.EAST -> "동"
    Direction.SOUTH -> "남"
    Direction.WEST -> "서"
}
  • 출력할 때 사용할 값을 변경할 수 있음
enum class Direction(private val str) {
  NORTH("북"),
  EAST("동"),
  SOUTH("남"),
  WEST("서")
}
profile
좋은 지식 나누어요

0개의 댓글