Kotlin 60

[Kotlin syntax] Generic

[코틀린 문법] 제너릭 // Generic(제너릭) // // 함수나 클래스를 선언할 때 고정적인 자료형 대신 // 실제 자료형으로 대체되는 타입 파라미터를 받아 사용하는 방법 // 타입 파라미터는 관례적으로 사용 // (여럿일 경우 T, U, V 등 알파벳 사용) // 제너릭을 특정한 수퍼 클래스를 상속받은 클래스 타입으로만 제한하려면 // 라고 쓰면 됨 fun main() { UsingGeneric(S()).doSing() UsingGeneric(Y()).doSing() // 시은이가 노래를 합니다 // 자윤이가 노래를 합니다 doSing(Y()) doSing(I()) // 자윤이가 노래를 합니다 // 아이사가 노래를 합니다 } fun doSing(t: T) { t.sing() } // 수퍼 클래스 ..

[Kotlin syntax] Polymorphism

[코틀린 문법] 클래스의 다형성 // Polymorphism(다형성) // fun main() { // Up-Casting(업캐스팅) // // 상위 자료형인 수퍼 클래스로 변환 // 별도의 연산자 필요 없음 // Down-Casting(다운캐스팅) // // 업캐스팅 된 인스턴스를 다시 하위 자료형으로 변환 // as is var a = Drink() a.drink() // 음료를 마십니다 var b: Drink = Coke() b.drink() // 음료 중 콜라를 마십니다 // b.washDishes() // Kotlin: Unresolved reference: washDishes // -> 다운캐스팅 필요 // is // // 변수가 자료형에 호환되는지를 먼저 체크한 후 변환해주는 캐스팅 연산자 ..

[Kotlin syntax] Observer Pattern, Anonymous Objects

[코틀린 문법] 옵저버 패턴과 익명 객체 Observer Pattern(옵저버 패턴) // Observer(옵저버) // // Listener(리스너)라고도 함 // 이벤트가 일어나는 것을 감시하는 감시자의 역할 // Event(이벤트) // // 함수로 직접 요청하지는 않았지만 시스템 또는 루틴에 의해서 발생하게 되는 동작 // (키의 입력, 터치의 발생, 데이터의 수신 등) // Callback(콜백) // // 이벤트를 넘겨주는 행위 // Observer Pattern(옵저버 패턴) // // 이벤트가 발생할 때마다 즉각 처리할 수 있게 만드는 프로그래밍 패턴 // 옵저버 패턴 구현에 2개 클래스(이벤트 발생 및 전달하는 클래스, 이벤트 수신하는 클래스) 필요 // 문제는 후자는 전자를 참조할 수 ..

[Kotlin syntax] Objects

[코틀린 문법] 오브젝트 Object(객체), Singleton Pattern(싱글톤/싱글턴 패턴) // Object(오브젝트) // // 객체를 한 개만 생성하도록 하며 전역으로 생성 가능 // 하나의 객체로 공통적인 속성과 함수를 사용해야 할 때 -> 클래스보다 오브젝트가 나음 // 싱글톤 패턴을 언어 차원에서 지원하는 것 // Singleton Pattern(싱글톤 패턴) // // 디자인 패턴(코드를 어떻게 짜는게 더 좋고, 어떤 방식으로 구성해야 유지보수가 쉬운가) 중 하나 // 클래스의 인스턴스를 단 하나만 만들어 사용하도록 하는 코딩 아키텍쳐 패턴 fun main() { // 오브젝트는 인스턴스를 생성하지 않음 // -> 오브젝트명.멤버명 형태로 사용 println(Counter.count)..

[Kotlin syntax] Scope Functions

