fun main(){
println("정적멤버변수 : ${TestClass1.a2}")
}
class TestClass1{
// 일반 멤버변수(=프로퍼티)
var a1:Int = 0
// 정적 멤버변수
companion object{
// 정적 멤버변수
// 프로퍼티는 반드시 초기화해야한다. (값을 새로 넣어줘야 한다)
var a2:Int = 100
fun testMethod2(){
// 정적 멤버 메서드
println("testMethod2의 a2 : $a2")
// 정적 메서드에서 일반 멤버 프로퍼티를 사용하면 오류난다
}
}
왜? 정적 멤버들은 프로그램이 시작할 때 이미 메모리에 올라가 있다. 그 후에 개발자가 만든 코드가 동작하기 때문.
쉽게말해 정적멤버가 먼저 메모리에 올라간 뒤 일반멤버가 올라간다는 의미.
정적멤버가 메모리에 올라와서 주변을 돌아봤을 땐 아무도 없으며, 일반멤버가 메모리에 올라와서 주변을 돌아봤을 땐 이미 정적멤버가 와있는 상태. 타인이 있으니 도움을 청할 수 있다.
println 으로 값을 출력할 때, 가끔 'kotlin unit' 이라는 메세지가 뜨길래 궁금해서 찾아봄. 반환값이 없는 경우 뜨는 메세지였다. (=return 값)
println은 단순히 콘솔에 출력해주는 함수이지 반환값을 넘겨주는 함수는 아니다.
따라서 println을 사용할 때 반환값이 없는 메서드를 사용하면 해당 메세지가 뜬다.