Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- chapter01
- 델타 rule
- Numerical optimization
- undirected graphical model
- 알고리즘
- falsePosition
- SCPC
- 선형분류
- secant
- Perceptron Convergence theorem
- CH01
- 개발순서
- vector미분
- 이것이 MySQL이다
- 2018
- Fisher discriminant analysis
- 근구하기
- graphical models
- bisection
- 스터디
- 1차예선
- 5397번
- 선형판별분석
- 알고리즘대회
- 인공지능
- 로지스틱 회귀
- 자바ORM표준JPA프로그래밍
- MySQL
- chapter02
- directed graphical model
Archives
- Today
- Total
computer_study
[Kotlin] 12. 자바 상호 운용성 본문
12.1 자바 코드를 코틀린에서 사용하기
12.1.1 자바 메서드와 필드
- 자바 메서드를 아무 문제 없이 코틀린 함수처럼 노출시킬 수 있다.
- 뉘양스 차이는 유의해야 한다.
12.1.2 Unit과 void
- 자바에서 void를 반환하면 코틀린에선 Unit을 반환하는 함수로 본다
12.1.3 합성 프로퍼티
- 코틀린에선 자바의 게터나 세터를 일반적인 코틀린 프로퍼티처럼 쓸 수 있게 합성 프로퍼티를 노출시켜준다.
- 게터는 파라미터가 없는 메서드. 메서드 이름이 get으로 시작해야 한다.
- 세터는 파라미터가 하나만 있는 메서드. 메서드 이름이 set으로 시작해야 한다.
- Person class에 getAge()가 있다면 코틀린에선 person.age와 같은 식으로 쓸 수 있다.
12.1.4 플랫폼 타입
- 코틀린은 자바 코드로부터 비롯된 객체는 플랫폼 타입으로 분류한다.
- 이 값은 null이 될 수도 있다.
- 이를 함수에서 반환하면 플랫폼 타입이 전파되기도 한다.
12.1.5 널 가능성 애터테이션
- 젯브레인즈의 @Nullable과 @NotNull
- 안드로이드 SDK의 여러가지 @Nullable과 @NotNull
- @Nonnull등의 JSR-350 널 가능성 애너테이션
12.1.6 자바/코틀린 타입 매핑
자바타입 | 코틀린 타입 |
byte/Byte | Byte |
short/Short | Short |
int/Integer | Int |
long/Long | Long |
char/Character | Char |
float/Float | Float |
double/Double | Double |
12.1.7 단일 추상 메서드 인터페이스
- 단일 추상 메서드(추상 메서드가 하나뿐인 자바 인터페이스)는 코틀린 함수 타입처럼 작동한다.
12.1.8 자바를 코틀린으로 변환하는 변환기 사용하기
- 일텔리J플러그인을 통해 자바 소스파일을 코틀린 코드로 변환할 수 있다
- Code > Convert Java File to Kotlin File 액션
12.2 코틀린코드를 자바에서 사용하기
12.2.1 프로퍼티 접근
- 코틀린 프로퍼티를 자바에서 직접 접근할 수는 없다.
- 자바 클라이언트는 일반적인 메서드와 마찬가지 방법으로 접근자 메서드를 통해 접근할 수 있다.
- 게터는 파라미터가 없는 메서드. 이름은 프로퍼티 이름 첫 글자를 대문자로 변경 후 앞에 get이 붙는다
- 세터는 파라미터를 하나만 받는 메서드. 이름은 프로퍼티 이름 첫 글자를 대문자로 변경 후 앞에 set이 붙는다.
12.2.2 파일 퍼사드 최상위 선언
- 자바는 모든 메서드는 어떤 클래스에 속해야 하기 때문에, 코틀린 컴파일러는 최상위 함수와 프로퍼티를 자동으로 생성된 파일 퍼사이드라는 클래스에 넣는다.
12.2.3 객체와 정적 멤버
- JVN에서 코틀린 객체 선언은 정적인 INSTANCE필드가 있는 일반적인 클래스로 컴파일 된다.
// kotlin 코드
object Application{
val name = "My Application"
fun exit(){}
}
// java에서 접근
public class Main{
System.out.println(Application.Instance.getName());
}
12.2.4 노출된 선언 이름 변경하기
- @JvmName 애너테이션을 통해 함수나 프로퍼티 접근자 이름을 변경할 수 있다.
- 코틀린에서는 올바른 선언이나, 자바에서는 금지된 선언이 되는 시그니처 충동을 막기 위해 사용
@JvmName("visit")
fun goto(person: Person){
...
}
// goto 대신 visit로 접근 가능
12.2.5 오버로딩한 메서드 생성하기
- 코틀린에서 @JvmOverloads 애노테이션을 제공
- @JvmOverloads를 적용하면 원래 코틀린 함수 외에 오버로딩된 함수를 추가로 생성한다.
- @JvmOverloads애너테이션에 의해 생성되는 오버로딩된 함수들은 자바와 상호 운용을 목적으로 만들어졌기에, 코틀린에서 해당 함수를 호출할 수 없다.
12.2.6 예외 선언하기
- 코틀린은 예외 유형과 무관하게 던지면 되지만, 자바에서는 명시적으로 외부로 던져지는 예외 목록을 함수에 추가해야 한다.
- @Throws 애너테이션을 사용해 예외클래스 지정 가능
@Throws(IOException::class)
fun loadData() = File("data.txt").readLines()
12.2.7 인라인 함수
- 자바에는 인라인 함수가 없기에, inline이 붙어있다면 일반 메서드로 노출된다.
- 메서드를 호출할 수는 있지만, 인라인 함수의 본문이 자바 코드로 인라인 되지는 않는다.
12.2.8 타입 별명
- 타입 별명은 자바에서 사용할 수 없다.
- 자바에선 모두 원래의 타입을 가리키는 것으로 보인다.
'스터디 > 코틀린 완벽 가이드' 카테고리의 다른 글
[Kotlin] 09. 제네릭스 (0) | 2022.06.08 |
---|---|
[Kotlin] 08. 클래스 계층 이해하기 (0) | 2022.06.03 |
[Kotlin] 07. 컬렉션과 I/O 자세히 알아보기 (0) | 2022.06.03 |
[Kotlin] 06. 특별한 클래스 사용하기 (0) | 2022.05.27 |
[Kotlin] 05. 고급 함수와 함수형 프로그래밍 활용하기 (0) | 2022.05.26 |
Comments