[코틀린 문법] 스코프 함수 - 함수형 언어의 특징을 좀 더 편리하게 사용할 수 있도록 기본 제공하는 함수 apply // apply // // 인스턴스 생성 후 변수에 담기 전 초기화 과정 수행에 많이 사용 // 값을 반환하지 않고, 객체 구성에 대해 주로 사용 fun main() { // 인스턴스에 .apply 붙이고 람다함수 만듦 var a = Book("오마이걸의 Real Love", 10000).apply { // -> apply의 스코프 안에서 직접 인스턴스의 속성 및 함수 사용 title = "[초특가]" + title discount() } } class Book(var title: String, var price: Int) { fun discount() { price -= 2000 } }..

[Kotlin syntax] Higher-Order Functions, Lambda Functions, Unit

[코틀린 문법] 고차함수와 람다함수와 Unit Higher-Order Function(고차함수) // Higher-order Function(고차함수) // // 일반 함수를 인자나 반환값으로 사용 // 함수를 클래스에서 만들어낸 인스턴스처럼 취급하는 방법 // 함수를 파라미터로 넘겨주거나 결과값으로 반환 받을 수 있음 fun main() { // 일반 인자 val res1 = sum1(3, 2) // 3 + 2 -> 5 println(res1) // 5 // 인자에 함수 사용 val res2 = mul1(sum1(3,3), 3) // (3 + 3) * 3 -> 18 println(res2) // 18 // 함수의 반환값으로 함수 사용 println("funcFunc: ${funcFunc()}") // ..

[Kotlin syntax] Scope, Access Modifier(Public/Internal/Private/Protected)

[코틀린 문법] 스코프와 접근제한자 Scope(스코프) // Scope(범위) // // 언어 차원에서 멤버(변수, 함수, 클래스)를 서로 공유하여 사용할 수 있는 범위를 지정해 둔 단위 // 1. 스코프 외부에서는 스코프 내부의 멤버를 참조연산자로만 참조 가능 // 2. 동일 스코프 내에서는 멤버 공유 가능 // 3. 하위 스코프에서 상위 스코프의 멤버 재정의 가능 // 2. 예시 val a = "패키지 스코프" class B { // 3. 예시 val a = "클래스 스코프" fun print() { println(a) } } fun main() { // 3. 예시 val a = "함수 스코프" println(a) B().print() } Access Modifier(접근제한자) // Access M..

[Kotlin syntax] Overriding, Abstract Class, Interface

[코틀린 문법] 오버라이딩, 추상 클래스, 인터페이스 Overriding(오버라이딩) // Overriding(오버라이딩) // // 기본적으로 서브 클래스에서는 수퍼 클래스와 동일한 함수를 만들 수 없으나 // -> 오버라이딩 -> 부모클래스의 메소드를 자식클래스에서 재정의 및 사용 가능 // 이미 구현이 끝난 함수를 서브 클래스에서 변경해야 할 때 사용 fun main() { var t = Tiger() t.eat() // 오버라이딩 전 // 음식을 먹습니다 // 오버라이딩 후 // 고기를 먹습니다 } // 수퍼 클래스 내 함수 앞에 open 붙이고 open class Animal2 { open fun eat() { println("음식을 먹습니다") } } class Tiger : Animal2()..

[Kotlin syntax] Class

[코틀린 문법] 클래스 // Class(클래스) // // 인스턴스를 만드는 틀 // Instance(인스턴스) // // 클래스를 이용해 만들어내는 서로 다른 속성의 객체 // 클래스 == 값(속성) + 기능(함수) // 함수 == 기능 fun main() { var bts = Singer("정국", 1997) var txt = Singer("연준", 1999) println("안녕하세요, ${bts.birthYear}년생 ${bts.name}입니다.") println("안녕하세요, ${txt.birthYear}년생 ${txt.name}입니다.") // 안녕하세요, 1997년생 정국입니다. // 안녕하세요, 1999년생 연준입니다. } // 클래스 속성(생성자) 선언 class Singer (var n..

[Kotlin syntax] Break, Continue, Logical Operators

