▶ Member variables - Properties / Member functions - Methods
member variables는 class안의 변수이다. 만약 Person이라는 class에서 age와 hobby라는 member variables를 사용하고 싶다면 다음과 같이 선언할 수 있다.
Member function은 class 안의 함수이다. 만약 위에서 설정한 취미를 출력하는 함수를 만든다면 다음과 같이 만들 수 있다.
해당 Method를 사용하고 싶으면 간단하게 내가 선언한 클래스 뒤에 . 을 붙여서 사용할 수 있다.
hobby 변수를 바꾸고 싶다면 (클래스명).hobby로 접근해서 수정할 수 있다. 즉, 클래스 선언 후 해당 클래스의 Member variables에 접근해서 수정하는 예시를 들자면 다음과 같다.
보조 생성자를 만들 때는 constructor()을 사용한다. 만약, 보조 생성자로 age값을 전달하고 싶다면, 다음과 같이 만들 수 있다. 참고로 this가 뜻하는 것은 지금 해당되는 Class를 뜻한다.
보조 생성자 생성으로 인해, 다음과 같이 선언해서 age값을 전달할 수도 있다(Person(firstName, lastName, age)).
보조생성자 뒤에 age값까지 출력하게끔 설정하여 다음과 같이 나이와 같이 출력하게끔 만들 수 있다.
만약, Person이라는 class를 호출할 때 입력했던, firstName, lastName을 변수로 활용하고 싶다면 class 안에 var firstName: String? = null 로 변수를 선언하고 init에서 값을 설정할 수 있다. 다음과 같이 말이다.
▶ lateinit, setters, getters
변수를 사용하려면 항상 선언을 해줘야 한다. 혹은 laeinit으로 선언하는 방법도 있다. 단, lateinit으로 변수를 선언해버리면, (Class명).(변수명) 과 같이 바로 접근하는 것이 불가능하다. 왜냐하면 해당 변수가 초기화되지 않았기 때문이다. 또한, Nullable이 아니기 때문에 불러올 수가 없다. 해결하기 위해서는 간단히 init 안에 this.(변수명) 값을 설정해주면 된다.
즉, lateinit을 사용한다면 변수를 초기화한 후 사용할 것을 명심하자.
getter의 경우, get()으로 사용할 수 있다. 해당 변수에 접근할 때, get으로 커스텀 설정을 하면, 해당 값을 불러오게 된다. 예를 들어, 내가 입력한 값의 소문자를 반환하게 하고 싶다면 다음과 같이 get설정을 하면 된다.
사실 별도의 설정이 없다면, 다음과 같이 자동으로 getter와 setter가 설정되어 우리가 설정한 변수를 불러오고 수정할 수 있는 것이다.
만약, 값을 설정할 때, 양수만 설정하고 싶다면 다음과 같이 setter를 customize해서 설정할 수 있다.
maxSpeed 변수를 음수로 설정하면 다음과 같이 오류를 내게 된다.
또한, 변수를 설정하고 setter를 private set으로 설정해주면 해당 클래스 내에서만 값을 정할 수 있다.
만약, priave set을 설정하고 main 함수에서 해당 변수를 재정의하려하면 오류를 출력한다.
출력은 getter의 영역이라 상관없다.
또한, Class 내에 위치한 init에서 다른 값으로 초기화를 해주는 것은 오류를 출력하지 않는다.
참고로 field는 property 참조를 도와주는 역할을 하고(field가 아닌 다른 변수를 입력하면 recursive 호출이 일어나서 stack overflow가 일어난다고 한다.), value는 변수에 정해지는 값을 뜻한다. 위에서 내가 myCar.maxSpeed = 240로 설정한 부분이 있는데 이 경우, 240이 value값에 해당한다.
'모바일 App 프로그래밍 > Kotlin' 카테고리의 다른 글
[Kotlin] OOP - 4 (0) | 2023.03.28 |
---|---|
[Kotlin] OOP - 3 (0) | 2023.03.27 |
[Kotlin] OOP - 1 (0) | 2023.03.24 |
[Kotlin] Nullable (0) | 2023.03.24 |
[Kotlin] 흐름 제어문 (if, when, while, for) (0) | 2023.03.24 |
댓글