일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 개발이 취미인 사람
- file upload
- 반복문
- component
- restful api
- swagger
- props
- It
- vue
- spring boot
- javascript
- Producer
- front-end
- node.js
- Sequelize
- 코틀린
- state
- Nest.js
- java
- kafka
- Kotlin
- 조건문
- 자바
- 개발자
- back-end
- react
- class
- SWIFT
- 상속
- AWS
- Today
- Total
개발이 취미인 사람
[Kotlin] 클래스 Getter & Setter 본문
- 개요
안녕하세요. 이번 시간에는 코틀린에서 Getter & Setter에 대해 알아보겠습니다.
우리는 자바에서 클래스를 만들고 해당 변수에 접근을 할 때 우리는 Getter & Setter 메서드를 만들어서 사용했습니다.
//자바
public class Person {
private String name;
private int age;
//생성자
public Person(String name, int age){
this.name = name;
this.age = age;
}
/**
* Getter & Setter
*/
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class MyClass {
public static void main(String[] args){
Person person = new Person("개발이 취미인 사람", 24);
System.out.println("이름 : "+person.getName());
System.out.println("나이 : "+person.getAge());
/**
* 실행 결과
*
* 이름 : 개발이 취미인 사람
* 나이 : 24
*/
}
}
코틀린에서는 Getter & Setter 메서드를 컴파일 시 생성합니다.(즉! 우리가 직접 메서드를 만들지 않아도 됩니다.)
지금부터 알아보겠습니다.
코틀린에서 기본적으로 클래스 생성 시 기본 생성자를 정의합니다.(사실 정의 안 하고 사용해도 됩니다.)
//코틀린 클래스 생성
class Person(var name: String, var age: Int)
소괄호 안에 해당 클래스에 속성을 정의합니다.
여기서 우리가 고려해야 될 부분은 var, val 그리고 아무것도 정의를 안 했을 때(var 또는 val 선언 안 함) 코틀린에서는
내부적으로 어떻게 동작하는지 알아야 합니다.
자료형, 변수, 상수 개념을 잘 이해하고 있다면 어렵지 않습니다. 혹시 개념을 잘 이해 못 하셨다면 아래 링크를 통해
학습하고 오시는 걸 추천드립니다.
코틀린에서는 선언 방식에 따라 Getter, Setter 생성 유무를 판단합니다.
클래스 선언 | Getter 생성 | Setter 생성 | 유형 |
class Person(name: String) | X | X | 생성자 매개변수 |
class Person(var name: String) | O | O | 속성 |
class Person(val name: String) | O | X | 속성 |
- 매개변수 선언 방식
class Person(name: String, age: Int)
표와 동일하게 코드를 만들어 Person 클래스에 name을 호출하려고 해도 안됩니다.
Unresolved reference: name 에러를 발생합니다.(확인되지 않은 참조: name)
그럼 var와 val은 어떻게 될까요?
- var & val 선언 방식
class Person(var name: String, val age: Int)
name 속성은 var로 age 속성은 val로 선언하고 테스트를 해보겠습니다.
fun main(){
var person = Person("개발이 취미인 사람", 24)
println("변경 전")
println(person.name)
person.name = "Ryan"
println()
println("변경 후")
println(person.name)
/**
* 실행 결과
* 변경 전
* 개발이 취미인 사람
*
* 변경 후
* Ryan
*/
}
var로 선언한 name 속성 값은 참조할 수 있으며, 변경도 가능합니다. (읽기 & 쓰기 모두 가능)
그럼 val로 선언한 속성은 어떻게 될까요?
값을 변경하려고 하면 Val cannot be reassigned 에러를 발생합니다.
즉, val는 재할당이 불 가능하다는 에러입니다.
당연한 상황이긴 하지만 코틀린에서는 선언 방식에 따라 Getter & Setter 메서드를 생성합니다.
- 코틀린 클래스 자바에서 호출 & 자바 클래스 코틀린에서 호출
코틀린 클래스를 만들고 자바에서 호출할 때
기본적인 Getter & Setter을 생성할 때 만들어지는 변수가 적용됩니다.
//코틀린 클래스
class Person(var name: String, var isAge: Int)
//자바 호출
public static void main(String[] args){
Person person = new Person("개발이 취미인 사람", 24);
person.getName();
person.isAge();
person.setName("Ryan");
person.setAge(12);
}
"is"라는 키워드를 앞에 붙여서 생성하지 않았다면 기본적인 getName() 형태로 호출할 수 있습니다.
"is"키워드를 붙이면 isAge()처럼 호출이 가능합니다.
자바 클래스를 만들고 코틀린에서 호출할 때
//자바 클래스
public class Person {
private String name;
private int isAge;
//생성자
public Person(String name, int isAge){
this.name = name;
this.isAge = isAge;
}
/**
* Getter & Setter
*/
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getIsAge() {
return isAge;
}
public void setIsAge(int isAge) {
this.isAge = isAge;
}
}
동일하게 호출하면 됩니다. :) 어렵지 않죠??
- 커스텀 Getter & Setter
코틀린에서 Getter과 Setter를 호출할 때 특정 연산을 할 수 있습니다.
class Person(name: String, age: Int){
var name: String = name
get() = name
set(value){
field = value
}
var age: Int = age
get() {
return age + 12
}
set(value){
//여기서 field = age 초기 값을 나타냅니다.
field = value
}
}
get() = 을 통해 고정적인 값을 반환을 할 수 있지만, get(){ 연산 로직 작성 } 중괄호 안에 연산이 필요한 코드를 적용할 수도 있습니다.
이번 시간에는 Getter와 Setter에 대해 알아봤습니다.
감사합니다. :)
'언어(Programming Language) > Kotlin' 카테고리의 다른 글
[Kotlin] Kotlin에서 Null처리 방법(null & not-null, 안전 호출, 엘비스 연산자 ) (0) | 2021.02.28 |
---|---|
[Kotlin] 클래스 상속 사용법 (2) | 2021.02.18 |
[Kotlin] 함수(Function) 사용법 (0) | 2021.02.17 |
[Kotlin] 클래스(Class) 생성자(Constructors) 개념 및 사용법 (1) | 2021.02.16 |
[Kotlin] break & continue와 forEach 사용법 (0) | 2021.02.14 |