스코프 함수 하다가 머리 터질것같아서 도망쳐옴
코드테스트 사이트: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이라는 속성을 공유해서 모든 인스턴스에서
투표수를 누적할 수 있다!
'코틀린 문법' 카테고리의 다른 글
6. 형변환과 배열, 타입추론과 함수 (0) | 2023.04.30 |
---|---|
5. 변수와 자료형-코틀린 (0) | 2023.04.30 |
4. 익명객체와 옵저버 패턴-코틀린 7일차 (0) | 2023.04.11 |
2. 고차함수,람다함수, 스코프함수-코틀린 6일차 (0) | 2023.04.04 |
1. 프로젝트 구조, 스코프-코틀린 5일차 (0) | 2023.04.04 |