본문 바로가기

프로그래밍 언어 기초/KOTLIN

(14)
[Kotlin] 함수형 프로그래밍 - Infix 함수, 연산자 오버로딩 개요 오늘은 함수형 프로그래밍의 마지막 포스팅입니다. 이번 포스팅에서는 코틀린의 Infix 함수 그리고 연산자 오버로딩에 대해 알아보도록 하겠습니다. Infix 함수 코틀린에서는 아주 독특한 형태의 함수를 하나 제공합니다. a addNumber b 위 코드는 더하기(+), 빼기(-), 곱하기(*), 나누기(/)와 같은 `연산자(Operator)`도 아닌 거 같은데, 알고리즘 또는 프로그램의 동작을 논리적이고 간단한 언어로 설명하는 의사 코드(pseudocode)일까요? 이 코드의 정체는 코틀린의 Infix 함수였습니다. Infix 함수란 중위 표기법으로 호출할 수 있는 함수입니다. 이는 함수 이름을 중위 연산자처럼 사용할 수 있도록 지원합니다. 여기서 중위 연산자란 연산자 기호가 피연산자 사이에 위치하는..
[Kotlin] 함수형 프로그래밍 - 고차 함수(Higher-order function), 인라인 함수(Inline Function), 확장 함수(Extension function) 개요 지난 포스팅에서는 코틀린의 함수형 프로그래밍의 기술 중 함수를 간략히 표현할 수 있는 익명 함수와 람다식 그리고 클로저에 대해서 알아보았습니다. 오늘은 함수를 전달하는 함수, 고차 함수와 함수 호출 시 해당 함수의 본문이 호출 지점에 인라인 되어 실행될 수 있도록 하는 인라인 함수 마지막으로 기존 클래스의 멤버 함수를 확장하여 새로운 함수를 추가할 수 있는 확장 함수에 대해서 알아보도록 하겠습니다. 고차 함수(Higher-order function) 고차 함수는 함수를 매개변수로 사용하거나 함수를 반환하는 함수입니다. 프로그래밍 언어에서 함수의 반환 값은 일반적으로 Int나 Long, String과 같은 자료형으로 한정되어 있었습니다. 그리고 이러한 Int, Long, String과 같은 클래스는 ..
[Kotlin] 함수형 프로그래밍 - 익명 함수(Anonymous function), 람다식(lambda), 클로저(Closure) 개요 오늘은 코틀린의 함수형 프로그래밍에 대해서 알아보도록 하겠습니다. 코틀린은 객체 중심의 프로그래밍에 더하여 함수를 중심으로 한 프로그램의 설계가 가능합니다. 이러한 코틀린만의 프로그래밍 자유도는 개발자의 창의력을 최대로 발휘할 수 있도록 해주고 결과적으로 다양한 프로그램이 탄생할 수 있는 든든한 배경이 됩니다. 앞으로 몇 차례에 걸쳐 다양한 코틀린의 함수형 프로그래밍 기술에 대해 알아보도록 하겠습니다. 익명 함수(Anonymous function) vs 람다식(lambda) 함수는 함수의 이름, 함수의 파라미터, 그리고 반환 타입 총 세 가지의 정보로 구성되어 있습니다. 함수의 이러한 구조는 서로 다른 함수를 확실히 구분하는 이점이 되기도 하지만, 때로는 공통된 부분을 추려내거나 간략한 표현식으로 ..
[Kotlin] 코틀린의 심화 기술 - Object, Delegation, Type Aliases, Reflection 개요 오늘은 지난 포스팅에 이어 코틀린의 또 다른 특별 클래스 Object에 대해 알아보고 코틀린에서 제공하는 특수한 기능 Delegation, Type Aliases, Reflection에 대해서 알아보도록 하겠습니다. Object 코틀린의 Object 클래스를 보다 잘 이해하기 위하여 자바(Java)의 프로그래밍 디자인 패턴 하나를 살펴보도록 하겠습니다. 자바(Java)에서 객체(Class)는 프로그램 내에서 자신에 대한 정보를 기록할 메모리 주소를 할당받습니다. 그런데 객체(Class)를 잘 만들어서 사용의 빈도가 늘어날수록 자신에 대한 정보를 기록할 메모리 주소를 많이 필요로 하게 되므로 재사용성과 효율성은 상호 모순적인 관계에 놓이게 됩니다. 이에 따라 자바 개발자들은 이를 해결하는 방안을 모색..
[Kotlin] 코틀린 클래스 - 데이터 클래스(Data Class), 중첩 클래스(Nested Class), 내부 클래스(Inner Class), Sealed 클래스, Enum 개요 오늘은 코틀린의 클래스에 대해서 알아보도록 하겠습니다. 지금까지 코틀린을 통해 객체 및 객체지향 프로그래밍의 다양한 기술들을 살펴보았습니다. 현재 포스팅을 포함해서 앞으로는 두 편에 걸쳐 코틀린만의 `매력`을 볼 수 있는 다양한 클래스에 대해서 알아보겠습니다. 데이터 클래스, Data Class 코틀린에서는 데이터 클래스(Data Class)라는 것을 사용할 수 있습니다. 데이터 클래스는 클래스를 구성하는 프로퍼티의 getter/setter와 toString()을 기본으로 지원하는 코틀린의 클래스입니다. 이 클래스가 무슨 이점을 갖는지 모르시겠다고요? 아래의 코드를 통해 함께 살펴보도록 하겠습니다. class CommonClass { var number = 123 } data class DataCl..
[Kotlin] 객체지향 프로그래밍 - 제네릭(Generic), in, out, where 개요 오늘은 코틀린의 제네릭(Generic)에 대해서 알아보도록 하겠습니다. 코틀린 제네릭(Generic) 개인적으로 객체지향 프로그래밍에서 정수는 제네릭(Generic)이라고 생각합니다. 지금까지 코틀린을 통한 객체지향 프로그래밍 기술에 대해 살펴보았는데요. 객체지향 프로그래밍(Object-Oriented Programming), 줄여서 OOP는 수많은 객체가 서로 얽히고설켜서 복잡한 프로그램을 동작하게 합니다. 특히, 상속(Inheritance)을 통해 객체 간의 상호 관계를 설정할 수 있으므로 최소한의 단위로 최대 경우의 수만큼 코드를 재사용할 수 있다는 점은 OOP의 가장 큰 매력이라고 생각합니다. 객체지향 언어를 사용하는 개발자는 이러한 OOP의 고유한 특성을 잘 활용하여, 중복되는 코드를 하나..
[Kotlin] 객체지향 프로그래밍 - 추상클래스와 인터페이스 개요 오늘은 코틀린의 추상 클래스(Abstract Class)와 인터페이스(Interface)에 대해서 알아보도록 하겠습니다. 코틀린의 추상 클래스(Abstract Class) 지난 포스팅에서는 코틀린의 상속에 대해서 알아보았습니다. 객체지향 프로그래밍에서 상속은 반복되는 코드의 작성을 줄여주고 유지 보수성을 편리하게 하는 이점이 있습니다. 그런데, 다음의 상황을 한 번 생각해보도록 하겠습니다. 코틀린 개발자가 자동차 시뮬레이션 프로그램을 만들기 위해 멋진 객체를 설계해보려고 합니다. 시뮬레이션 프로그램에서는 일반 자동차뿐만 아니라 이륜 오토바이도 함께 주행 테스트를 해야 한다고 합니다. 이때 자동차와 오토바이는 모두 엔진을 가지고 있으므로 공통점이 있지만, 자동차는 4기통 엔진이 들어가고, 오토바이는 ..
[Kotlin] 객체지향 프로그래밍 - 상속, this, super, 오버라이딩, 오버로딩 개요 오늘은 지난 포스팅에 이어서 객체지향 프로그래밍에 대해 더 자세히 알아보겠습니다. 객체지향 프로그래밍에서 프로그램 전체의 흐름을 결정하고 주관하는 것은 `객체`입니다. 객체지향 프로그래밍에서 프로그램을 구성하는 `객체(Object)`는 매우 중요한 역할을 담당합니다. 특히 이 `객체(Object)`들은 현실 세계에서 사람이 상호 간에 관계를 맺고 살아가는 것처럼 프로그램 내에서도 상호 관계를 맺어서 상호 작용하며 아무리 복잡한 작업이라도 수행할 수 있도록 임무를 수행합니다. 그러므로 오늘은 객체지향 프로그래밍에서 어떻게 객체(Object)가 서로 관계를 맺고 상호작용하는지 그 방법론에 대해 알아보도록 하겠습니다. 코틀린의 상속 코틀린에서 객체는 class 키워드를 통해 아래와 같이 선언할 수 있습니..