Kotlin vs Java
코틀린은 JetBrains에서 만든 언어로 자바를 대체할 수 있는 정적 타입의 언어이다.
자바와 같이 JVM에서 동작하고 서로 100% 호환이 가능하다.
2017년 5월 18일 구글은 코틀린을 안드로이드의 공식 언어로 채택하였다.
안드로이드의 대표 언어인 JAVA 대신 코틀린이 채택된 이유는 무엇일까
객체의 간결화, Null의 안정성, 값 및 변수 선언, 간결한 view 생성, 접근제한자, 생성자 순으로 설명하겠다.
1.객체의 간결화
--Java--
객체를 new로 초기화 한 후 객체를 사용한다.(각각의 데이터를 putExtra를 통해 전달한다)
Intent intent = new Intent(this,JavaActivity.class); //객체 초기화 및 생성
intent.putExtra("Java",1);
intent.putExtra("Kotlin",2);
--Kotlin--
객체를 new로 초기화 하지 않아도 객체를 선언할 수 있다. apply block 을 사용하여 전달할 데이터까지 묶어서 간결하게 선언할 수 있다. block 안에서는 아래와 같이 사용할 수 있으므로 가독성과 코드가 깔끔해진다. 복잡할수록 더 효과가 있다.
val intent = Intent(this,MenuActivity::class.java).apply{ //apply block
putExtra("java",1)
putExtra("Kotlin",2)
}
2. Null의 안정성
--Java--
@(Annotation)을 이용하여 구분할 수 있다.
@Nullable은 null이 가능하고, @NonNull은 null이 불가하다.
@Nullable String str1 = null; //null 허용
@NonNull String str2 = "notNULL"; // null 불허
str1.substr(2); // error
if(str1 != null)
str1.substr(2); //ok
--Kotlin--
Null의 안정성을 추구하기 위해 기본적으로 변수 값은 Null이 될 수 없다.
만약 null을 사용하게 된다면 변수 뒤에 ? 를 붙이면 된다. 하지만 Java와 큰 차이는 지금부터다. 그 변수를 아래에서와 같이 str1.substr(2)로 부른다면 애초에 null값을 호출한 것이기 때문에 빨간밑줄이 생긴다. 이는 사전에 에러를 막기 위해서다.
var str1:String? =null // ?를 붙이면 허용
var str2:String = "notNULL" // default 값
str1.substr(2) // 빨간밑줄이 생김 --> 실행하기 전 오류 탐색 가능
3. 값 및 변수 선언
--Java--
타입을 항상 명시해야 하고 final을 붙여 강제성을 추가할 수 있다.
String name = "SeungWon";// 가변
final int age = 24;// 불변
Student st = new Student(name); //new 객체 생성
--Kotlin--
타입추론을 통해 자동지정됨으로 타입을 명시하지 않아도 된다.
변수가 가변일 경우 var,변수가 불변일 경우 val을 사용하면 된다.
var name ="SeungWon" //가변
val age = 24 //불변
val st = Student(name) //new 없이 객체 생성
4. 간결한 VIEW
--Java--
findViewById() 로 객체에 할당한 후 view를 사용한다.
Button bt = findViewById(R.id.bt);
bt.setOnClickListner(new View.OnClickListner(){
public void onClick(View view){
System.out.println("Java Button");
}
});
--Kotlin--
Java와 달리 id를 함수로 찾지 않고 바로 사용한다. 훨씬 더 간결하고 쉽게 쉽게 사용할 수 있다.
bt.setOnClickListner(new View.OnClickListner(){
public void onClick(View view){
print("Kotlin Button")
}
})
5. 접근 제한자
--Java--
총 3가지 접근 제한자가 있다.( public, private, protected)
public int a=0; // 모두 접근 가능
private String b="JAVA"; // 현재 객체에서만 접근 가능
protected char c='j'; // 같은 패키지에 있는 객체 & 상속관계인 객체에서 접근 가능
int num = 1024; // default 값 --> 같은 패키지에서만 접근 가능
--Kotlin--
Java에서와 달리 같은 모듈내에서만 사용할 수 있는 internal이 있다. 나머지는 Java와 같다.
val a=0 //default 는 public
protected val b=1
private val c=2
internal val d =3 // 같은 모듈 내에서만 가능
6. 생성자 & 클라스
--Java--
생성자의 형태에 따라 별도로 생성해 주어야 한다. DTO(Data Transfer Object)를 사용하기 위해
getter,setter함수를 선언해야 한다.
public class Java{
private int a;
int b;
public Java(int a, int b){
this.a=a; this.b=b;
}
public Java(int a){
this(a,0); // a 값만 인자로 받는 생성자
}
public int getA(){return a;} // getter 함수
public void setA(int a){this.a=a;} // setter 함수
}
--Kotlin--
기본 생성자를 선언하지 않고 init으로 대체한다.
public class Kotlin(a:Int, b:Int){
init{
//기본 생성자
}
}
var로 변수 선언하게 되면 DTO를 사용하기 위해 별도로 getter,setter를 선언하지 않아도 된다.
public class(val a:Int, val b:Int) //주 생성자 간결화
constructor(a: Int) : this(a,0) // 다른 형태의 생성자
지금까지 Kotlin과 Java의 차이점을 살펴 보았다. Kotlin이 아직 생소하지만 자주 사용하게 된다면 Java보다 훨씬 편리하고 간결한 코드들을 작성할 수 있다. 안드로이드의 Java 언어 시대는 끝이 났다. 코틀린을 더 공부하고 싶다면
https://github.com/SeungWonU/kotlin-study/tree/master/kotlin%20programming
SeungWonU/kotlin-study
Contribute to SeungWonU/kotlin-study development by creating an account on GitHub.
github.com
'대외 활동 > CADI(개발A 보충스터디)' 카테고리의 다른 글
Android 6.0 버전 이후 달라진 접근 권한 (0) | 2020.09.07 |
---|---|
Android 시작 및 기초 다지기!(Button,Toast,ImageView) (0) | 2020.09.07 |
D2 Coding 폰트 적용하기 (0) | 2020.08.26 |
이클립스(Eclipse) 설치 (0) | 2020.08.25 |
안드로이드 스튜디오 설치 (0) | 2020.08.25 |