Android 썸네일형 리스트형 [Kotlin] 제너릭 Generic 클래스나 함수에서 사용하는 자료형을 외부에서 지정할 수 있는 기능인 제너릭 : 함수나 클래스를 선언할 때 고정적인 자료형 대신 실제 자료형으로 대체되는 타입 파라미터를 받아 사용하는 방법 타입 파라미터에 특정 자료형이 할당되면 제너릭을 사용하는 모든 코드는 할당된 자료형으로 대체되어 컴파일 됩니다 ex) fun genericFunc (param: T): T class GenericClass (var pref: T) -> 안에 Int가 할당되었으므로 T 자리엔 모두 Int가 할당됨 따라서 캐스팅 연산 없이도 자료형을 그대로 사용할 수 있습니다 타입 파라미터의 이름은 클래스 이름과 규칙이 같지만 일반적으로 'Type'의 이니셜인 'T'를 사용하는 것이 관례이며 여러개의 제너릭을 사용할 경우 T의 다음 알파벳.. 더보기 [Kotlin] 클래스의 다형성 다형성의 개념을 음료에 비교해 표현하자면 우리가 목이 말라서 아무 음료나 마셔도 좋을 때도 있지만 각자 기호에 맞춰 물, 콜라 혹은 사이다를 마시고 싶을 때가 있습니다 이때 콜라를 '콜라 자체'로도 볼 수 있지만 '음료라는 특성'으로도 볼 수 있도록 만드는 것이 '다형성'의 개념입니다 이를 코틀린 코드로 살펴보자면 음료라는 클래스(Drink)와 이를 상속받은 콜라라는 클래스(Cola)가 있습니다 이때 콜라의 인스턴스를 만들 때는 상속관계에 있는 수퍼클래스인 음료를 담는 공간에 콜라를 담는 공간이 추가되어 추가됩니다 이렇게 만들어진 콜라의 인스턴스는 음료를 담는 변수에 저장하면 음료의 기능만 사용하게 되고 ( var a: Drink = Cola() ) 콜라를 담는 변수에 저장하면 콜라의 기능까지 모두 사용.. 더보기 [Kotlin] 익명객체와 옵저버 패턴 옵저버는 '이벤트가 일어나는 것을 감시'하는 감시자의 역할을 만듭니다 안드로이드에서는 키의 입력, 터치의 발생, 데이터의 수신 등 함수로 직접 요청하지 않았지만 시스템 또는 루틴에 의해서 발생하게 되는 동작들을 '이벤트'라고 부르며 이 이벤트가 발생할 때마다 '즉각적으로 처리'할 수 있도록 만드는 프로그래밍 패턴을 '옵저버 패턴' 이라고 부릅니다 옵저버 패턴을 구현할 때는 2개의 클래스가 필요합니다 하나는 이벤트를 수신하는 클래스(class A), 하나는 이벤트를 발생시키고 이를 알려주는 클래스(class B)입니다 각각의 클래스를 A, B 라고 두었을 때, B에서 이벤트가 발생할 때 A에 있는 이벤트를 처리하는 함수를 호출하여 알려줍니다 이때 B에서는 자신의 이벤트를 받을 수 있는 인터페이스를 만들어 .. 더보기 [Kotlin] 오브젝트 Object 클래스는 인스턴스 객체를 만들기 위한 틀이기 때문에 내부에 있는 속성이나 함수를 사용하려면 생성자를 통해 실체가 되는 인스턴스 객체를 만들어야 했는데요, 그러나 여러개의 인스턴스 객체가 필요하지 않고 단 하나의 객체만으로 공통적인 속성과 함수를 사용해야 하는 코드에서는 굳이 클래스를 쓸 필요없이 오브젝트를 사용하면 됩니다 오브젝트는 *싱글톤 패턴 (Singleton Pattern)을 언어 차원에서 지원하는 것이라고 볼 수 있습니다! *싱글톤 패턴: 클래스의 인스턴스를 단 하나만 만들어 사용하도록 하는 코딩 아키텍쳐 패턴 코드 아무데서나 호출하여 호출한 횟수를 카운팅하거나 초기화 할 수 있는 Counter라는 object를 만들어보겠습니다 fun main() { println(Counter.count) C.. 더보기 [Kotlin] 스코프 함수 스코프 함수를 이야기 하기 전에 잠깐 람다함수의 몇가지 특별한 케이스들을 살펴보도록 하겠습니다! 1. 람다함수도 여러 구문의 사용이 가능 람다함수도 일반 함수처럼 여러 구문을 사용할 수 있는데요, 아래 예시와 같이 람다함수도 여러줄로 표현이 가능합니다 val c : (String) -> Unit = { str -> println("$str 람다함수") println("여러 구문을") println("사용 가능합니다") } 그리고 람다함수가 여러줄이 되는 경우에는 마지막 줄에 있는 결과값을 반환하게 됩니다 val calculate: (Int, Int) -> Int = {a, b -> println(a) println(b) a+b } // a+b의 값을 Int로 반환 따라서 위 코드에선 마지막 구문인 a+b.. 더보기 [Kotlin] 고차함수와 람다함수 고차함수란 함수를 마치 클래스에서 만들어 낸 '인스턴스처럼' 취급하는 방법인데요 함수를 '파라미터'로 넘겨 줄 수도 있고 '결과값으로 반환'받을 수도 있는 방법입니다 즉, 다른 함수를 인자로 받거나 함수를 반환하는 함수입니다! 코틀린에서는 모든 함수를 고차함수로 사용 가능합니다 fun main() { b(::a) } fun a (str: String) { println("$str 함수 a") } fun b (function: (String) -> Unit) { function("b가 호출한") } /* 출력 b가 호출한 함수 a */ a라는 함수를 만들어 문자열을 파라미터로 받고 있습니다 그리고 파라미터로 받은 문자열 뒤에 '함수 a' 라고 출력합니다 그리고 b라는 함수를 만들어 함수 a를 고차함수 형식.. 더보기 [Kotlin] 변수, 함수, 클래스의 접근범위와 접근제한자 프로젝트 내에서 변수나 함수, 클래스의 '공용 범위'를 제어하는 단위인 스코프와 스코프 외부에서 스코프 내부로의 접근을 제어하는 접근제한자에 대해 알아보도록 하겠습니다 : '범위' 라는 뜻 그대로 언어차원에서 변수나 함수, 클래스 같은 '멤버'들을 서로 공유하여 사용할 수 있는 범위를 지정해 둔 단위 스코프가 지정되는 범위는 패키지 내부, 클래스 내부, 함수 내부 등이 있는데요 예를 들어 하나의 패키지 안에 하나의 변수, 함수, 클래스가 있다면 그것들은 모두 하나의 스코프 안에 있는 멤버들이지만 다시 그 안에 있는 함수나 클래스 안에 또 다른 변수나 함수들이 존재한다면 패키지 스코프 안에 또 다른 하위 스코프로 동작하게 됩니다 그렇다면 스코프에 대한 3가지 규칙을 알아보겠습니다 1. 스코프 외부에서는 스.. 더보기 [Kotlin] 코틀린 프로젝트의 구조 오늘의 포스팅은 코틀린 프로젝트의 전체적인 구조에 대해 알아보겠습니다 실제 코딩을 할때는 '프로젝트 project' 라는 개념으로 코딩을 하게 되는데요 : 코틀린으로 어플리케이션을 짤 때 관련한 모든 내용을 담는 '큰 틀' 프로젝트는 모듈, 패키지, 클래스를 포함합니다 하나의 프로젝트는 여러개의 모듈로 이루어질 수 있습니다 이 모듈은 직접 만들 수도 있고, 필요한 기능을 이미 구현해둔 '라이브러리 모듈'을 가져와 붙일 수도 있기 때문에 굉장히 편리한 기능 단위입니다 그리고 이 모듈 안에는 다수의 파일과 폴더가 들어있습니다 여기에는 코틀린 코드파일 (.kt) 뿐만 아니라 모듈과 관련된 설정 및 리소스 파일 등도 포함 될 수 있습니다 이렇게 프로젝트, 모듈, 폴더 및 파일이 실제 파일 시스템에 기반한 물리적.. 더보기 이전 1 2 3 다음