Kotlin 썸네일형 리스트형 [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) 뿐만 아니라 모듈과 관련된 설정 및 리소스 파일 등도 포함 될 수 있습니다 이렇게 프로젝트, 모듈, 폴더 및 파일이 실제 파일 시스템에 기반한 물리적.. 더보기 [Kotlin] 10. 오버라이딩과 추상화 상속시에는 기본적으로 수퍼 클래스에 있는 함수와 같은 이름과 형식을 가진 함수는 서브 클래스에서 만들 수 없습니다 하지만 수퍼 클래스에서 허용만 한다면 오버라이딩이라는 방법으로 서브 클래스에서 같은 이름과 형태로 된 함수의 내용을 다시 구현할 수 있습니다 예시를 통해 오버라이딩을 보겠습니다 fun main() { var t = Tiger() t.eat() } open class Animal { open fun eat() { println("음식을 먹습니다") } } class Tiger : Animal() { override fun eat() { println("고기를 먹습니다") } } /* 출력 고기를 먹습니다 */ Tiger 클래스는 Animal 클래스를 상속받고 있습니다 이때 Tiger 클래스에서.. 더보기 [Kotlin] 09. 클래스의 상속 오늘 알아볼 주제는 입니다 상속은 왜 필요할까요? 크게 상속이 필요한 경우는 2가지가 있는데요 1. 기존 클래스를 확장하여 새로운 속성이나 함수를 추가한 클래스를 만들어야 할 때 2. 여러개의 클래스를 만들었는데 클래스들의 공통점을 뽑아 코드 관리를 편하게 해야할 때 이때 속성과 함수를 물려주는 클래스를 수퍼 클래스, 물려받는 쪽을 서브 클래스 라고 합니다 코드를 통해 상속을 알아보도록 하겠습니다! fun main() { var a = Animal("별이", 5, "개") var b = Animal("별이", 5) a.introduce() b.introduce() b.bark() var c = Cat("루이", 1) c.introduce() c.meow() } open class Animal (var n.. 더보기 이전 1 2 3 4 5 6 다음 목록 더보기