본문 바로가기
코틀린 문법

3. 오브젝트-코틀린 6일차-(2)

by 농농씨 2023. 4. 4.

스코프 함수 하다가 머리 터질것같아서 도망쳐옴

 

코드테스트 사이트:play.kotlinlang.org

참조:유튜브 디모의 코틀린

 

오브젝트

//오브젝트:생성자 없이 객체를 만들어냄
//클래스:단지 인스턴스 만들기 위한 '틀'이라서, 내부에 있는 속성이나 함수를
//사용하려면 생성자를 통해 실체가 되는 인스턴스 객체를 만들어야 함.
//그런데, 단 하나의 객체만으로 공통적인 속성과 함수를 사용해야 하는 코드에서는
//굳이 클래스 말고 오브젝트를 쓰면 된다~
//cf.singleton pattern:클래스의 인스턴스를 단 하나만 만들어 사용하도록
// 하는 코딩 아키텍쳐 패턴

//코드 아무데서나 호출해서 호출한 횟수 세는 counter라는 오브젝트 만들어보자~


fun main() {
    println(Counter.count) //오브젝트 호출해봄
    Counter.countUp()//두번정도 카운트해줍시다

    Counter.countUp()//object는 따로 인스턴스 없고 그 자체가 객체라서

   //object의 이름에 직접!참조연산자 씀


    
    println(Counter.count) //출력
    
    Counter.clear() //초기화함수 호출
    
    println(Counter.count) //출력
}
//오브젝트로 선언된 객체는 '최초사용시' 자동으로 생성되며 이후에는 코드 전체에서
//'공용으로 사용'될 수 있으므로 프로그램이 종료되기까지 공통적으로 사용될 내용들을
//묶어 만드는 게 좋다!

object Counter {//오브젝트는 인스턴스를 생성하지 않고 그 자체로 객체라서 
     //생성자는 사용하지 않는다
    var count=0 //실제 카운팅수저장하는 변수 선언
    
    fun countUp() { //카운트 수 올리는 함수
        count++
    }
    
    fun clear(){ //카운트수 초기화하는 함수
        count=0 
    }
}

아 미친................

코드실수해서 다시 치다가 복붙해놨던 주석 싹다 날아감!

그래도 이건 좀 쉬운 파트같으니까............ 휴

 

 

Companion object

//그런데, class 안에도 object를 만들 수 있다!

//클래스의 인스턴스 기능은 그대로 사용하면서, 인스턴스 간의 공용으로 사용할 속성이나 함수를

//별도로 만듦

//다른언어 cf.Static 멤버

//  :클래스 내부에서 별도의 영역에 고정적으로 존재하여 인스턴스를 생성하지 않아도 공용으로

//.  사용가능한 속성이나 함수

 

//짜장짬뽕 투표수를 집계하는 기능을 만들어봅시다~

//개별 투표수랑 총투표수가 따로 집계되도록!

fun main() {
    
    var a = FoodPoll("짜장")
    var b = FoodPoll("짬뽕")
    
    a.vote()
    a.vote()
    
    b.vote()
    b.vote()
    b.vote()
    
    println("${a.name} : ${a.count}") //중괄호가 아니라 소괄호 써서 오류났었음! 주의!
    println("${b.name} : ${b.count}")
    println("총계 : ${FoodPoll.total}")
   
}

class FoodPoll (val name:String) {//클래스 만들고 생성자에서 이름 받기
    companion object { //companion object 써주고 중괄호 안에 총투표수 저장하는 속성 넣기
        var total = 0 //인스턴스끼리 공유하는~변수~
    }
    
    var count = 0 //개별 집계 저장하는 변수
    
    fun vote() {
        total++ //총투표수 올리는 속성
        count++; //개별집계 올리는 속성
    }
}

//짬뽕과 짜장은 서로 다른 인스턴스이지만 companion object내에 있는 total이라는 속성을 공유해서 모든 인스턴스에서

투표수를 누적할 수 있다!