일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- lateinit
- Kotlin Generic
- 코틀린 컬렉션함수
- 컬렉션 함수
- collection function
- 내용의동일성
- class
- 코틀린 lateinit
- 코틀린 내부 클래스
- kotlin collection
- isNullOrBlank
- 프로그래머스
- 해시
- 카카오 순위검색
- Kotlin
- 객체의 동일성
- 코틀린 제너릭
- programmers # 프로그래머스 #큰수비교 #cmp_to_key()
- 컬렉션함수
- kotlin listview
- add view
- 프로그래머스 #탐욕법 #큰수만들기 #join #python
- kotlin recyclerview
- 코틀린 문자열
- kotlin addview
- 코틀린
- kakao blind
- 코틀린 중첩클래스
- 코틀린 람다함수
- 코틀린 data class
- Today
- Total
목록프로그래밍 언어/코틀린 (28)
엔지니어 규의 IT 프로그래밍 다이어리

제너릭이란 클래스나 함수에서 사용하는 자료형을 외부에서 지정할 수 있는 기능이다. 예를 들어 class A 와 A를 상속받은 class B가 있을때 이 두 클래스의 인스턴스를 공용으로 사용하는 하나의 함수에 파라미터로 받으려면 super class인 A 의 자료형으로 받으면 B는 자동으로 A에 캐스팅 되면서 두 클래스 모두 함수의 패러미터로 사용이 가능하다. 하지만 캐스팅 연산을 거치는것은 프로그램의 속도를 저하시킬수 있다는 단점이 있다. 그래서 Generic 이라는 개념이 등장했다. 제너릭은 함수나 클래스를 선언할때 고전적인 자료형 대신 실제 자료형으로 대체되는 타입 패러미터를 받아 사용하는 방법이다. 이 타입패러미터에 특정 자료형이 할당이 되면 제너릭을 사용하는 모든 코드는 할당된 자료형으로 대체되어..

우리는 클래스의 상속을 통해 클래스를 '확장' 하는 방법을 배운적이 있다. 하지만 클래스를 다형성의 관점에서 살펴본적은 없다. 예를 들어 음료를 마시는 일에 비유를 해보자. 그냥 목이말라 아무음료나 마셔도 될때도 있지만 기호에 맞춰 콜라,생수,커피 등 원하는 음료를선택할 때도 있다. 이때 콜라를 '콜라 자체' 로도 볼수 있지만 '음료라는 특성' 으로도 볼 수 있도록 만드는 것이 다형성의 개념이다. 코틀린의 내부동작을 살펴보자. '음료' 라는 클래스와 이를 상속받은 '콜라'라는 클래스가 있다면 콜라의 인스턴스를 만들때 상속관계에 있는 super class 인 음료라는 객체를 담는공간에 콜라의 내용을 담는 내용이 추가되어 생성된다. 이렇게 만들어진 콜라의 인스턴스는 음료를 담는 변수에 저장하면 음료의 기능만..

옵저버 '옵저버' 란 '이벤트가 일어나는 것을 감시' 하는 감시자의 역할을 만든다고 하여 Observer 라고 부른다. 안드로이드를 예로 들자면 '키의 입력', '터치의 발생', '데이터의 수신' 등 함수로 직접 요청은 안했어도 시스템 또는 루틴에의 해 발생하는 동작들을 '이벤트' 라고 부르며 이 이벤트가 발생할때마다 즉각 처리하도록 만드는 패턴을 '옵저버 패턴'이라고 한다. 옵저버 패턴을 구현할 때는 두개의 클래스가 필요하다. 위 그림처럼 class A는 이벤트를 수신하고 class B는 이벤트의 발생 및 전달을 처리한다고 할때, 이와 같은 방법에는 문제가 있다. 일반적으로 이벤트를 수신하는 class A 의 필요에 따라 이벤트를 발생시키는 클래스의 인스턴스를 생성하여 사용하기 때문에, A 는 B를 직..

