728x90
JAVA에서 Kotlin Getter/Setter 호출하기
Student Kotlin 클래스
class Student {
@JvmField
var name: String? = null
var birthDate: LocalDate? = null
val age: Int = 10
//var 키워드 setter 제거
var grade: String? = null
private set //클래스 내부에서만 setter를 사용할 수 있다
fun changeGrade(grade: String) {
this.grade = grade
}
}
JAVA에서 호출하기
import java.time.LocalDate;
public class JavaGetterSetterExample {
public static void main(String[] args) {
Student student = new Student();
//setter
//student.setName("스티브로저스");
//student.setBirthDate(LocalDate.of(1918, 7, 4));
//getter
//System.out.println(student.getName());
//System.out.println(student.getBirthDate());
//student.setAge(10);//컴파일 오류 //val 키워드로 선언한 프로퍼티는 setter가 없다.
System.out.println(student.getAge());
//student.setGrade(""); //var 키워드지만 private로 선언했기 때문에 외부에서 호출 x
student.changeGrade("A"); //setter가 아닌 볊도의 메서드를 만들어서 값을 변경하는 방식으로 사용해야한다
System.out.println(student.getGrade());
//JVM 필드 사용
student.name = "스티브로저스";
System.out.println(student.name);
//JVMfield를 사용하면 getter, setter를 통해서 접근하는 것이 아닌 프로퍼티로 접근해야한다
}
}
- 코틀린에서 val 키워드로 생성된 프로퍼티는 불변으로 JAVA에서 getter만 존재한다.
- 코틀린에서 var 키워드로 생성된 프로퍼티는 가변으로 JAVA에서 getter, setter 모두 존재한다.
- setter를 private 가시성으로 변경한다면, var로 선언하더라도 setter를 없앨 수 있고, 값을 변경하기 위해서는 내부에서만 변경하거나, 별도의 외부 접근 메서드를 만들어서 변경해야 한다.
- @JvmField 사용하면, getter, setter를 쓰지 않고, 자바 프로퍼티로 접근이 가능하다.
Kotlin에서 JAVA Getter/Setter 호출하기
JAVA Person.class
import java.util.UUID;
public class Person {
private String name;
private int age;
private String address;
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 String myAddress() { //getter가 아닌 myAddress일 경우
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getUUID(){
return UUID.randomUUID().toString();
}
}
Kotlin에서 호출하기
fun main() {
//자바 스타일 //IntelliJ에서도 경고 표기
val person = Person()
person.setName("토니스타크")
person.setAge(44)
person.setAddress("스타크타워")
println(person.getName())
println(person.getAge())
//코틀린 스타일 => 프로퍼티처럼 사용해라
val person2 = Person()
person2.name = "토니스타크"
person2.age = 44
println(person2.name)
println(person2.age)
//프로퍼티가 없음에도 게터 메서드라면 프로퍼티처럼 사용 가능하다
println(person.uuid) //메서드 시작이 get으로 시작하기 때문에 코틀린에서 프로퍼티처럼 사용가능
//세터가 있음에도 컴파일 오류 발생
//person2.address = "" //setter가 있지만, getter가 없으므로 코틀린 컴파일러가 만들어 주지 않는다
//address를 가져오는 메서드를 게터가 아닌 my로 했기 때문에 세터도 생성되지 않는다
person2.myAddress() //메서드를 직접 호출하는 방법밖에 없다.
}
- Kotlin에서도 자바의 getter/setter를 호출할 때, 기존 자바의 스타일과 동등하게 사용할 수 있지만, 추천하지 않는다.
- IntelliJ와 같은 IDE에서도, 프로퍼티 방식으로 호출하도록 경고(노란 밑줄)한다.
- 프로퍼티가 없더라도, getter 메서드가 존재한다면, 프로퍼티처럼 사용 가능하다(getUUID)
- setter가 있더라도, getter가 없을 경우, kotlin에서 setter를 호출하지 못한다(코틀린 컴파일러가 만들어주지 않는다)
- 직접 만든 메서드를 호출해서 가지고 오는 방법 밖에 없다(myAddress)
728x90
'실무 프로젝트로 배우는 Kotlin & Spring > JAVA 프로젝트에 코틀린 도입하기' 카테고리의 다른 글
| JAVA 기반 스프링 프로젝트에 코틀린 적용 (0) | 2022.11.05 |
|---|---|
| 코틀린과 롬복 (0) | 2022.11.05 |
| JAVA에서 확장함수 사용하기 (0) | 2022.11.04 |
| JvmStatic을 이용해 정적 함수 호출하기 (0) | 2022.10.23 |
| Kotlin의 예외처리와 JAVA 예약어 접근 방법 (0) | 2022.10.23 |