반응형

프로그래밍 언어 99

코틀린 18. 프로젝트 구조

이번 글에서는 코틀린 프로젝트의 구조에 대해서 알아보도록 하겠습니다. 프로젝트 먼저, 우리가 만드는 코틀린 프로그램은 모두 하나의 프로젝트 안에서 만들어집니다. 프로젝트는 이 구조의 최상위에 위치하고 있으며, 모듈, 패키지, 클래스 등을 포함하고 있습니다. 예를 들어 프로그램 A, B를 만든다고 하면, 총 두 개의 프로젝트를 만들게 되는 겁니다. 우리가 IDE를 사용해서 프로그래밍을 할 때에도, 최상위에 위치한 프로젝트를 가장 먼저 만들게 됩니다. 모듈 모듈은 프로젝트의 바로 하위에 위치한 개념으로, 패키지와 클래스를 포함하고 있습니다. 이 모듈은 우리가 직접 만들어서 사용할 수도 있고, 이미 만들어져 있는 '라이브러리 모듈'을 가져와 사용할 수도 있습니다. 패키지 프로젝트와 모듈이 물리적인 개념이라면,..

코틀린 17. const와 상수

이번 글에서는 const라는 것에 대해서 알아보도록 하겠습니다. 이 카테고리 초기에 변수에 대해서 알아봤을 때, 저희는 변수를 선언하는 방법을 두 가지 알아봤습니다. 언제든 값을 바꿀 수 있는 var과 초기화하면 값을 바꿀 수 없는 val인데요. 이에 이어서 '상수'를 선언하기 위한 const val이라는 키워드가 존재합니다. '상수'란 한 번 초기화하면 내부의 값을 사용할 수는 있지만, 바꿀 수는 없는 것을 말합니다. val이 이에 속한다고 할 수 있는데, 그렇다면 const val과는 뭐가 다른 걸까요? 그것은 '불변성'에 관련한 차이점에 있다고 할 수 있습니다. 먼저, val의 경우를 생각해보도록 합시다. val은 값이 '런타임'시에 결정되는 상수인데, 이는 독립적인 동일한 프로그램 수행 중에 프로..

코틀린 16. 추상화

이번 글에서는 추상화에 대해서 알아보도록 하겠습니다. 추상화 저희는 지금까지 클래스라는 게 무엇인지, 그리고 클래스를 중심으로 한 여러 가지 개념에 대해 알아보았습니다. 추상화는 이 중에서 상속과 overriding에 관련된 개념이라고 할 수 있는데, 어떤 것일지 알아봅시다. 저번 글에서 알아본 overriding은 슈퍼클래스에 구현된 함수를 서브클래스에서 '재정의'한다는 개념이었습니다. 하지만 추상화는 슈퍼클래스에서는 함수의 선언만 한 뒤 구체적인 내용은 구현하지 않습니다. 다만, 해당 함수가 슈퍼클래스를 상속하는 모든 서브클래스에 필수적으로 존재해야 한다는 부분만 명시하고, 서브클래스 내에서 어떤 동작을 하는지에 따라 맞춰서 구현하도록 되어있습니다. 이러한 함수들을 '추상함수'라고 부르며, 추상함수를..

코틀린 15. 오버라이딩과 오버로딩

이번 글에서는 오버라이딩과 오버로딩에 대해서 알아보도록 하겠습니다. 오버라이딩(overriding) 먼저 오버라이딩(overriding)에 대해서 알아볼 텐데, 이 단어의 사전적 의미를 생각해봅시다. overriding의 뜻을 찾아보면 '재정의하다, 우선하다'라는 뜻을 가지고 있습니다. 그렇다면, 말 그대로 무언가를 재정의하거나 다른 것보다 우선한다는 의미일 것 같은데, 과연 무슨 뜻일까요? 프로그래밍 언어에서 overriding은 슈퍼클래스를 상속받은 서브클래스에서 슈퍼클래스에 정의되어있는 함수를 '재정의'하는 것을 의미합니다. 중요한 것은 overriding을 하려면 서브클래스에서 선언하려는 함수가 슈퍼클래스에 있는 함수와 이름과 형태가 동일해야 하며, 함수가 open되어있어야 한다는 점입니다. 여기..

코트린 14. 상속

이번 글에서는 상속에 대해서 알아보도록 하겠습니다. 상속 상속이라 함은 본래 부모가 자식에게 재산 등을 물려주는 것이라고 할 수 있습니다. 그렇다면 코틀린에서의 상속은 어떤걸까요? 상속은 클래스와 클래스 사이에서 만들어질 수 있는 관계로, 특정 클래스의 내용을 다른 클래스가 그대로 물려받는 것을 의미합니다. 예를 들어 클래스 A와 B가 있을 때, 클래스 B가 클래스 A를 상속받게 되면 클래스 B에서 클래스 A에 선언한 속성과 기능들을 사용할 수가 있게 됩니다. 이렇게 클래스 간의 상속관계에서 다른 클래스에 상속을 해주는 클래스를 '슈퍼클래스'또는 '부모클래스'라고 하며, 상속을 받는 클래스를 '서브클래스' 또는 '자식클래스'라고 합니다. 개념 자체는 이런 것인데, 바로 코드를 통해서 상속을 받아보도록 합..

