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

 

+ Recent posts