[코틀린 문법] 흐름제어와 논리연산자 흐름제어 // break // // 반복문 종료 -> 다음 구문으로 넘어감 for (n in 11..20) { if(n == 13) break // n == 11 -> 11 출력 // n == 12 -> 12 출력 // n == 13 -> 종료 println(n) } // 11 // 12 // continue // // 다음 반복 조건으로 넘어감 for (o in 11..20) { if(o == 13) continue // o == 11 -> 11 출력 // o == 12 -> 12 출력 // o == 13 -> 14로 넘어감 println(o) } // 11 // 12 // 14 // 15 // 16 // 17 // 18 // 19 // 20 // 다중 반복문에서 ..

[Kotlin syntax] While, Do While, For, Increment Operators, Decrement Operators

[코틀린 문법] 반복문과 증감연산자 While, Do While(조건형 반복문) // 조건형 반복문 // // 조건이 참인 경우(즉 변수가 false 될 때까지) 반복 유지 // 변수가 false 될 때까지 // while, do...while // while // // a는 0부터 시작 var a = 0 // a가 3보다 작으면 해당 구문 반복 while (a < 3) { // a는 1씩 증가 println(++a) } // 1

[Kotlin syntax] Conditional expressions(If, When), Comparison Operators

[코틀린 문법] 조건식과 비교연산자 If // If Expression(If 표현식) // // 참/거짓 판별 var a = 3 var b = 5 var aIsBigger = false // if -> 조건을 만족할 때 if (a > b) { // a가 b보다 크면 true 출력 aIsBigger = true // else -> 조건을 만족하지 못할 때 } else { // a가 b보다 크지 않으면 false 출력 aIsBigger = false } println(aIsBigger) // false // 변수 설정 val aIsBigger2 = if (a > b) { true } else { false } println(aIsBigger2) // false // 실행할 구문이 하나라면 // 이렇게 축약 ..

[Kotlin syntax] Type Inference, Functions, Arithmetic Operators

[코틀린 문법] 타입추론과 함수 Type Inference(타입 추론) // 코틀린은 똑똑하기 때문에 알아서 자료형(변수 타입)을 때려맞춤 // -> 정수는 Int, 실수는 Double이 기본값 // -> 자료형을 코드에 명시하지 않아도 됨 // (Byte, Short 등을 사용하려면 자료형을 명시하면 됨) var apple = 1234 // var apple: Int = 1234 // 기본적으로 정수는 Int형으로 추론 var banana = 1234L // var apple: Long = 1234L // 정수에 L 붙어있으면 Long형으로 추론 var cherry = 12.45 // var apple: Double = 12.45 // 기본적으로 실수는 Double형으로 추론 var dragonFrui..

[Kotlin syntax] Type Casting, Arrays

[코틀린 문법] 형변환과 배열 Type Casting(형변환) // Type Casting(형변환) // // 자료형을 변경하는 기능 // 논리형은 형변환 불가능 // Explicit Type Casting(명시적 형변환) // -> 코틀린에서 사용하는 형변환 // 변환될 자료형을 개발자가 직접 지정함 // Implicit Type Casting(암시적/묵시적 형변환) // -> 코틀린에서 지원 안 함 // 자료형 지정하지 않아도 변수 할당시 자동으로 형변환됨 var a: Int = 321 var b: Long = a.toLong() // var b: Long = a // Kotlin: Type mismatch: inferred type is Int but Long was expected // a는 In..

[Kotlin syntax] Variables, Data Types

[코틀린 문법] 변수와 자료형 Variable(변수) - 값을 저장하는 메모리 공간 // Declaration of a Variable(변수 선언) // // var 변수명: 변수타입 = 변수값 // 이런 형태로 작성 var greeting: String = "Hello World!" // : String 생략해도 OK // (자세한 내용은 자료형에서 추가 설명) var greeting2 = "Hello World!" // 변수를 초기화 할 때는 var 필수 // -> 값 수정할 때는 var를 생략 var greeting3 = "Hello World!" greeting3 = "Hello Kotlin!" // 변수명은 camelCase(카멜표기법)으로 작성 // -> 아래와 같이 띄어쓰기를 대문자로 대체함..

반응형