코틀린 13. 생성자

이번 글에서는 클래스의 생성자에 대해서 알아보도록 하겠습니다. 생성자 저번 글에서 클래스의 기본적인 구조에 대해서 알아봤었습니다. 생성자는 클래스의 인스턴스를 생성할 때 호출하게 되는 특수한 함수를 말합니다. 따라서 클래스를 통해 객체를 생성할 때에 무조건 이 생성자를 호출하여 내부의 코드를 실행하게 되어있으며, 이를 통해 객체 생성 시 수행해야 하는 코드들을 이곳에 입력하게 됩니다. 예를 들어 baby라는 클래스를 만들어서 객체를 생성한다고 생각해봅시다. 이때 생성자를 사용해서 아기가 태어날 때 "응애"하며 우는 텍스트가 가장 먼저 출력되도록 할 수 있습니다. 그렇다면 생성자는 어떻게 사용하는 걸까요? 먼저, 클래스의 속성들만 초기화할 때에는 다음과 같이 사용할 수 있습니다. fun main() { v..

코틀린 12. 클래스

이번 글에서는 클래스에 대해서 알아보도록 하겠습니다. 클래스 클래스는 간단하게 말하면 어떠한 기능을 가진 '실체'를 만들기 위한 '설계도'라고 할 수 있습니다. 흔히들 붕어빵 틀을 많이 이야기하는데, 붕어빵 모양으로 만들어져있는 틀을 '클래스' 이를 사용해 만들어지는 실체인 붕어빵을 '객체'또는 '클래스의 인스턴스'라고 말합니다. 말로 설명하기보단 직접 클래스를 만들어가면서 클래스란 무엇인가에 대해 알아봅시다. class TV(){ var width = 100 var height = 100 var power = false var channel = 1 var volume = 0 } 위와 같이 TV를 만들기 위한 설계도인 TV클래스를 하나 만들어봅시다. 클래스는 기본적으로 속성(변수)와 함수(기능)을 가질 ..

코틀린 11. 입출력

오늘은 코틀린에서 사용하는 입출력 함수들에 대해서 알아보도록 하겠습니다. 입출력 입출력은 말 그대로 데이터를 입력하고, 출력하는 것을 말합니다. 우리가 프로그램 실행중에 변수등에 값을 넣는것을 입력, 변수나 데이터를 화면에 띄우는것을 출력이라고 할 수 있겠네요. 그렇다면, 이런 입출력을 도와주는 함수는 어떤것들이 있을까요? 일단, 대표적으로 우리가 알고 있는 함수는 print라는 함수가 있습니다. 데이터를 우리가 보는 화면에 직접적으로 출력시켜주는 함수인데, 이외에도 여러가지 함수에 대해 알아봅시다. 입력 자, 먼저 입력함수로는 기본적으로 readLine이라는 함수가 있습니다. readLine은 말 그대로 한 줄의 텍스트를 입력시키는 함수입니다. 해당 함수는 REPL환경에선 제대로 작동하지 않아서 IDE..

코틀린 10. 흐름제어

이번 글에서는 코틀린의 흐름제어에 대해서 알아보도록 하겠습니다. 흐름제어 코틀린에서 흐름제어가 가능하도록 해주는 키워드는 return, continue, break이 있습니다. return에 대해서는 함수를 설명할 때 이야기했었는데요. 함수 내에서 return을 만나면 프로그램은 뒤에 더 실행할 코드가 있든 없든 즉시 함수를 종료시킵니다. 그리고 return을 제외한 두 가지(continue, break)은 사실 반복문 내에서만 사용됩니다. 즉, 반복문의 흐름을 제어한다는 뜻이죠. 그럼 두 흐름제어문이 각각 어떤 역할을 하는지 알아봅시다. continue 먼저 continue입니다. continue에 대해 알아보기 전에 continue의 사전적 의미에 대해 생각해보고 어떤 역할을 하는지 한 번 생각해봅시..

코틀린 9. 반복문

이번 글에서는 코틀린에서 사용하는 반복문에 대해서 알아보도록 하겠습니다. 반복문 반복문은 조건문과 마찬가지로 프로그래밍에서 빼놓으면 안 되는 기본 문법 중 하나입니다. 반복문이란 말 그대로 어떠한 작업을 반복해서 수행하는 것을 이야기합니다. 예를 들어 여러분이 1~5까지 더하는 코드를 작성한다고 생각해봅시다. fun main() { var a = 0 a = 1 + 2 + 3 + 4 + 5 } 이 정도야 이런 간단한 코드만으로 쉽게 해결할 수 있을것입니다. 하지만, 1~5까지가 아닌 1~10000을 더해야 한다면 어떡할까요? 또는 단순한 덧셈이 아닌 복잡한 작업을 반복해야 한다면 어떡할까요? 이런 때 모든 코드를 일일이 써야 한다면 매우 지루하고 비효율적인 작업이 되어 능률이 현저히 떨어지겠죠. 때문에 사..

반응형