코틀린 썸네일형 리스트형 [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.. 더보기 [Kotlin] 08. 클래스의 생성자 class Person(var name: String, val birthYear: Int) 클래스의 이름 옆에 있는 소괄호 안에 쓰인 속성들을 생성자 라고 할 수 있는데요, 위 방법은 클래스의 '속성'들을 선언함과 동시에 '생성자' 역시 선언하는 방법입니다 그럼 생성자란 무엇일까요? : 생성자란 새로운 인스턴스를 만들기 위해 호출하는 특수한 함수입니다 생성자를 호출하면 클래스의 인스턴스를 만들어 반환받을 수 있습니다 생성자의 기능 1. 인스턴스의 속성을 초기화 2. 인스턴스 생성시 필요한 구문을 수행 하지만 위에서 선언한 형태에서는 인스턴스 생성시 구문을 수행하는 기능은 넣을 수 없습니다 이는 init이라는 함수를 통해 수행이 가능합니다 init 함수 init 함수는 파라미터나 반환형이 없는 특수한 함수.. 더보기 이전 1 2 3 4 5 6 다음