1. 추상 클래스추상 클래스(abstract class)는 상속을 통해 공통된 동작을 수행하도록 설계된 클래스입니다. 추상클래스는 객체로 직접 생성될 수 없으며 상속 받는 하위 클래스에서 구현해야할 추상 멤버(구현이 없는 메서드, 초기화되지 않은 프로퍼티)를 포함할 수 있습니다.abstract class WithProperty { abstract val x: Int}abstract class WithFunctions { abstract fun f(): Int abstract fun g(n: Double)}코틀린에서 추상클래스는 abstract 키워드를 사용해서 정의합니다. 코틀린에서는 초기화 코드가 없으면 해당 참조를 abstract로 선언해야하며 참조가 속한 클래스에도 abstract를 붙여야 합..
1. 상속상속이란 기존 클래스를 재사용하면서 변경해 새로운 클래스를 만드는 메커니즘으로 기존 클래스의 프로퍼티와 동작을 재사용하고 확장할 수 있습니다. open class Parentclass Child : Parent()코틀린의 클래스는 기본적으로 final로 선언되기 때문에 상속이 불가능합니다. 클래스를 상속하기 위해서는 open 키워드를 통해 상속을 명시적으로 허용해줘야합니다. 부모 클래스에 open 키워드를 통해 상속을 명시적으로 허용해준다.사용하는 자식 클래스에서 : 키워드를 사용한다.open 키워드를 통해 해당 클래스가 상속을 고려해 설계되었다는 것을 명시적으로 알 수 있습니다. 1-1 생성자와 상속상속하는 클래스는 상위 클래스의 생성자를 호출해야 합니다. 코틀린에서는 상위클래스의 주 생성자를..
1. 인터페이스란?인터페이스는 클래스가 무엇을 하는지 기술하지만 그 일을 어떻게 하는지는 기술하지 않는 일종의 프로토타입의 역할을 합니다.클래스의 형태를 제시하지만 일반적으로 구현은 포함하지 않는다.객체의 동작을 지정하지만 어떻게 수행하는지에 대한 세부 사항은 제시하지 않는다.인터페이스를 구현하는 클래스는 해당 인터페이스가 정의한 모든 메서드를 구현해야 합니다.코틀린에서 인터페이스를 선언하고 사용하는 기본 문법은 다음과 같습니다.interface Animal { fun sound(): String fun move(): String}class Dog : Animal { override fun sound() = "왈왈!" override fun move() = "사족보행";}인터페이스를..
1. 코틀린의 null코틀린의 모든 타입은 기본적으로 널이 될 수 없는 타입으로 되어있습니다. 하지만 무언가 null 결과를 내놓아야 한다면타입 뒤에 물음표?를 붙여서 결과가 null이 될 수도 있음을 표시해야합니다.fun main() { val a = 1 val b: Int = null}fun main() { val s1 = "널널하구만~" val s2 : String? = null val s3: String? = s1 // ?를 통해 널이 될 수 있음을 표시}위의 예제와 같이 null 참조를 저장할 수 있는 식별자를 정의하려면 타입 이름 뒤에 ?를 붙여야 합니다. 이렇게 정의된 식별자는 null이나 정상적인 값을 모두 담을 수 있습니다. 1-1 널이될 수 없는 타입에 널..
1. 데이터 클래스데이터 클래스는 데이터 저장을 담당하는 클래스로 data 클래스를 사용하면 코드양을 줄이며 여러 공통 작업을 편하게 수행할 수 있습니다.data 클래스를 정의할 때에는 data키워드를 사용하며 모든 생성자 파라미터를 var이나 val로 선언해야 합니다.data class MemberResponse( val name: String, val email: String)fun main() { val member1 = MemberResponse("준준", "jun@naver.com") val member2 = MemberResponse("민민", "min@naver.com") println(member1) println(member2)}위의 예제의 실행결과를 통해..
1. 오버로딩오버로딩(Overloading)은 동일한 이름의 함수를 파라미터 목록에 따라 여러 형태로 정의할 수 있게 하는 프로그래밍 기능입니다.코틀린에서는 오버로딩을 어떤식으로 사용할까요?fun main() { val over = Overloading() val num1 = over.f() val num2 = over.f(2) println(num1) // 0 출력 println(num2) // 3 출력}class Overloading { fun f() = 0 fun f(n: Int) = n + 1} 함수의 시그니처는 함수 이름, 파라미터 목록, 반환 타입으로 이뤄집니다. 코틀린은 시그니처를 비교해 함수를 구분하게 되는데이 때 함수를 오버로딩할 때에는 파라미터를 서..
1. 확장 함수란?코틀린의 확장 함수(extension function)는 기존 클래스에 멤버 함수를 추가하는 것처럼 사용할 수 있도록 해주는 기능입니다. 확장 함수를 사용하면 클래스를 수정하거나 상속받을 필요 없이 새로운 메서드를 정의하여, 해당 클래스의 인스턴스에서 바로 호출할 수 있습니다. 1-1 확장 함수의 정의 방법확장함수를 정의하기 위해선 함수 이름 앞에 수신 객체 타입을 붙입니다. 수신 객체 타입은 확장 대상이 되는 클래스로 기본적인 형태는 아래와 같습니다.fun, 수신타입.확장함수() { ...} 1-2 기존 클래스를 확장해 기능을 추가하기예를 들어 문자열에 ''붙여 반환해주는 새로운 기능을 추가한다고 생각해봅시다.fun main() { val result = "안녕".singleQ..
1. 객체코틀린은 하이브리드 객체-함수형 언어로 객체 지향과 함수형 프로그래밍의 프러다임을 모두 지원합니다. 객체는 데이터를 저장하는 val, var를 포함하며(프로퍼티), 클래스 내부에 정의된 함수를 통해 연산을 수행하는데 클래스 내부에 정의된 함수를 멤버 함수라고 합니다. 클래스는 프로퍼티와 멤버 함수를 정의하기 위한 요소입니다. 클래스에 속하는 val이나 var을 만든 것을 객체 생성, 인스턴스 생성이라고 합니다. 2. 클래스를 만드는 방법클래스의 정의는 class키워드, 클래스 이름, 본문(프로퍼티 정의나 함수정의)이 들어가며 기본적으로 public 접근 제한자를 갖습니다.class Animal { val name = "동물" fun move(): String { retur..
1. forfor 키워드는 주어진 컬렉션이나 범위에 속한 요소를 하나씩 순회하며 지정된 코드 블록을 실행합니다.for문의 기본 형태는 아래와 같습니다.for(변수 in 컬렉션 또는 범위) { //실행할 코드}fun main() { var sum : Int = 0 for(i in 1..3) { sum += i } println(sum) // 6출력}1..3은 1부터 3의 범위를 의미하며 각 값을 i에 대입해 반복해서 실행하게 됩니다. 2. 범위를 나타내는 두가지 방법코틀린에서는 범위를 생성할 때 ..과 until 두가지 방법을 제공합니다. 1. .. 연산자 양 끝 값을 포함한 범위를 만듭니다.val range = 1..5 // 1, 2, 3, 4 ,5 2. unti..
1. 함수함수는 일련의 동작을 묶어 프로그램을 체계적으로 구성하고 코드 재사용성을 높이는 기본적인 도구입니다.함수는 입력값(파라미터)을 받아 계산을 수행하고 결과를 반환하거나, 단순한 작업을 수행할 수 있습니다.그렇다면 코틀린에서는 함수를 어떻게 사용할 수 있을까요? 코틀린에서 함수를 표현하는 방법은 아래와 같습니다.fun 함수이름(p1: 타입, p2: 타입): 반환타입 { //~~~~~~~ return 결과}두 값을 더하는 함수를 작성한다면 아래와 같이 작성할 수 있습니다.fun sum(a : Int, b : Int): Int { return a + b}fun main() { val sumValue = sum(1, 2) println(sumValue)} 의미 있는 결과를 제공하지 ..