Object 기존에 배웠던 클래스는 단지 인스턴스 객체를 만들기 위한 '틀' 이기 때문에 내부에 있는 속성이나 함수를 사용하려면 생성자를 통해 실체가 되는 인스턴스 객체를 만들어야만 했다. (ex : var a = Person("김종국", 1990) ) 그러나 여러개의 인스턴스 객체가 필요하지 않으며 단하나의 객체만으로 공통적은 속성과 함수를 사용해야 하는 코드에서는 굳이 class를 쓸필요 없이 object를 사용하면 된다. 코틀린에서는 singleton pattern 을 언어 차원에서 지원한다. Singleton Pattern : 클래스의 인스턴스를 단 하나만 만들어 사용하도록 하는 코딩 아키텍쳐 패턴 아래의 소스코드를 보자. fun main(){ println(Counter.count) Counte..

스코프함수 스코프 함수는 함수형 언어의 특징을 좀더 편리하게 사용할 수있도록 기본제공하는 함수이다. 클래스에서 생성한 인스턴스를 스코프함수에 전달하면 인스턴스의 속성이나 함수를 스코프 함수 내에서 편하게 사용할 수 있도록 하는 기능이다. scope 함수에는 apply, run, with, also, let 5가지가 존재한다. 차례대로 알아보도록 하자. 1. apply apply는 인스턴스를 생성한 후 변수에 담기전에 '초기화 과정' 을 수행할 때 많이 쓰인다. 아래의 소스코드를 보자 fun main(){ var a = Book("재미있는 코틀린",10000) a.name = "초특가" + a.name a.discount() var b = Book("재미나는 코틀린",10000).apply { name =..

고차함수 고차함수란 함수를 마치 클래스에서 만들어낸 '인스턴스처럼' 취급하는 방법이다. 함수를 '패러미터'로 넘겨 줄 수 도 있고 결과값으로 반환 받을수도 있는 방법이다. 코틀린에서는 모든 함수를 고차함수로 사용 가능하다. 아래의 소스코드를 확인해보자 fun main(){ b(::a) val c: (String) -> Unit = { str -> println("$str 람다함수") } b(c) } fun a (str : String){ println("$str 함수 a") } fun b ( function: (String) -> Unit){ function("b가 호출한") } b가 호출한 함수 a b가 호출한 람다함수 cs 함수 a를 고차함수 형식의 패러미터로 받을수 있도록 하기위해서는, 함수를 받을..

Scope 스코프는 언어 차원에서 변수나 함수, 클래스 같은 '멤버'들을 서로 공유하여 사용할 수 있는 범위를 지정해둔 단위이다. 스코프가 지정되는 범위는 패키지, 클래수, 함수 내부 등이 있다. 예를 들어 하나의 패키지안에 변수, 함수, 클래스가 있다면, 그것들은 모두 하나의 scope 안에 있는 멤버들이지만, 다시 그 안에 있는 함수나 클래스 안에 또다른 변수나 함수가 존재한다면, 패키지 스코프안에 또다른 하위 스코프로 동작한다. 스코프에는 세가지 규칙이 존재한다. 지금부터 이 규칙을 알아보도록 하자. 첫번째 스코프 외부에서는 스코프 내부의 멤버를 '참조연산자' 로만 참조 가능하다. 이러한 개념은 그동안 자주 사용해 왔었다. 예를들면 클래스의 멤버를 참조할때 클래스 외부에서 인스턴스명에 참조연산자를 ..

프로젝트 프로젝트는 우리가 코틀린으로 어플리케이션을 짤 때 관련된 모든 내용을 담는 큰 틀이다. 하나의 프로젝트는 여러개의 모듈로 이루어질 수 있으며, 이 모듈은 직접 만들수도 있고 필요한 기능을 이미 구현해 둔 '라이브러리 모듈'을 가지고와 붙일 수도 있기때문에, 굉장히 편리한 기능 단위이다. 또한 모듈안에는 다수의 폴더와 파일이 들어갈 수 있다. 여기에는 코틀린 코드파일 뿐만 아니라, 모듈과 관련된 설정및 리소스 파일 등도 포함될 수 있다. 이런 방식으로 프로젝트, 모듈, 폴더및 파일이 실제 파일 시스템에 기반한 물리적인 구조를 담당한다. 위의 그림을 참고하면 쉽게 이해할 수 있다. 패키지 논리적인 구조로는 패키지라는것이 존재한다. 패키지는 개발시에 소스코드의 '소속'을 지정하기 위한 논리적인 단위이..
오버라이딩 상속시에는 기본적으로 Super class 에 있는 함수와 같은 이름과 형태를 가진 함수는 Sub class 에서는 만들수 없다. 하지만 Super class 에서 허용만 한다면 overriding 이라는 방법으로 subclass 에서 같은 이름과 형태로 된 함수의 내용을 다시 구현 할 수 있다. 아래의 소스코드를 보자. fun main(){ var a = Animal() var b = Tiger() a.eat() b.eat() } open class Animal{ open fun eat(){ println("음식을 먹는다.") } } class Tiger : Animal(){ override fun eat() { println("고기를 먹는다.") } } 음식을 먹는다. 고기를 먹는다. cs..
클래스의 상속이 필요한 경우는 두가지가 있다. 첫번째는 기존 클래스가 있을때, 이 클래스를 확장하여 새로운 기능이나 속성을 가진 클래스를 만들어야 할때가 있고, 두번째는 여러가지 클래스를 만들었는데, 이 클래스들의 공통점을 뽑아 코드관리를 쉽게하기 위함이다. 여기서 속성과 함수를 물려주는 쪽을 Super Class, 물려받는 쪽을 Sub Class 라고 한다. 다음 의 애완동물을 관리하는 Animal Class 를 살펴보자. fun main(){ var a= Animal("별이",5,"개") var b = Dog("멍이",4) var c = Cat("냥이",7) a.introdunce() b.introdunce() b.bark() c.meow() } open class Animal(var name: St..