오버라이드(Override) vs 오버로드(Overload) 오버라이드(Override) 상위 클래스의 매소드를 재정의 하는 것. 메소드 이름은 물론 인자 갯수나 타입도 동일해야 한다. 주로 상위 클래스의 동작을 상속받은 하위클래스에서 메소드의 동작을 변경하기 위해 사용된다. 오버로드(Overload) 함수(메소드) 이름은 같고 인자 갯수나 타입이 다른 함수를 정의하는 것을 의미한다. 메서드 오버라이드 클래스 상속과 마찬가지로 기본 final이며 명시적으로 open키워드를 붙여 줘야만 오버라이드가 가능하다. 오버라이드를 위해서는 명시적으로 override키워드를 붙여 주어야한다. final클래스에서는 open멤버가 금지된다. open class Parent { open fun walking() { pri..
코틀린의 모든 class는 공통 상위 클래스인 Any를 상속받는다. (타입 시스템 참고) 클래스 내부가 비어있다면 중괄호를 생략해도 무방하다. class Example 자바와 달리 코틀린에서는 클래스와 메서드가 기본적으로 final로 선언된다. 상속 및 오버라이딩을 하기 위해서는 open키워드를 사용해야 한다. 상속 시 자바에서는 extends를 사용하지만 코틀린에서는 :(콜론)을 사용하여 상속한다. open class Parent() { } // extends Parent class Child() : Parent() { } 부모의 생성자는 반드시 초기화해야 한다. 클래스가 주요 생성자를 가진다면 주요 생성자의 파라미터로 부모를 초기화시킬 수 있다. open class Parent(val age: Int..
기본적인 클래스 구조 및 생성 class키워드로 클래스를 선언하며 기본으로 public가시성을 가진다. 자바와 달리 객체를 생성시 new키워드를 사용하지 않는다. Java public class PersonJava { public static void main(String[] args) { PersonJava personJava = new PersonJava(); } } Kotlin class PersonKotlin { // empty class } fun main() { val personKotlin = PersonKotlin() } 클래스 생성자 하나의 클래스에는 주요 생성자와 보조 생성자를 가질 수 있다. 주요 생성자는 클래스명 뒤에 위치한다. class PersonKotlin constructor..
객체지향의 대두 소프트웨어의 복잡성은 시간이 지날수록 증가해옴. 객체 및 엔티티와 현실 사이에 유사점을 통해 객체 관점에서 모델링 함. 각 객체는 조그마한 컴퓨터로 볼수 있으며 각 객체는 상태와 동작을 가진다. 객체지향적 추상화의 특징 특징 내용 단순성 (추상화) 여러 객체의 공통점을 묶어 단순화 시킨다. 객체는 현실을 모델링하므로 복잡성은 줄이고 구조는 단순화한다. 모듈성 각 객체의 내부 동작은 다른 부분과 분리되어있다. 가변성 올바른 설계를 하였다면 특정 객체 내부를 변경하더라고 다른부분에 영향을 주지 않는다. 확장성 새로운 객체를 추가하거나 존재하는 객체를 변경하므로써 요구사항에 빠르게 대처가함. 재활용성 객체는 다른 프로그램에서 다시 사용될수 있다. 출처 https://bit.ly/2MpUwA6
Primitive types 코틀린은 원시 타입과 래퍼 타입을 구별하지 않는다. (Int, Boolean) NonNullable 컴파일시 자동으로 원시타입 비교일경우 원시타입 사용 메서드를 호출하면 래퍼 클래스로 박싱하여 사용 Nullable null에는 원시 타입이 들어갈수 없으므로 기본으로 래퍼 클래스를 사용한다. Nullable과 NonNullable 코틀린에서는 기본 NonNull이다. Nullable 변수를 선언하려면 ?를 붙여서 사용한다. var nonNull: String = "hello" nonNull = null // error var nullable: String? = null nullable = "hello" Safe call operator - ?. Nullable 변수 사용시 NP..
for for 루프의 경우 iterator를 제공하는 모든것을 반복할 수 있음. val intList = (1..10).toMutableList() // print 1 ~ 10 for (i in intList) { print(i) } iterator를 사용하지 않고 index기반으로 for 루프를 사용할 수 있음. val intList = (1..5).toMutableList() for (i in intList.indices) { println("index: $i, value: ${intList[i]}") } withIndex로 index와 value를 한번에 사용할수 있음. val intList = (1..5).toMutableList() for ((index, value) in intList.with..