본문 바로가기

Develop/[Kotlin] UOS notice

자바(java)를 코틀린(kotlin)으로 무작정 변환하기!

시작하기에 앞서

코틀린을 적용하기 전에 안드로이드 스튜디오에서 Tools-Kotlin-Configure Kotlin in Project을 눌러 기본 설정을 해야하는 것 같다. 설정이 끝나면 build.gradle 파일에 kotlin과 관련된 것이 추가될 것이다.














Convert (.java) to (.kt)

kotlin으로 바꿔보자!

구글링 결과, 2가지 방법을 찾았다.


권장하지 않는 방법

1. 바꿀 java 파일과 이름이 같은 kotlin 파일을 같은 위치에 하나 생성한다.

2. kotlin 파일은 별 내용이 없는 빈 파일일 것이다.

3. kotlin 파일에 java 파일의 내용을 그대로 덮어쓴다. (Ctrl C, Ctrl V)

4. 안드로이드 스튜디오가 이 코드를 kotlin으로 바꿀지 묻는데, 그렇다고 한다.

5. 잘 작동한다. (...???)



그렇다. 별다른 세팅은 필요하지 않았다. 앱이 잘 작동하는 것 같아 당황스러웠다. (분명 무언가를 빼먹었을텐데..) 한편으로는, kotlin 변환 방식이 너무 불편했다. 이 모든 코드를 다 이렇게 변환해야한다는 것인가.. 분명 다른 좋은 방법이 이미 있을 것이다.

그래서 인터넷 검색을 했다. (참고할 페이지 바로가기)




권장하는 방법

Find Action(Ctrl Shift A)을 통해서 Convert Java File to Kotlin File 을 실행한다. 다음과 같은 알림이 뜬다.



OK를 누르면 즉시 kotlin으로 변환해준다. 파일 확장자도 kt로 변한다. 파일 여러개, 혹은 폴더를 통째로 변환할 수 있다. 즉, 패키지를 통째로 한 번에 변환시킬 수 있다. 단, 일부 코드는 직접 맞춰주어야 한다. 예를 들면 Nullable한 변수와 그렇지 않은 변수의 Type mismatch 등이다. 무계획적인 변환은 아래와 같은 참사를 낳는다...











무작정 바꾸긴 했는데...

무한의 오류가 발생했다! (위의 알림을 무시하고 OK를 눌렀기 때문일까) 무작정 kotlin으로 변환시켜버렸기 때문에 java와의 차이점에서 많은 오류가 났다. 대부분은 변수가 null일 수 있다는 오류 등이다. 다음과 같이 not null 표시!!를 해주거나 ?. 을 붙여주어야 했다.

if (!isOnline(context!!))
{
return
}
url = link
thread = Thread(ParsingRunnable())
thread?.start()

그리고 kotlin으로 자동변환하면서 일부 변수는 의도치 않게 선언부분이 수정되거나 삭제(?)되었다. 그래서 코드의 수정 전/후를 비교해서 1시간 동안 오류를 수정했다. 그랬더니 어찌어찌 앱이 실행은 된다. 아직 kotlin을 전혀 모르기 때문에 얼마나 더 손봐야 하는지는 모르겠다. null 외에도 java와 다른 문법이 꽤 있을 것이다.











정리

오늘 kotlin을 처음 작성하며 배운 중요한 것을 정리했다.

var id = 0
var url: String? = null

1. 변수선언은 var(변수), val(상수)로 지정한다. 변수의 타입은 생략 가능하다.

2. kotlin의 기본변수는 null을 가질 수 없다. null을 가지게 하려면 변수 타입에 ?를 추가한다.

3. 접근제어자는 protected를 사용할 수 없다. 한편 접근제어자 internal은 같은 모듈에서 사용가능하다고 한다.

4. kotlin에는 static이 없다. 그 대신 Companion Objects가 있다고 한다. 추후에 자세히 알아보겠다. (더 알아보기)