Notice
Recent Posts
Recent Comments
Link
- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- suspend
- 책리뷰
- androidstudio
- KotlinInAction
- jlpt
- 책추천
- webflux
- 진짜학습지
- GIT
- github
- Kotlin
- coroutine
- CustomTab
- 인공지능
- ai
- 일본어문법
- posting
- 학습지
- 코틀린
- errorhandling
- n3문법
- rxjava
- 진짜학습지후기
- Android
- pullrequest
- PR
- 일본어기초
- 진짜일본어
- 안드로이드
- blog
Archives
코딩하는 개굴이
[Kotlin] Kotlin <--> Java 클래스의 Getter, Setter 호출하기 본문
반응형
Java/Kotlin 이 함께 사용되는 프로젝트의 경우 상호간의 클래스 사용에 주저한 적이 있을 것이다.
두 언어는 컴파일러가 큰 어려움 없이 사용할 수 있도록 해주지만, 아래와 같이 명확하게 개념을 짚어두고자 한다.
해당 내용은 fast campus 의 “실무 프로젝트로 배우는 Kotlin & Spring : 리팩토링부터 서비스 구현까지” 강의를 기반으로 작성되었음을 알립니다.
Java 에서 Kotlin 클래스의 Getter, Setter 호출하기
아래와 같은 Student.kt 로 클래스를 둔다고 가정하자.
class Student {
var name: String? = null
var id: Int? = null
val age: Int = 10
var grade: String? = null //접근 제어자를 사용하면 grade 에 대한 값을 변경하는 것은 Student 클래스 내부에서만 가능하다.
private set
fun changeGrade(str: String) {
this.grade = str
}
@JvmField
var nickname: String? = null
}
Java 에서는 Kotlin 클래스를 아래와 같이 사용한다.
public static void main(String[] args) {
Student student = new Student();
//가변 변수의 처리 -> set/get 을 사용한다.
//kotlin 클래스의 프로퍼티 지정
student.setName("스티브");
student.setId(123);
//kotlin 클래스의 값 가져오기
System.out.println(student.getName());
System.out.println(student.getId());
//불변 변수의 처리
//student.setAge(11); -> 불변 변수의 경우 내부적으로 setter를 생성해주지 않기 때문에, 컴파일에러가 발생한다.
//접근제어가 걸려있는 변수의 처리
//student.setGrade("2"); -> var 이지만 접근제어로 setter 가 걸려있으므로, 역시 컴파일 에러가 발생한다.
student.changeGrade(2); //이렇게는 가능하다.
System.out.println(student.getGrade());
//코틀린의 프로퍼티를 자바로 변환할때는 getter/setter 로만 가능하지만
//JVM field 라는 어노테이션을 자용하면 자바 프로퍼티로 접근할 수 있게 된다.
student.nickname = "스티비";
System.out.println(student.nickname);
}
Kotlin 에서 Java 클래스의 Getter, Setter 호출하기
public class Person {
private String name;
private String id;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getUUId() { //실질적으로 변수/프로퍼티가 없는 getter
return UUID.randomUUID().toString();
}
//kotlin 컴파일러는 get/set 이 짝일 경우에만 프로퍼티를 생성해주므로, 아래의 경우 프로퍼티형식으로 사용은 불가하다. 자바형으로는 가능하다.
public String myId() { return id; }
public void setId(String id) { this.id = id; }
}
위와 같은 자바 클래스를 kotlin 에서 사용한다고 가정하자.
Kotlin 에서 Java 의 클래스를 사용할 수 있는 방법은 아래와 같다.
fun main() {
//자바와 같이 set/get 하는 방법 -> 가능은 하지만 권장하지는 않음.
val person1 = Person()
person1.setName("토니")
println(person1.name)
//코틀린의 스타일 -> 직접적으로 프로퍼티를 접근한다. 자바 클래스를 사용할 때도 프로퍼티 문법을 사용할 수 있다.
val person2 = Person()
person2.name = "위도우"
println(person2.name)
//프로퍼티가 실질적으로 존재하지 않아도 함수의 시작이 Get 일 경우 프로퍼티처럼 사용할 수 있다.
println(person2.uuid)
}
반응형
'안드로이드 > KOTLIN' 카테고리의 다른 글
[Kotlin] Coroutine Dispatchers.Main 의 동작 순서 보장 (feat. Dispatchers.Main.immediate) (1) | 2023.06.18 |
---|---|
[Kotlin] Kotlin <--> Java 의 예외처리 (+ 지정 키워드 escape 하여 사용하기) (0) | 2023.05.07 |
[Kotlin] Kotlin의 기본 한번에 요약하기 (0) | 2023.05.02 |
[Kotlin] KtLint 로 클린한 코드 작성하기 (0) | 2023.01.30 |
[Kotlin] 함수/람다 함수 내의 반환 return (0) | 2023.01.21 |
Comments